ETH Price: $3,527.02 (-1.76%)
Gas: 4 Gwei

Contract

0xa0425d71cB1D6fb80E65a5361a04096E0672De03
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00
Transaction Hash
Method
Block
From
To
Value
Accept Ownership195277552024-03-27 19:52:2381 days ago1711569143IN
zkSync Era: Validator Timelock 2
0 ETH0.001176450
Renounce Ownersh...195277142024-03-27 19:43:4781 days ago1711568627IN
zkSync Era: Validator Timelock 2
0 ETH0.00117550
Renounce Ownersh...195276842024-03-27 19:36:3581 days ago1711568195IN
zkSync Era: Validator Timelock 2
0 ETH0.0010433944.39984772
Commit Batches194126012024-03-11 14:58:2397 days ago1710169103IN
zkSync Era: Validator Timelock 2
0 ETH0.1719578102.53900079
Commit Batches194126012024-03-11 14:58:2397 days ago1710169103IN
zkSync Era: Validator Timelock 2
0 ETH0.17343979102.53900079
Commit Batches194126012024-03-11 14:58:2397 days ago1710169103IN
zkSync Era: Validator Timelock 2
0 ETH0.17288752102.53900079
Commit Batches194126012024-03-11 14:58:2397 days ago1710169103IN
zkSync Era: Validator Timelock 2
0 ETH0.17214772101.45769064
Commit Batches194126012024-03-11 14:58:2397 days ago1710169103IN
zkSync Era: Validator Timelock 2
0 ETH0.17026796100.28640368
Commit Batches194126012024-03-11 14:58:2397 days ago1710169103IN
zkSync Era: Validator Timelock 2
0 ETH0.16893555100.28640368
Commit Batches194126012024-03-11 14:58:2397 days ago1710169103IN
zkSync Era: Validator Timelock 2
0 ETH0.1685542298.82093765
Commit Batches194126012024-03-11 14:58:2397 days ago1710169103IN
zkSync Era: Validator Timelock 2
0 ETH0.1661862898.82093765
Commit Batches194126012024-03-11 14:58:2397 days ago1710169103IN
zkSync Era: Validator Timelock 2
0 ETH0.1649110797.89941317
Commit Batches194125982024-03-11 14:57:3597 days ago1710169055IN
zkSync Era: Validator Timelock 2
0 ETH0.18328073108.38036755
Commit Batches194125962024-03-11 14:57:1197 days ago1710169031IN
zkSync Era: Validator Timelock 2
0 ETH0.18372462108.38577885
Commit Batches194125912024-03-11 14:56:1197 days ago1710168971IN
zkSync Era: Validator Timelock 2
0 ETH0.17980538106.37980743
Commit Batches194125602024-03-11 14:49:5997 days ago1710168599IN
zkSync Era: Validator Timelock 2
0 ETH0.1599705294.89283366
Commit Batches194125602024-03-11 14:49:5997 days ago1710168599IN
zkSync Era: Validator Timelock 2
0 ETH0.1608389894.89283366
Commit Batches194125602024-03-11 14:49:5997 days ago1710168599IN
zkSync Era: Validator Timelock 2
0 ETH0.1597307394.89283366
Commit Batches194125592024-03-11 14:49:4797 days ago1710168587IN
zkSync Era: Validator Timelock 2
0 ETH0.1428789784.91377247
Commit Batches194125592024-03-11 14:49:4797 days ago1710168587IN
zkSync Era: Validator Timelock 2
0 ETH0.1392910284.91377247
Commit Batches194125542024-03-11 14:48:3597 days ago1710168515IN
zkSync Era: Validator Timelock 2
0 ETH0.1538932192.49407425
Commit Batches194125542024-03-11 14:48:3597 days ago1710168515IN
zkSync Era: Validator Timelock 2
0 ETH0.1541719291.82284028
Commit Batches194125382024-03-11 14:45:2397 days ago1710168323IN
zkSync Era: Validator Timelock 2
0 ETH0.1527537291.82284028
Commit Batches194125362024-03-11 14:44:5997 days ago1710168299IN
zkSync Era: Validator Timelock 2
0 ETH0.154418891.45156632
Commit Batches194125322024-03-11 14:44:1197 days ago1710168251IN
zkSync Era: Validator Timelock 2
0 ETH0.1539702391.45156632
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To Value
186770562023-11-29 11:44:59201 days ago1701258299  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ValidatorTimelock

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 9999999 runs

Other Settings:
paris EvmVersion
File 1 of 7 : ValidatorTimelock.sol
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)
            }
        }
    }
}

File 2 of 7 : Ownable.sol
// 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);
    }
}

File 3 of 7 : Ownable2Step.sol
// 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);
    }
}

File 4 of 7 : Context.sol
// 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;
    }
}

File 5 of 7 : IBase.sol
pragma solidity 0.8.20;

// SPDX-License-Identifier: UNLICENSED


interface IBase {
    function getName() external view returns (string memory);
}

File 6 of 7 : IExecutor.sol
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);
}

File 7 of 7 : LibMap.sol
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;
        }
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 9999999
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"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"}]

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


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.