More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 50,319 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Commit Batches S... | 20032966 | 255 days ago | IN | 0 ETH | 0.00218741 | ||||
Commit Batches S... | 20032952 | 255 days ago | IN | 0 ETH | 0.00084023 | ||||
Commit Batches S... | 20032948 | 255 days ago | IN | 0 ETH | 0.00136358 | ||||
Commit Batches S... | 20032939 | 255 days ago | IN | 0 ETH | 0.00099285 | ||||
Commit Batches S... | 20032930 | 255 days ago | IN | 0 ETH | 0.00082343 | ||||
Commit Batches S... | 20032926 | 255 days ago | IN | 0 ETH | 0.0008576 | ||||
Commit Batches S... | 20032920 | 255 days ago | IN | 0 ETH | 0.00078785 | ||||
Commit Batches S... | 20032917 | 255 days ago | IN | 0 ETH | 0.00082298 | ||||
Commit Batches S... | 20032914 | 255 days ago | IN | 0 ETH | 0.00082001 | ||||
Commit Batches S... | 20032909 | 255 days ago | IN | 0 ETH | 0.00078297 | ||||
Commit Batches S... | 20032909 | 255 days ago | IN | 0 ETH | 0.00082331 | ||||
Commit Batches S... | 20032905 | 255 days ago | IN | 0 ETH | 0.00082362 | ||||
Commit Batches S... | 20032899 | 255 days ago | IN | 0 ETH | 0.00146191 | ||||
Execute Batches | 20032562 | 255 days ago | IN | 0 ETH | 0.01255973 | ||||
Prove Batches | 20032543 | 255 days ago | IN | 0 ETH | 0.00780884 | ||||
Prove Batches | 20032543 | 255 days ago | IN | 0 ETH | 0.00780843 | ||||
Prove Batches | 20032531 | 255 days ago | IN | 0 ETH | 0.00728022 | ||||
Prove Batches | 20032531 | 255 days ago | IN | 0 ETH | 0.00728003 | ||||
Prove Batches | 20032531 | 255 days ago | IN | 0 ETH | 0.0072806 | ||||
Prove Batches | 20032531 | 255 days ago | IN | 0 ETH | 0.00728003 | ||||
Prove Batches | 20032531 | 255 days ago | IN | 0 ETH | 0.00727965 | ||||
Prove Batches | 20032531 | 255 days ago | IN | 0 ETH | 0.00727946 | ||||
Prove Batches | 20032531 | 255 days ago | IN | 0 ETH | 0.0072806 | ||||
Prove Batches | 20032531 | 255 days ago | IN | 0 ETH | 0.00728041 | ||||
Prove Batches | 20032472 | 255 days ago | IN | 0 ETH | 0.00698212 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ValidatorTimelock
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity 0.8.20; // SPDX-License-Identifier: MIT import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; import {LibMap} from "./libraries/LibMap.sol"; import {IExecutor} from "./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 A new validator has been added. event ValidatorAdded(address _addedValidator); /// @notice A validator has been removed. event ValidatorRemoved(address _removedValidator); /// @notice Error for when an address is already a validator. error AddressAlreadyValidator(); /// @notice Error for when an address is not a validator. error ValidatorDoesNotExist(); /// @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 delay between committing and executing batches.ValidatorTimelock uint32 public executionDelay; /// @dev Mapping denoting if an address is also a validator mapping(address => bool) public validators; constructor(address _initialOwner, address _zkSyncContract, uint32 _executionDelay, address[] memory _validators) { _transferOwnership(_initialOwner); zkSyncContract = _zkSyncContract; executionDelay = _executionDelay; for (uint256 i = 0; i < _validators.length; i++) { validators[_validators[i]] = true; } } /// @dev Sets an address as a validator. function addValidator(address _newValidator) external onlyOwner { if (validators[_newValidator]) { revert AddressAlreadyValidator(); } validators[_newValidator] = true; emit ValidatorAdded(_newValidator); } /// @dev Removes an address as a validator. function removeValidator(address _validator) external onlyOwner { if (!validators[_validator]) { revert ValidatorDoesNotExist(); } validators[_validator] = false; emit ValidatorRemoved(_validator); } /// @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(validators[msg.sender] == true, "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.9.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() public virtual { address sender = _msgSender(); require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner"); _transferOwnership(sender); } }
pragma solidity 0.8.20; // SPDX-License-Identifier: MIT /// @notice Library for storage of packed unsigned integers. /// @author Matter Labs /// @dev This library is an adaptation of the corresponding Solady library (https://github.com/vectorized/solady/blob/main/src/utils/LibMap.sol) /// @custom:security-contact [email protected] library LibMap { /// @dev A uint32 map in storage. struct Uint32Map { mapping(uint256 packedIndex => uint256 eightPackedValues) 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 set. /// @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; } } }
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, BLOB_ONE_HASH_KEY, BLOB_TWO_HASH_KEY, EXPECTED_SYSTEM_CONTRACT_UPGRADE_TX_HASH_KEY } /// @dev Enum used to determine the source of pubdata. At first we will support calldata and blobs but this can be extended. enum PubdataSource { Calldata, Blob } struct LogProcessingOutput { uint256 numberOfLayer1Txs; bytes32 chainedPriorityTxsHash; bytes32 previousBatchHash; bytes32 pubdataHash; bytes32 stateDiffHash; bytes32 l2LogsTreeRoot; uint256 packedBatchAndL2BlockTimestamp; bytes32 blob1Hash; bytes32 blob2Hash; } /// @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; /// @dev BLS Modulus value defined in EIP-4844 and the magic value returned from a successful call to the /// point evaluation precompile uint256 constant BLS_MODULUS = 52435875175126190479447740508185965837690552500527637822603658699938581184513; /// @dev Packed pubdata commitments. /// @dev Format: list of: opening point (16 bytes) || claimed value (32 bytes) || commitment (48 bytes) || proof (48 bytes)) = 144 bytes uint256 constant PUBDATA_COMMITMENT_SIZE = 144; /// @dev Offset in pubdata commitment of blobs for claimed value uint256 constant PUBDATA_COMMITMENT_CLAIMED_VALUE_OFFSET = 16; /// @dev Offset in pubdata commitment of blobs for kzg commitment uint256 constant PUBDATA_COMMITMENT_COMMITMENT_OFFSET = 48; /// @dev Max number of blobs currently supported uint256 constant MAX_NUMBER_OF_BLOBS = 2; /// @title The interface of the zkSync Executor contract capable of processing events emitted in the zkSync protocol. /// @author Matter Labs /// @custom:security-contact [email protected] 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 pubdataCommitments Packed pubdata commitments/data. /// @dev pubdataCommitments format: This will always start with a 1 byte pubdataSource flag. Current allowed values are 0 (calldata) or 1 (blobs) /// kzg: list of: opening point (16 bytes) || claimed value (32 bytes) || commitment (48 bytes) || proof (48 bytes) = 144 bytes /// calldata: pubdataCommitments.length - 1 - 32 bytes of pubdata /// and 32 bytes appended to serve as the blob commitment part for the aux output part of the batch commitment /// @dev For 2 blobs we will be sending 288 bytes of calldata instead of the full amount for pubdata. /// @dev When using calldata, we only need to send one blob commitment since the max number of bytes in calldata fits in a single blob and we can pull the /// linear hash from the system logs struct CommitBatchInfo { uint64 batchNumber; uint64 timestamp; uint64 indexRepeatedStorageChanges; bytes32 newStateRoot; uint256 numberOfLayer1Txs; bytes32 priorityOperationsHash; bytes32 bootloaderHeapInitialContentsHash; bytes32 eventsQueueStateHash; bytes systemLogs; bytes pubdataCommitments; } /// @notice Recursive proof input data (individual commitments are constructed onchain) struct ProofInput { uint256[] recursiveAggregationInput; uint256[] serializedProof; } /// @notice Function called by the operator to commit new batches. It is responsible for: /// - Verifying the correctness of their timestamps. /// - Processing their L2->L1 logs. /// - Storing batch commitments. /// @param _lastCommittedBatchData Stored data of the last committed batch. /// @param _newBatchesData Data of the new batches to be committed. function commitBatches( StoredBatchInfo calldata _lastCommittedBatchData, CommitBatchInfo[] calldata _newBatchesData ) external; /// @notice Batches commitment verification. /// @dev Only verifies batch commitments without any other processing. /// @param _prevBatch Stored data of the last committed batch. /// @param _committedBatches Stored data of the committed batches. /// @param _proof The zero knowledge proof. function proveBatches( StoredBatchInfo calldata _prevBatch, StoredBatchInfo[] calldata _committedBatches, ProofInput calldata _proof ) external; /// @notice The function called by the operator to finalize (execute) batches. It is responsible for: /// - Processing all pending operations (commpleting priority requests). /// - Finalizing this batch (i.e. allowing to withdraw funds from the system) /// @param _batchesData Data of the batches to be executed. function executeBatches(StoredBatchInfo[] calldata _batchesData) external; /// @notice Reverts unexecuted batches /// @param _newLastBatch batch number after which batches should be reverted /// NOTE: Doesn't delete the stored data about batches, but only decreases /// counters that are responsible for the number of batches function revertBatches(uint256 _newLastBatch) external; /// @notice Event emitted when a batch is committed /// @param batchNumber Number of the batch committed /// @param batchHash Hash of the L2 batch /// @param commitment Calculated input for the zkSync circuit /// @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 /// @param previousLastVerifiedBatch Batch number of the previous last verified batch /// @param currentLastVerifiedBatch Batch number of the current last verified batch /// @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 /// @param batchNumber Number of the batch executed /// @param batchHash Hash of the L2 batch /// @param commitment Verified input for the zkSync circuit /// @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 /// @param totalBatchesCommitted Total number of committed batches after the revert /// @param totalBatchesVerified Total number of verified batches after the revert /// @param totalBatchesExecuted Total number of executed batches /// @dev It has the name "BlocksRevert" and not "BatchesRevert" due to backward compatibility considerations event BlocksRevert(uint256 totalBatchesCommitted, uint256 totalBatchesVerified, uint256 totalBatchesExecuted); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.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. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { 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); } }
pragma solidity 0.8.20; // SPDX-License-Identifier: UNLICENSED /// @title The interface of the zkSync contract, responsible for the main zkSync logic. /// @author Matter Labs /// @custom:security-contact [email protected] interface IBase { /// @return Returns facet name. function getName() external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.4) (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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
{ "remappings": [ "@ensdomains/=node_modules/@ensdomains/", "@openzeppelin/=node_modules/@openzeppelin/", "ds-test/=lib/forge-std/lib/ds-test/src/", "eth-gas-reporter/=node_modules/eth-gas-reporter/", "forge-std/=lib/forge-std/src/", "hardhat/=node_modules/hardhat/", "solpp/=cache/solpp-generated-contracts/", "murky/=lib/murky/src/", "openzeppelin-contracts/=lib/murky/lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "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":"uint32","name":"_executionDelay","type":"uint32"},{"internalType":"address[]","name":"_validators","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AddressAlreadyValidator","type":"error"},{"inputs":[],"name":"ValidatorDoesNotExist","type":"error"},{"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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addedValidator","type":"address"}],"name":"ValidatorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_removedValidator","type":"address"}],"name":"ValidatorRemoved","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newValidator","type":"address"}],"name":"addValidator","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":"pubdataCommitments","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":[{"internalType":"address","name":"_validator","type":"address"}],"name":"removeValidator","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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"validators","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zkSyncContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b5060405162000ed738038062000ed7833981016040819052620000349162000187565b6200003f33620000e6565b6200004a84620000e6565b6001600160a01b0383166080526003805463ffffffff191663ffffffff841617905560005b8151811015620000db576001600460008484815181106200009457620000946200029c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580620000d281620002b2565b9150506200006f565b5050505050620002da565b600180546001600160a01b0319169055620001018162000104565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200016c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200019e57600080fd5b620001a98562000154565b93506020620001ba81870162000154565b9350604086015163ffffffff81168114620001d457600080fd5b60608701519093506001600160401b0380821115620001f257600080fd5b818801915088601f8301126200020757600080fd5b8151818111156200021c576200021c62000171565b8060051b604051601f19603f8301168101818110858211171562000244576200024462000171565b60405291825284820192508381018501918b8311156200026357600080fd5b938501935b828510156200028c576200027c8562000154565b8452938501939285019262000268565b989b979a50959850505050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201620002d357634e487b7160e01b600052601160045260246000fd5b5060010190565b608051610bda620002fd60003960008181610267015261080e0152610bda6000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638b257989116100a2578063cc7086fb11610071578063cc7086fb14610262578063e30c397814610289578063f2fde38b1461029a578063f34d1868146102ad578063fa52c7d8146102c057600080fd5b80638b257989146101f25780638da5cb5b1461021757806397c09d341461023c578063c3d93e7c1461024f57600080fd5b8063701f58c5116100de578063701f58c5146101bc578063715018a6146101cf57806379ba5097146101d75780637f61885c146101df57600080fd5b80630aa567021461011057806317d7de7c1461015757806340a141ff146101945780634d238c8e146101a9575b600080fd5b61014461011e3660046108b7565b600881046000908152600260209081526040909120546007909216021c63ffffffff1690565b6040519081526020015b60405180910390f35b6101876040518060400160405280601181526020017056616c696461746f7254696d656c6f636b60781b81525081565b60405161014e91906108d0565b6101a76101a236600461091e565b6102f3565b005b6101a76101b736600461091e565b61038c565b6101a76101ca366004610967565b610422565b6101a76104f4565b6101a7610508565b6101a76101ed366004610a3c565b610582565b6003546102029063ffffffff1681565b60405163ffffffff909116815260200161014e565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161014e565b6101a761024a3660046108b7565b6105c4565b6101a761025d366004610abf565b610600565b6102247f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b0316610224565b6101a76102a836600461091e565b6106f1565b6101a76102bb366004610b01565b610762565b6102e36102ce36600461091e565b60046020526000908152604090205460ff1681565b604051901515815260200161014e565b6102fb6107b2565b6001600160a01b03811660009081526004602052604090205460ff16610334576040516372898ae960e11b815260040160405180910390fd5b6001600160a01b038116600081815260046020908152604091829020805460ff1916905590519182527fe1434e25d6611e0db941968fdc97811c982ac1602e951637d206f5fdda9dd8f191015b60405180910390a150565b6103946107b2565b6001600160a01b03811660009081526004602052604090205460ff16156103ce5760405163158d048360e01b815260040160405180910390fd5b6001600160a01b038116600081815260046020908152604091829020805460ff1916600117905590519182527fe366c1c0452ed8eec96861e9e54141ebff23c9ec89fe27b996b45f5ec38849879101610381565b3360009081526004602052604090205460ff16151560011461045f5760405162461bcd60e51b815260040161045690610b27565b60405180910390fd5b4260005b828110156104e5576104dd84848381811061048057610480610b43565b90506020028101906104929190610b59565b6104a0906020810190610b7a565b600867ffffffffffffffff82160460009081526002602090815260409091208054600790931690910282811c861863ffffffff16901b9091189055565b600101610463565b50506104ef61080c565b505050565b6104fc6107b2565b6105066000610853565b565b60015433906001600160a01b031681146105765760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610456565b61057f81610853565b50565b3360009081526004602052604090205460ff1615156001146105b65760405162461bcd60e51b815260040161045690610b27565b6105be61080c565b50505050565b3360009081526004602052604090205460ff1615156001146105f85760405162461bcd60e51b815260040161045690610b27565b61057f61080c565b3360009081526004602052604090205460ff1615156001146106345760405162461bcd60e51b815260040161045690610b27565b60035463ffffffff1660005b828110156106e85760006106a085858481811061065f5761065f610b43565b610676926020610100909202019081019150610b7a565b600867ffffffffffffffff8216046000908152600260209081526040909120546007909216021c90565b63ffffffff1690508281014210156106df5760405162461bcd60e51b8152602060048201526002602482015261356360f01b6044820152606401610456565b50600101610640565b506104ef61080c565b6106f96107b2565b600180546001600160a01b0383166001600160a01b0319909116811790915561072a6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61076a6107b2565b6003805463ffffffff191663ffffffff83169081179091556040519081527fd32d6d626bb9c7077c559fc3b4e5ce71ef14609d7d216d030ee63dcf2422c2c490602001610381565b6000546001600160a01b031633146105065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610456565b7f0000000000000000000000000000000000000000000000000000000000000000366000803760008036600080855af13d806000803e81801561084e57816000f35b816000fd5b600180546001600160a01b031916905561057f81600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108c957600080fd5b5035919050565b600060208083528351808285015260005b818110156108fd578581018301518582016040015282016108e1565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561093057600080fd5b81356001600160a01b038116811461094757600080fd5b9392505050565b6000610100828403121561096157600080fd5b50919050565b6000806000610120848603121561097d57600080fd5b610987858561094e565b925061010084013567ffffffffffffffff808211156109a557600080fd5b818601915086601f8301126109b957600080fd5b8135818111156109c857600080fd5b8760208260051b85010111156109dd57600080fd5b6020830194508093505050509250925092565b60008083601f840112610a0257600080fd5b50813567ffffffffffffffff811115610a1a57600080fd5b6020830191508360208260081b8501011115610a3557600080fd5b9250929050565b6000806000806101408587031215610a5357600080fd5b610a5d868661094e565b935061010085013567ffffffffffffffff80821115610a7b57600080fd5b610a87888389016109f0565b9095509350610120870135915080821115610aa157600080fd5b50850160408188031215610ab457600080fd5b939692955090935050565b60008060208385031215610ad257600080fd5b823567ffffffffffffffff811115610ae957600080fd5b610af5858286016109f0565b90969095509350505050565b600060208284031215610b1357600080fd5b813563ffffffff8116811461094757600080fd5b602080825260029082015261070d60f31b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e19833603018112610b7057600080fd5b9190910192915050565b600060208284031215610b8c57600080fd5b813567ffffffffffffffff8116811461094757600080fdfea26469706673582212200be64dccc285958acf2ccdf1a79e98b4dc71e3650beabccf9a79c9036179587564736f6c634300081400330000000000000000000000000b622a2061eaccae1c664ebc3e868b8438e03f6100000000000000000000000032400084c286cf3e17e7b677ea9583e60a0003240000000000000000000000000000000000000000000000000000000000012750000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020000000000000000000000003527439923a63f8c13cf72b8fe80a77f6e5720920000000000000000000000000d3250c3d5facb74ac15834096397a3ef790ec99
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80638b257989116100a2578063cc7086fb11610071578063cc7086fb14610262578063e30c397814610289578063f2fde38b1461029a578063f34d1868146102ad578063fa52c7d8146102c057600080fd5b80638b257989146101f25780638da5cb5b1461021757806397c09d341461023c578063c3d93e7c1461024f57600080fd5b8063701f58c5116100de578063701f58c5146101bc578063715018a6146101cf57806379ba5097146101d75780637f61885c146101df57600080fd5b80630aa567021461011057806317d7de7c1461015757806340a141ff146101945780634d238c8e146101a9575b600080fd5b61014461011e3660046108b7565b600881046000908152600260209081526040909120546007909216021c63ffffffff1690565b6040519081526020015b60405180910390f35b6101876040518060400160405280601181526020017056616c696461746f7254696d656c6f636b60781b81525081565b60405161014e91906108d0565b6101a76101a236600461091e565b6102f3565b005b6101a76101b736600461091e565b61038c565b6101a76101ca366004610967565b610422565b6101a76104f4565b6101a7610508565b6101a76101ed366004610a3c565b610582565b6003546102029063ffffffff1681565b60405163ffffffff909116815260200161014e565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161014e565b6101a761024a3660046108b7565b6105c4565b6101a761025d366004610abf565b610600565b6102247f00000000000000000000000032400084c286cf3e17e7b677ea9583e60a00032481565b6001546001600160a01b0316610224565b6101a76102a836600461091e565b6106f1565b6101a76102bb366004610b01565b610762565b6102e36102ce36600461091e565b60046020526000908152604090205460ff1681565b604051901515815260200161014e565b6102fb6107b2565b6001600160a01b03811660009081526004602052604090205460ff16610334576040516372898ae960e11b815260040160405180910390fd5b6001600160a01b038116600081815260046020908152604091829020805460ff1916905590519182527fe1434e25d6611e0db941968fdc97811c982ac1602e951637d206f5fdda9dd8f191015b60405180910390a150565b6103946107b2565b6001600160a01b03811660009081526004602052604090205460ff16156103ce5760405163158d048360e01b815260040160405180910390fd5b6001600160a01b038116600081815260046020908152604091829020805460ff1916600117905590519182527fe366c1c0452ed8eec96861e9e54141ebff23c9ec89fe27b996b45f5ec38849879101610381565b3360009081526004602052604090205460ff16151560011461045f5760405162461bcd60e51b815260040161045690610b27565b60405180910390fd5b4260005b828110156104e5576104dd84848381811061048057610480610b43565b90506020028101906104929190610b59565b6104a0906020810190610b7a565b600867ffffffffffffffff82160460009081526002602090815260409091208054600790931690910282811c861863ffffffff16901b9091189055565b600101610463565b50506104ef61080c565b505050565b6104fc6107b2565b6105066000610853565b565b60015433906001600160a01b031681146105765760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610456565b61057f81610853565b50565b3360009081526004602052604090205460ff1615156001146105b65760405162461bcd60e51b815260040161045690610b27565b6105be61080c565b50505050565b3360009081526004602052604090205460ff1615156001146105f85760405162461bcd60e51b815260040161045690610b27565b61057f61080c565b3360009081526004602052604090205460ff1615156001146106345760405162461bcd60e51b815260040161045690610b27565b60035463ffffffff1660005b828110156106e85760006106a085858481811061065f5761065f610b43565b610676926020610100909202019081019150610b7a565b600867ffffffffffffffff8216046000908152600260209081526040909120546007909216021c90565b63ffffffff1690508281014210156106df5760405162461bcd60e51b8152602060048201526002602482015261356360f01b6044820152606401610456565b50600101610640565b506104ef61080c565b6106f96107b2565b600180546001600160a01b0383166001600160a01b0319909116811790915561072a6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61076a6107b2565b6003805463ffffffff191663ffffffff83169081179091556040519081527fd32d6d626bb9c7077c559fc3b4e5ce71ef14609d7d216d030ee63dcf2422c2c490602001610381565b6000546001600160a01b031633146105065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610456565b7f00000000000000000000000032400084c286cf3e17e7b677ea9583e60a000324366000803760008036600080855af13d806000803e81801561084e57816000f35b816000fd5b600180546001600160a01b031916905561057f81600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108c957600080fd5b5035919050565b600060208083528351808285015260005b818110156108fd578581018301518582016040015282016108e1565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561093057600080fd5b81356001600160a01b038116811461094757600080fd5b9392505050565b6000610100828403121561096157600080fd5b50919050565b6000806000610120848603121561097d57600080fd5b610987858561094e565b925061010084013567ffffffffffffffff808211156109a557600080fd5b818601915086601f8301126109b957600080fd5b8135818111156109c857600080fd5b8760208260051b85010111156109dd57600080fd5b6020830194508093505050509250925092565b60008083601f840112610a0257600080fd5b50813567ffffffffffffffff811115610a1a57600080fd5b6020830191508360208260081b8501011115610a3557600080fd5b9250929050565b6000806000806101408587031215610a5357600080fd5b610a5d868661094e565b935061010085013567ffffffffffffffff80821115610a7b57600080fd5b610a87888389016109f0565b9095509350610120870135915080821115610aa157600080fd5b50850160408188031215610ab457600080fd5b939692955090935050565b60008060208385031215610ad257600080fd5b823567ffffffffffffffff811115610ae957600080fd5b610af5858286016109f0565b90969095509350505050565b600060208284031215610b1357600080fd5b813563ffffffff8116811461094757600080fd5b602080825260029082015261070d60f31b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e19833603018112610b7057600080fd5b9190910192915050565b600060208284031215610b8c57600080fd5b813567ffffffffffffffff8116811461094757600080fdfea26469706673582212200be64dccc285958acf2ccdf1a79e98b4dc71e3650beabccf9a79c9036179587564736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000b622a2061eaccae1c664ebc3e868b8438e03f6100000000000000000000000032400084c286cf3e17e7b677ea9583e60a0003240000000000000000000000000000000000000000000000000000000000012750000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000020000000000000000000000003527439923a63f8c13cf72b8fe80a77f6e5720920000000000000000000000000d3250c3d5facb74ac15834096397a3ef790ec99
-----Decoded View---------------
Arg [0] : _initialOwner (address): 0x0b622A2061EaccAE1c664eBC3E868b8438e03F61
Arg [1] : _zkSyncContract (address): 0x32400084C286CF3E17e7B677ea9583e60a000324
Arg [2] : _executionDelay (uint32): 75600
Arg [3] : _validators (address[]): 0x3527439923a63F8C13CF72b8Fe80a77f6e572092,0x0D3250c3D5FAcb74Ac15834096397a3Ef790ec99
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000b622a2061eaccae1c664ebc3e868b8438e03f61
Arg [1] : 00000000000000000000000032400084c286cf3e17e7b677ea9583e60a000324
Arg [2] : 0000000000000000000000000000000000000000000000000000000000012750
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [5] : 0000000000000000000000003527439923a63f8c13cf72b8fe80a77f6e572092
Arg [6] : 0000000000000000000000000d3250c3d5facb74ac15834096397a3ef790ec99
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 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.