ETH Price: $3,316.06 (-2.57%)

Contract

0x2Af8821657973a9CA39248a7586fB588a4686630
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Initialize189380152024-01-05 2:09:11377 days ago1704420551IN
0x2Af88216...8a4686630
0 ETH0.0026419229.35337781

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x053Aa6D7...4754E08D8
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
PolygonzkMessengerWrapper

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 50000 runs

Other Settings:
default evmVersion
File 1 of 8 : PolygonzkMessengerWrapper.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;

import "./MessengerWrapper.sol";
import "../connectors/PolygonzkConnector.sol";

contract PolygonzkMessengerWrapper is MessengerWrapper, PolygonzkConnector {

    address public immutable l1Messenger;

    constructor(
        address _l1BridgeAddress,
        uint256 _l2ChainId,
        address _l1Messenger
    )
        public
        MessengerWrapper(_l1BridgeAddress, _l2ChainId)
    {
        l1Messenger = _l1Messenger;
    }

    function sendCrossDomainMessage(bytes memory _calldata) public override onlyL1Bridge {
        _forwardCrossDomainMessage(_calldata);
    }

    function verifySender(address l1BridgeCaller, bytes memory /*_data*/) public override {
        if (isRootConfirmation) return;

        require(l1BridgeCaller == address(this), "PLGN_ZK_MSG_WRP: Caller is not the messenger");
        require(msg.sender == l1BridgeAddress, "PLGN_ZK_MSG_WRP: Sender is not the L1 Bridge");
    }
}

File 2 of 8 : Connector.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

import "../libraries/ExecutorLib.sol";
import "../shared/Initializable.sol";

abstract contract Connector is Initializable {
    using ExecutorLib for address;

    address public target;
    address public counterpart;

    /// @dev initialize to keep creation code consistent for create2 deployments
    function initialize(address _target, address _counterpart) public initializer {
        require(_target != address(0), "CNR: Target cannot be zero address");
        require(_counterpart != address(0), "CNR: Counterpart cannot be zero address");

        target = _target;
        counterpart = _counterpart;
    }

    fallback () external payable {
        if (msg.sender == target) {
            _forwardCrossDomainMessage();
        } else {
            _verifyCrossDomainSender();
            target.execute(msg.data, msg.value);
        }
    }

    receive () external payable {
        revert("Do not send ETH to this contract");
    }

    /* ========== Virtual functions ========== */

    function _forwardCrossDomainMessage() internal virtual;

    function _verifyCrossDomainSender() internal virtual;
}

File 3 of 8 : PolygonzkConnector.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;

import "../interfaces/polygonzk/messengers/IPolygonZkEVMBridge.sol";
import "./Connector.sol";

contract PolygonzkConnector is Connector {

    uint32 public counterpartNetwork;
    address public messengerAddress;

    function initialize(
        address target,
        address counterpart,
        uint32 _counterpartNetwork,
        address _messengerAddress
    ) external {
        initialize(target, counterpart);

        counterpartNetwork = _counterpartNetwork;
        messengerAddress = _messengerAddress;
    }

    function onMessageReceived(
        address originAddress,
        uint32 originNetwork,
        bytes memory data
    ) external {
        require(originAddress == counterpart, "PLY_ZK_CNR: Origin address does not match counterpart address");
        require(originNetwork == counterpartNetwork, "PLY_ZK_CNR: Origin network does not match counterpart network");
        require(msg.sender == messengerAddress, "PLY_ZK_CNR: Caller is not the messenger");

        uint256 value = 0;
        target.execute(data, value);
    }

    /* ========== Internal functions ========== */

    function _forwardCrossDomainMessage() internal override {
        _forwardCrossDomainMessage(msg.data);
    }

    function _forwardCrossDomainMessage(bytes memory data) internal {
        require(msg.sender == target, "PLY_ZK_CNR: Caller is not the expected sender");

        bool forceUpdateGlobalExitRoot = false;
        IPolygonZkEVMBridge(messengerAddress).bridgeMessage(
            counterpartNetwork,
            counterpart,
            forceUpdateGlobalExitRoot,
            data
        );
    }

    function _verifyCrossDomainSender() internal override {
        revert("BASE_PLY_ZK_CNR: _verifyCrossDomainSender() is handled by onMessageReceived");
    }
}

File 4 of 8 : IMessengerWrapper.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.12 <=0.8.9;
pragma experimental ABIEncoderV2;

interface IMessengerWrapper {
    function sendCrossDomainMessage(bytes memory _calldata) external;
    function verifySender(address l1BridgeCaller, bytes memory _data) external;
    function confirmRoots(
        bytes32[] calldata rootHashes,
        uint256[] calldata destinationChainIds,
        uint256[] calldata totalAmounts,
        uint256[] calldata rootCommittedAts
    ) external;
}

File 5 of 8 : IPolygonZkEVMBridge.sol
// SPDX-License-Identifier: AGPL-3.0

pragma solidity 0.6.12;

interface IPolygonZkEVMBridge {
    function bridgeMessage(
        uint32 destinationNetwork,
        address destinationAddress,
        bool forceUpdateGlobalExitRoot,
        bytes calldata metadata
    ) external payable;
}

File 6 of 8 : ExecutorLib.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;

library ExecutorLib {
    function execute(
        address to,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        (bool success, bytes memory res) = payable(to).call{value: value}(data);
        if (!success) {
            // Bubble up error message
            assembly { revert(add(res,0x20), res) }
        }
        return res;
    }
}

File 7 of 8 : Initializable.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;

contract Initializable {
    bool initialized;

    modifier initializer() {
        require(!initialized, "Initializable: contract is already initialized");
        initialized = true;
        _;
    }
}

File 8 of 8 : MessengerWrapper.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.12 <=0.8.9;
pragma experimental ABIEncoderV2;

import "../interfaces/IMessengerWrapper.sol";

contract IL1Bridge {
    struct TransferBond {
        address bonder;
        uint256 createdAt;
        uint256 totalAmount;
        uint256 challengeStartTime;
        address challenger;
        bool challengeResolved;
    }
    uint256 public challengePeriod;
    mapping(bytes32 => TransferBond) public transferBonds;
    function getIsBonder(address maybeBonder) public view returns (bool) {}
    function getTransferRootId(bytes32 rootHash, uint256 totalAmount) public pure returns (bytes32) {}
    function confirmTransferRoot(
        uint256 originChainId,
        bytes32 rootHash,
        uint256 destinationChainId,
        uint256 totalAmount,
        uint256 rootCommittedAt
    )
        external
    {}
}

abstract contract MessengerWrapper is IMessengerWrapper {
    address public immutable l1BridgeAddress;
    uint256 public immutable l2ChainId;
    bool public isRootConfirmation = false;

    constructor(address _l1BridgeAddress, uint256 _l2ChainId) internal {
        l1BridgeAddress = _l1BridgeAddress;
        l2ChainId = _l2ChainId;
    }

    modifier onlyL1Bridge {
        require(msg.sender == l1BridgeAddress, "MW: Sender must be the L1 Bridge");
        _;
    }

    modifier rootConfirmation {
        isRootConfirmation = true;
        _;
        isRootConfirmation = false;
    }

    /**
     * @dev Confirm roots that have bonded on L1 and passed the challenge period with no challenge
     * @param rootHashes The root hashes to confirm
     * @param destinationChainIds The destinationChainId of the roots to confirm
     * @param totalAmounts The totalAmount of the roots to confirm
     * @param rootCommittedAts The rootCommittedAt of the roots to confirm
     */
    function confirmRoots (
        bytes32[] calldata rootHashes,
        uint256[] calldata destinationChainIds,
        uint256[] calldata totalAmounts,
        uint256[] calldata rootCommittedAts
    ) external override rootConfirmation {
        IL1Bridge l1Bridge = IL1Bridge(l1BridgeAddress);
        require(l1Bridge.getIsBonder(msg.sender), "MW: Sender must be a bonder");
        require(rootHashes.length == totalAmounts.length, "MW: rootHashes and totalAmounts must be the same length");

        uint256 challengePeriod = l1Bridge.challengePeriod();
        for (uint256 i = 0; i < rootHashes.length; i++) {
            bool canConfirm = canConfirmRoot(l1Bridge, rootHashes[i], totalAmounts[i], challengePeriod);
            require(canConfirm, "MW: Root cannot be confirmed");
            l1Bridge.confirmTransferRoot(
                l2ChainId,
                rootHashes[i],
                destinationChainIds[i],
                totalAmounts[i],
                rootCommittedAts[i]
            );
        }
    }
    
    function canConfirmRoot (IL1Bridge l1Bridge, bytes32 rootHash, uint256 totalAmount, uint256 challengePeriod) public view returns (bool) {
        bytes32 transferRootId = l1Bridge.getTransferRootId(rootHash, totalAmount);
        (,uint256 createdAt,,uint256 challengeStartTime,,) = l1Bridge.transferBonds(transferRootId);

        uint256 timeSinceBondCreation = block.timestamp - createdAt;
        if (
            createdAt != 0 &&
            challengeStartTime == 0 &&
            timeSinceBondCreation > challengePeriod
        ) {
            return true;
        }

        return false;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_l1BridgeAddress","type":"address"},{"internalType":"uint256","name":"_l2ChainId","type":"uint256"},{"internalType":"address","name":"_l1Messenger","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"contract IL1Bridge","name":"l1Bridge","type":"address"},{"internalType":"bytes32","name":"rootHash","type":"bytes32"},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"challengePeriod","type":"uint256"}],"name":"canConfirmRoot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"rootHashes","type":"bytes32[]"},{"internalType":"uint256[]","name":"destinationChainIds","type":"uint256[]"},{"internalType":"uint256[]","name":"totalAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"rootCommittedAts","type":"uint256[]"}],"name":"confirmRoots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"counterpart","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"counterpartNetwork","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_counterpart","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"counterpart","type":"address"},{"internalType":"uint32","name":"_counterpartNetwork","type":"uint32"},{"internalType":"address","name":"_messengerAddress","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isRootConfirmation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l1BridgeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l1Messenger","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2ChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"messengerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"originAddress","type":"address"},{"internalType":"uint32","name":"originNetwork","type":"uint32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onMessageReceived","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"sendCrossDomainMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"target","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"l1BridgeCaller","type":"address"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"verifySender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

Deployed Bytecode

0x6080604052600436106100ec5760003560e01c80638b034eb81161008a578063b013813211610059578063b013813214610317578063d4b8399214610339578063d6ae3cd51461034e578063ed1f2668146103705761012c565b80638b034eb8146102ad5780638e58736f146102c257806399178dd8146102e2578063a224ee9c146103025761012c565b8063485cc955116100c6578063485cc955146102415780635ab2a558146102615780636140e0e614610283578063797594b0146102985761012c565b80631806b5f2146101cb5780631aae9eed146101eb578063419cb550146102215761012c565b3661012c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012390611521565b60405180910390fd5b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633141561015f5761015a610390565b6101c9565b6101676103d2565b6101c76000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052505473ffffffffffffffffffffffffffffffffffffffff620100009091041693925034915050610404565b505b005b3480156101d757600080fd5b506101c96101e6366004611239565b61048c565b3480156101f757600080fd5b5061020b6102063660046113ce565b6105bf565b6040516102189190611445565b60405180910390f35b34801561022d57600080fd5b506101c961023c36600461139b565b610724565b34801561024d57600080fd5b506101c961025c3660046110e7565b61079f565b34801561026d57600080fd5b5061027661091c565b6040516102189190611424565b34801561028f57600080fd5b50610276610940565b3480156102a457600080fd5b50610276610964565b3480156102b957600080fd5b5061020b610980565b3480156102ce57600080fd5b506101c96102dd3660046112a1565b610989565b3480156102ee57600080fd5b506101c96102fd366004611182565b610cfc565b34801561030e57600080fd5b50610276610dce565b34801561032357600080fd5b5061032c610dea565b6040516102189190611987565b34801561034557600080fd5b50610276610e0e565b34801561035a57600080fd5b50610363610e30565b6040516102189190611450565b34801561037c57600080fd5b506101c961038b36600461111f565b610e54565b6103d06000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ef692505050565b565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101239061184d565b6060600060608573ffffffffffffffffffffffffffffffffffffffff1684866040516104309190611408565b60006040518083038185875af1925050503d806000811461046d576040519150601f19603f3d011682016040523d82523d6000602084013e610472565b606091505b509150915081610483578060208201fd5b95945050505050565b60015473ffffffffffffffffffffffffffffffffffffffff8481169116146104e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012390611467565b60015463ffffffff83811674010000000000000000000000000000000000000000909204161461053c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610123906114c4565b60025473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610123906116a4565b600080546105b89062010000900473ffffffffffffffffffffffffffffffffffffffff168383610404565b5050505050565b6000808573ffffffffffffffffffffffffffffffffffffffff1663960a7afa86866040518363ffffffff1660e01b81526004016105fd929190611459565b60206040518083038186803b15801561061557600080fd5b505afa158015610629573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064d9190611383565b90506000808773ffffffffffffffffffffffffffffffffffffffff16635a7e1083846040518263ffffffff1660e01b815260040161068b9190611450565b60c06040518083038186803b1580156106a357600080fd5b505afa1580156106b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106db91906111d0565b509295509350505042839003905082158015906106f6575081155b801561070157508581115b1561071357600194505050505061071c565b60009450505050505b949350505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b8901acb165ed027e32754e0ffe830802919727f1614610793576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101239061175e565b61079c81610ef6565b50565b600054610100900460ff16156107e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610123906115ea565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905573ffffffffffffffffffffffffffffffffffffffff821661085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012390611701565b73ffffffffffffffffffffffffffffffffffffffff81166108a7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610123906118d0565b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff94851602179055600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b7f000000000000000000000000b8901acb165ed027e32754e0ffe830802919727f81565b7f0000000000000000000000002a3dd3eb832af982ec71669e178424b10dca2ede81565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60005460ff1681565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517fd5ef75510000000000000000000000000000000000000000000000000000000081527f000000000000000000000000b8901acb165ed027e32754e0ffe830802919727f9073ffffffffffffffffffffffffffffffffffffffff82169063d5ef755190610a28903390600401611424565b60206040518083038186803b158015610a4057600080fd5b505afa158015610a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a789190611360565b610aae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101239061192d565b878414610ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012390611793565b60008173ffffffffffffffffffffffffffffffffffffffff1663f3f480d96040518163ffffffff1660e01b815260040160206040518083038186803b158015610b2f57600080fd5b505afa158015610b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b679190611383565b905060005b89811015610cc7576000610ba6848d8d85818110610b8657fe5b905060200201358a8a86818110610b9957fe5b90506020020135866105bf565b905080610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610123906115b3565b8373ffffffffffffffffffffffffffffffffffffffff1663ef6ebe5e7f000000000000000000000000000000000000000000000000000000000000044d8e8e86818110610c2857fe5b905060200201358d8d87818110610c3b57fe5b905060200201358c8c88818110610c4e57fe5b905060200201358b8b89818110610c6157fe5b905060200201356040518663ffffffff1660e01b8152600401610c88959493929190611964565b600060405180830381600087803b158015610ca257600080fd5b505af1158015610cb6573d6000803e3d6000fd5b505060019093019250610b6c915050565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050505050505050565b60005460ff1615610d0c57610dca565b73ffffffffffffffffffffffffffffffffffffffff82163014610d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012390611556565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b8901acb165ed027e32754e0ffe830802919727f1614610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610123906117f0565b5050565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900463ffffffff1681565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000044d81565b610e5e848461079f565b6001805463ffffffff90931674010000000000000000000000000000000000000000027fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff909316929092179091556002805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790555050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012390611647565b6002546001546040517f240ff37800000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff9081169263240ff37892610fcc9263ffffffff7401000000000000000000000000000000000000000084041692169086908890600401611998565b600060405180830381600087803b158015610fe657600080fd5b505af1158015610ffa573d6000803e3d6000fd5b505050505050565b60008083601f840112611013578182fd5b50813567ffffffffffffffff81111561102a578182fd5b602083019150836020808302850101111561104457600080fd5b9250929050565b600082601f83011261105b578081fd5b813567ffffffffffffffff80821115611072578283fd5b60405160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011682010181811083821117156110b0578485fd5b6040528281529250828483016020018610156110cb57600080fd5b8260208601602083013760006020848301015250505092915050565b600080604083850312156110f9578182fd5b823561110481611a4c565b9150602083013561111481611a4c565b809150509250929050565b60008060008060808587031215611134578182fd5b843561113f81611a4c565b9350602085013561114f81611a4c565b9250604085013563ffffffff81168114611167578283fd5b9150606085013561117781611a4c565b939692955090935050565b60008060408385031215611194578182fd5b823561119f81611a4c565b9150602083013567ffffffffffffffff8111156111ba578182fd5b6111c68582860161104b565b9150509250929050565b60008060008060008060c087890312156111e8578182fd5b86516111f381611a4c565b80965050602087015194506040870151935060608701519250608087015161121a81611a4c565b60a088015190925061122b81611a6e565b809150509295509295509295565b60008060006060848603121561124d578283fd5b833561125881611a4c565b9250602084013563ffffffff81168114611270578283fd5b9150604084013567ffffffffffffffff81111561128b578182fd5b6112978682870161104b565b9150509250925092565b6000806000806000806000806080898b0312156112bc578182fd5b883567ffffffffffffffff808211156112d3578384fd5b6112df8c838d01611002565b909a50985060208b01359150808211156112f7578384fd5b6113038c838d01611002565b909850965060408b013591508082111561131b578384fd5b6113278c838d01611002565b909650945060608b013591508082111561133f578384fd5b5061134c8b828c01611002565b999c989b5096995094979396929594505050565b600060208284031215611371578081fd5b815161137c81611a6e565b9392505050565b600060208284031215611394578081fd5b5051919050565b6000602082840312156113ac578081fd5b813567ffffffffffffffff8111156113c2578182fd5b61071c8482850161104b565b600080600080608085870312156113e3578384fd5b84356113ee81611a4c565b966020860135965060408601359560600135945092505050565b6000825161141a818460208701611a1c565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b901515815260200190565b90815260200190565b918252602082015260400190565b6020808252603d908201527f504c595f5a4b5f434e523a204f726967696e206164647265737320646f65732060408201527f6e6f74206d6174636820636f756e746572706172742061646472657373000000606082015260800190565b6020808252603d908201527f504c595f5a4b5f434e523a204f726967696e206e6574776f726b20646f65732060408201527f6e6f74206d6174636820636f756e74657270617274206e6574776f726b000000606082015260800190565b6020808252818101527f446f206e6f742073656e642045544820746f207468697320636f6e7472616374604082015260600190565b6020808252602c908201527f504c474e5f5a4b5f4d53475f5752503a2043616c6c6572206973206e6f74207460408201527f6865206d657373656e6765720000000000000000000000000000000000000000606082015260800190565b6020808252601c908201527f4d573a20526f6f742063616e6e6f7420626520636f6e6669726d656400000000604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201527f647920696e697469616c697a6564000000000000000000000000000000000000606082015260800190565b6020808252602d908201527f504c595f5a4b5f434e523a2043616c6c6572206973206e6f742074686520657860408201527f7065637465642073656e64657200000000000000000000000000000000000000606082015260800190565b60208082526027908201527f504c595f5a4b5f434e523a2043616c6c6572206973206e6f7420746865206d6560408201527f7373656e67657200000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f434e523a205461726765742063616e6e6f74206265207a65726f20616464726560408201527f7373000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4d573a2053656e646572206d75737420626520746865204c3120427269646765604082015260600190565b60208082526037908201527f4d573a20726f6f7448617368657320616e6420746f74616c416d6f756e74732060408201527f6d757374206265207468652073616d65206c656e677468000000000000000000606082015260800190565b6020808252602c908201527f504c474e5f5a4b5f4d53475f5752503a2053656e646572206973206e6f74207460408201527f6865204c31204272696467650000000000000000000000000000000000000000606082015260800190565b6020808252604b908201527f424153455f504c595f5a4b5f434e523a205f76657269667943726f7373446f6d60408201527f61696e53656e64657228292069732068616e646c6564206279206f6e4d65737360608201527f6167655265636569766564000000000000000000000000000000000000000000608082015260a00190565b60208082526027908201527f434e523a20436f756e746572706172742063616e6e6f74206265207a65726f2060408201527f6164647265737300000000000000000000000000000000000000000000000000606082015260800190565b6020808252601b908201527f4d573a2053656e646572206d757374206265206120626f6e6465720000000000604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b63ffffffff91909116815260200190565b600063ffffffff8616825273ffffffffffffffffffffffffffffffffffffffff8516602083015283151560408301526080606083015282518060808401526119e78160a0850160208701611a1c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160a00195945050505050565b60005b83811015611a37578181015183820152602001611a1f565b83811115611a46576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461079c57600080fd5b801515811461079c57600080fdfea26469706673582212209dbdadc3061568411f634b2e2879ac2583762bb8ce6cf130c815030d378e1e0264736f6c634300060c0033

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  ]

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.