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 | 91 days ago | IN | 0 ETH | 0.00218741 | ||||
Commit Batches S... | 20032952 | 91 days ago | IN | 0 ETH | 0.00084023 | ||||
Commit Batches S... | 20032948 | 91 days ago | IN | 0 ETH | 0.00136358 | ||||
Commit Batches S... | 20032939 | 91 days ago | IN | 0 ETH | 0.00099285 | ||||
Commit Batches S... | 20032930 | 91 days ago | IN | 0 ETH | 0.00082343 | ||||
Commit Batches S... | 20032926 | 91 days ago | IN | 0 ETH | 0.0008576 | ||||
Commit Batches S... | 20032920 | 91 days ago | IN | 0 ETH | 0.00078785 | ||||
Commit Batches S... | 20032917 | 91 days ago | IN | 0 ETH | 0.00082298 | ||||
Commit Batches S... | 20032914 | 91 days ago | IN | 0 ETH | 0.00082001 | ||||
Commit Batches S... | 20032909 | 91 days ago | IN | 0 ETH | 0.00078297 | ||||
Commit Batches S... | 20032909 | 91 days ago | IN | 0 ETH | 0.00082331 | ||||
Commit Batches S... | 20032905 | 91 days ago | IN | 0 ETH | 0.00082362 | ||||
Commit Batches S... | 20032899 | 91 days ago | IN | 0 ETH | 0.00146191 | ||||
Execute Batches | 20032562 | 91 days ago | IN | 0 ETH | 0.01255973 | ||||
Prove Batches | 20032543 | 91 days ago | IN | 0 ETH | 0.00780884 | ||||
Prove Batches | 20032543 | 91 days ago | IN | 0 ETH | 0.00780843 | ||||
Prove Batches | 20032531 | 91 days ago | IN | 0 ETH | 0.00728022 | ||||
Prove Batches | 20032531 | 91 days ago | IN | 0 ETH | 0.00728003 | ||||
Prove Batches | 20032531 | 91 days ago | IN | 0 ETH | 0.0072806 | ||||
Prove Batches | 20032531 | 91 days ago | IN | 0 ETH | 0.00728003 | ||||
Prove Batches | 20032531 | 91 days ago | IN | 0 ETH | 0.00727965 | ||||
Prove Batches | 20032531 | 91 days ago | IN | 0 ETH | 0.00727946 | ||||
Prove Batches | 20032531 | 91 days ago | IN | 0 ETH | 0.0072806 | ||||
Prove Batches | 20032531 | 91 days ago | IN | 0 ETH | 0.00728041 | ||||
Prove Batches | 20032472 | 91 days ago | IN | 0 ETH | 0.00698212 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | ||||
---|---|---|---|---|---|---|---|
20032562 | 91 days ago | 0 ETH | |||||
20032543 | 91 days ago | 0 ETH | |||||
20032543 | 91 days ago | 0 ETH | |||||
20032531 | 91 days ago | 0 ETH | |||||
20032531 | 91 days ago | 0 ETH | |||||
20032531 | 91 days ago | 0 ETH | |||||
20032531 | 91 days ago | 0 ETH | |||||
20032531 | 91 days ago | 0 ETH | |||||
20032531 | 91 days ago | 0 ETH | |||||
20032531 | 91 days ago | 0 ETH | |||||
20032531 | 91 days ago | 0 ETH | |||||
20032472 | 91 days ago | 0 ETH | |||||
20031903 | 91 days ago | 0 ETH | |||||
20031902 | 91 days ago | 0 ETH | |||||
20031825 | 91 days ago | 0 ETH | |||||
20031825 | 91 days ago | 0 ETH | |||||
20031825 | 91 days ago | 0 ETH | |||||
20031811 | 91 days ago | 0 ETH | |||||
20031802 | 91 days ago | 0 ETH | |||||
20031652 | 91 days ago | 0 ETH | |||||
20031639 | 91 days ago | 0 ETH | |||||
20031639 | 91 days ago | 0 ETH | |||||
20031620 | 91 days ago | 0 ETH | |||||
20031610 | 91 days ago | 0 ETH | |||||
20031571 | 91 days ago | 0 ETH |
Loading...
Loading
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 | 26 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.