More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 669,526 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Execute Blocks | 18715213 | 358 days ago | IN | 0 ETH | 0.08901393 | ||||
Prove Blocks | 18715108 | 358 days ago | IN | 0 ETH | 0.05197122 | ||||
Prove Blocks | 18715108 | 358 days ago | IN | 0 ETH | 0.0519696 | ||||
Prove Blocks | 18715108 | 358 days ago | IN | 0 ETH | 0.05196798 | ||||
Prove Blocks | 18714909 | 358 days ago | IN | 0 ETH | 0.03811157 | ||||
Prove Blocks | 18714907 | 358 days ago | IN | 0 ETH | 0.0379423 | ||||
Prove Blocks | 18714907 | 358 days ago | IN | 0 ETH | 0.0379423 | ||||
Prove Blocks | 18714907 | 358 days ago | IN | 0 ETH | 0.0379429 | ||||
Prove Blocks | 18714907 | 358 days ago | IN | 0 ETH | 0.03794526 | ||||
Prove Blocks | 18714907 | 358 days ago | IN | 0 ETH | 0.0379423 | ||||
Execute Blocks | 18714640 | 358 days ago | IN | 0 ETH | 0.08795568 | ||||
Prove Blocks | 18714246 | 358 days ago | IN | 0 ETH | 0.04499622 | ||||
Prove Blocks | 18714246 | 358 days ago | IN | 0 ETH | 0.04499833 | ||||
Prove Blocks | 18714246 | 358 days ago | IN | 0 ETH | 0.04499833 | ||||
Prove Blocks | 18714246 | 358 days ago | IN | 0 ETH | 0.04499973 | ||||
Prove Blocks | 18714241 | 358 days ago | IN | 0 ETH | 0.04474128 | ||||
Prove Blocks | 18714241 | 358 days ago | IN | 0 ETH | 0.04473988 | ||||
Prove Blocks | 18714241 | 358 days ago | IN | 0 ETH | 0.04474617 | ||||
Prove Blocks | 18714241 | 358 days ago | IN | 0 ETH | 0.04474757 | ||||
Prove Blocks | 18714241 | 358 days ago | IN | 0 ETH | 0.04474617 | ||||
Prove Blocks | 18714241 | 358 days ago | IN | 0 ETH | 0.04474617 | ||||
Prove Blocks | 18714241 | 358 days ago | IN | 0 ETH | 0.04474826 | ||||
Prove Blocks | 18714234 | 358 days ago | IN | 0 ETH | 0.04499833 | ||||
Execute Blocks | 18714132 | 358 days ago | IN | 0 ETH | 0.10602617 | ||||
Prove Blocks | 18714103 | 358 days ago | IN | 0 ETH | 0.05334425 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
16892552 | 614 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
ValidatorTimelock
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.8.13; // SPDX-License-Identifier: MIT import "@openzeppelin/contracts/access/Ownable2Step.sol"; import "./interfaces/IExecutor.sol"; /// @author Matter Labs /// @notice Intermediate smart contract between the validator EOA account and the zkSync smart contract. /// @dev The primary purpose of this contract is to provide a trustless means of delaying block execution without /// modifying the main zkSync contract. As such, even if this contract is compromised, it will not impact the main contract. /// @dev zkSync actively monitors the chain activity and reacts to any suspicious activity by freezing the chain. /// This allows time for investigation and mitigation before resuming normal operations. /// @dev The contract overloads all of the 4 methods, that are used in state transition. When the block is committed, the /// timestamp is stored for it. Later, when the owner calls the block execution, the contract checks that block /// was committed not earlier than X time ago. contract ValidatorTimelock is IExecutor, Ownable2Step { /// @notice The delay between committing and executing blocks is changed. event NewExecutionDelay(uint256 _newExecutionDelay); /// @notice The validator address is changed. event NewValidator(address _oldValidator, address _newValidator); /// @dev The main zkSync smart contract. address public immutable zkSyncContract; /// @dev The mapping of L2 block number => timestamp when it was commited. mapping(uint256 => uint256) public committedBlockTimestamp; /// @dev The address that can commit/revert/validate/execute blocks. address public validator; /// @dev The delay between committing and executing blocks. uint256 public executionDelay; constructor( address _initialOwner, address _zkSyncContract, uint256 _executionDelay, address _validator ) { _transferOwnership(_initialOwner); zkSyncContract = _zkSyncContract; executionDelay = _executionDelay; validator = _validator; } /// @dev Set new validator address. function setValidator(address _newValidator) external onlyOwner { address oldValidator = validator; validator = _newValidator; emit NewValidator(oldValidator, _newValidator); } /// @dev Set the delay between committing and executing blocks. function setExecutionDelay(uint256 _executionDelay) external onlyOwner { executionDelay = _executionDelay; emit NewExecutionDelay(_executionDelay); } /// @notice Checks if the caller is a validator. modifier onlyValidator() { require(msg.sender == validator, "8h"); _; } /// @dev Records the timestamp for all provided committed blocks and make /// a call to the zkSync contract with the same calldata. function commitBlocks(StoredBlockInfo calldata, CommitBlockInfo[] calldata _newBlocksData) external onlyValidator { for (uint256 i = 0; i < _newBlocksData.length; ++i) { committedBlockTimestamp[_newBlocksData[i].blockNumber] = block.timestamp; } _propagateToZkSync(); } /// @dev Make a call to the zkSync contract with the same calldata. /// Note: If the block is reverted, it needs to be committed first before the execution. /// So it's safe to not override the committed blocks. function revertBlocks(uint256) external onlyValidator { _propagateToZkSync(); } /// @dev Make a call to the zkSync contract with the same calldata. /// Note: We don't track the time when blocks are proven, since all information about /// the block is known on the commit stage and the proved is not finalized (may be reverted). function proveBlocks( StoredBlockInfo calldata, StoredBlockInfo[] calldata, ProofInput calldata ) external onlyValidator { _propagateToZkSync(); } /// @dev Check that blocks were committed at least X time ago and /// make a call to the zkSync contract with the same calldata. function executeBlocks(StoredBlockInfo[] calldata _newBlocksData) external onlyValidator { for (uint256 i = 0; i < _newBlocksData.length; ++i) { uint256 commitBlockTimestamp = committedBlockTimestamp[_newBlocksData[i].blockNumber]; // Note: if the `commitBlockTimestamp` is zero, that means either: // * The block was committed, but not though this contract. // * The block wasn't committed at all, so execution will fail in the zkSync contract. // We allow executing such blocks. require(block.timestamp > commitBlockTimestamp + executionDelay, "5c"); // The delay is not passed } _propagateToZkSync(); } /// @dev Call the zkSync contract with the same calldata as this contract was called. /// Note: it is called the zkSync contract, not delegatecalled! function _propagateToZkSync() internal { address contractAddress = zkSyncContract; assembly { // Copy function signature and arguments from calldata at zero position into memory at pointer position calldatacopy(0, 0, calldatasize()) // Call method of the zkSync contract returns 0 on error let result := call(gas(), contractAddress, 0, 0, calldatasize(), 0, 0) // Get the size of the last return data let size := returndatasize() // Copy the size length of bytes from return data at zero position to pointer position returndatacopy(0, 0, size) // Depending on the result value switch result case 0 { // End execution and revert state changes revert(0, size) } default { // Return data with length of size at pointers position return(0, size) } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../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. * * By default, the owner account will be the one that deploys the contract. 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; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @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 { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing 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 { require(newOwner != address(0), "Ownable: new owner is the zero address"); _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 v4.8.0) (access/Ownable2Step.sol) pragma solidity ^0.8.0; import "./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. * * By default, the owner account will be the one that deploys the contract. 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() external { address sender = _msgSender(); require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner"); _transferOwnership(sender); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @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; } }
pragma solidity ^0.8.13; // SPDX-License-Identifier: MIT interface IExecutor { /// @notice Rollup block stored data /// @param blockNumber Rollup block number /// @param blockHash Hash of L2 block /// @param indexRepeatedStorageChanges The serial number of the shortcut index that's used as a unique identifier for storage keys that were used twice or more /// @param numberOfLayer1Txs Number of priority operations to be processed /// @param priorityOperationsHash Hash of all priority operations from this block /// @param l2LogsTreeRoot Root hash of tree that contains L2 -> L1 messages from this block /// @param timestamp Rollup block timestamp, have the same format as Ethereum block constant /// @param commitment Verified input for the zkSync circuit struct StoredBlockInfo { uint64 blockNumber; bytes32 blockHash; uint64 indexRepeatedStorageChanges; uint256 numberOfLayer1Txs; bytes32 priorityOperationsHash; bytes32 l2LogsTreeRoot; uint256 timestamp; bytes32 commitment; } /// @notice Data needed to commit new block /// @param blockNumber Number of the committed block /// @param timestamp Unix timestamp denoting the start of the block execution /// @param indexRepeatedStorageChanges The serial number of the shortcut index that's used as a unique identifier for storage keys that were used twice or more /// @param newStateRoot The state root of the full state tree /// @param numberOfLayer1Txs Number of priority operations to be processed /// @param l2LogsTreeRoot The root hash of the tree that contains all L2 -> L1 logs in the block /// @param priorityOperationsHash Hash of all priority operations from this block /// @param initialStorageChanges Storage write access as a concatenation key-value /// @param repeatedStorageChanges Storage write access as a concatenation index-value /// @param l2Logs concatenation of all L2 -> L1 logs in the block /// @param l2ArbitraryLengthMessages array of hash preimages that were sent as value of L2 logs by special system L2 contract /// @param factoryDeps array of l2 bytecodes that were marked as known on L2 struct CommitBlockInfo { uint64 blockNumber; uint64 timestamp; uint64 indexRepeatedStorageChanges; bytes32 newStateRoot; uint256 numberOfLayer1Txs; bytes32 l2LogsTreeRoot; bytes32 priorityOperationsHash; bytes initialStorageChanges; bytes repeatedStorageChanges; bytes l2Logs; bytes[] l2ArbitraryLengthMessages; bytes[] factoryDeps; } /// @notice Recursive proof input data (individual commitments are constructed onchain) struct ProofInput { uint256[] recursiveAggregationInput; uint256[] serializedProof; } function commitBlocks(StoredBlockInfo calldata _lastCommittedBlockData, CommitBlockInfo[] calldata _newBlocksData) external; function proveBlocks( StoredBlockInfo calldata _prevBlock, StoredBlockInfo[] calldata _committedBlocks, ProofInput calldata _proof ) external; function executeBlocks(StoredBlockInfo[] calldata _blocksData) external; function revertBlocks(uint256 _newLastBlock) external; /// @notice Event emitted when a block is committed event BlockCommit(uint256 indexed blockNumber, bytes32 indexed blockHash, bytes32 indexed commitment); /// @notice Event emitted when blocks are verified event BlocksVerification(uint256 indexed previousLastVerifiedBlock, uint256 indexed currentLastVerifiedBlock); /// @notice Event emitted when a block is executed event BlockExecution(uint256 indexed blockNumber, bytes32 indexed blockHash, bytes32 indexed commitment); /// @notice Event emitted when blocks are reverted event BlocksRevert(uint256 totalBlocksCommitted, uint256 totalBlocksVerified, uint256 totalBlocksExecuted); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"address","name":"_zkSyncContract","type":"address"},{"internalType":"uint256","name":"_executionDelay","type":"uint256"},{"internalType":"address","name":"_validator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"blockNumber","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"commitment","type":"bytes32"}],"name":"BlockCommit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"blockNumber","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"commitment","type":"bytes32"}],"name":"BlockExecution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalBlocksCommitted","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBlocksVerified","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBlocksExecuted","type":"uint256"}],"name":"BlocksRevert","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"previousLastVerifiedBlock","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"currentLastVerifiedBlock","type":"uint256"}],"name":"BlocksVerification","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_newExecutionDelay","type":"uint256"}],"name":"NewExecutionDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_oldValidator","type":"address"},{"indexed":false,"internalType":"address","name":"_newValidator","type":"address"}],"name":"NewValidator","type":"event"},{"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"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBlockInfo","name":"","type":"tuple"},{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"bytes32","name":"newStateRoot","type":"bytes32"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes","name":"initialStorageChanges","type":"bytes"},{"internalType":"bytes","name":"repeatedStorageChanges","type":"bytes"},{"internalType":"bytes","name":"l2Logs","type":"bytes"},{"internalType":"bytes[]","name":"l2ArbitraryLengthMessages","type":"bytes[]"},{"internalType":"bytes[]","name":"factoryDeps","type":"bytes[]"}],"internalType":"struct IExecutor.CommitBlockInfo[]","name":"_newBlocksData","type":"tuple[]"}],"name":"commitBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"committedBlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBlockInfo[]","name":"_newBlocksData","type":"tuple[]"}],"name":"executeBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executionDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBlockInfo","name":"","type":"tuple"},{"components":[{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBlockInfo[]","name":"","type":"tuple[]"},{"components":[{"internalType":"uint256[]","name":"recursiveAggregationInput","type":"uint256[]"},{"internalType":"uint256[]","name":"serializedProof","type":"uint256[]"}],"internalType":"struct IExecutor.ProofInput","name":"","type":"tuple"}],"name":"proveBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"revertBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_executionDelay","type":"uint256"}],"name":"setExecutionDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newValidator","type":"address"}],"name":"setValidator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"validator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zkSyncContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a060405234801561001057600080fd5b50604051610b55380380610b5583398101604081905261002f91610103565b61003833610070565b61004184610070565b6001600160a01b03928316608052600491909155600380546001600160a01b0319169190921617905550610150565b600180546001600160a01b031916905561009481610097602090811b6105e217901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146100fe57600080fd5b919050565b6000806000806080858703121561011957600080fd5b610122856100e7565b9350610130602086016100e7565b925060408501519150610145606086016100e7565b905092959194509250565b6080516109e3610172600039600081816101b5015261063401526109e36000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063e30c397811610066578063e30c3978146101ea578063e4917d9f146101fb578063f0f2a7f61461020e578063f2fde38b1461022e57600080fd5b80638da5cb5b1461018c578063a9a2d18a1461019d578063cc7086fb146101b0578063ce9dcf16146101d757600080fd5b8063715018a6116100d3578063715018a6146101525780637739cbe71461015a57806379ba50971461016d5780638b2579891461017557600080fd5b80630c4dd810146100fa5780631327d3d81461010f5780633a5381b514610122575b600080fd5b61010d610108366004610705565b610241565b005b61010d61011d36600461078e565b6102ef565b600354610135906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61010d610358565b61010d61016836600461080a565b61036c565b61010d6103a4565b61017e60045481565b604051908152602001610149565b6000546001600160a01b0316610135565b61010d6101ab36600461088d565b61041e565b6101357f000000000000000000000000000000000000000000000000000000000000000081565b61010d6101e53660046108a6565b610450565b6001546001600160a01b0316610135565b61010d61020936600461088d565b61052e565b61017e61021c36600461088d565b60026020526000908152604090205481565b61010d61023c36600461078e565b610571565b6003546001600160a01b031633146102745760405162461bcd60e51b815260040161026b906108e8565b60405180910390fd5b60005b818110156102e157426002600085858581811061029657610296610904565b90506020028101906102a8919061091a565b6102b690602081019061093b565b67ffffffffffffffff1681526020810191909152604001600020556102da8161097b565b9050610277565b506102ea610632565b505050565b6102f7610679565b600380546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5dc8fe6c03695c172a921c8f8fa2fddfb0aa130603797700d865d07baf129eef910160405180910390a15050565b610360610679565b61036a60006106d3565b565b6003546001600160a01b031633146103965760405162461bcd60e51b815260040161026b906108e8565b61039e610632565b50505050565b60015433906001600160a01b031681146104125760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161026b565b61041b816106d3565b50565b6003546001600160a01b031633146104485760405162461bcd60e51b815260040161026b906108e8565b61041b610632565b6003546001600160a01b0316331461047a5760405162461bcd60e51b815260040161026b906108e8565b60005b818110156105215760006002600085858581811061049d5761049d610904565b6104b492602061010090920201908101915061093b565b67ffffffffffffffff168152602001908152602001600020549050600454816104dd9190610994565b42116105105760405162461bcd60e51b8152602060048201526002602482015261356360f01b604482015260640161026b565b5061051a8161097b565b905061047d565b5061052a610632565b5050565b610536610679565b60048190556040518181527fd32d6d626bb9c7077c559fc3b4e5ce71ef14609d7d216d030ee63dcf2422c2c49060200160405180910390a150565b610579610679565b600180546001600160a01b0383166001600160a01b031990911681179091556105aa6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f0000000000000000000000000000000000000000000000000000000000000000366000803760008036600080855af13d806000803e81801561067457816000f35b816000fd5b6000546001600160a01b0316331461036a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161026b565b600180546001600160a01b031916905561041b816105e2565b600061010082840312156106ff57600080fd5b50919050565b6000806000610120848603121561071b57600080fd5b61072585856106ec565b925061010084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b8760208260051b850101111561077b57600080fd5b6020830194508093505050509250925092565b6000602082840312156107a057600080fd5b81356001600160a01b03811681146107b757600080fd5b9392505050565b60008083601f8401126107d057600080fd5b50813567ffffffffffffffff8111156107e857600080fd5b6020830191508360208260081b850101111561080357600080fd5b9250929050565b600080600080610140858703121561082157600080fd5b61082b86866106ec565b935061010085013567ffffffffffffffff8082111561084957600080fd5b610855888389016107be565b909550935061012087013591508082111561086f57600080fd5b5085016040818803121561088257600080fd5b939692955090935050565b60006020828403121561089f57600080fd5b5035919050565b600080602083850312156108b957600080fd5b823567ffffffffffffffff8111156108d057600080fd5b6108dc858286016107be565b90969095509350505050565b602080825260029082015261070d60f31b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000823561017e1983360301811261093157600080fd5b9190910192915050565b60006020828403121561094d57600080fd5b813567ffffffffffffffff811681146107b757600080fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161098d5761098d610965565b5060010190565b808201808211156109a7576109a7610965565b9291505056fea2646970667358221220a13658aa60bd1b0be5e76ae8fcee036861a3bf56f2f33a11041f5ce0fb84627464736f6c63430008110033000000000000000000000000c301f8b2a2c08958e6e7a286ab49a986c1f7ef6a00000000000000000000000032400084c286cf3e17e7b677ea9583e60a0003240000000000000000000000000000000000000000000000000000000000015180000000000000000000000000112200eaa6d57120c86b8b51a8b6049d56b82211
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063e30c397811610066578063e30c3978146101ea578063e4917d9f146101fb578063f0f2a7f61461020e578063f2fde38b1461022e57600080fd5b80638da5cb5b1461018c578063a9a2d18a1461019d578063cc7086fb146101b0578063ce9dcf16146101d757600080fd5b8063715018a6116100d3578063715018a6146101525780637739cbe71461015a57806379ba50971461016d5780638b2579891461017557600080fd5b80630c4dd810146100fa5780631327d3d81461010f5780633a5381b514610122575b600080fd5b61010d610108366004610705565b610241565b005b61010d61011d36600461078e565b6102ef565b600354610135906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61010d610358565b61010d61016836600461080a565b61036c565b61010d6103a4565b61017e60045481565b604051908152602001610149565b6000546001600160a01b0316610135565b61010d6101ab36600461088d565b61041e565b6101357f00000000000000000000000032400084c286cf3e17e7b677ea9583e60a00032481565b61010d6101e53660046108a6565b610450565b6001546001600160a01b0316610135565b61010d61020936600461088d565b61052e565b61017e61021c36600461088d565b60026020526000908152604090205481565b61010d61023c36600461078e565b610571565b6003546001600160a01b031633146102745760405162461bcd60e51b815260040161026b906108e8565b60405180910390fd5b60005b818110156102e157426002600085858581811061029657610296610904565b90506020028101906102a8919061091a565b6102b690602081019061093b565b67ffffffffffffffff1681526020810191909152604001600020556102da8161097b565b9050610277565b506102ea610632565b505050565b6102f7610679565b600380546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5dc8fe6c03695c172a921c8f8fa2fddfb0aa130603797700d865d07baf129eef910160405180910390a15050565b610360610679565b61036a60006106d3565b565b6003546001600160a01b031633146103965760405162461bcd60e51b815260040161026b906108e8565b61039e610632565b50505050565b60015433906001600160a01b031681146104125760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161026b565b61041b816106d3565b50565b6003546001600160a01b031633146104485760405162461bcd60e51b815260040161026b906108e8565b61041b610632565b6003546001600160a01b0316331461047a5760405162461bcd60e51b815260040161026b906108e8565b60005b818110156105215760006002600085858581811061049d5761049d610904565b6104b492602061010090920201908101915061093b565b67ffffffffffffffff168152602001908152602001600020549050600454816104dd9190610994565b42116105105760405162461bcd60e51b8152602060048201526002602482015261356360f01b604482015260640161026b565b5061051a8161097b565b905061047d565b5061052a610632565b5050565b610536610679565b60048190556040518181527fd32d6d626bb9c7077c559fc3b4e5ce71ef14609d7d216d030ee63dcf2422c2c49060200160405180910390a150565b610579610679565b600180546001600160a01b0383166001600160a01b031990911681179091556105aa6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f00000000000000000000000032400084c286cf3e17e7b677ea9583e60a000324366000803760008036600080855af13d806000803e81801561067457816000f35b816000fd5b6000546001600160a01b0316331461036a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161026b565b600180546001600160a01b031916905561041b816105e2565b600061010082840312156106ff57600080fd5b50919050565b6000806000610120848603121561071b57600080fd5b61072585856106ec565b925061010084013567ffffffffffffffff8082111561074357600080fd5b818601915086601f83011261075757600080fd5b81358181111561076657600080fd5b8760208260051b850101111561077b57600080fd5b6020830194508093505050509250925092565b6000602082840312156107a057600080fd5b81356001600160a01b03811681146107b757600080fd5b9392505050565b60008083601f8401126107d057600080fd5b50813567ffffffffffffffff8111156107e857600080fd5b6020830191508360208260081b850101111561080357600080fd5b9250929050565b600080600080610140858703121561082157600080fd5b61082b86866106ec565b935061010085013567ffffffffffffffff8082111561084957600080fd5b610855888389016107be565b909550935061012087013591508082111561086f57600080fd5b5085016040818803121561088257600080fd5b939692955090935050565b60006020828403121561089f57600080fd5b5035919050565b600080602083850312156108b957600080fd5b823567ffffffffffffffff8111156108d057600080fd5b6108dc858286016107be565b90969095509350505050565b602080825260029082015261070d60f31b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000823561017e1983360301811261093157600080fd5b9190910192915050565b60006020828403121561094d57600080fd5b813567ffffffffffffffff811681146107b757600080fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161098d5761098d610965565b5060010190565b808201808211156109a7576109a7610965565b9291505056fea2646970667358221220a13658aa60bd1b0be5e76ae8fcee036861a3bf56f2f33a11041f5ce0fb84627464736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c301f8b2a2c08958e6e7a286ab49a986c1f7ef6a00000000000000000000000032400084c286cf3e17e7b677ea9583e60a0003240000000000000000000000000000000000000000000000000000000000015180000000000000000000000000112200eaa6d57120c86b8b51a8b6049d56b82211
-----Decoded View---------------
Arg [0] : _initialOwner (address): 0xC301f8B2a2C08958E6e7a286AB49A986c1f7ef6A
Arg [1] : _zkSyncContract (address): 0x32400084C286CF3E17e7B677ea9583e60a000324
Arg [2] : _executionDelay (uint256): 86400
Arg [3] : _validator (address): 0x112200EaA6d57120c86B8b51a8b6049d56B82211
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000c301f8b2a2c08958e6e7a286ab49a986c1f7ef6a
Arg [1] : 00000000000000000000000032400084c286cf3e17e7b677ea9583e60a000324
Arg [2] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [3] : 000000000000000000000000112200eaa6d57120c86b8b51a8b6049d56b82211
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.