Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 219,797 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Accept Ownership | 19527755 | 379 days ago | IN | 0 ETH | 0.0011764 | ||||
Renounce Ownersh... | 19527714 | 379 days ago | IN | 0 ETH | 0.001175 | ||||
Renounce Ownersh... | 19527684 | 379 days ago | IN | 0 ETH | 0.00104339 | ||||
Commit Batches | 19412601 | 395 days ago | IN | 0 ETH | 0.1719578 | ||||
Commit Batches | 19412601 | 395 days ago | IN | 0 ETH | 0.17343979 | ||||
Commit Batches | 19412601 | 395 days ago | IN | 0 ETH | 0.17288752 | ||||
Commit Batches | 19412601 | 395 days ago | IN | 0 ETH | 0.17214772 | ||||
Commit Batches | 19412601 | 395 days ago | IN | 0 ETH | 0.17026796 | ||||
Commit Batches | 19412601 | 395 days ago | IN | 0 ETH | 0.16893555 | ||||
Commit Batches | 19412601 | 395 days ago | IN | 0 ETH | 0.16855422 | ||||
Commit Batches | 19412601 | 395 days ago | IN | 0 ETH | 0.16618628 | ||||
Commit Batches | 19412601 | 395 days ago | IN | 0 ETH | 0.16491107 | ||||
Commit Batches | 19412598 | 395 days ago | IN | 0 ETH | 0.18328073 | ||||
Commit Batches | 19412596 | 395 days ago | IN | 0 ETH | 0.18372462 | ||||
Commit Batches | 19412591 | 395 days ago | IN | 0 ETH | 0.17980538 | ||||
Commit Batches | 19412560 | 395 days ago | IN | 0 ETH | 0.15997052 | ||||
Commit Batches | 19412560 | 395 days ago | IN | 0 ETH | 0.16083898 | ||||
Commit Batches | 19412560 | 395 days ago | IN | 0 ETH | 0.15973073 | ||||
Commit Batches | 19412559 | 395 days ago | IN | 0 ETH | 0.14287897 | ||||
Commit Batches | 19412559 | 395 days ago | IN | 0 ETH | 0.13929102 | ||||
Commit Batches | 19412554 | 395 days ago | IN | 0 ETH | 0.15389321 | ||||
Commit Batches | 19412554 | 395 days ago | IN | 0 ETH | 0.15417192 | ||||
Commit Batches | 19412538 | 395 days ago | IN | 0 ETH | 0.15275372 | ||||
Commit Batches | 19412536 | 395 days ago | IN | 0 ETH | 0.1544188 | ||||
Commit Batches | 19412532 | 395 days ago | IN | 0 ETH | 0.15397023 |
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 | Method | Block |
From
|
To
|
||||
---|---|---|---|---|---|---|---|---|
Commit Batches | 19412601 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412601 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412601 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412601 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412601 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412601 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412601 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412601 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412601 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412598 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412596 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412591 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412560 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412560 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412560 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412559 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412559 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412554 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412554 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412538 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412536 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412532 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412529 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412526 | 395 days ago | 0 ETH | |||||
Commit Batches | 19412525 | 395 days ago | 0 ETH |
Loading...
Loading
Contract Name:
ValidatorTimelock
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 9999999 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity 0.8.20; // SPDX-License-Identifier: MIT import "@openzeppelin/contracts/access/Ownable2Step.sol"; import "./libraries/LibMap.sol"; import "./interfaces/IExecutor.sol"; /// @author Matter Labs /// @custom:security-contact [email protected] /// @notice Intermediate smart contract between the validator EOA account and the zkSync smart contract. /// @dev The primary purpose of this contract is to provide a trustless means of delaying batch execution without /// modifying the main zkSync contract. As such, even if this contract is compromised, it will not impact the main /// contract. /// @dev zkSync actively monitors the chain activity and reacts to any suspicious activity by freezing the chain. /// This allows time for investigation and mitigation before resuming normal operations. /// @dev The contract overloads all of the 4 methods, that are used in state transition. When the batch is committed, /// the timestamp is stored for it. Later, when the owner calls the batch execution, the contract checks that batch /// was committed not earlier than X time ago. contract ValidatorTimelock is IExecutor, Ownable2Step { using LibMap for LibMap.Uint32Map; /// @dev Part of the IBase interface. Not used in this contract. string public constant override getName = "ValidatorTimelock"; /// @notice The delay between committing and executing batches is changed. event NewExecutionDelay(uint256 _newExecutionDelay); /// @notice The validator address is changed. event NewValidator(address _oldValidator, address _newValidator); /// @dev The main zkSync smart contract. address public immutable zkSyncContract; /// @dev The mapping of L2 batch number => timestamp when it was committed. LibMap.Uint32Map internal committedBatchTimestamp; /// @dev The address that can commit/revert/validate/execute batches. address public validator; /// @dev The delay between committing and executing batches. uint32 public executionDelay; constructor(address _initialOwner, address _zkSyncContract, uint32 _executionDelay, address _validator) { _transferOwnership(_initialOwner); zkSyncContract = _zkSyncContract; executionDelay = _executionDelay; validator = _validator; } /// @dev Set new validator address. function setValidator(address _newValidator) external onlyOwner { address oldValidator = validator; validator = _newValidator; emit NewValidator(oldValidator, _newValidator); } /// @dev Set the delay between committing and executing batches. function setExecutionDelay(uint32 _executionDelay) external onlyOwner { executionDelay = _executionDelay; emit NewExecutionDelay(_executionDelay); } /// @notice Checks if the caller is a validator. modifier onlyValidator() { require(msg.sender == validator, "8h"); _; } /// @dev Returns the timestamp when `_l2BatchNumber` was committed. function getCommittedBatchTimestamp(uint256 _l2BatchNumber) external view returns (uint256) { return committedBatchTimestamp.get(_l2BatchNumber); } /// @dev Records the timestamp for all provided committed batches and make /// a call to the zkSync contract with the same calldata. function commitBatches( StoredBatchInfo calldata, CommitBatchInfo[] calldata _newBatchesData ) external onlyValidator { unchecked { // This contract is only a temporary solution, that hopefully will be disabled until 2106 year, so... // It is safe to cast. uint32 timestamp = uint32(block.timestamp); for (uint256 i = 0; i < _newBatchesData.length; ++i) { committedBatchTimestamp.set(_newBatchesData[i].batchNumber, timestamp); } } _propagateToZkSync(); } /// @dev Make a call to the zkSync contract with the same calldata. /// Note: If the batch is reverted, it needs to be committed first before the execution. /// So it's safe to not override the committed batches. function revertBatches(uint256) external onlyValidator { _propagateToZkSync(); } /// @dev Make a call to the zkSync contract with the same calldata. /// Note: We don't track the time when batches are proven, since all information about /// the batch is known on the commit stage and the proved is not finalized (may be reverted). function proveBatches( StoredBatchInfo calldata, StoredBatchInfo[] calldata, ProofInput calldata ) external onlyValidator { _propagateToZkSync(); } /// @dev Check that batches were committed at least X time ago and /// make a call to the zkSync contract with the same calldata. function executeBatches(StoredBatchInfo[] calldata _newBatchesData) external onlyValidator { uint256 delay = executionDelay; // uint32 unchecked { for (uint256 i = 0; i < _newBatchesData.length; ++i) { uint256 commitBatchTimestamp = committedBatchTimestamp.get(_newBatchesData[i].batchNumber); // Note: if the `commitBatchTimestamp` is zero, that means either: // * The batch was committed, but not through this contract. // * The batch wasn't committed at all, so execution will fail in the zkSync contract. // We allow executing such batches. require(block.timestamp >= commitBatchTimestamp + delay, "5c"); // The delay is not passed } } _propagateToZkSync(); } /// @dev Call the zkSync contract with the same calldata as this contract was called. /// Note: it is called the zkSync contract, not delegatecalled! function _propagateToZkSync() internal { address contractAddress = zkSyncContract; assembly { // Copy function signature and arguments from calldata at zero position into memory at pointer position calldatacopy(0, 0, calldatasize()) // Call method of the zkSync contract returns 0 on error let result := call(gas(), contractAddress, 0, 0, calldatasize(), 0, 0) // Get the size of the last return data let size := returndatasize() // Copy the size length of bytes from return data at zero position to pointer position returndatacopy(0, 0, size) // Depending on the result value switch result case 0 { // End execution and revert state changes revert(0, size) } default { // Return data with length of size at pointers position return(0, size) } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol) pragma solidity ^0.8.0; import "./Ownable.sol"; /** * @dev Contract module which provides access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() external { address sender = _msgSender(); require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner"); _transferOwnership(sender); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
pragma solidity 0.8.20; // SPDX-License-Identifier: UNLICENSED interface IBase { function getName() external view returns (string memory); }
pragma solidity 0.8.20; // SPDX-License-Identifier: MIT import {IBase} from "./IBase.sol"; /// @dev Enum used by L2 System Contracts to differentiate logs. enum SystemLogKey { L2_TO_L1_LOGS_TREE_ROOT_KEY, TOTAL_L2_TO_L1_PUBDATA_KEY, STATE_DIFF_HASH_KEY, PACKED_BATCH_AND_L2_BLOCK_TIMESTAMP_KEY, PREV_BATCH_HASH_KEY, CHAINED_PRIORITY_TXN_HASH_KEY, NUMBER_OF_LAYER_1_TXS_KEY, EXPECTED_SYSTEM_CONTRACT_UPGRADE_TX_HASH_KEY } /// @dev Offset used to pull Address From Log. Equal to 4 (bytes for isService) uint256 constant L2_LOG_ADDRESS_OFFSET = 4; /// @dev Offset used to pull Key From Log. Equal to 4 (bytes for isService) + 20 (bytes for address) uint256 constant L2_LOG_KEY_OFFSET = 24; /// @dev Offset used to pull Value From Log. Equal to 4 (bytes for isService) + 20 (bytes for address) + 32 (bytes for key) uint256 constant L2_LOG_VALUE_OFFSET = 56; interface IExecutor is IBase { /// @notice Rollup batch stored data /// @param batchNumber Rollup batch number /// @param batchHash Hash of L2 batch /// @param indexRepeatedStorageChanges The serial number of the shortcut index that's used as a unique identifier for storage keys that were used twice or more /// @param numberOfLayer1Txs Number of priority operations to be processed /// @param priorityOperationsHash Hash of all priority operations from this batch /// @param l2LogsTreeRoot Root hash of tree that contains L2 -> L1 messages from this batch /// @param timestamp Rollup batch timestamp, have the same format as Ethereum batch constant /// @param commitment Verified input for the zkSync circuit struct StoredBatchInfo { uint64 batchNumber; bytes32 batchHash; uint64 indexRepeatedStorageChanges; uint256 numberOfLayer1Txs; bytes32 priorityOperationsHash; bytes32 l2LogsTreeRoot; uint256 timestamp; bytes32 commitment; } /// @notice Data needed to commit new batch /// @param batchNumber Number of the committed batch /// @param timestamp Unix timestamp denoting the start of the batch execution /// @param indexRepeatedStorageChanges The serial number of the shortcut index that's used as a unique identifier for storage keys that were used twice or more /// @param newStateRoot The state root of the full state tree /// @param numberOfLayer1Txs Number of priority operations to be processed /// @param priorityOperationsHash Hash of all priority operations from this batch /// @param bootloaderHeapInitialContentsHash Hash of the initial contents of the bootloader heap. In practice it serves as the commitment to the transactions in the batch. /// @param eventsQueueStateHash Hash of the events queue state. In practice it serves as the commitment to the events in the batch. /// @param systemLogs concatenation of all L2 -> L1 system logs in the batch /// @param totalL2ToL1Pubdata Total pubdata committed to as part of bootloader run. Contents are: l2Tol1Logs <> l2Tol1Messages <> publishedBytecodes <> stateDiffs struct CommitBatchInfo { uint64 batchNumber; uint64 timestamp; uint64 indexRepeatedStorageChanges; bytes32 newStateRoot; uint256 numberOfLayer1Txs; bytes32 priorityOperationsHash; bytes32 bootloaderHeapInitialContentsHash; bytes32 eventsQueueStateHash; bytes systemLogs; bytes totalL2ToL1Pubdata; } /// @notice Recursive proof input data (individual commitments are constructed onchain) struct ProofInput { uint256[] recursiveAggregationInput; uint256[] serializedProof; } function commitBatches( StoredBatchInfo calldata _lastCommittedBatchData, CommitBatchInfo[] calldata _newBatchesData ) external; function proveBatches( StoredBatchInfo calldata _prevBatch, StoredBatchInfo[] calldata _committedBatches, ProofInput calldata _proof ) external; function executeBatches(StoredBatchInfo[] calldata _batchesData) external; function revertBatches(uint256 _newLastBatch) external; /// @notice Event emitted when a batch is committed /// @dev It has the name "BlockCommit" and not "BatchCommit" due to backward compatibility considerations event BlockCommit(uint256 indexed batchNumber, bytes32 indexed batchHash, bytes32 indexed commitment); /// @notice Event emitted when batches are verified /// @dev It has the name "BlocksVerification" and not "BatchesVerification" due to backward compatibility considerations event BlocksVerification(uint256 indexed previousLastVerifiedBatch, uint256 indexed currentLastVerifiedBatch); /// @notice Event emitted when a batch is executed /// @dev It has the name "BlockExecution" and not "BatchExecution" due to backward compatibility considerations event BlockExecution(uint256 indexed batchNumber, bytes32 indexed batchHash, bytes32 indexed commitment); /// @notice Event emitted when batches are reverted /// @dev It has the name "BlocksRevert" and not "BatchesRevert" due to backward compatibility considerations event BlocksRevert(uint256 totalBatchesCommitted, uint256 totalBatchesVerified, uint256 totalBatchesExecuted); }
pragma solidity 0.8.20; // SPDX-License-Identifier: MIT /// @notice Library for storage of packed unsigned integers. /// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibMap.sol) library LibMap { /// @dev A uint32 map in storage. struct Uint32Map { mapping(uint256 => uint256) map; } /// @dev Retrieves the uint32 value at a specific index from the Uint32Map. /// @param _map The Uint32Map instance containing the packed uint32 values. /// @param _index The index of the uint32 value to retrieve. /// @return result The uint32 value at the specified index. function get(Uint32Map storage _map, uint256 _index) internal view returns (uint32 result) { unchecked { // Each storage slot can store 256 bits of data. // As uint32 is 32 bits long, 8 uint32s can be packed into one storage slot. // Hence, `_index / 8` is done to find the storage slot that contains the required uint32. uint256 mapValue = _map.map[_index / 8]; // First three bits of the original `_index` denotes the position of the uint32 in that slot. // So, '(_index & 7) * 32' is done to find the bit position of the uint32 in that storage slot. uint256 bitOffset = (_index & 7) * 32; // Shift the bits to the right and retrieve the uint32 value. result = uint32(mapValue >> bitOffset); } } /// @dev Updates the uint32 value at `_index` in `map`. /// @param _map The Uint32Map instance containing the packed uint32 values. /// @param _index The index of the uint32 value to retrieve. /// @param _value The new value at the specified index. function set(Uint32Map storage _map, uint256 _index, uint32 _value) internal { unchecked { // Each storage slot can store 256 bits of data. // As uint32 is 32 bits long, 8 uint32s can be packed into one storage slot. // Hence, `_index / 8` is done to find the storage slot that contains the required uint32. uint256 mapIndex = _index / 8; uint256 mapValue = _map.map[mapIndex]; // First three bits of the original `_index` denotes the position of the uint32 in that slot. // So, '(_index & 7) * 32' is done to find the bit position of the uint32 in that storage slot. uint256 bitOffset = (_index & 7) * 32; // XORing a value A with B, and then with A again, gives the original value B. // We will use this property to update the uint32 value in the slot. // Shift the bits to the right and retrieve the uint32 value. uint32 oldValue = uint32(mapValue >> bitOffset); // Calculate the XOR of the new value and the existing value. uint256 newValueXorOldValue = uint256(oldValue ^ _value); // Finally, we XOR the slot with the XOR of the new value and the existing value, // shifted to its proper position. The XOR operation will effectively replace the old value with the new value. _map.map[mapIndex] = (newValueXorOldValue << bitOffset) ^ mapValue; } } }
{ "optimizer": { "enabled": true, "runs": 9999999 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"address","name":"_zkSyncContract","type":"address"},{"internalType":"uint32","name":"_executionDelay","type":"uint32"},{"internalType":"address","name":"_validator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"batchNumber","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"batchHash","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"commitment","type":"bytes32"}],"name":"BlockCommit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"batchNumber","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"batchHash","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"commitment","type":"bytes32"}],"name":"BlockExecution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalBatchesCommitted","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBatchesVerified","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBatchesExecuted","type":"uint256"}],"name":"BlocksRevert","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"previousLastVerifiedBatch","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"currentLastVerifiedBatch","type":"uint256"}],"name":"BlocksVerification","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_newExecutionDelay","type":"uint256"}],"name":"NewExecutionDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_oldValidator","type":"address"},{"indexed":false,"internalType":"address","name":"_newValidator","type":"address"}],"name":"NewValidator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"batchNumber","type":"uint64"},{"internalType":"bytes32","name":"batchHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBatchInfo","name":"","type":"tuple"},{"components":[{"internalType":"uint64","name":"batchNumber","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"bytes32","name":"newStateRoot","type":"bytes32"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"bootloaderHeapInitialContentsHash","type":"bytes32"},{"internalType":"bytes32","name":"eventsQueueStateHash","type":"bytes32"},{"internalType":"bytes","name":"systemLogs","type":"bytes"},{"internalType":"bytes","name":"totalL2ToL1Pubdata","type":"bytes"}],"internalType":"struct IExecutor.CommitBatchInfo[]","name":"_newBatchesData","type":"tuple[]"}],"name":"commitBatches","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"batchNumber","type":"uint64"},{"internalType":"bytes32","name":"batchHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBatchInfo[]","name":"_newBatchesData","type":"tuple[]"}],"name":"executeBatches","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executionDelay","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_l2BatchNumber","type":"uint256"}],"name":"getCommittedBatchTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"batchNumber","type":"uint64"},{"internalType":"bytes32","name":"batchHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBatchInfo","name":"","type":"tuple"},{"components":[{"internalType":"uint64","name":"batchNumber","type":"uint64"},{"internalType":"bytes32","name":"batchHash","type":"bytes32"},{"internalType":"uint64","name":"indexRepeatedStorageChanges","type":"uint64"},{"internalType":"uint256","name":"numberOfLayer1Txs","type":"uint256"},{"internalType":"bytes32","name":"priorityOperationsHash","type":"bytes32"},{"internalType":"bytes32","name":"l2LogsTreeRoot","type":"bytes32"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"internalType":"struct IExecutor.StoredBatchInfo[]","name":"","type":"tuple[]"},{"components":[{"internalType":"uint256[]","name":"recursiveAggregationInput","type":"uint256[]"},{"internalType":"uint256[]","name":"serializedProof","type":"uint256[]"}],"internalType":"struct IExecutor.ProofInput","name":"","type":"tuple"}],"name":"proveBatches","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"revertBatches","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_executionDelay","type":"uint32"}],"name":"setExecutionDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newValidator","type":"address"}],"name":"setValidator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"validator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zkSyncContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b5060405162000fd938038062000fd983398101604081905262000034916200011d565b6200003f3362000092565b6200004a8462000092565b6001600160a01b0392831660805260038054919093166001600160a01b031963ffffffff909316600160a01b02929092166001600160c01b0319909116171790555062000184565b600180546001600160a01b0319169055620000ad81620000b0565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200011857600080fd5b919050565b600080600080608085870312156200013457600080fd5b6200013f8562000100565b93506200014f6020860162000100565b9250604085015163ffffffff811681146200016957600080fd5b9150620001796060860162000100565b905092959194509250565b608051610e32620001a7600039600081816102ab01526109e40152610e326000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638b25798911610097578063cc7086fb11610066578063cc7086fb146102a6578063e30c3978146102cd578063f2fde38b146102eb578063f34d1868146102fe57600080fd5b80638b257989146102255780638da5cb5b1461026257806397c09d3414610280578063c3d93e7c1461029357600080fd5b8063701f58c5116100d3578063701f58c5146101ef578063715018a61461020257806379ba50971461020a5780637f61885c1461021257600080fd5b80630aa56702146101055780631327d3d81461014c57806317d7de7c146101615780633a5381b5146101aa575b600080fd5b610139610113366004610aca565b600881046000908152600260209081526040909120546007909216021c63ffffffff1690565b6040519081526020015b60405180910390f35b61015f61015a366004610ae3565b610311565b005b61019d6040518060400160405280601181526020017f56616c696461746f7254696d656c6f636b00000000000000000000000000000081525081565b6040516101439190610b20565b6003546101ca9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610143565b61015f6101fd366004610ba5565b61039f565b61015f6104ba565b61015f6104ce565b61015f610220366004610c7a565b610583565b60035461024d9074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610143565b60005473ffffffffffffffffffffffffffffffffffffffff166101ca565b61015f61028e366004610aca565b610612565b61015f6102a1366004610cfd565b61069b565b6101ca7f000000000000000000000000000000000000000000000000000000000000000081565b60015473ffffffffffffffffffffffffffffffffffffffff166101ca565b61015f6102f9366004610ae3565b610826565b61015f61030c366004610d3f565b6108d6565b610319610961565b6003805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f5dc8fe6c03695c172a921c8f8fa2fddfb0aa130603797700d865d07baf129eef910160405180910390a15050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f386800000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b4260005b828110156104ab576104a384848381811061044657610446610d65565b90506020028101906104589190610d94565b610466906020810190610dd2565b600867ffffffffffffffff82160460009081526002602090815260409091208054600790931690910282811c861863ffffffff16901b9091189055565b600101610429565b50506104b56109e2565b505050565b6104c2610961565b6104cc6000610a29565b565b600154339073ffffffffffffffffffffffffffffffffffffffff168114610577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e65720000000000000000000000000000000000000000000000606482015260840161041c565b61058081610a29565b50565b60035473ffffffffffffffffffffffffffffffffffffffff163314610604576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3868000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b61060c6109e2565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3868000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b6105806109e2565b60035473ffffffffffffffffffffffffffffffffffffffff16331461071c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3868000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b60035474010000000000000000000000000000000000000000900463ffffffff1660005b8281101561081d5760006107a085858481811061075f5761075f610d65565b610776926020610100909202019081019150610dd2565b600867ffffffffffffffff8216046000908152600260209081526040909120546007909216021c90565b63ffffffff169050828101421015610814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3563000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b50600101610740565b506104b56109e2565b61082e610961565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561089160005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6108de610961565b600380547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527fd32d6d626bb9c7077c559fc3b4e5ce71ef14609d7d216d030ee63dcf2422c2c49060200160405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041c565b7f0000000000000000000000000000000000000000000000000000000000000000366000803760008036600080855af13d806000803e818015610a2457816000f35b816000fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610580816000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610adc57600080fd5b5035919050565b600060208284031215610af557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610b1957600080fd5b9392505050565b600060208083528351808285015260005b81811015610b4d57858101830151858201604001528201610b31565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b60006101008284031215610b9f57600080fd5b50919050565b60008060006101208486031215610bbb57600080fd5b610bc58585610b8c565b925061010084013567ffffffffffffffff80821115610be357600080fd5b818601915086601f830112610bf757600080fd5b813581811115610c0657600080fd5b8760208260051b8501011115610c1b57600080fd5b6020830194508093505050509250925092565b60008083601f840112610c4057600080fd5b50813567ffffffffffffffff811115610c5857600080fd5b6020830191508360208260081b8501011115610c7357600080fd5b9250929050565b6000806000806101408587031215610c9157600080fd5b610c9b8686610b8c565b935061010085013567ffffffffffffffff80821115610cb957600080fd5b610cc588838901610c2e565b9095509350610120870135915080821115610cdf57600080fd5b50850160408188031215610cf257600080fd5b939692955090935050565b60008060208385031215610d1057600080fd5b823567ffffffffffffffff811115610d2757600080fd5b610d3385828601610c2e565b90969095509350505050565b600060208284031215610d5157600080fd5b813563ffffffff81168114610b1957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112610dc857600080fd5b9190910192915050565b600060208284031215610de457600080fd5b813567ffffffffffffffff81168114610b1957600080fdfea2646970667358221220593e89c02586c873241948cdc9c61565a5e25607ca9150e98d3bc87b8d714afc64736f6c634300081400330000000000000000000000004e4943346848c4867f81dfb37c4ca9c5715a782800000000000000000000000032400084c286cf3e17e7b677ea9583e60a00032400000000000000000000000000000000000000000000000000000000000127500000000000000000000000003527439923a63f8c13cf72b8fe80a77f6e572092
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101005760003560e01c80638b25798911610097578063cc7086fb11610066578063cc7086fb146102a6578063e30c3978146102cd578063f2fde38b146102eb578063f34d1868146102fe57600080fd5b80638b257989146102255780638da5cb5b1461026257806397c09d3414610280578063c3d93e7c1461029357600080fd5b8063701f58c5116100d3578063701f58c5146101ef578063715018a61461020257806379ba50971461020a5780637f61885c1461021257600080fd5b80630aa56702146101055780631327d3d81461014c57806317d7de7c146101615780633a5381b5146101aa575b600080fd5b610139610113366004610aca565b600881046000908152600260209081526040909120546007909216021c63ffffffff1690565b6040519081526020015b60405180910390f35b61015f61015a366004610ae3565b610311565b005b61019d6040518060400160405280601181526020017f56616c696461746f7254696d656c6f636b00000000000000000000000000000081525081565b6040516101439190610b20565b6003546101ca9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610143565b61015f6101fd366004610ba5565b61039f565b61015f6104ba565b61015f6104ce565b61015f610220366004610c7a565b610583565b60035461024d9074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610143565b60005473ffffffffffffffffffffffffffffffffffffffff166101ca565b61015f61028e366004610aca565b610612565b61015f6102a1366004610cfd565b61069b565b6101ca7f00000000000000000000000032400084c286cf3e17e7b677ea9583e60a00032481565b60015473ffffffffffffffffffffffffffffffffffffffff166101ca565b61015f6102f9366004610ae3565b610826565b61015f61030c366004610d3f565b6108d6565b610319610961565b6003805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f5dc8fe6c03695c172a921c8f8fa2fddfb0aa130603797700d865d07baf129eef910160405180910390a15050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f386800000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b4260005b828110156104ab576104a384848381811061044657610446610d65565b90506020028101906104589190610d94565b610466906020810190610dd2565b600867ffffffffffffffff82160460009081526002602090815260409091208054600790931690910282811c861863ffffffff16901b9091189055565b600101610429565b50506104b56109e2565b505050565b6104c2610961565b6104cc6000610a29565b565b600154339073ffffffffffffffffffffffffffffffffffffffff168114610577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e65720000000000000000000000000000000000000000000000606482015260840161041c565b61058081610a29565b50565b60035473ffffffffffffffffffffffffffffffffffffffff163314610604576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3868000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b61060c6109e2565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3868000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b6105806109e2565b60035473ffffffffffffffffffffffffffffffffffffffff16331461071c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3868000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b60035474010000000000000000000000000000000000000000900463ffffffff1660005b8281101561081d5760006107a085858481811061075f5761075f610d65565b610776926020610100909202019081019150610dd2565b600867ffffffffffffffff8216046000908152600260209081526040909120546007909216021c90565b63ffffffff169050828101421015610814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f3563000000000000000000000000000000000000000000000000000000000000604482015260640161041c565b50600101610740565b506104b56109e2565b61082e610961565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561089160005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6108de610961565b600380547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527fd32d6d626bb9c7077c559fc3b4e5ce71ef14609d7d216d030ee63dcf2422c2c49060200160405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041c565b7f00000000000000000000000032400084c286cf3e17e7b677ea9583e60a000324366000803760008036600080855af13d806000803e818015610a2457816000f35b816000fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610580816000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610adc57600080fd5b5035919050565b600060208284031215610af557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610b1957600080fd5b9392505050565b600060208083528351808285015260005b81811015610b4d57858101830151858201604001528201610b31565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b60006101008284031215610b9f57600080fd5b50919050565b60008060006101208486031215610bbb57600080fd5b610bc58585610b8c565b925061010084013567ffffffffffffffff80821115610be357600080fd5b818601915086601f830112610bf757600080fd5b813581811115610c0657600080fd5b8760208260051b8501011115610c1b57600080fd5b6020830194508093505050509250925092565b60008083601f840112610c4057600080fd5b50813567ffffffffffffffff811115610c5857600080fd5b6020830191508360208260081b8501011115610c7357600080fd5b9250929050565b6000806000806101408587031215610c9157600080fd5b610c9b8686610b8c565b935061010085013567ffffffffffffffff80821115610cb957600080fd5b610cc588838901610c2e565b9095509350610120870135915080821115610cdf57600080fd5b50850160408188031215610cf257600080fd5b939692955090935050565b60008060208385031215610d1057600080fd5b823567ffffffffffffffff811115610d2757600080fd5b610d3385828601610c2e565b90969095509350505050565b600060208284031215610d5157600080fd5b813563ffffffff81168114610b1957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112610dc857600080fd5b9190910192915050565b600060208284031215610de457600080fd5b813567ffffffffffffffff81168114610b1957600080fdfea2646970667358221220593e89c02586c873241948cdc9c61565a5e25607ca9150e98d3bc87b8d714afc64736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004e4943346848c4867f81dfb37c4ca9c5715a782800000000000000000000000032400084c286cf3e17e7b677ea9583e60a00032400000000000000000000000000000000000000000000000000000000000127500000000000000000000000003527439923a63f8c13cf72b8fe80a77f6e572092
-----Decoded View---------------
Arg [0] : _initialOwner (address): 0x4e4943346848c4867F81dFb37c4cA9C5715A7828
Arg [1] : _zkSyncContract (address): 0x32400084C286CF3E17e7B677ea9583e60a000324
Arg [2] : _executionDelay (uint32): 75600
Arg [3] : _validator (address): 0x3527439923a63F8C13CF72b8Fe80a77f6e572092
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000004e4943346848c4867f81dfb37c4ca9c5715a7828
Arg [1] : 00000000000000000000000032400084c286cf3e17e7b677ea9583e60a000324
Arg [2] : 0000000000000000000000000000000000000000000000000000000000012750
Arg [3] : 0000000000000000000000003527439923a63f8c13cf72b8fe80a77f6e572092
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ZKSYNC | 100.00% | $1,561.94 | 0.00905 | $14.14 |
Loading...
Loading
Loading...
Loading
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.