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
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Pending Admi... | 16231193 | 783 days ago | IN | 0 ETH | 0.00065807 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x8e8506C9...7f847E9bA The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
TimeLock
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.9; import './ITimeLock.sol'; contract TimeLock is ITimeLock { event NewAdmin(address indexed newAdmin); event NewPendingAdmin(address indexed newPendingAdmin); event NewDelay(uint256 newDelay); event QueueTransaction( bytes32 indexed txHash, address indexed target, uint256 value, string signature, bytes data, uint256 eta ); event ExecuteTransaction( bytes32 indexed txHash, address indexed target, uint256 value, string signature, bytes data, uint256 eta ); event CancelTransaction( bytes32 indexed txHash, address indexed target, uint256 value, string signature, bytes data, uint256 eta ); uint256 private constant MIN_DELAY = 1 days; uint256 private constant MAX_DELAY = 30 days; // Time period a tx is valid for execution after eta has elapsed. uint256 private constant GRACE_PERIOD = 14 days; address public admin; address public pendingAdmin; // Cool-off before a queued transaction is executed uint256 public delay; // Queued status of a transaction (txHash => tx status). mapping(bytes32 => bool) public queuedTransactions; constructor(uint256 _delay) { require(_delay >= MIN_DELAY, 'delay < min'); require(_delay <= MAX_DELAY, 'delay > max'); admin = msg.sender; delay = _delay; } receive() external payable {} modifier onlyTimeLock() { require(msg.sender == address(this), 'not time lock'); _; } modifier onlyAdmin() { require(msg.sender == admin, 'not admin'); _; } /** * @notice Sets the the new value of {_pendingAdmin}. * @param _pendingAdmin Address of next admin */ function setPendingAdmin(address _pendingAdmin) external onlyAdmin { pendingAdmin = _pendingAdmin; emit NewPendingAdmin(_pendingAdmin); } /** * @notice Sets {pendingAdmin} to admin of current contract. */ function acceptAdmin() external { require(msg.sender == pendingAdmin, 'not pending admin'); admin = msg.sender; pendingAdmin = address(0); emit NewAdmin(admin); } /** * @notice Sets the the new value of {delay}. * @param _delay Seconds to delay */ function setDelay(uint256 _delay) external onlyTimeLock { require(_delay >= MIN_DELAY, 'delay < min'); require(_delay <= MAX_DELAY, 'delay > max'); delay = _delay; emit NewDelay(_delay); } function _getTxHash( address target, uint256 value, string calldata signature, bytes calldata data, uint256 eta ) private pure returns (bytes32) { return keccak256(abi.encode(target, value, signature, data, eta)); } /** * @notice Computes transaction hash. * @param target Address to call * @param value Amount of ETH to send * @param signature Function signature * @param data Data to send, function inputs * @param eta Timestamp */ function getTxHash( address target, uint256 value, string calldata signature, bytes calldata data, uint256 eta ) external pure returns (bytes32) { return _getTxHash(target, value, signature, data, eta); } /** * @notice Queues a transaction by setting its status in {queuedTransactions} mapping. * @param target Address to call * @param value Amount of ETH to send * @param signature Function signature * @param data Data to send, function inputs * @param eta Timestamp */ function queueTransaction( address target, uint256 value, string calldata signature, bytes calldata data, uint256 eta ) external onlyAdmin returns (bytes32 txHash) { require(eta >= block.timestamp + delay, 'eta < now + delay'); txHash = _getTxHash(target, value, signature, data, eta); require(!queuedTransactions[txHash], 'queued'); queuedTransactions[txHash] = true; emit QueueTransaction(txHash, target, value, signature, data, eta); } /** * @notice Cancels a transaction by setting its status in {queuedTransactions} mapping. * @param target Address to call * @param value Amount of ETH to send * @param signature Function signature * @param data Data to send, function inputs * @param eta Timestamp */ function cancelTransaction( address target, uint256 value, string calldata signature, bytes calldata data, uint256 eta ) external onlyAdmin { bytes32 txHash = _getTxHash(target, value, signature, data, eta); require(queuedTransactions[txHash], 'not queued'); queuedTransactions[txHash] = false; emit CancelTransaction(txHash, target, value, signature, data, eta); } /** * @notice Executes a transaction by making a low level call to its `target`. * @param target Address to call * @param value Amount of ETH to send * @param signature Function signature * @param data Data to send, function inputs * @param eta Timestamp */ function executeTransaction( address target, uint256 value, string calldata signature, bytes calldata data, uint256 eta ) external payable onlyAdmin returns (bytes memory) { bytes32 txHash = _getTxHash(target, value, signature, data, eta); require(queuedTransactions[txHash], 'not queued'); require(block.timestamp >= eta, 'timestamp < eta'); require(block.timestamp <= eta + GRACE_PERIOD, 'timestamp > grace period'); queuedTransactions[txHash] = false; bytes memory callData; if (bytes(signature).length == 0) { callData = data; } else { callData = abi.encodePacked(bytes4(keccak256(bytes(signature))), data); } // solium-disable-next-line security/no-call-value (bool success, bytes memory returnData) = target.call{value: value}(callData); require(success, 'tx reverted'); emit ExecuteTransaction(txHash, target, value, signature, data, eta); return returnData; } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.9; interface ITimeLock { function delay() external view returns (uint); function queuedTransactions(bytes32 hash) external view returns (bool); function queueTransaction( address target, uint value, string calldata signature, bytes calldata data, uint eta ) external returns (bytes32); function cancelTransaction( address target, uint value, string calldata signature, bytes calldata data, uint eta ) external; function executeTransaction( address target, uint value, string calldata signature, bytes calldata data, uint eta ) external payable returns (bytes memory); }
{ "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_delay","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"signature","type":"string"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"CancelTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"signature","type":"string"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ExecuteTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newDelay","type":"uint256"}],"name":"NewDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"signature","type":"string"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"QueueTransaction","type":"event"},{"inputs":[],"name":"acceptAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"cancelTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"executeTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"getTxHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"queueTransaction","outputs":[{"internalType":"bytes32","name":"txHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"queuedTransactions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_delay","type":"uint256"}],"name":"setDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pendingAdmin","type":"address"}],"name":"setPendingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Deployed Bytecode
0x6080604052600436106100a05760003560e01c80634dd18bf5116100645780634dd18bf51461016e578063591fcdfe1461018e5780636a42b8f8146101ae578063e177246e146101c4578063f2b06537146101e4578063f851a4401461022457600080fd5b806304a71576146100ac5780630825f38f146100df5780630e18b681146100ff57806326782247146101165780633a66f9011461014e57600080fd5b366100a757005b600080fd5b3480156100b857600080fd5b506100cc6100c7366004610a12565b610244565b6040519081526020015b60405180910390f35b6100f26100ed366004610a12565b610261565b6040516100d69190610ad5565b34801561010b57600080fd5b50610114610524565b005b34801561012257600080fd5b50600154610136906001600160a01b031681565b6040516001600160a01b0390911681526020016100d6565b34801561015a57600080fd5b506100cc610169366004610a12565b6105bb565b34801561017a57600080fd5b50610114610189366004610b08565b610703565b34801561019a57600080fd5b506101146101a9366004610a12565b610777565b3480156101ba57600080fd5b506100cc60025481565b3480156101d057600080fd5b506101146101df366004610b2a565b61086f565b3480156101f057600080fd5b506102146101ff366004610b2a565b60036020526000908152604090205460ff1681565b60405190151581526020016100d6565b34801561023057600080fd5b50600054610136906001600160a01b031681565b60006102558888888888888861096b565b98975050505050505050565b6000546060906001600160a01b031633146102975760405162461bcd60e51b815260040161028e90610b43565b60405180910390fd5b60006102a88989898989898961096b565b60008181526003602052604090205490915060ff166102f65760405162461bcd60e51b815260206004820152600a6024820152691b9bdd081c5d595d595960b21b604482015260640161028e565b824210156103385760405162461bcd60e51b815260206004820152600f60248201526e74696d657374616d70203c2065746160881b604482015260640161028e565b6103456212750084610b66565b4211156103945760405162461bcd60e51b815260206004820152601860248201527f74696d657374616d70203e20677261636520706572696f640000000000000000604482015260640161028e565b6000818152600360205260409020805460ff191690556060866103f05785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092935061042b92505050565b8787604051610400929190610b8c565b6040519081900381206104199188908890602001610b9c565b60405160208183030381529060405290505b6000808b6001600160a01b03168b846040516104479190610bc0565b60006040518083038185875af1925050503d8060008114610484576040519150601f19603f3d011682016040523d82523d6000602084013e610489565b606091505b5091509150816104c95760405162461bcd60e51b815260206004820152600b60248201526a1d1e081c995d995c9d195960aa1b604482015260640161028e565b8b6001600160a01b0316847fa560e3198060a2f10670c1ec5b403077ea6ae93ca8de1c32b451dc1a943cd6e78d8d8d8d8d8d60405161050d96959493929190610c05565b60405180910390a39b9a5050505050505050505050565b6001546001600160a01b031633146105725760405162461bcd60e51b81526020600482015260116024820152703737ba103832b73234b7339030b236b4b760791b604482015260640161028e565b60008054336001600160a01b0319918216811783556001805490921690915560405190917f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c91a2565b600080546001600160a01b031633146105e65760405162461bcd60e51b815260040161028e90610b43565b6002546105f39042610b66565b8210156106365760405162461bcd60e51b8152602060048201526011602482015270657461203c206e6f77202b2064656c617960781b604482015260640161028e565b6106458888888888888861096b565b60008181526003602052604090205490915060ff16156106905760405162461bcd60e51b81526020600482015260066024820152651c5d595d595960d21b604482015260640161028e565b60008181526003602052604090819020805460ff19166001179055516001600160a01b0389169082907f76e2796dc3a81d57b0e8504b647febcbeeb5f4af818e164f11eef8131a6a763f906106f0908b908b908b908b908b908b90610c05565b60405180910390a3979650505050505050565b6000546001600160a01b0316331461072d5760405162461bcd60e51b815260040161028e90610b43565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75690600090a250565b6000546001600160a01b031633146107a15760405162461bcd60e51b815260040161028e90610b43565b60006107b28888888888888861096b565b60008181526003602052604090205490915060ff166108005760405162461bcd60e51b815260206004820152600a6024820152691b9bdd081c5d595d595960b21b604482015260640161028e565b60008181526003602052604090819020805460ff19169055516001600160a01b0389169082907f2fffc091a501fd91bfbff27141450d3acb40fb8e6d8382b243ec7a812a3aaf879061085d908b908b908b908b908b908b90610c05565b60405180910390a35050505050505050565b3330146108ae5760405162461bcd60e51b815260206004820152600d60248201526c6e6f742074696d65206c6f636b60981b604482015260640161028e565b620151808110156108ef5760405162461bcd60e51b815260206004820152600b60248201526a3232b630bc901e1036b4b760a91b604482015260640161028e565b62278d008111156109305760405162461bcd60e51b815260206004820152600b60248201526a0c8cad8c2f2407c40dac2f60ab1b604482015260640161028e565b60028190556040518181527f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c9060200160405180910390a150565b60008787878787878760405160200161098a9796959493929190610c46565b604051602081830303815290604052805190602001209050979650505050505050565b80356001600160a01b03811681146109c457600080fd5b919050565b60008083601f8401126109db57600080fd5b50813567ffffffffffffffff8111156109f357600080fd5b602083019150836020828501011115610a0b57600080fd5b9250929050565b600080600080600080600060a0888a031215610a2d57600080fd5b610a36886109ad565b965060208801359550604088013567ffffffffffffffff80821115610a5a57600080fd5b610a668b838c016109c9565b909750955060608a0135915080821115610a7f57600080fd5b50610a8c8a828b016109c9565b989b979a50959894979596608090950135949350505050565b60005b83811015610ac0578181015183820152602001610aa8565b83811115610acf576000848401525b50505050565b6020815260008251806020840152610af4816040850160208701610aa5565b601f01601f19169190910160400192915050565b600060208284031215610b1a57600080fd5b610b23826109ad565b9392505050565b600060208284031215610b3c57600080fd5b5035919050565b6020808252600990820152683737ba1030b236b4b760b91b604082015260600190565b60008219821115610b8757634e487b7160e01b600052601160045260246000fd5b500190565b8183823760009101908152919050565b6001600160e01b031984168152818360048301376000910160040190815292915050565b60008251610bd2818460208701610aa5565b9190910192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b868152608060208201526000610c1f608083018789610bdc565b8281036040840152610c32818688610bdc565b915050826060830152979650505050505050565b60018060a01b038816815286602082015260a060408201526000610c6e60a083018789610bdc565b8281036060840152610c81818688610bdc565b9150508260808301529897505050505050505056fea26469706673582212204040c369a3d399421ad8c9f8446e5816416b7b7c781592694622685ad8cbfc1a64736f6c63430008090033
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.