Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 25 from a total of 26 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Strategy Con... | 2855211 | 108 days ago | IN | 0 ETH | 0.00000378 | ||||
Set Strategy | 2833410 | 111 days ago | IN | 0 ETH | 0.00000208 | ||||
Set Strategy Con... | 2833386 | 111 days ago | IN | 0 ETH | 0.00000223 | ||||
Set Strategy Con... | 2833385 | 111 days ago | IN | 0 ETH | 0.00000222 | ||||
Set Strategy Con... | 2833384 | 111 days ago | IN | 0 ETH | 0.00000223 | ||||
Set Strategy Con... | 2833383 | 111 days ago | IN | 0 ETH | 0.00000222 | ||||
Set Strategy Con... | 2833382 | 111 days ago | IN | 0 ETH | 0.00000222 | ||||
Set Strategy Con... | 2833381 | 111 days ago | IN | 0 ETH | 0.00000222 | ||||
Set Strategy | 2833379 | 111 days ago | IN | 0 ETH | 0.00000318 | ||||
Set Strategy Con... | 2597799 | 147 days ago | IN | 0 ETH | 0.00000032 | ||||
Set Strategy Con... | 2597798 | 147 days ago | IN | 0 ETH | 0.00000032 | ||||
Set Strategy Con... | 2597797 | 147 days ago | IN | 0 ETH | 0.00000032 | ||||
Set Strategy Con... | 2597795 | 147 days ago | IN | 0 ETH | 0.00000032 | ||||
Set Strategy Con... | 2597792 | 147 days ago | IN | 0 ETH | 0.00000032 | ||||
Set Strategy Con... | 2597791 | 147 days ago | IN | 0 ETH | 0.00000032 | ||||
Set Strategy | 2597789 | 147 days ago | IN | 0 ETH | 0.00000046 | ||||
Set Strategy | 2597768 | 147 days ago | IN | 0 ETH | 0.0000003 | ||||
Initialize | 2579421 | 149 days ago | IN | 0 ETH | 0.00000005 | ||||
Set Strategy Con... | 2579421 | 149 days ago | IN | 0 ETH | 0.00000007 | ||||
Set Strategy Con... | 2579421 | 149 days ago | IN | 0 ETH | 0.00000007 | ||||
Set Strategy Con... | 2579421 | 149 days ago | IN | 0 ETH | 0.00000007 | ||||
Set Strategy Con... | 2579421 | 149 days ago | IN | 0 ETH | 0.00000007 | ||||
Set Strategy Con... | 2579421 | 149 days ago | IN | 0 ETH | 0.00000007 | ||||
Set Strategy Con... | 2579421 | 149 days ago | IN | 0 ETH | 0.00000007 | ||||
Set Strategy | 2579421 | 149 days ago | IN | 0 ETH | 0.00000004 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
StrategiesRegistry
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity ^0.8.26; import {Ownable2Step, Ownable} from '@openzeppelin/contracts/access/Ownable2Step.sol'; import {Errors} from '@stakewise-core/libraries/Errors.sol'; import {IStrategiesRegistry} from './interfaces/IStrategiesRegistry.sol'; /** * @title StrategiesRegistry * @author StakeWise * @notice Defines the registry functionality that keeps track of Strategies and their settings */ contract StrategiesRegistry is Ownable2Step, IStrategiesRegistry { /// @inheritdoc IStrategiesRegistry mapping(address strategy => bool enabled) public strategies; /// @inheritdoc IStrategiesRegistry mapping(bytes32 strategyProxyId => address proxy) public strategyProxyIdToProxy; /// @inheritdoc IStrategiesRegistry mapping(address proxy => bool exists) public strategyProxies; mapping(bytes32 strategyConfigId => bytes value) private _strategyConfigs; bool private _initialized; /** * @dev Constructor */ constructor() Ownable(msg.sender) {} /// @inheritdoc IStrategiesRegistry function getStrategyConfig( bytes32 strategyId, string calldata configName ) external view returns (bytes memory value) { return _strategyConfigs[keccak256(abi.encode(strategyId, configName))]; } /// @inheritdoc IStrategiesRegistry function setStrategy(address strategy, bool enabled) external onlyOwner { if (strategy == address(0)) revert Errors.ZeroAddress(); if (strategies[strategy] == enabled) revert Errors.ValueNotChanged(); // update strategy strategies[strategy] = enabled; emit StrategyUpdated(msg.sender, strategy, enabled); } /// @inheritdoc IStrategiesRegistry function addStrategyProxy(bytes32 strategyProxyId, address proxy) external { if (strategyProxyId == bytes32(0)) revert InvalidStrategyProxyId(); if (proxy == address(0)) revert Errors.ZeroAddress(); // only active strategies can add proxies if (!strategies[msg.sender]) revert Errors.AccessDenied(); if (strategyProxies[proxy]) revert Errors.AlreadyAdded(); // add strategy proxy strategyProxyIdToProxy[strategyProxyId] = proxy; strategyProxies[proxy] = true; emit StrategyProxyAdded(msg.sender, strategyProxyId, proxy); } /// @inheritdoc IStrategiesRegistry function setStrategyConfig( bytes32 strategyId, string calldata configName, bytes calldata value ) external onlyOwner { // calculate strategy config ID bytes32 strategyConfigId = keccak256(abi.encode(strategyId, configName)); // update strategy config _strategyConfigs[strategyConfigId] = value; emit StrategyConfigUpdated(strategyId, configName, value); } /// @inheritdoc IStrategiesRegistry function initialize( address _owner ) external onlyOwner { if (_owner == address(0)) revert Errors.ZeroAddress(); if (_initialized) revert Errors.AccessDenied(); // transfer ownership _transferOwnership(_owner); _initialized = true; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol) pragma solidity ^0.8.20; import {Ownable} from "./Ownable.sol"; /** * @dev Contract module which provides access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is specified at deployment time in the constructor for `Ownable`. This * can later be changed with {transferOwnership} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() public virtual { address sender = _msgSender(); if (pendingOwner() != sender) { revert OwnableUnauthorizedAccount(sender); } _transferOwnership(sender); } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.22; /** * @title Errors * @author StakeWise * @notice Contains all the custom errors */ library Errors { error AccessDenied(); error InvalidShares(); error InvalidAssets(); error ZeroAddress(); error InsufficientAssets(); error CapacityExceeded(); error InvalidCapacity(); error InvalidSecurityDeposit(); error InvalidFeeRecipient(); error InvalidFeePercent(); error NotHarvested(); error NotCollateralized(); error InvalidProof(); error LowLtv(); error InvalidPosition(); error InvalidHealthFactor(); error InvalidReceivedAssets(); error InvalidTokenMeta(); error UpgradeFailed(); error InvalidValidators(); error DeadlineExpired(); error PermitInvalidSigner(); error InvalidValidatorsRegistryRoot(); error InvalidVault(); error AlreadyAdded(); error AlreadyRemoved(); error InvalidOracles(); error NotEnoughSignatures(); error InvalidOracle(); error TooEarlyUpdate(); error InvalidAvgRewardPerSecond(); error InvalidRewardsRoot(); error HarvestFailed(); error LiquidationDisabled(); error InvalidLiqThresholdPercent(); error InvalidLiqBonusPercent(); error InvalidLtvPercent(); error InvalidCheckpointIndex(); error InvalidCheckpointValue(); error MaxOraclesExceeded(); error ExitRequestNotProcessed(); error ValueNotChanged(); error InvalidWithdrawalCredentials(); error EigenPodNotFound(); error InvalidQueuedShares(); error FlashLoanFailed(); }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity ^0.8.26; /** * @title IStrategiesRegistry * @author StakeWise * @notice Defines the interface for the StrategiesRegistry contract */ interface IStrategiesRegistry { error InvalidStrategyId(); error InvalidStrategyProxyId(); /** * @notice Event emitted on a Strategy update * @param caller The address that called the function * @param strategy The address of the updated strategy * @param enabled The new status of the strategy */ event StrategyUpdated(address indexed caller, address strategy, bool enabled); /** * @notice Event emitted on adding Strategy proxy contract * @param strategy The address of the Strategy that added the proxy * @param strategyProxyId The ID of the added proxy * @param proxy The address of the added proxy */ event StrategyProxyAdded(address indexed strategy, bytes32 indexed strategyProxyId, address indexed proxy); /** * @notice Event emitted on updating the strategy configuration * @param strategyId The ID of the strategy to update the configuration * @param configName The name of the configuration to update * @param value The new value of the configuration */ event StrategyConfigUpdated(bytes32 indexed strategyId, string configName, bytes value); /** * @notice Registered Strategies * @param strategy The address of the strategy to check whether it is registered * @return `true` for the registered Strategy, `false` otherwise */ function strategies( address strategy ) external view returns (bool); /** * @notice Get the strategy proxy address based on the strategy proxy ID * @param strategyProxyId The ID of the strategy proxy to get the address * @return The address of the strategy proxy */ function strategyProxyIdToProxy( bytes32 strategyProxyId ) external view returns (address); /** * @notice Registered Strategy Proxies * @param proxy The address of the proxy to check whether it is registered * @return `true` for the registered Strategy proxy, `false` otherwise */ function strategyProxies( address proxy ) external view returns (bool); /** * @notice Get strategy configuration * @param strategyId The ID of the strategy to get the configuration * @param configName The name of the configuration * @return value The value of the configuration */ function getStrategyConfig( bytes32 strategyId, string calldata configName ) external view returns (bytes memory value); /** * @notice Set strategy configuration. Can only be called by the owner. * @param strategyId The ID of the strategy to set the configuration * @param configName The name of the configuration * @param value The value of the configuration */ function setStrategyConfig(bytes32 strategyId, string calldata configName, bytes calldata value) external; /** * @notice Function for enabling/disabling the Strategy. Can only be called by the owner. * @param strategy The address of the strategy to enable/disable * @param enabled The new status of the strategy */ function setStrategy(address strategy, bool enabled) external; /** * @notice Function for adding Strategy proxy contract. Can only be called by the registered strategy. * @param strategyProxyId The ID of the proxy to add * @param proxy The address of the proxy to add */ function addStrategyProxy(bytes32 strategyProxyId, address proxy) external; /** * @notice Function for initializing the registry. Can only be called once during the deployment. * @param _owner The address of the owner of the contract */ function initialize( address _owner ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
{ "remappings": [ "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@stakewise-core/=lib/v3-core/contracts/", "@aave-core/=lib/aave-v3-origin/src/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "aave-v3-core/=lib/aave-v3-origin/src/core/", "aave-v3-origin/=lib/aave-v3-origin/", "aave-v3-periphery/=lib/aave-v3-origin/src/periphery/", "ds-test/=lib/aave-v3-origin/lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", "forge-gas-snapshot/=lib/forge-gas-snapshot/src/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/", "solidity-utils/=lib/aave-v3-origin/lib/solidity-utils/", "v3-core/=lib/v3-core/contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": true, "libraries": {} }
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessDenied","type":"error"},{"inputs":[],"name":"AlreadyAdded","type":"error"},{"inputs":[],"name":"InvalidStrategyId","type":"error"},{"inputs":[],"name":"InvalidStrategyProxyId","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ValueNotChanged","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"strategyId","type":"bytes32"},{"indexed":false,"internalType":"string","name":"configName","type":"string"},{"indexed":false,"internalType":"bytes","name":"value","type":"bytes"}],"name":"StrategyConfigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"strategy","type":"address"},{"indexed":true,"internalType":"bytes32","name":"strategyProxyId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"}],"name":"StrategyProxyAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"address","name":"strategy","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"StrategyUpdated","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"strategyProxyId","type":"bytes32"},{"internalType":"address","name":"proxy","type":"address"}],"name":"addStrategyProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"strategyId","type":"bytes32"},{"internalType":"string","name":"configName","type":"string"}],"name":"getStrategyConfig","outputs":[{"internalType":"bytes","name":"value","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"strategy","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"strategyId","type":"bytes32"},{"internalType":"string","name":"configName","type":"string"},{"internalType":"bytes","name":"value","type":"bytes"}],"name":"setStrategyConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"strategy","type":"address"}],"name":"strategies","outputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"proxy","type":"address"}],"name":"strategyProxies","outputs":[{"internalType":"bool","name":"exists","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"strategyProxyId","type":"bytes32"}],"name":"strategyProxyIdToProxy","outputs":[{"internalType":"address","name":"proxy","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608080604052346079573315606657600180546001600160a01b03199081169091555f805433928116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3610975908161007e8239f35b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630869ddd3146105ee5780630f4c99261461051057806339ebf823146104d3578063682d2ff3146103a3578063715018a6146103405780637266c08e1461030357806379ba5097146102c15780638da5cb5b1461029a578063baa82a34146101e8578063c4d66de814610178578063e30c397814610150578063e38774c41461011e5763f2fde38b146100a8575f80fd5b3461011a57602036600319011261011a576100c161082e565b6100c96108d8565b60018060a01b0316806bffffffffffffffffffffffff60a01b600154161760015560018060a01b035f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b3461011a57602036600319011261011a576004355f526003602052602060018060a01b0360405f205416604051908152f35b3461011a575f36600319011261011a576001546040516001600160a01b039091168152602090f35b3461011a57602036600319011261011a5761019161082e565b6101996108d8565b6001600160a01b038116156101d95760ff600654166101ca576101bb906108eb565b6006805460ff19166001179055005b634ca8886760e01b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b3461011a57604036600319011261011a5761020161082e565b6024359081151580920361011a576102176108d8565b6001600160a01b03169081156101d957815f5260026020528060ff60405f20541615151461028b57815f52600260205260405f2060ff1981541660ff831617905560405191825260208201527fe3f7f834b8b2594f17ebfee126f1dc9333586c26a261a7be4dc0367db9ed32c260403392a2005b638c8728c760e01b5f5260045ffd5b3461011a575f36600319011261011a575f546040516001600160a01b039091168152602090f35b3461011a575f36600319011261011a57600154336001600160a01b03909116036102f0576102ee336108eb565b005b63118cdaa760e01b5f523360045260245ffd5b3461011a57602036600319011261011a576001600160a01b0361032461082e565b165f526004602052602060ff60405f2054166040519015158152f35b3461011a575f36600319011261011a576103586108d8565b600180546001600160a01b03199081169091555f80549182168155906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461011a57604036600319011261011a5760243567ffffffffffffffff811161011a576103f16103da6103ff923690600401610800565b604093919351928391602083019560043587610864565b03601f19810183528261087e565b5190205f52600560205260405f206040515f82549261041d846108a0565b9081845260208401946001811690815f146104b65750600114610476575b8460408561044b8187038261087e565b8151928391602083525180918160208501528484015e5f828201840152601f01601f19168101030190f35b5f90815260208120939250905b80821061049c5750909150810160200161044b8261043b565b919260018160209254838588010152019101909291610483565b60ff191686525050151560051b8201602001905061044b8261043b565b3461011a57602036600319011261011a576001600160a01b036104f461082e565b165f526002602052602060ff60405f2054166040519015158152f35b3461011a57604036600319011261011a576024356001600160a01b038116906004359082900361011a5780156105df5781156101d957335f52600260205260ff60405f205416156101ca57815f52600460205260ff60405f2054166105d057805f52600360205260405f20826bffffffffffffffffffffffff60a01b825416179055815f52600460205260405f20600160ff19825416179055337f0c3b7f019fdbbef4020a79612516769b52596e761a0bf6d42a8de7cf09bd25d35f80a4005b63f411c32760e01b5f5260045ffd5b630b64e4b960e31b5f5260045ffd5b3461011a57606036600319011261011a5760043560243567ffffffffffffffff811161011a57610622903690600401610800565b919060443567ffffffffffffffff811161011a57610644903690600401610800565b939061064e6108d8565b6040516020810190610666816103f186888a87610864565b5190205f52600560205260405f209467ffffffffffffffff81116107ec5761068e86546108a0565b601f81116107a7575b505f95601f821160011461071e579061070e9291817fdc411272cb709cbfa950a1d8a0d01358fbfcde93a41da01acd6ca2168f01313597985f91610713575b508260011b905f198460031b1c19161790555b610700604051958695604087526040870191610844565b918483036020860152610844565b0390a2005b9050830135896106d6565b601f198216815f5260205f20905f5b81811061078f5750907fdc411272cb709cbfa950a1d8a0d01358fbfcde93a41da01acd6ca2168f01313597988461070e9695949310610776575b5050600182811b0190556106e9565b8401355f19600385901b60f8161c191690558880610767565b858a013583556020998a01996001909301920161072d565b865f5260205f20601f830160051c810191602084106107e2575b601f0160051c01905b8181106107d75750610697565b5f81556001016107ca565b90915081906107c1565b634e487b7160e01b5f52604160045260245ffd5b9181601f8401121561011a5782359167ffffffffffffffff831161011a576020838186019501011161011a57565b600435906001600160a01b038216820361011a57565b908060209392818452848401375f828201840152601f01601f1916010190565b60409061087b949281528160208201520191610844565b90565b90601f8019910116810190811067ffffffffffffffff8211176107ec57604052565b90600182811c921680156108ce575b60208310146108ba57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916108af565b5f546001600160a01b031633036102f057565b600180546001600160a01b03199081169091555f80549182166001600160a01b03938416908117825592909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fea26469706673582212204baab2858cd3b6d600f3fa8fbc32790712c80a8c9f302ffcfdcf1a07de00aa4364736f6c634300081a0033
Deployed Bytecode
0x60806040526004361015610011575f80fd5b5f3560e01c80630869ddd3146105ee5780630f4c99261461051057806339ebf823146104d3578063682d2ff3146103a3578063715018a6146103405780637266c08e1461030357806379ba5097146102c15780638da5cb5b1461029a578063baa82a34146101e8578063c4d66de814610178578063e30c397814610150578063e38774c41461011e5763f2fde38b146100a8575f80fd5b3461011a57602036600319011261011a576100c161082e565b6100c96108d8565b60018060a01b0316806bffffffffffffffffffffffff60a01b600154161760015560018060a01b035f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b3461011a57602036600319011261011a576004355f526003602052602060018060a01b0360405f205416604051908152f35b3461011a575f36600319011261011a576001546040516001600160a01b039091168152602090f35b3461011a57602036600319011261011a5761019161082e565b6101996108d8565b6001600160a01b038116156101d95760ff600654166101ca576101bb906108eb565b6006805460ff19166001179055005b634ca8886760e01b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b3461011a57604036600319011261011a5761020161082e565b6024359081151580920361011a576102176108d8565b6001600160a01b03169081156101d957815f5260026020528060ff60405f20541615151461028b57815f52600260205260405f2060ff1981541660ff831617905560405191825260208201527fe3f7f834b8b2594f17ebfee126f1dc9333586c26a261a7be4dc0367db9ed32c260403392a2005b638c8728c760e01b5f5260045ffd5b3461011a575f36600319011261011a575f546040516001600160a01b039091168152602090f35b3461011a575f36600319011261011a57600154336001600160a01b03909116036102f0576102ee336108eb565b005b63118cdaa760e01b5f523360045260245ffd5b3461011a57602036600319011261011a576001600160a01b0361032461082e565b165f526004602052602060ff60405f2054166040519015158152f35b3461011a575f36600319011261011a576103586108d8565b600180546001600160a01b03199081169091555f80549182168155906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461011a57604036600319011261011a5760243567ffffffffffffffff811161011a576103f16103da6103ff923690600401610800565b604093919351928391602083019560043587610864565b03601f19810183528261087e565b5190205f52600560205260405f206040515f82549261041d846108a0565b9081845260208401946001811690815f146104b65750600114610476575b8460408561044b8187038261087e565b8151928391602083525180918160208501528484015e5f828201840152601f01601f19168101030190f35b5f90815260208120939250905b80821061049c5750909150810160200161044b8261043b565b919260018160209254838588010152019101909291610483565b60ff191686525050151560051b8201602001905061044b8261043b565b3461011a57602036600319011261011a576001600160a01b036104f461082e565b165f526002602052602060ff60405f2054166040519015158152f35b3461011a57604036600319011261011a576024356001600160a01b038116906004359082900361011a5780156105df5781156101d957335f52600260205260ff60405f205416156101ca57815f52600460205260ff60405f2054166105d057805f52600360205260405f20826bffffffffffffffffffffffff60a01b825416179055815f52600460205260405f20600160ff19825416179055337f0c3b7f019fdbbef4020a79612516769b52596e761a0bf6d42a8de7cf09bd25d35f80a4005b63f411c32760e01b5f5260045ffd5b630b64e4b960e31b5f5260045ffd5b3461011a57606036600319011261011a5760043560243567ffffffffffffffff811161011a57610622903690600401610800565b919060443567ffffffffffffffff811161011a57610644903690600401610800565b939061064e6108d8565b6040516020810190610666816103f186888a87610864565b5190205f52600560205260405f209467ffffffffffffffff81116107ec5761068e86546108a0565b601f81116107a7575b505f95601f821160011461071e579061070e9291817fdc411272cb709cbfa950a1d8a0d01358fbfcde93a41da01acd6ca2168f01313597985f91610713575b508260011b905f198460031b1c19161790555b610700604051958695604087526040870191610844565b918483036020860152610844565b0390a2005b9050830135896106d6565b601f198216815f5260205f20905f5b81811061078f5750907fdc411272cb709cbfa950a1d8a0d01358fbfcde93a41da01acd6ca2168f01313597988461070e9695949310610776575b5050600182811b0190556106e9565b8401355f19600385901b60f8161c191690558880610767565b858a013583556020998a01996001909301920161072d565b865f5260205f20601f830160051c810191602084106107e2575b601f0160051c01905b8181106107d75750610697565b5f81556001016107ca565b90915081906107c1565b634e487b7160e01b5f52604160045260245ffd5b9181601f8401121561011a5782359167ffffffffffffffff831161011a576020838186019501011161011a57565b600435906001600160a01b038216820361011a57565b908060209392818452848401375f828201840152601f01601f1916010190565b60409061087b949281528160208201520191610844565b90565b90601f8019910116810190811067ffffffffffffffff8211176107ec57604052565b90600182811c921680156108ce575b60208310146108ba57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916108af565b5f546001600160a01b031633036102f057565b600180546001600160a01b03199081169091555f80549182166001600160a01b03938416908117825592909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fea26469706673582212204baab2858cd3b6d600f3fa8fbc32790712c80a8c9f302ffcfdcf1a07de00aa4364736f6c634300081a0033
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.