Holesky Testnet

Contract

0x5a0F1c0A4482a6CE88C190dE396d154A2149544a

Overview

ETH Balance

0 ETH

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Submit Preimage5289782023-12-15 9:12:12360 days ago1702631532IN
0x5a0F1c0A...A2149544a
0 ETH0.000218681
Submit Hash5289772023-12-15 9:12:00360 days ago1702631520IN
0x5a0F1c0A...A2149544a
0 ETH0.000076851
Submit Preimage5287752023-12-15 8:31:24360 days ago1702629084IN
0x5a0F1c0A...A2149544a
0 ETH0.000213621
Submit Hash5287732023-12-15 8:31:00360 days ago1702629060IN
0x5a0F1c0A...A2149544a
0 ETH0.000076851
Submit Preimage5234002023-12-14 14:10:36361 days ago1702563036IN
0x5a0F1c0A...A2149544a
0 ETH0.000208561
Submit Hash5233982023-12-14 14:10:12361 days ago1702563012IN
0x5a0F1c0A...A2149544a
0 ETH0.000076851
Submit Preimage5233202023-12-14 13:54:24361 days ago1702562064IN
0x5a0F1c0A...A2149544a
0 ETH0.00020351
Submit Preimage5233202023-12-14 13:54:24361 days ago1702562064IN
0x5a0F1c0A...A2149544a
0 ETH0.000163031
Submit Preimage5233192023-12-14 13:54:12361 days ago1702562052IN
0x5a0F1c0A...A2149544a
0 ETH0.000152281
Submit Preimage5233192023-12-14 13:54:12361 days ago1702562052IN
0x5a0F1c0A...A2149544a
0 ETH0.000157341
Submit Preimage5233192023-12-14 13:54:12361 days ago1702562052IN
0x5a0F1c0A...A2149544a
0 ETH0.000163021
Submit Preimage5233192023-12-14 13:54:12361 days ago1702562052IN
0x5a0F1c0A...A2149544a
0 ETH0.000163031
Submit Hash5233182023-12-14 13:54:00361 days ago1702562040IN
0x5a0F1c0A...A2149544a
0 ETH0.000076851
Submit Hash5233182023-12-14 13:54:00361 days ago1702562040IN
0x5a0F1c0A...A2149544a
0 ETH0.000076841
Submit Hash5233182023-12-14 13:54:00361 days ago1702562040IN
0x5a0F1c0A...A2149544a
0 ETH0.000076851
Submit Hash5233182023-12-14 13:54:00361 days ago1702562040IN
0x5a0F1c0A...A2149544a
0 ETH0.000076851
Submit Hash5233172023-12-14 13:53:48361 days ago1702562028IN
0x5a0F1c0A...A2149544a
0 ETH0.000076851
Submit Hash5233172023-12-14 13:53:48361 days ago1702562028IN
0x5a0F1c0A...A2149544a
0 ETH0.000076851
Submit Preimage5232852023-12-14 13:47:24361 days ago1702561644IN
0x5a0F1c0A...A2149544a
0 ETH0.000157971
Submit Preimage5232842023-12-14 13:47:12361 days ago1702561632IN
0x5a0F1c0A...A2149544a
0 ETH0.000147221
Submit Preimage5232832023-12-14 13:47:00361 days ago1702561620IN
0x5a0F1c0A...A2149544a
0 ETH0.000198441
Submit Preimage5232832023-12-14 13:47:00361 days ago1702561620IN
0x5a0F1c0A...A2149544a
0 ETH0.000157971
Submit Hash5232822023-12-14 13:46:48361 days ago1702561608IN
0x5a0F1c0A...A2149544a
0 ETH0.000076851
Submit Hash5232822023-12-14 13:46:48361 days ago1702561608IN
0x5a0F1c0A...A2149544a
0 ETH0.000076851
Submit Preimage5232822023-12-14 13:46:48361 days ago1702561608IN
0x5a0F1c0A...A2149544a
0 ETH0.000152281
View all transactions

Advanced mode:
Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HashVerification

Compiler Version
v0.5.0+commit.1d4f565a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-11-29
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.5.0;

contract HashVerification {
    struct StateCheck {
        bytes32 submittedHash;
        bytes32 submittedPreimage;
        bool verified;
        uint256 blockNumber;
    }

    mapping(address => mapping(address => StateCheck[])) public stateChecks;

    modifier onlyOriginatorBank(address _originatorBank) {
        require(msg.sender == _originatorBank, "Only the originator bank can use this function");
        _;
    }

    modifier onlyRecipientBank(address _recipientBank) {
        require(msg.sender == _recipientBank, "Only the recipient bank can use this function");
        _;
    }

    modifier preimageNotSubmitted(
        address _originatorBank,
        address _recipientBank,
        uint256 _blockNumber
    ) {
        StateCheck[] storage senderStateChecks = stateChecks[_originatorBank][_recipientBank];

        require(senderStateChecks.length > 0, "No submissions found for the given parties");

        bool found = false;
        for (uint256 i = 0; i < senderStateChecks.length; i++) {
            if (
                senderStateChecks[i].blockNumber == _blockNumber &&
                senderStateChecks[i].verified
            ) {
                found = true;
                break;
            }
        }

        require(!found, "Preimage already submitted and verified for the given blockNumber");
        _;
    }


    constructor() public {}

    function submitHash(
        address _originatorBank,
        address _recipientBank,
        bytes32 _hash
    ) external onlyOriginatorBank(_originatorBank) {
        uint256 currentBlock = block.number;

        stateChecks[_originatorBank][_recipientBank].push(
            StateCheck({
                submittedHash: _hash,
                submittedPreimage: bytes32(0),
                verified: false,
                blockNumber: currentBlock
            })
        );
    }

    function submitPreimage(
        address _originatorBank,
        address _recipientBank,
        bytes32 _preimage,
        uint256 _blockNumber
    ) external onlyRecipientBank(_recipientBank) preimageNotSubmitted(_originatorBank, _recipientBank, _blockNumber){

        StateCheck[] storage senderStateChecks = stateChecks[_originatorBank][_recipientBank];

        for (uint256 i = 0; i < senderStateChecks.length; i++) {
            if (!senderStateChecks[i].verified && senderStateChecks[i].blockNumber == _blockNumber) {
                senderStateChecks[i].submittedPreimage = _preimage;
                senderStateChecks[i].verified =
                    keccak256(abi.encodePacked(_preimage)) ==
                    senderStateChecks[i].submittedHash;
                break;
            }
        }
    }

    function getPendingSubmissions(
        address _originatorBank,
        address _recipientBank
    ) external view onlyRecipientBank(_recipientBank) returns (uint256[] memory) {

        StateCheck[] storage senderStateChecks = stateChecks[_originatorBank][_recipientBank];
        uint256[] memory pendingBlocks = new uint256[](senderStateChecks.length);

        uint256 pendingCount = 0;
        for (uint256 i = 0; i < senderStateChecks.length; i++) {
            if (!senderStateChecks[i].verified) {
                pendingBlocks[pendingCount] = senderStateChecks[i].blockNumber;
                pendingCount++;
            }
        }

        // Resize the array to the number of pending blocks
        assembly {
            mstore(pendingBlocks, pendingCount)
        }

        return pendingBlocks;
    }

    function getStateCheckByIndex(
        address _originatorBank,
        address _recipientBank,
        uint256 index
    )   external view returns (
            bytes32 submittedHash,
            bytes32 submittedPreimage,
            bool verified,
            uint256 blockNumber
        ) 
    {
        StateCheck storage stateCheck = stateChecks[_originatorBank][_recipientBank][index];
        return (
            stateCheck.submittedHash,
            stateCheck.submittedPreimage,
            stateCheck.verified,
            stateCheck.blockNumber
        );
    }

    function getStateCheckByBlockNumber(
        address _originatorBank,
        address _recipientBank,
        uint256 _blockNumber
    )   external view returns (
            bytes32 submittedHash,
            bytes32 submittedPreimage,
            bool verified,
            uint256 blockNumber
        )
    {
        StateCheck[] storage senderStateChecks = stateChecks[_originatorBank][_recipientBank];

        for (uint256 i = 0; i < senderStateChecks.length; i++) {
            if (senderStateChecks[i].blockNumber == _blockNumber) {
                return (
                    senderStateChecks[i].submittedHash,
                    senderStateChecks[i].submittedPreimage,
                    senderStateChecks[i].verified,
                    senderStateChecks[i].blockNumber
                );
            }
        }

        revert("No state check found for the given blockNumber");
    }

    function version() external pure returns (string memory) {
        return "1.0.0";
    }
}

Contract ABI

[{"constant":false,"inputs":[{"name":"_originatorBank","type":"address"},{"name":"_recipientBank","type":"address"},{"name":"_preimage","type":"bytes32"},{"name":"_blockNumber","type":"uint256"}],"name":"submitPreimage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_originatorBank","type":"address"},{"name":"_recipientBank","type":"address"},{"name":"_hash","type":"bytes32"}],"name":"submitHash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"stateChecks","outputs":[{"name":"submittedHash","type":"bytes32"},{"name":"submittedPreimage","type":"bytes32"},{"name":"verified","type":"bool"},{"name":"blockNumber","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_originatorBank","type":"address"},{"name":"_recipientBank","type":"address"},{"name":"index","type":"uint256"}],"name":"getStateCheckByIndex","outputs":[{"name":"submittedHash","type":"bytes32"},{"name":"submittedPreimage","type":"bytes32"},{"name":"verified","type":"bool"},{"name":"blockNumber","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_originatorBank","type":"address"},{"name":"_recipientBank","type":"address"}],"name":"getPendingSubmissions","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_originatorBank","type":"address"},{"name":"_recipientBank","type":"address"},{"name":"_blockNumber","type":"uint256"}],"name":"getStateCheckByBlockNumber","outputs":[{"name":"submittedHash","type":"bytes32"},{"name":"submittedPreimage","type":"bytes32"},{"name":"verified","type":"bool"},{"name":"blockNumber","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]

608060405234801561001057600080fd5b5061117d806100206000396000f3fe608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632eb0562514610088578063542686b01461010d57806354fd4d501461018857806396535fed14610218578063a7f0ab94146102c0578063c392db8414610368578063d80e96d51461042e575b600080fd5b34801561009457600080fd5b5061010b600480360360808110156100ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506104d6565b005b34801561011957600080fd5b506101866004803603606081101561013057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109c0565b005b34801561019457600080fd5b5061019d610ba6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101dd5780820151818401526020810190506101c2565b50505050905090810190601f16801561020a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022457600080fd5b506102916004803603606081101561023b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610be3565b604051808581526020018481526020018315151515815260200182815260200194505050505060405180910390f35b3480156102cc57600080fd5b50610339600480360360608110156102e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c49565b604051808581526020018481526020018315151515815260200182815260200194505050505060405180910390f35b34801561037457600080fd5b506103d76004803603604081101561038b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d1c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561041a5780820151818401526020810190506103ff565b505050509050019250505060405180910390f35b34801561043a57600080fd5b506104a76004803603606081101561045157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f4c565b604051808581526020018481526020018315151515815260200182815260200194505050505060405180910390f35b828073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4f6e6c792074686520726563697069656e742062616e6b2063616e207573652081526020017f746869732066756e6374696f6e0000000000000000000000000000000000000081525060400191505060405180910390fd5b84848360008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081805490501115156106c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f4e6f207375626d697373696f6e7320666f756e6420666f72207468652067697681526020017f656e20706172746965730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600080905060008090505b828054905081101561074d578383828154811015156106ea57fe5b9060005260206000209060040201600301541480156107325750828181548110151561071257fe5b906000526020600020906004020160020160009054906101000a900460ff165b15610740576001915061074d565b80806001019150506106cf565b5080151515610810576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001807f507265696d61676520616c7265616479207375626d697474656420616e64207681526020017f6572696669656420666f722074686520676976656e20626c6f636b4e756d626581526020017f720000000000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b60008060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b81805490508110156109b25781818154811015156108af57fe5b906000526020600020906004020160020160009054906101000a900460ff161580156108f957508882828154811015156108e557fe5b906000526020600020906004020160030154145b156109a55789828281548110151561090d57fe5b906000526020600020906004020160010181905550818181548110151561093057fe5b9060005260206000209060040201600001548a604051602001808281526020019150506040516020818303038152906040528051906020012014828281548110151561097857fe5b906000526020600020906004020160020160006101000a81548160ff0219169083151502179055506109b2565b8080600101915050610895565b505050505050505050505050565b828073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4f6e6c7920746865206f726967696e61746f722062616e6b2063616e2075736581526020017f20746869732066756e6374696f6e00000000000000000000000000000000000081525060400191505060405180910390fd5b60004390506000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020608060405190810160405280858152602001600060010281526020016000151581526020018381525090806001815401808255809150509060018203906000526020600020906004020160009091929091909150600082015181600001556020820151816001015560408201518160020160006101000a81548160ff021916908315150217905550606082015181600301555050505050505050565b60606040805190810160405280600581526020017f312e302e30000000000000000000000000000000000000000000000000000000815250905090565b600060205282600052604060002060205281600052604060002081815481101515610c0a57fe5b906000526020600020906004020160009250925050508060000154908060010154908060020160009054906101000a900460ff16908060030154905084565b60008060008060008060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002086815481101515610cd957fe5b90600052602060002090600402019050806000015481600101548260020160009054906101000a900460ff16836003015494509450945094505093509350935093565b6060818073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610de8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4f6e6c792074686520726563697069656e742062616e6b2063616e207573652081526020017f746869732066756e6374696f6e0000000000000000000000000000000000000081525060400191505060405180910390fd5b60008060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060608180549050604051908082528060200260200182016040528015610e9c5781602001602082028038833980820191505090505b509050600080905060008090505b8380549050811015610f3b578381815481101515610ec457fe5b906000526020600020906004020160020160009054906101000a900460ff161515610f2e578381815481101515610ef757fe5b9060005260206000209060040201600301548383815181101515610f1757fe5b906020019060200201818152505081806001019250505b8080600101915050610eaa565b508082528194505050505092915050565b60008060008060008060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b81805490508110156110b357868282815481101515610ff257fe5b90600052602060002090600402016003015414156110a657818181548110151561101857fe5b906000526020600020906004020160000154828281548110151561103857fe5b906000526020600020906004020160010154838381548110151561105857fe5b906000526020600020906004020160020160009054906101000a900460ff16848481548110151561108557fe5b90600052602060002090600402016003015495509550955095505050611148565b8080600101915050610fd7565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4e6f20737461746520636865636b20666f756e6420666f72207468652067697681526020017f656e20626c6f636b4e756d62657200000000000000000000000000000000000081525060400191505060405180910390fd5b9350935093509356fea165627a7a72305820e005828b1f7ee29212f2adf94e262a0a3c54e425b67bf6e70b0c94e92e16bc9d0029

Deployed Bytecode

0x608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632eb0562514610088578063542686b01461010d57806354fd4d501461018857806396535fed14610218578063a7f0ab94146102c0578063c392db8414610368578063d80e96d51461042e575b600080fd5b34801561009457600080fd5b5061010b600480360360808110156100ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506104d6565b005b34801561011957600080fd5b506101866004803603606081101561013057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109c0565b005b34801561019457600080fd5b5061019d610ba6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101dd5780820151818401526020810190506101c2565b50505050905090810190601f16801561020a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022457600080fd5b506102916004803603606081101561023b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610be3565b604051808581526020018481526020018315151515815260200182815260200194505050505060405180910390f35b3480156102cc57600080fd5b50610339600480360360608110156102e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c49565b604051808581526020018481526020018315151515815260200182815260200194505050505060405180910390f35b34801561037457600080fd5b506103d76004803603604081101561038b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d1c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561041a5780820151818401526020810190506103ff565b505050509050019250505060405180910390f35b34801561043a57600080fd5b506104a76004803603606081101561045157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f4c565b604051808581526020018481526020018315151515815260200182815260200194505050505060405180910390f35b828073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4f6e6c792074686520726563697069656e742062616e6b2063616e207573652081526020017f746869732066756e6374696f6e0000000000000000000000000000000000000081525060400191505060405180910390fd5b84848360008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081805490501115156106c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f4e6f207375626d697373696f6e7320666f756e6420666f72207468652067697681526020017f656e20706172746965730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600080905060008090505b828054905081101561074d578383828154811015156106ea57fe5b9060005260206000209060040201600301541480156107325750828181548110151561071257fe5b906000526020600020906004020160020160009054906101000a900460ff165b15610740576001915061074d565b80806001019150506106cf565b5080151515610810576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001807f507265696d61676520616c7265616479207375626d697474656420616e64207681526020017f6572696669656420666f722074686520676976656e20626c6f636b4e756d626581526020017f720000000000000000000000000000000000000000000000000000000000000081525060600191505060405180910390fd5b60008060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b81805490508110156109b25781818154811015156108af57fe5b906000526020600020906004020160020160009054906101000a900460ff161580156108f957508882828154811015156108e557fe5b906000526020600020906004020160030154145b156109a55789828281548110151561090d57fe5b906000526020600020906004020160010181905550818181548110151561093057fe5b9060005260206000209060040201600001548a604051602001808281526020019150506040516020818303038152906040528051906020012014828281548110151561097857fe5b906000526020600020906004020160020160006101000a81548160ff0219169083151502179055506109b2565b8080600101915050610895565b505050505050505050505050565b828073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4f6e6c7920746865206f726967696e61746f722062616e6b2063616e2075736581526020017f20746869732066756e6374696f6e00000000000000000000000000000000000081525060400191505060405180910390fd5b60004390506000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020608060405190810160405280858152602001600060010281526020016000151581526020018381525090806001815401808255809150509060018203906000526020600020906004020160009091929091909150600082015181600001556020820151816001015560408201518160020160006101000a81548160ff021916908315150217905550606082015181600301555050505050505050565b60606040805190810160405280600581526020017f312e302e30000000000000000000000000000000000000000000000000000000815250905090565b600060205282600052604060002060205281600052604060002081815481101515610c0a57fe5b906000526020600020906004020160009250925050508060000154908060010154908060020160009054906101000a900460ff16908060030154905084565b60008060008060008060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002086815481101515610cd957fe5b90600052602060002090600402019050806000015481600101548260020160009054906101000a900460ff16836003015494509450945094505093509350935093565b6060818073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610de8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4f6e6c792074686520726563697069656e742062616e6b2063616e207573652081526020017f746869732066756e6374696f6e0000000000000000000000000000000000000081525060400191505060405180910390fd5b60008060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060608180549050604051908082528060200260200182016040528015610e9c5781602001602082028038833980820191505090505b509050600080905060008090505b8380549050811015610f3b578381815481101515610ec457fe5b906000526020600020906004020160020160009054906101000a900460ff161515610f2e578381815481101515610ef757fe5b9060005260206000209060040201600301548383815181101515610f1757fe5b906020019060200201818152505081806001019250505b8080600101915050610eaa565b508082528194505050505092915050565b60008060008060008060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008090505b81805490508110156110b357868282815481101515610ff257fe5b90600052602060002090600402016003015414156110a657818181548110151561101857fe5b906000526020600020906004020160000154828281548110151561103857fe5b906000526020600020906004020160010154838381548110151561105857fe5b906000526020600020906004020160020160009054906101000a900460ff16848481548110151561108557fe5b90600052602060002090600402016003015495509550955095505050611148565b8080600101915050610fd7565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4e6f20737461746520636865636b20666f756e6420666f72207468652067697681526020017f656e20626c6f636b4e756d62657200000000000000000000000000000000000081525060400191505060405180910390fd5b9350935093509356fea165627a7a72305820e005828b1f7ee29212f2adf94e262a0a3c54e425b67bf6e70b0c94e92e16bc9d0029

Deployed Bytecode Sourcemap

60:5258:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2004:832;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2004:832:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;2004:832:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1499:497;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1499:497:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1499:497:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5225:90;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5225:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5225:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;249:71;;8:9:-1;5:2;;;30:1;27;20:12;5:2;249:71:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;249:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3691:592;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3691:592:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3691:592:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2844:839;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2844:839:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2844:839:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2844:839:0;;;;;;;;;;;;;;;;;4291:926;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4291:926:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4291:926:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2004:832;2188:14;593;579:28;;:10;:28;;;571:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2225:15;2242:14;2258:12;831:38;872:11;:28;884:15;872:28;;;;;;;;;;;;;;;:44;901:14;872:44;;;;;;;;;;;;;;;831:85;;964:1;937:17;:24;;;;:28;929:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1025:10;1038:5;1025:18;;1059:9;1071:1;1059:13;;1054:288;1078:17;:24;;;;1074:1;:28;1054:288;;;1182:12;1146:17;1164:1;1146:20;;;;;;;;;;;;;;;;;;;;:32;;;:48;:98;;;;;1215:17;1233:1;1215:20;;;;;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;1146:98;1124:207;;;1287:4;1279:12;;1310:5;;1124:207;1104:3;;;;;;;1054:288;;;;1363:5;1362:6;1354:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2284:38;2325:11;:28;2337:15;2325:28;;;;;;;;;;;;;;;:44;2354:14;2325:44;;;;;;;;;;;;;;;2284:85;;2387:9;2399:1;2387:13;;2382:447;2406:17;:24;;;;2402:1;:28;2382:447;;;2457:17;2475:1;2457:20;;;;;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;2456:30;:82;;;;;2526:12;2490:17;2508:1;2490:20;;;;;;;;;;;;;;;;;;;;:32;;;:48;2456:82;2452:366;;;2600:9;2559:17;2577:1;2559:20;;;;;;;;;;;;;;;;;;;;:38;;:50;;;;2744:17;2762:1;2744:20;;;;;;;;;;;;;;;;;;;;:34;;;2708:9;2691:27;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2691:27:0;;;2681:38;;;;;;:97;2628:17;2646:1;2628:20;;;;;;;;;;;;;;;;;;;;:29;;;:150;;;;;;;;;;;;;;;;;;2797:5;;2452:366;2432:3;;;;;;;2382:447;;;;1449:1;668;;;;;2004:832;;;;;:::o;1499:497::-;1645:15;415;401:29;;:10;:29;;;393:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1673:20;1696:12;1673:35;;1721:11;:28;1733:15;1721:28;;;;;;;;;;;;;;;:44;1750:14;1721:44;;;;;;;;;;;;;;;1785:192;;;;;;;;;1830:5;1785:192;;;;1881:1;1873:10;;1785:192;;;;1912:5;1785:192;;;;;;1949:12;1785:192;;;1721:267;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;1721:267:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;492:1;1499:497;;;;:::o;5225:90::-;5267:13;5293:14;;;;;;;;;;;;;;;;;;;;5225:90;:::o;249:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3691:592::-;3858:21;3894:25;3934:13;3962:19;4010:29;4042:11;:28;4054:15;4042:28;;;;;;;;;;;;;;;:44;4071:14;4042:44;;;;;;;;;;;;;;;4087:5;4042:51;;;;;;;;;;;;;;;;;;;;4010:83;;4126:10;:24;;;4165:10;:28;;;4208:10;:19;;;;;;;;;;;;4242:10;:22;;;4104:171;;;;;;;;;3691:592;;;;;;;:::o;2844:839::-;3006:16;2981:14;593;579:28;;:10;:28;;;571:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3037:38;3078:11;:28;3090:15;3078:28;;;;;;;;;;;;;;;:44;3107:14;3078:44;;;;;;;;;;;;;;;3037:85;;3133:30;3180:17;:24;;;;3166:39;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;3166:39:0;;;;3133:72;;3218:20;3241:1;3218:24;;3258:9;3270:1;3258:13;;3253:247;3277:17;:24;;;;3273:1;:28;3253:247;;;3328:17;3346:1;3328:20;;;;;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;3327:30;3323:166;;;3408:17;3426:1;3408:20;;;;;;;;;;;;;;;;;;;;:32;;;3378:13;3392:12;3378:27;;;;;;;;;;;;;;;;;:62;;;;;3459:14;;;;;;;3323:166;3303:3;;;;;;;3253:247;;;;3619:12;3604:13;3597:35;3662:13;3655:20;;;;;2844:839;;;;;:::o;4291:926::-;4471:21;4507:25;4547:13;4575:19;4622:38;4663:11;:28;4675:15;4663:28;;;;;;;;;;;;;;;:44;4692:14;4663:44;;;;;;;;;;;;;;;4622:85;;4725:9;4737:1;4725:13;;4720:421;4744:17;:24;;;;4740:1;:28;4720:421;;;4830:12;4794:17;4812:1;4794:20;;;;;;;;;;;;;;;;;;;;:32;;;:48;4790:340;;;4893:17;4911:1;4893:20;;;;;;;;;;;;;;;;;;;;:34;;;4950:17;4968:1;4950:20;;;;;;;;;;;;;;;;;;;;:38;;;5011:17;5029:1;5011:20;;;;;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;5063:17;5081:1;5063:20;;;;;;;;;;;;;;;;;;;;:32;;;4863:251;;;;;;;;;;;;4790:340;4770:3;;;;;;;4720:421;;;;5153:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4291:926;;;;;;;;:::o

Swarm Source

bzzr://e005828b1f7ee29212f2adf94e262a0a3c54e425b67bf6e70b0c94e92e16bc9d

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.