Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 219,797 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Accept Ownership | 19527755 | 362 days ago | IN | 0 ETH | 0.0011764 | ||||
Renounce Ownersh... | 19527714 | 362 days ago | IN | 0 ETH | 0.001175 | ||||
Renounce Ownersh... | 19527684 | 362 days ago | IN | 0 ETH | 0.00104339 | ||||
Commit Batches | 19412601 | 378 days ago | IN | 0 ETH | 0.1719578 | ||||
Commit Batches | 19412601 | 378 days ago | IN | 0 ETH | 0.17343979 | ||||
Commit Batches | 19412601 | 378 days ago | IN | 0 ETH | 0.17288752 | ||||
Commit Batches | 19412601 | 378 days ago | IN | 0 ETH | 0.17214772 | ||||
Commit Batches | 19412601 | 378 days ago | IN | 0 ETH | 0.17026796 | ||||
Commit Batches | 19412601 | 378 days ago | IN | 0 ETH | 0.16893555 | ||||
Commit Batches | 19412601 | 378 days ago | IN | 0 ETH | 0.16855422 | ||||
Commit Batches | 19412601 | 378 days ago | IN | 0 ETH | 0.16618628 | ||||
Commit Batches | 19412601 | 378 days ago | IN | 0 ETH | 0.16491107 | ||||
Commit Batches | 19412598 | 378 days ago | IN | 0 ETH | 0.18328073 | ||||
Commit Batches | 19412596 | 378 days ago | IN | 0 ETH | 0.18372462 | ||||
Commit Batches | 19412591 | 378 days ago | IN | 0 ETH | 0.17980538 | ||||
Commit Batches | 19412560 | 378 days ago | IN | 0 ETH | 0.15997052 | ||||
Commit Batches | 19412560 | 378 days ago | IN | 0 ETH | 0.16083898 | ||||
Commit Batches | 19412560 | 378 days ago | IN | 0 ETH | 0.15973073 | ||||
Commit Batches | 19412559 | 378 days ago | IN | 0 ETH | 0.14287897 | ||||
Commit Batches | 19412559 | 378 days ago | IN | 0 ETH | 0.13929102 | ||||
Commit Batches | 19412554 | 378 days ago | IN | 0 ETH | 0.15389321 | ||||
Commit Batches | 19412554 | 378 days ago | IN | 0 ETH | 0.15417192 | ||||
Commit Batches | 19412538 | 378 days ago | IN | 0 ETH | 0.15275372 | ||||
Commit Batches | 19412536 | 378 days ago | IN | 0 ETH | 0.1544188 | ||||
Commit Batches | 19412532 | 378 days ago | IN | 0 ETH | 0.15397023 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
0x60a06040 | 18677056 | 481 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
ValidatorTimelock
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 9999999 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity 0.8.20; // SPDX-License-Identifier: MIT import "@openzeppelin/contracts/access/Ownable2Step.sol"; import "./libraries/LibMap.sol"; import "./interfaces/IExecutor.sol"; /// @author Matter Labs /// @custom:security-contact [email protected] /// @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 batch 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 batch is committed, /// the timestamp is stored for it. Later, when the owner calls the batch execution, the contract checks that batch /// was committed not earlier than X time ago. contract ValidatorTimelock is IExecutor, Ownable2Step { using LibMap for LibMap.Uint32Map; /// @dev Part of the IBase interface. Not used in this contract. string public constant override getName = "ValidatorTimelock"; /// @notice The delay between committing and executing batches 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 batch number => timestamp when it was committed. LibMap.Uint32Map internal committedBatchTimestamp; /// @dev The address that can commit/revert/validate/execute batches. address public validator; /// @dev The delay between committing and executing batches. uint32 public executionDelay; constructor(address _initialOwner, address _zkSyncContract, uint32 _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 batches. function setExecutionDelay(uint32 _executionDelay) external onlyOwner { executionDelay = _executionDelay; emit NewExecutionDelay(_executionDelay); } /// @notice Checks if the caller is a validator. modifier onlyValidator() { require(msg.sender == validator, "8h"); _; } /// @dev Returns the timestamp when `_l2BatchNumber` was committed. function getCommittedBatchTimestamp(uint256 _l2BatchNumber) external view returns (uint256) { return committedBatchTimestamp.get(_l2BatchNumber); } /// @dev Records the timestamp for all provided committed batches and make /// a call to the zkSync contract with the same calldata. function commitBatches( StoredBatchInfo calldata, CommitBatchInfo[] calldata _newBatchesData ) external onlyValidator { unchecked { // This contract is only a temporary solution, that hopefully will be disabled until 2106 year, so... // It is safe to cast. uint32 timestamp = uint32(block.timestamp); for (uint256 i = 0; i < _newBatchesData.length; ++i) { committedBatchTimestamp.set(_newBatchesData[i].batchNumber, timestamp); } } _propagateToZkSync(); } /// @dev Make a call to the zkSync contract with the same calldata. /// Note: If the batch is reverted, it needs to be committed first before the execution. /// So it's safe to not override the committed batches. function revertBatches(uint256) external onlyValidator { _propagateToZkSync(); } /// @dev Make a call to the zkSync contract with the same calldata. /// Note: We don't track the time when batches are proven, since all information about /// the batch is known on the commit stage and the proved is not finalized (may be reverted). function proveBatches( StoredBatchInfo calldata, StoredBatchInfo[] calldata, ProofInput calldata ) external onlyValidator { _propagateToZkSync(); } /// @dev Check that batches were committed at least X time ago and /// make a call to the zkSync contract with the same calldata. function executeBatches(StoredBatchInfo[] calldata _newBatchesData) external onlyValidator { uint256 delay = executionDelay; // uint32 unchecked { for (uint256 i = 0; i < _newBatchesData.length; ++i) { uint256 commitBatchTimestamp = committedBatchTimestamp.get(_newBatchesData[i].batchNumber); // Note: if the `commitBatchTimestamp` is zero, that means either: // * The batch was committed, but not through this contract. // * The batch wasn't committed at all, so execution will fail in the zkSync contract. // We allow executing such batches. require(block.timestamp >= commitBatchTimestamp + delay, "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.20; // SPDX-License-Identifier: UNLICENSED interface IBase { function getName() external view returns (string memory); }
pragma solidity 0.8.20; // SPDX-License-Identifier: MIT import {IBase} from "./IBase.sol"; /// @dev Enum used by L2 System Contracts to differentiate logs. enum SystemLogKey { L2_TO_L1_LOGS_TREE_ROOT_KEY, TOTAL_L2_TO_L1_PUBDATA_KEY, STATE_DIFF_HASH_KEY, PACKED_BATCH_AND_L2_BLOCK_TIMESTAMP_KEY, PREV_BATCH_HASH_KEY, CHAINED_PRIORITY_TXN_HASH_KEY, NUMBER_OF_LAYER_1_TXS_KEY, EXPECTED_SYSTEM_CONTRACT_UPGRADE_TX_HASH_KEY } /// @dev Offset used to pull Address From Log. Equal to 4 (bytes for isService) uint256 constant L2_LOG_ADDRESS_OFFSET = 4; /// @dev Offset used to pull Key From Log. Equal to 4 (bytes for isService) + 20 (bytes for address) uint256 constant L2_LOG_KEY_OFFSET = 24; /// @dev Offset used to pull Value From Log. Equal to 4 (bytes for isService) + 20 (bytes for address) + 32 (bytes for key) uint256 constant L2_LOG_VALUE_OFFSET = 56; interface IExecutor is IBase { /// @notice Rollup batch stored data /// @param batchNumber Rollup batch number /// @param batchHash Hash of L2 batch /// @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 batch /// @param l2LogsTreeRoot Root hash of tree that contains L2 -> L1 messages from this batch /// @param timestamp Rollup batch timestamp, have the same format as Ethereum batch constant /// @param commitment Verified input for the zkSync circuit struct StoredBatchInfo { uint64 batchNumber; bytes32 batchHash; uint64 indexRepeatedStorageChanges; uint256 numberOfLayer1Txs; bytes32 priorityOperationsHash; bytes32 l2LogsTreeRoot; uint256 timestamp; bytes32 commitment; } /// @notice Data needed to commit new batch /// @param batchNumber Number of the committed batch /// @param timestamp Unix timestamp denoting the start of the batch 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 priorityOperationsHash Hash of all priority operations from this batch /// @param bootloaderHeapInitialContentsHash Hash of the initial contents of the bootloader heap. In practice it serves as the commitment to the transactions in the batch. /// @param eventsQueueStateHash Hash of the events queue state. In practice it serves as the commitment to the events in the batch. /// @param systemLogs concatenation of all L2 -> L1 system logs in the batch /// @param totalL2ToL1Pubdata Total pubdata committed to as part of bootloader run. Contents are: l2Tol1Logs <> l2Tol1Messages <> publishedBytecodes <> stateDiffs struct CommitBatchInfo { uint64 batchNumber; uint64 timestamp; uint64 indexRepeatedStorageChanges; bytes32 newStateRoot; uint256 numberOfLayer1Txs; bytes32 priorityOperationsHash; bytes32 bootloaderHeapInitialContentsHash; bytes32 eventsQueueStateHash; bytes systemLogs; bytes totalL2ToL1Pubdata; } /// @notice Recursive proof input data (individual commitments are constructed onchain) struct ProofInput { uint256[] recursiveAggregationInput; uint256[] serializedProof; } function commitBatches( StoredBatchInfo calldata _lastCommittedBatchData, CommitBatchInfo[] calldata _newBatchesData ) external; function proveBatches( StoredBatchInfo calldata _prevBatch, StoredBatchInfo[] calldata _committedBatches, ProofInput calldata _proof ) external; function executeBatches(StoredBatchInfo[] calldata _batchesData) external; function revertBatches(uint256 _newLastBatch) external; /// @notice Event emitted when a batch is committed /// @dev It has the name "BlockCommit" and not "BatchCommit" due to backward compatibility considerations event BlockCommit(uint256 indexed batchNumber, bytes32 indexed batchHash, bytes32 indexed commitment); /// @notice Event emitted when batches are verified /// @dev It has the name "BlocksVerification" and not "BatchesVerification" due to backward compatibility considerations event BlocksVerification(uint256 indexed previousLastVerifiedBatch, uint256 indexed currentLastVerifiedBatch); /// @notice Event emitted when a batch is executed /// @dev It has the name "BlockExecution" and not "BatchExecution" due to backward compatibility considerations event BlockExecution(uint256 indexed batchNumber, bytes32 indexed batchHash, bytes32 indexed commitment); /// @notice Event emitted when batches are reverted /// @dev It has the name "BlocksRevert" and not "BatchesRevert" due to backward compatibility considerations event BlocksRevert(uint256 totalBatchesCommitted, uint256 totalBatchesVerified, uint256 totalBatchesExecuted); }
pragma solidity 0.8.20; // SPDX-License-Identifier: MIT /// @notice Library for storage of packed unsigned integers. /// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibMap.sol) library LibMap { /// @dev A uint32 map in storage. struct Uint32Map { mapping(uint256 => uint256) map; } /// @dev Retrieves the uint32 value at a specific index from the Uint32Map. /// @param _map The Uint32Map instance containing the packed uint32 values. /// @param _index The index of the uint32 value to retrieve. /// @return result The uint32 value at the specified index. function get(Uint32Map storage _map, uint256 _index) internal view returns (uint32 result) { unchecked { // Each storage slot can store 256 bits of data. // As uint32 is 32 bits long, 8 uint32s can be packed into one storage slot. // Hence, `_index / 8` is done to find the storage slot that contains the required uint32. uint256 mapValue = _map.map[_index / 8]; // First three bits of the original `_index` denotes the position of the uint32 in that slot. // So, '(_index & 7) * 32' is done to find the bit position of the uint32 in that storage slot. uint256 bitOffset = (_index & 7) * 32; // Shift the bits to the right and retrieve the uint32 value. result = uint32(mapValue >> bitOffset); } } /// @dev Updates the uint32 value at `_index` in `map`. /// @param _map The Uint32Map instance containing the packed uint32 values. /// @param _index The index of the uint32 value to retrieve. /// @param _value The new value at the specified index. function set(Uint32Map storage _map, uint256 _index, uint32 _value) internal { unchecked { // Each storage slot can store 256 bits of data. // As uint32 is 32 bits long, 8 uint32s can be packed into one storage slot. // Hence, `_index / 8` is done to find the storage slot that contains the required uint32. uint256 mapIndex = _index / 8; uint256 mapValue = _map.map[mapIndex]; // First three bits of the original `_index` denotes the position of the uint32 in that slot. // So, '(_index & 7) * 32' is done to find the bit position of the uint32 in that storage slot. uint256 bitOffset = (_index & 7) * 32; // XORing a value A with B, and then with A again, gives the original value B. // We will use this property to update the uint32 value in the slot. // Shift the bits to the right and retrieve the uint32 value. uint32 oldValue = uint32(mapValue >> bitOffset); // Calculate the XOR of the new value and the existing value. uint256 newValueXorOldValue = uint256(oldValue ^ _value); // Finally, we XOR the slot with the XOR of the new value and the existing value, // shifted to its proper position. The XOR operation will effectively replace the old value with the new value. _map.map[mapIndex] = (newValueXorOldValue << bitOffset) ^ mapValue; } } }
{ "optimizer": { "enabled": true, "runs": 9999999 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"address","name":"_zkSyncContract","type":"address"},{"internalType":"uint32","name":"_executionDelay","type":"uint32"},{"internalType":"address","name":"_validator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"batchNumber","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"batchHash","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"commitment","type":"bytes32"}],"name":"BlockCommit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"batchNumber","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"batchHash","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"commitment","type":"bytes32"}],"name":"BlockExecution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalBatchesCommitted","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBatchesVerified","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBatchesExecuted","type":"uint256"}],"name":"BlocksRevert","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"previousLastVerifiedBatch","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"currentLastVerifiedBatch","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":"batchNumber","type":"uint64"},{"internalType":"bytes32","name":"batchHash","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.StoredBatchInfo","name":"","type":"tuple"},{"components":[{"internalType":"uint64","name":"batchNumber","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":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"bootloaderHeapInitialContentsHash","type":"bytes32"},{"internalType":"bytes32","name":"eventsQueueStateHash","type":"bytes32"},{"internalType":"bytes","name":"systemLogs","type":"bytes"},{"internalType":"bytes","name":"totalL2ToL1Pubdata","type":"bytes"}],"internalType":"struct IExecutor.CommitBatchInfo[]","name":"_newBatchesData","type":"tuple[]"}],"name":"commitBatches","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"batchNumber","type":"uint64"},{"internalType":"bytes32","name":"batchHash","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.StoredBatchInfo[]","name":"_newBatchesData","type":"tuple[]"}],"name":"executeBatches","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executionDelay","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_l2BatchNumber","type":"uint256"}],"name":"getCommittedBatchTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getName","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"batchNumber","type":"uint64"},{"internalType":"bytes32","name":"batchHash","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.StoredBatchInfo","name":"","type":"tuple"},{"components":[{"internalType":"uint64","name":"batchNumber","type":"uint64"},{"internalType":"bytes32","name":"batchHash","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.StoredBatchInfo[]","name":"","type":"tuple[]"},{"components":[{"internalType":"uint256[]","name":"recursiveAggregationInput","type":"uint256[]"},{"internalType":"uint256[]","name":"serializedProof","type":"uint256[]"}],"internalType":"struct IExecutor.ProofInput","name":"","type":"tuple"}],"name":"proveBatches","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"revertBatches","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_executionDelay","type":"uint32"}],"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
60a06040523480156200001157600080fd5b5060405162000fd938038062000fd983398101604081905262000034916200011d565b6200003f3362000092565b6200004a8462000092565b6001600160a01b0392831660805260038054919093166001600160a01b031963ffffffff909316600160a01b02929092166001600160c01b0319909116171790555062000184565b600180546001600160a01b0319169055620000ad81620000b0565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200011857600080fd5b919050565b600080600080608085870312156200013457600080fd5b6200013f8562000100565b93506200014f6020860162000100565b9250604085015163ffffffff811681146200016957600080fd5b9150620001796060860162000100565b905092959194509250565b608051610e32620001a7600039600081816102ab01526109e40152610e326000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638b25798911610097578063cc7086fb11610066578063cc7086fb146102a6578063e30c3978146102cd578063f2fde38b146102eb578063f34d1868146102fe57600080fd5b80638b257989146102255780638da5cb5b1461026257806397c09d3414610280578063c3d93e7c1461029357600080fd5b8063701f58c5116100d3578063701f58c5146101ef578063715018a61461020257806379ba50971461020a5780637f61885c1461021257600080fd5b80630aa56702146101055780631327d3d81461014c57806317d7de7c146101615780633a5381b5146101aa575b600080fd5b610139610113366004610aca565b600881046000908152600260209081526040909120546007909216021c63ffffffff1690565b6040519081526020015b60405180910390f35b61015f61015a366004610ae3565b610311565b005b61019d6040518060400160405280601181526020017f56616c696461746f7254696d656c6f636b00000000000000000000000000000081525081565b6040516101439190610b20565b6003546101ca9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610143565b61015f6101fd366004610ba5565b61039f565b61015f6104ba565b61015f6104ce565b61015f610220366004610c7a565b610583565b60035461024d9074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610143565b60005473ffffffffffffffffffffffffffffffffffffffff166101ca565b61015f61028e366004610aca565b610612565b61015f6102a1366004610cfd565b61069b565b6101ca7f000000000000000000000000000000000000000000000000000000000000000081565b60015473ffffffffffffffffffffffffffffffffffffffff166101ca565b61015f6102f9366004610ae3565b610826565b61015f61030c366004610d3f565b6108d6565b610319610961565b6003805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f5dc8fe6c03695c172a921c8f8fa2fddfb0aa130603797700d865d07baf129eef910160405180910390a15050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f386800000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b4260005b828110156104ab576104a384848381811061044657610446610d65565b90506020028101906104589190610d94565b610466906020810190610dd2565b600867ffffffffffffffff82160460009081526002602090815260409091208054600790931690910282811c861863ffffffff16901b9091189055565b600101610429565b50506104b56109e2565b505050565b6104c2610961565b6104cc6000610a29565b565b600154339073ffffffffffffffffffffffffffffffffffffffff168114610577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e65720000000000000000000000000000000000000000000000606482015260840161041c565b61058081610a29565b50565b60035473ffffffffffffffffffffffffffffffffffffffff163314610604576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3868000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b61060c6109e2565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3868000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b6105806109e2565b60035473ffffffffffffffffffffffffffffffffffffffff16331461071c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3868000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b60035474010000000000000000000000000000000000000000900463ffffffff1660005b8281101561081d5760006107a085858481811061075f5761075f610d65565b610776926020610100909202019081019150610dd2565b600867ffffffffffffffff8216046000908152600260209081526040909120546007909216021c90565b63ffffffff169050828101421015610814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3563000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b50600101610740565b506104b56109e2565b61082e610961565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561089160005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6108de610961565b600380547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527fd32d6d626bb9c7077c559fc3b4e5ce71ef14609d7d216d030ee63dcf2422c2c49060200160405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041c565b7f0000000000000000000000000000000000000000000000000000000000000000366000803760008036600080855af13d806000803e818015610a2457816000f35b816000fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610580816000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610adc57600080fd5b5035919050565b600060208284031215610af557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610b1957600080fd5b9392505050565b600060208083528351808285015260005b81811015610b4d57858101830151858201604001528201610b31565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b60006101008284031215610b9f57600080fd5b50919050565b60008060006101208486031215610bbb57600080fd5b610bc58585610b8c565b925061010084013567ffffffffffffffff80821115610be357600080fd5b818601915086601f830112610bf757600080fd5b813581811115610c0657600080fd5b8760208260051b8501011115610c1b57600080fd5b6020830194508093505050509250925092565b60008083601f840112610c4057600080fd5b50813567ffffffffffffffff811115610c5857600080fd5b6020830191508360208260081b8501011115610c7357600080fd5b9250929050565b6000806000806101408587031215610c9157600080fd5b610c9b8686610b8c565b935061010085013567ffffffffffffffff80821115610cb957600080fd5b610cc588838901610c2e565b9095509350610120870135915080821115610cdf57600080fd5b50850160408188031215610cf257600080fd5b939692955090935050565b60008060208385031215610d1057600080fd5b823567ffffffffffffffff811115610d2757600080fd5b610d3385828601610c2e565b90969095509350505050565b600060208284031215610d5157600080fd5b813563ffffffff81168114610b1957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112610dc857600080fd5b9190910192915050565b600060208284031215610de457600080fd5b813567ffffffffffffffff81168114610b1957600080fdfea2646970667358221220593e89c02586c873241948cdc9c61565a5e25607ca9150e98d3bc87b8d714afc64736f6c634300081400330000000000000000000000004e4943346848c4867f81dfb37c4ca9c5715a782800000000000000000000000032400084c286cf3e17e7b677ea9583e60a00032400000000000000000000000000000000000000000000000000000000000127500000000000000000000000003527439923a63f8c13cf72b8fe80a77f6e572092
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101005760003560e01c80638b25798911610097578063cc7086fb11610066578063cc7086fb146102a6578063e30c3978146102cd578063f2fde38b146102eb578063f34d1868146102fe57600080fd5b80638b257989146102255780638da5cb5b1461026257806397c09d3414610280578063c3d93e7c1461029357600080fd5b8063701f58c5116100d3578063701f58c5146101ef578063715018a61461020257806379ba50971461020a5780637f61885c1461021257600080fd5b80630aa56702146101055780631327d3d81461014c57806317d7de7c146101615780633a5381b5146101aa575b600080fd5b610139610113366004610aca565b600881046000908152600260209081526040909120546007909216021c63ffffffff1690565b6040519081526020015b60405180910390f35b61015f61015a366004610ae3565b610311565b005b61019d6040518060400160405280601181526020017f56616c696461746f7254696d656c6f636b00000000000000000000000000000081525081565b6040516101439190610b20565b6003546101ca9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610143565b61015f6101fd366004610ba5565b61039f565b61015f6104ba565b61015f6104ce565b61015f610220366004610c7a565b610583565b60035461024d9074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610143565b60005473ffffffffffffffffffffffffffffffffffffffff166101ca565b61015f61028e366004610aca565b610612565b61015f6102a1366004610cfd565b61069b565b6101ca7f00000000000000000000000032400084c286cf3e17e7b677ea9583e60a00032481565b60015473ffffffffffffffffffffffffffffffffffffffff166101ca565b61015f6102f9366004610ae3565b610826565b61015f61030c366004610d3f565b6108d6565b610319610961565b6003805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f5dc8fe6c03695c172a921c8f8fa2fddfb0aa130603797700d865d07baf129eef910160405180910390a15050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f386800000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b4260005b828110156104ab576104a384848381811061044657610446610d65565b90506020028101906104589190610d94565b610466906020810190610dd2565b600867ffffffffffffffff82160460009081526002602090815260409091208054600790931690910282811c861863ffffffff16901b9091189055565b600101610429565b50506104b56109e2565b505050565b6104c2610961565b6104cc6000610a29565b565b600154339073ffffffffffffffffffffffffffffffffffffffff168114610577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e65720000000000000000000000000000000000000000000000606482015260840161041c565b61058081610a29565b50565b60035473ffffffffffffffffffffffffffffffffffffffff163314610604576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3868000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b61060c6109e2565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3868000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b6105806109e2565b60035473ffffffffffffffffffffffffffffffffffffffff16331461071c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3868000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b60035474010000000000000000000000000000000000000000900463ffffffff1660005b8281101561081d5760006107a085858481811061075f5761075f610d65565b610776926020610100909202019081019150610dd2565b600867ffffffffffffffff8216046000908152600260209081526040909120546007909216021c90565b63ffffffff169050828101421015610814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3563000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b50600101610740565b506104b56109e2565b61082e610961565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561089160005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6108de610961565b600380547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527fd32d6d626bb9c7077c559fc3b4e5ce71ef14609d7d216d030ee63dcf2422c2c49060200160405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041c565b7f00000000000000000000000032400084c286cf3e17e7b677ea9583e60a000324366000803760008036600080855af13d806000803e818015610a2457816000f35b816000fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610580816000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610adc57600080fd5b5035919050565b600060208284031215610af557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610b1957600080fd5b9392505050565b600060208083528351808285015260005b81811015610b4d57858101830151858201604001528201610b31565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b60006101008284031215610b9f57600080fd5b50919050565b60008060006101208486031215610bbb57600080fd5b610bc58585610b8c565b925061010084013567ffffffffffffffff80821115610be357600080fd5b818601915086601f830112610bf757600080fd5b813581811115610c0657600080fd5b8760208260051b8501011115610c1b57600080fd5b6020830194508093505050509250925092565b60008083601f840112610c4057600080fd5b50813567ffffffffffffffff811115610c5857600080fd5b6020830191508360208260081b8501011115610c7357600080fd5b9250929050565b6000806000806101408587031215610c9157600080fd5b610c9b8686610b8c565b935061010085013567ffffffffffffffff80821115610cb957600080fd5b610cc588838901610c2e565b9095509350610120870135915080821115610cdf57600080fd5b50850160408188031215610cf257600080fd5b939692955090935050565b60008060208385031215610d1057600080fd5b823567ffffffffffffffff811115610d2757600080fd5b610d3385828601610c2e565b90969095509350505050565b600060208284031215610d5157600080fd5b813563ffffffff81168114610b1957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112610dc857600080fd5b9190910192915050565b600060208284031215610de457600080fd5b813567ffffffffffffffff81168114610b1957600080fdfea2646970667358221220593e89c02586c873241948cdc9c61565a5e25607ca9150e98d3bc87b8d714afc64736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004e4943346848c4867f81dfb37c4ca9c5715a782800000000000000000000000032400084c286cf3e17e7b677ea9583e60a00032400000000000000000000000000000000000000000000000000000000000127500000000000000000000000003527439923a63f8c13cf72b8fe80a77f6e572092
-----Decoded View---------------
Arg [0] : _initialOwner (address): 0x4e4943346848c4867F81dFb37c4cA9C5715A7828
Arg [1] : _zkSyncContract (address): 0x32400084C286CF3E17e7B677ea9583e60a000324
Arg [2] : _executionDelay (uint32): 75600
Arg [3] : _validator (address): 0x3527439923a63F8C13CF72b8Fe80a77f6e572092
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000004e4943346848c4867f81dfb37c4ca9c5715a7828
Arg [1] : 00000000000000000000000032400084c286cf3e17e7b677ea9583e60a000324
Arg [2] : 0000000000000000000000000000000000000000000000000000000000012750
Arg [3] : 0000000000000000000000003527439923a63f8c13cf72b8fe80a77f6e572092
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ZKSYNC | 100.00% | $2,065.19 | 0.00905 | $18.69 |
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.