Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 21182604 | 90 days ago | IN | 0 ETH | 0.00148856 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
TimelockedCall
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: BUSL-1.1 pragma solidity >= 0.8.26; import "./interfaces/ITimelockedCall.sol"; import "./AddressWhitelist.sol"; /** * @title Contract for managing time-locked function calls. */ contract TimelockedCall is ITimelockedCall, AddressWhitelist { struct TimelockedCallInfo { uint256 targetEpoch; // The unix epoch at which the hash can be consumed address createdBy; // The address of the scheduler address consumerAddress; // The address of the consumer } /// @notice The schedulers authorized for a given sender. (sender => scheduler => enabled/disabled) mapping (address => mapping(address => bool)) private whitelistedSchedulers; /// @notice The time-lock info of a given hash. mapping (bytes32 => TimelockedCallInfo) public queue; /// @notice The time-lock duration of every consumer address. mapping (address => uint256) public timeLockDuration; /// @notice Triggers when a hash is scheduled for the address specified. event HashScheduled(bytes32 h, address consumerAddress); /// @notice Triggers when a hash is consumed by the address specified. event HashConsumed(bytes32 h, address consumerAddress); /// @notice Triggers when a new scheduler is enabled for the consumer address specified. event SchedulerEnabled(address consumerAddress, address schedulerAddress); /// @notice Triggers when an existing scheduler is disabled for the consumer address specified. event SchedulerDisabled(address consumerAddress, address schedulerAddress); constructor(address ownerAddr) AddressWhitelist(ownerAddr) { } modifier ifSenderWhitelisted() { require(_whitelistedAddresses[msg.sender], "Unauthorized sender"); _; } modifier ifTimeLockConfigured() { require(timeLockDuration[msg.sender] > 0, "Not configured"); _; } /** * @notice Sets the initial scheduler and time-lock duration for the current message sender. * @param addr The address of the initial scheduler. You can add more addresses later. * @param newTimeLockDuration The duration of the time-lock for the current message sender. */ function initScheduler(address addr, uint256 newTimeLockDuration) external override nonReentrant ifSenderWhitelisted { require(addr != address(0), "Address required"); require(newTimeLockDuration > 0, "Duration required"); require(timeLockDuration[msg.sender] == 0, "Already initialized"); whitelistedSchedulers[msg.sender][addr] = true; timeLockDuration[msg.sender] = newTimeLockDuration; emit SchedulerEnabled(msg.sender, addr); } /** * @notice Authorizes the address specified to schedule calls. The calls will be consumed by the current message sender. * @param addr Specifies the address of the scheduler to authorize. */ function enableScheduler(address addr) external override nonReentrant ifTimeLockConfigured { _enableScheduler(addr); } /** * @notice Revokes the address specified from scheduling calls for the current message sender. * @param addr Specifies the address of the scheduler to revoke. */ function disableScheduler(address addr) external override nonReentrant ifTimeLockConfigured { _disableScheduler(addr); } /** * @notice Schedules a hash to be consumed by the address specified. * @param h Specifies the hash. * @param consumerAddr Specifies the address of the consumer. */ function schedule(bytes32 h, address consumerAddr) external override nonReentrant { require(h != bytes32(0), "Hash required"); require(whitelistedSchedulers[consumerAddr][msg.sender], "Unauthorized sender"); require(timeLockDuration[consumerAddr] > 0, "Not configured"); require(queue[h].targetEpoch == 0, "Already enqueued"); queue[h] = TimelockedCallInfo({ createdBy: msg.sender, consumerAddress: consumerAddr, targetEpoch: block.timestamp + timeLockDuration[consumerAddr] }); emit HashScheduled(h, consumerAddr); } /** * @notice Consumes the hash specified. * @param h Specifies the hash. */ function consume(bytes32 h) external override nonReentrant ifTimeLockConfigured { _consume(h); } /** * @notice Consumes the hash specified. The hash represents the transferOwnership function. * @param h Specifies the hash. * @param prevOwnerAddr The current owner of the contract at hand. * @param newOwnerAddr The address of the new owner. */ function consumeOwnership( bytes32 h, address prevOwnerAddr, address newOwnerAddr ) external override nonReentrant ifTimeLockConfigured { _disableScheduler(prevOwnerAddr); _consume(h); _enableScheduler(newOwnerAddr); } function _consume(bytes32 h) internal { require(queue[h].targetEpoch > 0, "Hash not enqueued"); require(msg.sender == queue[h].consumerAddress, "Unauthorized consumer"); require(block.timestamp > queue[h].targetEpoch, "Timelock in place"); delete queue[h]; emit HashConsumed(h, msg.sender); } function _enableScheduler(address addr) internal { require(addr != address(0), "Address required"); require(!whitelistedSchedulers[msg.sender][addr], "Already enabled"); whitelistedSchedulers[msg.sender][addr] = true; emit SchedulerEnabled(msg.sender, addr); } function _disableScheduler(address addr) internal { require(addr != address(0), "Address required"); require(whitelistedSchedulers[msg.sender][addr], "Already disabled"); whitelistedSchedulers[msg.sender][addr] = false; emit SchedulerDisabled(msg.sender, addr); } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity >= 0.8.26; interface ITimelockedCall { function initScheduler(address addr, uint256 newTimeLockDuration) external; function enableScheduler(address addr) external; function disableScheduler(address addr) external; function schedule(bytes32 h, address consumerAddr) external; function consume(bytes32 h) external; function consumeOwnership(bytes32 h, address prevOwnerAddr, address newOwnerAddr) external; }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity >= 0.8.26; import "./interfaces/IAddressWhitelist.sol"; import "./LightweightOwnable.sol"; /** * @title Standalone contract for whitelisting addresses. */ contract AddressWhitelist is IAddressWhitelist, LightweightOwnable { mapping (address => bool) internal _whitelistedAddresses; constructor(address ownerAddr) { require(ownerAddr != address(0), "Owner required"); _owner = ownerAddr; } /** * @notice Whitelists the address specified. * @param addr The address to enable */ function enableAddress (address addr) external override nonReentrant onlyOwner { require(!_whitelistedAddresses[addr], "Already enabled"); _whitelistedAddresses[addr] = true; emit OnAddressEnabled(addr); } /** * @notice Whitelists the addresses specified. * @param arr The addresses to enable */ function enableAddresses (address[] calldata arr) external override nonReentrant onlyOwner { require(arr.length > 0, "Addresses required"); for (uint256 i; i < arr.length; i++) { require(arr[i] != address(0), "Invalid address"); require(!_whitelistedAddresses[arr[i]], "Already enabled"); _whitelistedAddresses[arr[i]] = true; emit OnAddressEnabled(arr[i]); } } /** * @notice Disables the address specified. * @param addr The address to disable */ function disableAddress (address addr) external override nonReentrant onlyOwner { require(_whitelistedAddresses[addr], "Already disabled"); _whitelistedAddresses[addr] = false; emit OnAddressDisabled(addr); } /** * @notice Disables the addresses specified. * @param arr The addresses to disable */ function disableAddresses (address[] calldata arr) external override nonReentrant onlyOwner { for (uint256 i; i < arr.length; i++) { require(_whitelistedAddresses[arr[i]], "Already disabled"); _whitelistedAddresses[arr[i]] = false; emit OnAddressDisabled(arr[i]); } } /** * @notice Indicates if the address is whitelisted or not. * @param addr The address to evaluate. * @return Returns true if the address is whitelisted. */ function isWhitelistedAddress (address addr) external view override returns (bool) { return _whitelistedAddresses[addr]; } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity >= 0.8.26; /** * @notice Defines the interface for whitelisting addresses. */ interface IAddressWhitelist { /** * @notice Whitelists the address specified. * @param addr The address to enable */ function enableAddress (address addr) external; /** * @notice Whitelists the addresses specified. * @param arr The addresses to enable */ function enableAddresses (address[] calldata arr) external; /** * @notice Disables the address specified. * @param addr The address to disable */ function disableAddress (address addr) external; /** * @notice Disables the addresses specified. * @param arr The addresses to disable */ function disableAddresses (address[] calldata arr) external; /** * @notice Indicates if the address is whitelisted or not. * @param addr The address to disable * @return Returns 1 if the address is whitelisted */ function isWhitelistedAddress (address addr) external view returns (bool); /** * This event is triggered when a new address is whitelisted. * @param addr The address that was whitelisted */ event OnAddressEnabled(address addr); /** * This event is triggered when an address is disabled. * @param addr The address that was disabled */ event OnAddressDisabled(address addr); }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity >= 0.8.26; import {BaseReentrancyGuard} from "../core/BaseReentrancyGuard.sol"; import {BaseOwnable} from "../core/BaseOwnable.sol"; /** * @title Lightweight version of the ownership contract. This contract has a reentrancy guard. */ abstract contract LightweightOwnable is BaseReentrancyGuard, BaseOwnable { /** * @notice Transfers ownership of the contract to the account specified. * @param newOwner The address of the new owner. */ function transferOwnership(address newOwner) external virtual nonReentrant onlyOwner { _transferOwnership(newOwner); } /** * @notice Gets the owner of the contract. * @return address The address who owns the contract. */ function owner() external view virtual returns (address) { return _owner; } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity >= 0.8.26; /** * @title Base reentrancy guard. This is constructor-less implementation for both proxies and standalone contracts. */ abstract contract BaseReentrancyGuard { uint256 internal constant _REENTRANCY_NOT_ENTERED = 1; uint256 internal constant _REENTRANCY_ENTERED = 2; uint256 internal _reentrancyStatus; /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_reentrancyStatus != _REENTRANCY_ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _reentrancyStatus = _REENTRANCY_ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _reentrancyStatus = _REENTRANCY_NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _reentrancyStatus == _REENTRANCY_ENTERED; } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity >= 0.8.26; abstract contract BaseOwnable { address internal _owner; /** * @notice Triggers when contract ownership changes. * @param previousOwner The previous owner of the contract. * @param newOwner The new owner of the contract. */ event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == _owner, "Caller is not the owner"); _; } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
{ "remappings": [ "open-zeppelin/=lib/open-zeppelin/contracts/", "forge-std/=lib/forge-std/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"ownerAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"h","type":"bytes32"},{"indexed":false,"internalType":"address","name":"consumerAddress","type":"address"}],"name":"HashConsumed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"h","type":"bytes32"},{"indexed":false,"internalType":"address","name":"consumerAddress","type":"address"}],"name":"HashScheduled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"OnAddressDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"OnAddressEnabled","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":false,"internalType":"address","name":"consumerAddress","type":"address"},{"indexed":false,"internalType":"address","name":"schedulerAddress","type":"address"}],"name":"SchedulerDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"consumerAddress","type":"address"},{"indexed":false,"internalType":"address","name":"schedulerAddress","type":"address"}],"name":"SchedulerEnabled","type":"event"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"consume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"},{"internalType":"address","name":"prevOwnerAddr","type":"address"},{"internalType":"address","name":"newOwnerAddr","type":"address"}],"name":"consumeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"disableAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"arr","type":"address[]"}],"name":"disableAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"disableScheduler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"enableAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"arr","type":"address[]"}],"name":"enableAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"enableScheduler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"newTimeLockDuration","type":"uint256"}],"name":"initScheduler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isWhitelistedAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"queue","outputs":[{"internalType":"uint256","name":"targetEpoch","type":"uint256"},{"internalType":"address","name":"createdBy","type":"address"},{"internalType":"address","name":"consumerAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"},{"internalType":"address","name":"consumerAddr","type":"address"}],"name":"schedule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"timeLockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052348015600e575f80fd5b506040516113b93803806113b9833981016040819052602b91609b565b806001600160a01b03811660765760405162461bcd60e51b815260206004820152600e60248201526d13dddb995c881c995c5d5a5c995960921b604482015260640160405180910390fd5b600180546001600160a01b0319166001600160a01b03929092169190911790555060c6565b5f6020828403121560aa575f80fd5b81516001600160a01b038116811460bf575f80fd5b9392505050565b6112e6806100d35f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c80639eefdd8711610093578063f6fd7c8d11610063578063f6fd7c8d14610248578063f832e2151461025b578063f914d17814610288578063fcc91b341461029b575f80fd5b80639eefdd87146101fc578063af6f8c1b1461020f578063dd331c2e14610222578063f2fde38b14610235575f80fd5b80636bf85c43116100ce5780636bf85c431461015c57806377dfbea21461016f5780637c10dea6146101825780638da5cb5b146101e1575f80fd5b8063044b42e1146100f45780635036258b146101095780635fae05761461011c575b5f80fd5b610107610102366004611068565b6102ae565b005b610107610117366004611068565b6102ff565b61014761012a366004611068565b6001600160a01b03165f9081526002602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61010761016a366004611088565b6103c5565b61010761017d3660046110f9565b6105e2565b6101bc610190366004611123565b60046020525f908152604090208054600182015460029092015490916001600160a01b03908116911683565b604080519384526001600160a01b039283166020850152911690820152606001610153565b6001546040516001600160a01b039091168152602001610153565b61010761020a366004611068565b6107f1565b61010761021d366004611123565b6108ae565b61010761023036600461113a565b6108ea565b610107610243366004611068565b610a72565b610107610256366004611068565b610aad565b61027a610269366004611068565b60056020525f908152604090205481565b604051908152602001610153565b610107610296366004611162565b610ae9565b6101076102a9366004611088565b610b45565b6102b6610ca0565b335f908152600560205260409020546102ea5760405162461bcd60e51b81526004016102e19061119b565b60405180910390fd5b6102f381610cf7565b6102fc60015f55565b50565b610307610ca0565b6001546001600160a01b031633146103315760405162461bcd60e51b81526004016102e1906111c3565b6001600160a01b0381165f9081526002602052604090205460ff166103685760405162461bcd60e51b81526004016102e1906111fa565b6001600160a01b0381165f81815260026020908152604091829020805460ff1916905590519182527f817a22f8606c1982bfadd76a8d2f2356335b22f6731f0d5cdfdef6f033b14dc391015b60405180910390a16102fc60015f55565b6103cd610ca0565b6001546001600160a01b031633146103f75760405162461bcd60e51b81526004016102e1906111c3565b806104395760405162461bcd60e51b81526020600482015260126024820152711059191c995cdcd95cc81c995c5d5a5c995960721b60448201526064016102e1565b5f5b818110156105d4575f83838381811061045657610456611224565b905060200201602081019061046b9190611068565b6001600160a01b0316036104b35760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016102e1565b60025f8484848181106104c8576104c8611224565b90506020020160208101906104dd9190611068565b6001600160a01b0316815260208101919091526040015f205460ff16156105165760405162461bcd60e51b81526004016102e190611238565b600160025f85858581811061052d5761052d611224565b90506020020160208101906105429190611068565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f36eb734aedf7abf48fbef350f1aa23aa2cf37b6ea7d7fc668e15dca0e9bb72af83838381811061059c5761059c611224565b90506020020160208101906105b19190611068565b6040516001600160a01b03909116815260200160405180910390a160010161043b565b506105de60015f55565b5050565b6105ea610ca0565b816106275760405162461bcd60e51b815260206004820152600d60248201526c12185cda081c995c5d5a5c9959609a1b60448201526064016102e1565b6001600160a01b0381165f90815260036020908152604080832033845290915290205460ff1661068f5760405162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21039b2b73232b960691b60448201526064016102e1565b6001600160a01b0381165f908152600560205260409020546106c35760405162461bcd60e51b81526004016102e19061119b565b5f82815260046020526040902054156107115760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195b9c5d595d595960821b60448201526064016102e1565b604080516060810182526001600160a01b0383165f90815260056020529190912054819061073f9042611261565b8152336020808301919091526001600160a01b038481166040938401525f8681526004835283902084518155918401516001830180549183166001600160a01b03199283161790559383015160029092018054929091169190931617909155517f6ef595d41bb19bf4009067ebfca1e965c782641ffd735166641d1832d9955ca5906107e090849084909182526001600160a01b0316602082015260400190565b60405180910390a16105de60015f55565b6107f9610ca0565b6001546001600160a01b031633146108235760405162461bcd60e51b81526004016102e1906111c3565b6001600160a01b0381165f9081526002602052604090205460ff161561085b5760405162461bcd60e51b81526004016102e190611238565b6001600160a01b0381165f81815260026020908152604091829020805460ff1916600117905590519182527f36eb734aedf7abf48fbef350f1aa23aa2cf37b6ea7d7fc668e15dca0e9bb72af91016103b4565b6108b6610ca0565b335f908152600560205260409020546108e15760405162461bcd60e51b81526004016102e19061119b565b6102f381610dcb565b6108f2610ca0565b335f9081526002602052604090205460ff166109465760405162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21039b2b73232b960691b60448201526064016102e1565b6001600160a01b03821661096c5760405162461bcd60e51b81526004016102e190611286565b5f81116109af5760405162461bcd60e51b8152602060048201526011602482015270111d5c985d1a5bdb881c995c5d5a5c9959607a1b60448201526064016102e1565b335f9081526005602052604090205415610a015760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016102e1565b335f8181526003602090815260408083206001600160a01b038716808552908352818420805460ff1916600117905584845260058352928190208590558051938452908301919091527f2e1532fab4575bbd4b71ca99084eba74c2dc594c534a46ea4d8271ba87686dbb91016107e0565b610a7a610ca0565b6001546001600160a01b03163314610aa45760405162461bcd60e51b81526004016102e1906111c3565b6102f381610f33565b610ab5610ca0565b335f90815260056020526040902054610ae05760405162461bcd60e51b81526004016102e19061119b565b6102f381610f84565b610af1610ca0565b335f90815260056020526040902054610b1c5760405162461bcd60e51b81526004016102e19061119b565b610b2582610f84565b610b2e83610dcb565b610b3781610cf7565b610b4060015f55565b505050565b610b4d610ca0565b6001546001600160a01b03163314610b775760405162461bcd60e51b81526004016102e1906111c3565b5f5b818110156105d45760025f848484818110610b9657610b96611224565b9050602002016020810190610bab9190611068565b6001600160a01b0316815260208101919091526040015f205460ff16610be35760405162461bcd60e51b81526004016102e1906111fa565b5f60025f858585818110610bf957610bf9611224565b9050602002016020810190610c0e9190611068565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f817a22f8606c1982bfadd76a8d2f2356335b22f6731f0d5cdfdef6f033b14dc3838383818110610c6857610c68611224565b9050602002016020810190610c7d9190611068565b6040516001600160a01b03909116815260200160405180910390a1600101610b79565b60025f5403610cf15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102e1565b60025f55565b6001600160a01b038116610d1d5760405162461bcd60e51b81526004016102e190611286565b335f9081526003602090815260408083206001600160a01b038516845290915290205460ff1615610d605760405162461bcd60e51b81526004016102e190611238565b335f8181526003602090815260408083206001600160a01b03861680855290835292819020805460ff191660011790558051938452908301919091527f2e1532fab4575bbd4b71ca99084eba74c2dc594c534a46ea4d8271ba87686dbb91015b60405180910390a150565b5f81815260046020526040902054610e195760405162461bcd60e51b815260206004820152601160248201527012185cda081b9bdd08195b9c5d595d5959607a1b60448201526064016102e1565b5f818152600460205260409020600201546001600160a01b03163314610e795760405162461bcd60e51b81526020600482015260156024820152742ab730baba3437b934bd32b21031b7b739bab6b2b960591b60448201526064016102e1565b5f818152600460205260409020544211610ec95760405162461bcd60e51b815260206004820152601160248201527054696d656c6f636b20696e20706c61636560781b60448201526064016102e1565b5f8181526004602090815260408083209283556001830180546001600160a01b031990811690915560029093018054909316909255815183815233918101919091527fc0c97b5bfc2b0d319a6dadd3efddd19273d76957d4cf2c1f72697f8b589dea059101610dc0565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038116610faa5760405162461bcd60e51b81526004016102e190611286565b335f9081526003602090815260408083206001600160a01b038516845290915290205460ff16610fec5760405162461bcd60e51b81526004016102e1906111fa565b335f8181526003602090815260408083206001600160a01b03861680855290835292819020805460ff191690558051938452908301919091527f07afcfd70ee49c21e69bef23484ab1dfaba225d7d1c87fcbad238e86590972879101610dc0565b80356001600160a01b0381168114611063575f80fd5b919050565b5f60208284031215611078575f80fd5b6110818261104d565b9392505050565b5f8060208385031215611099575f80fd5b823567ffffffffffffffff8111156110af575f80fd5b8301601f810185136110bf575f80fd5b803567ffffffffffffffff8111156110d5575f80fd5b8560208260051b84010111156110e9575f80fd5b6020919091019590945092505050565b5f806040838503121561110a575f80fd5b8235915061111a6020840161104d565b90509250929050565b5f60208284031215611133575f80fd5b5035919050565b5f806040838503121561114b575f80fd5b6111548361104d565b946020939093013593505050565b5f805f60608486031215611174575f80fd5b833592506111846020850161104d565b91506111926040850161104d565b90509250925092565b6020808252600e908201526d139bdd0818dbdb999a59dd5c995960921b604082015260600190565b60208082526017908201527f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b60208082526010908201526f105b1c9958591e48191a5cd8589b195960821b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b6020808252600f908201526e105b1c9958591e48195b98589b1959608a1b604082015260600190565b8082018082111561128057634e487b7160e01b5f52601160045260245ffd5b92915050565b60208082526010908201526f1059191c995cdcc81c995c5d5a5c995960821b60408201526060019056fea264697066735822122040078aa1857e75f5dd7ec0f356e7c0f0a0cb2d4545b65f1a0376a72a189f0c5d64736f6c634300081a0033000000000000000000000000cf280b9a751931fd3cb5f9449378f85f8978dfae
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106100f0575f3560e01c80639eefdd8711610093578063f6fd7c8d11610063578063f6fd7c8d14610248578063f832e2151461025b578063f914d17814610288578063fcc91b341461029b575f80fd5b80639eefdd87146101fc578063af6f8c1b1461020f578063dd331c2e14610222578063f2fde38b14610235575f80fd5b80636bf85c43116100ce5780636bf85c431461015c57806377dfbea21461016f5780637c10dea6146101825780638da5cb5b146101e1575f80fd5b8063044b42e1146100f45780635036258b146101095780635fae05761461011c575b5f80fd5b610107610102366004611068565b6102ae565b005b610107610117366004611068565b6102ff565b61014761012a366004611068565b6001600160a01b03165f9081526002602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61010761016a366004611088565b6103c5565b61010761017d3660046110f9565b6105e2565b6101bc610190366004611123565b60046020525f908152604090208054600182015460029092015490916001600160a01b03908116911683565b604080519384526001600160a01b039283166020850152911690820152606001610153565b6001546040516001600160a01b039091168152602001610153565b61010761020a366004611068565b6107f1565b61010761021d366004611123565b6108ae565b61010761023036600461113a565b6108ea565b610107610243366004611068565b610a72565b610107610256366004611068565b610aad565b61027a610269366004611068565b60056020525f908152604090205481565b604051908152602001610153565b610107610296366004611162565b610ae9565b6101076102a9366004611088565b610b45565b6102b6610ca0565b335f908152600560205260409020546102ea5760405162461bcd60e51b81526004016102e19061119b565b60405180910390fd5b6102f381610cf7565b6102fc60015f55565b50565b610307610ca0565b6001546001600160a01b031633146103315760405162461bcd60e51b81526004016102e1906111c3565b6001600160a01b0381165f9081526002602052604090205460ff166103685760405162461bcd60e51b81526004016102e1906111fa565b6001600160a01b0381165f81815260026020908152604091829020805460ff1916905590519182527f817a22f8606c1982bfadd76a8d2f2356335b22f6731f0d5cdfdef6f033b14dc391015b60405180910390a16102fc60015f55565b6103cd610ca0565b6001546001600160a01b031633146103f75760405162461bcd60e51b81526004016102e1906111c3565b806104395760405162461bcd60e51b81526020600482015260126024820152711059191c995cdcd95cc81c995c5d5a5c995960721b60448201526064016102e1565b5f5b818110156105d4575f83838381811061045657610456611224565b905060200201602081019061046b9190611068565b6001600160a01b0316036104b35760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016102e1565b60025f8484848181106104c8576104c8611224565b90506020020160208101906104dd9190611068565b6001600160a01b0316815260208101919091526040015f205460ff16156105165760405162461bcd60e51b81526004016102e190611238565b600160025f85858581811061052d5761052d611224565b90506020020160208101906105429190611068565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f36eb734aedf7abf48fbef350f1aa23aa2cf37b6ea7d7fc668e15dca0e9bb72af83838381811061059c5761059c611224565b90506020020160208101906105b19190611068565b6040516001600160a01b03909116815260200160405180910390a160010161043b565b506105de60015f55565b5050565b6105ea610ca0565b816106275760405162461bcd60e51b815260206004820152600d60248201526c12185cda081c995c5d5a5c9959609a1b60448201526064016102e1565b6001600160a01b0381165f90815260036020908152604080832033845290915290205460ff1661068f5760405162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21039b2b73232b960691b60448201526064016102e1565b6001600160a01b0381165f908152600560205260409020546106c35760405162461bcd60e51b81526004016102e19061119b565b5f82815260046020526040902054156107115760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195b9c5d595d595960821b60448201526064016102e1565b604080516060810182526001600160a01b0383165f90815260056020529190912054819061073f9042611261565b8152336020808301919091526001600160a01b038481166040938401525f8681526004835283902084518155918401516001830180549183166001600160a01b03199283161790559383015160029092018054929091169190931617909155517f6ef595d41bb19bf4009067ebfca1e965c782641ffd735166641d1832d9955ca5906107e090849084909182526001600160a01b0316602082015260400190565b60405180910390a16105de60015f55565b6107f9610ca0565b6001546001600160a01b031633146108235760405162461bcd60e51b81526004016102e1906111c3565b6001600160a01b0381165f9081526002602052604090205460ff161561085b5760405162461bcd60e51b81526004016102e190611238565b6001600160a01b0381165f81815260026020908152604091829020805460ff1916600117905590519182527f36eb734aedf7abf48fbef350f1aa23aa2cf37b6ea7d7fc668e15dca0e9bb72af91016103b4565b6108b6610ca0565b335f908152600560205260409020546108e15760405162461bcd60e51b81526004016102e19061119b565b6102f381610dcb565b6108f2610ca0565b335f9081526002602052604090205460ff166109465760405162461bcd60e51b81526020600482015260136024820152722ab730baba3437b934bd32b21039b2b73232b960691b60448201526064016102e1565b6001600160a01b03821661096c5760405162461bcd60e51b81526004016102e190611286565b5f81116109af5760405162461bcd60e51b8152602060048201526011602482015270111d5c985d1a5bdb881c995c5d5a5c9959607a1b60448201526064016102e1565b335f9081526005602052604090205415610a015760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016102e1565b335f8181526003602090815260408083206001600160a01b038716808552908352818420805460ff1916600117905584845260058352928190208590558051938452908301919091527f2e1532fab4575bbd4b71ca99084eba74c2dc594c534a46ea4d8271ba87686dbb91016107e0565b610a7a610ca0565b6001546001600160a01b03163314610aa45760405162461bcd60e51b81526004016102e1906111c3565b6102f381610f33565b610ab5610ca0565b335f90815260056020526040902054610ae05760405162461bcd60e51b81526004016102e19061119b565b6102f381610f84565b610af1610ca0565b335f90815260056020526040902054610b1c5760405162461bcd60e51b81526004016102e19061119b565b610b2582610f84565b610b2e83610dcb565b610b3781610cf7565b610b4060015f55565b505050565b610b4d610ca0565b6001546001600160a01b03163314610b775760405162461bcd60e51b81526004016102e1906111c3565b5f5b818110156105d45760025f848484818110610b9657610b96611224565b9050602002016020810190610bab9190611068565b6001600160a01b0316815260208101919091526040015f205460ff16610be35760405162461bcd60e51b81526004016102e1906111fa565b5f60025f858585818110610bf957610bf9611224565b9050602002016020810190610c0e9190611068565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f817a22f8606c1982bfadd76a8d2f2356335b22f6731f0d5cdfdef6f033b14dc3838383818110610c6857610c68611224565b9050602002016020810190610c7d9190611068565b6040516001600160a01b03909116815260200160405180910390a1600101610b79565b60025f5403610cf15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102e1565b60025f55565b6001600160a01b038116610d1d5760405162461bcd60e51b81526004016102e190611286565b335f9081526003602090815260408083206001600160a01b038516845290915290205460ff1615610d605760405162461bcd60e51b81526004016102e190611238565b335f8181526003602090815260408083206001600160a01b03861680855290835292819020805460ff191660011790558051938452908301919091527f2e1532fab4575bbd4b71ca99084eba74c2dc594c534a46ea4d8271ba87686dbb91015b60405180910390a150565b5f81815260046020526040902054610e195760405162461bcd60e51b815260206004820152601160248201527012185cda081b9bdd08195b9c5d595d5959607a1b60448201526064016102e1565b5f818152600460205260409020600201546001600160a01b03163314610e795760405162461bcd60e51b81526020600482015260156024820152742ab730baba3437b934bd32b21031b7b739bab6b2b960591b60448201526064016102e1565b5f818152600460205260409020544211610ec95760405162461bcd60e51b815260206004820152601160248201527054696d656c6f636b20696e20706c61636560781b60448201526064016102e1565b5f8181526004602090815260408083209283556001830180546001600160a01b031990811690915560029093018054909316909255815183815233918101919091527fc0c97b5bfc2b0d319a6dadd3efddd19273d76957d4cf2c1f72697f8b589dea059101610dc0565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038116610faa5760405162461bcd60e51b81526004016102e190611286565b335f9081526003602090815260408083206001600160a01b038516845290915290205460ff16610fec5760405162461bcd60e51b81526004016102e1906111fa565b335f8181526003602090815260408083206001600160a01b03861680855290835292819020805460ff191690558051938452908301919091527f07afcfd70ee49c21e69bef23484ab1dfaba225d7d1c87fcbad238e86590972879101610dc0565b80356001600160a01b0381168114611063575f80fd5b919050565b5f60208284031215611078575f80fd5b6110818261104d565b9392505050565b5f8060208385031215611099575f80fd5b823567ffffffffffffffff8111156110af575f80fd5b8301601f810185136110bf575f80fd5b803567ffffffffffffffff8111156110d5575f80fd5b8560208260051b84010111156110e9575f80fd5b6020919091019590945092505050565b5f806040838503121561110a575f80fd5b8235915061111a6020840161104d565b90509250929050565b5f60208284031215611133575f80fd5b5035919050565b5f806040838503121561114b575f80fd5b6111548361104d565b946020939093013593505050565b5f805f60608486031215611174575f80fd5b833592506111846020850161104d565b91506111926040850161104d565b90509250925092565b6020808252600e908201526d139bdd0818dbdb999a59dd5c995960921b604082015260600190565b60208082526017908201527f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b60208082526010908201526f105b1c9958591e48191a5cd8589b195960821b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b6020808252600f908201526e105b1c9958591e48195b98589b1959608a1b604082015260600190565b8082018082111561128057634e487b7160e01b5f52601160045260245ffd5b92915050565b60208082526010908201526f1059191c995cdcc81c995c5d5a5c995960821b60408201526060019056fea264697066735822122040078aa1857e75f5dd7ec0f356e7c0f0a0cb2d4545b65f1a0376a72a189f0c5d64736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cf280b9a751931fd3cb5f9449378f85f8978dfae
-----Decoded View---------------
Arg [0] : ownerAddr (address): 0xCF280B9a751931Fd3CB5f9449378F85F8978DFAE
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000cf280b9a751931fd3cb5f9449378f85f8978dfae
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.