Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0xB192213BE9BF85aBdd7C57E15Dc10F33e81019FD
Balance 0 ETH
Nonce 1
Code Size 3750 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

3750 bytes
0x6080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e1461025a578063bce38bd714610275578063c3077fa914610288578063ee82ac5e1461029b57600080fd5b80634d2301cc146101ec57806372425d9d1461022157806382ad56cb1461023457806386d516e81461024757600080fd5b80633408e470116100c65780633408e47014610191578063399542e9146101a45780633e64a696146101c657806342cbb15c146101d957600080fd5b80630f28c97d146100f8578063174dea711461011a578063252dba421461013a57806327e86d6e1461015b575b600080fd5b34801561010457600080fd5b50425b6040519081526020015b60405180910390f35b61012d610128366004610a49565b6102ba565b6040516101119190610b82565b61014d610148366004610a49565b6104ef565b604051610111929190610b9c565b34801561016757600080fd5b50437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0140610107565b34801561019d57600080fd5b5046610107565b6101b76101b2366004610c26565b610654565b60405161011193929190610c80565b3480156101d257600080fd5b5048610107565b3480156101e557600080fd5b5043610107565b3480156101f857600080fd5b50610107610207366004610ca8565b73ffffffffffffffffffffffffffffffffffffffff163190565b34801561022d57600080fd5b5044610107565b61012d610242366004610a49565b61066f565b34801561025357600080fd5b5045610107565b34801561026657600080fd5b50604051418152602001610111565b61012d610283366004610c26565b61081e565b6101b7610296366004610a49565b6109de565b3480156102a757600080fd5b506101076102b6366004610cde565b4090565b60606000828067ffffffffffffffff8111156102d8576102d8610cf7565b60405190808252806020026020018201604052801561031e57816020015b6040805180820190915260008152606060208201528152602001906001900390816102f65790505b5092503660005b8281101561047757600085828151811061034157610341610d26565b6020026020010151905087878381811061035d5761035d610d26565b905060200281019061036f9190610d55565b6040810135958601959093506103886020850185610ca8565b73ffffffffffffffffffffffffffffffffffffffff16816103ac6060870187610d93565b6040516103ba929190610df8565b60006040518083038185875af1925050503d80600081146103f7576040519150601f19603f3d011682016040523d82523d6000602084013e6103fc565b606091505b50602080850191909152901515808452908501351761046d577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b5050600101610325565b508234146104e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d756c746963616c6c333a2076616c7565206d69736d6174636800000000000060448201526064015b60405180910390fd5b50505092915050565b436060828067ffffffffffffffff81111561050c5761050c610cf7565b60405190808252806020026020018201604052801561053f57816020015b606081526020019060019003908161052a5790505b5091503660005b8281101561064a57600087878381811061056257610562610d26565b90506020028101906105749190610e08565b92506105836020840184610ca8565b73ffffffffffffffffffffffffffffffffffffffff166105a66020850185610d93565b6040516105b4929190610df8565b6000604051808303816000865af19150503d80600081146105f1576040519150601f19603f3d011682016040523d82523d6000602084013e6105f6565b606091505b5086848151811061060957610609610d26565b602090810291909101015290508061064157600085838151811061062f5761062f610d26565b60200260200101519050805160208201fd5b50600101610546565b5050509250929050565b438040606061066486868661081e565b905093509350939050565b6060818067ffffffffffffffff81111561068b5761068b610cf7565b6040519080825280602002602001820160405280156106d157816020015b6040805180820190915260008152606060208201528152602001906001900390816106a95790505b5091503660005b828110156104e65760008482815181106106f4576106f4610d26565b6020026020010151905086868381811061071057610710610d26565b90506020028101906107229190610e3c565b92506107316020840184610ca8565b73ffffffffffffffffffffffffffffffffffffffff166107546040850185610d93565b604051610762929190610df8565b6000604051808303816000865af19150503d806000811461079f576040519150601f19603f3d011682016040523d82523d6000602084013e6107a4565b606091505b506020808401919091529015158083529084013517610815577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b506001016106d8565b6060818067ffffffffffffffff81111561083a5761083a610cf7565b60405190808252806020026020018201604052801561088057816020015b6040805180820190915260008152606060208201528152602001906001900390816108585790505b5091503660005b828110156109d45760008482815181106108a3576108a3610d26565b602002602001015190508686838181106108bf576108bf610d26565b90506020028101906108d19190610e08565b92506108e06020840184610ca8565b73ffffffffffffffffffffffffffffffffffffffff166109036020850185610d93565b604051610911929190610df8565b6000604051808303816000865af19150503d806000811461094e576040519150601f19603f3d011682016040523d82523d6000602084013e610953565b606091505b5060208301521515815287156109cb5780516109cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b50600101610887565b5050509392505050565b60008060606109ef60018686610654565b919790965090945092505050565b60008083601f840112610a0f57600080fd5b50813567ffffffffffffffff811115610a2757600080fd5b6020830191508360208260051b8501011115610a4257600080fd5b9250929050565b60008060208385031215610a5c57600080fd5b823567ffffffffffffffff811115610a7357600080fd5b610a7f858286016109fd565b90969095509350505050565b6000815180845260005b81811015610ab157602081850181015186830182015201610a95565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b600082825180855260208501945060208160051b8301016020850160005b83811015610b76577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301885281518051151584526020810151905060406020850152610b5f6040850182610a8b565b6020998a0199909450929092019150600101610b0d565b50909695505050505050565b602081526000610b956020830184610aef565b9392505050565b6000604082018483526040602084015280845180835260608501915060608160051b86010192506020860160005b82811015610c19577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0878603018452610c04858351610a8b565b94506020938401939190910190600101610bca565b5092979650505050505050565b600080600060408486031215610c3b57600080fd5b83358015158114610c4b57600080fd5b9250602084013567ffffffffffffffff811115610c6757600080fd5b610c73868287016109fd565b9497909650939450505050565b838152826020820152606060408201526000610c9f6060830184610aef565b95945050505050565b600060208284031215610cba57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610b9557600080fd5b600060208284031215610cf057600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112610d8957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610dc857600080fd5b83018035915067ffffffffffffffff821115610de357600080fd5b602001915036819003821315610a4257600080fd5b8183823760009101908152919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610d8957600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610d8957600080fdfea2646970667358221220ea4e5a0ae09a929842700f832d80a15e87bb0a85c46b62022008b78e1e5d160264736f6c634300081c0033

Verified Source Code Full Match

Compiler: v0.8.28+commit.7893614a EVM: paris Optimization: Yes (9999999 runs)
Multicall3.sol 222 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

/// @title Multicall3
/// @notice Aggregate results from multiple function calls
/// @dev Multicall & Multicall2 backwards-compatible
/// @dev Aggregate methods are marked `payable` to save 24 gas per call
/// @author Michael Elliot <[email protected]>
/// @author Joshua Levine <[email protected]>
/// @author Nick Johnson <[email protected]>
/// @author Andreas Bigger <[email protected]>
/// @author Matt Solomon <[email protected]>
/// @custom:ref https://github.com/datachainlab/ethereum-ibc-relay-chain/blob/v0.3.14/contracts/Multicall3.sol
contract Multicall3 {
    struct Call {
        address target;
        bytes callData;
    }

    struct Call3 {
        address target;
        bool allowFailure;
        bytes callData;
    }

    struct Call3Value {
        address target;
        bool allowFailure;
        uint256 value;
        bytes callData;
    }

    struct Result {
        bool success;
        bytes returnData;
    }

    /// @notice Backwards-compatible call aggregation with Multicall
    /// @param calls An array of Call structs
    /// @return blockNumber The block number where the calls were executed
    /// @return returnData An array of bytes containing the responses
    function aggregate(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes[] memory returnData) {
        blockNumber = block.number;
        uint256 length = calls.length;
        returnData = new bytes[](length);
        Call calldata call;
        for (uint256 i = 0; i < length;) {
            bool success;
            call = calls[i];
            (success, returnData[i]) = call.target.call(call.callData);
            if (!success) {
                bytes memory result = returnData[i];
                assembly {
                    revert(add(result, 0x20), mload(result))
                }
            }
            unchecked { ++i; }
        }
    }

    /// @notice Backwards-compatible with Multicall2
    /// @notice Aggregate calls without requiring success
    /// @param requireSuccess If true, require all calls to succeed
    /// @param calls An array of Call structs
    /// @return returnData An array of Result structs
    function tryAggregate(bool requireSuccess, Call[] calldata calls) public payable returns (Result[] memory returnData) {
        uint256 length = calls.length;
        returnData = new Result[](length);
        Call calldata call;
        for (uint256 i = 0; i < length;) {
            Result memory result = returnData[i];
            call = calls[i];
            (result.success, result.returnData) = call.target.call(call.callData);
            if (requireSuccess) require(result.success, "Multicall3: call failed");
            unchecked { ++i; }
        }
    }

    /// @notice Backwards-compatible with Multicall2
    /// @notice Aggregate calls and allow failures using tryAggregate
    /// @param calls An array of Call structs
    /// @return blockNumber The block number where the calls were executed
    /// @return blockHash The hash of the block where the calls were executed
    /// @return returnData An array of Result structs
    function tryBlockAndAggregate(bool requireSuccess, Call[] calldata calls) public payable returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData) {
        blockNumber = block.number;
        blockHash = blockhash(block.number);
        returnData = tryAggregate(requireSuccess, calls);
    }

    /// @notice Backwards-compatible with Multicall2
    /// @notice Aggregate calls and allow failures using tryAggregate
    /// @param calls An array of Call structs
    /// @return blockNumber The block number where the calls were executed
    /// @return blockHash The hash of the block where the calls were executed
    /// @return returnData An array of Result structs
    function blockAndAggregate(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData) {
        (blockNumber, blockHash, returnData) = tryBlockAndAggregate(true, calls);
    }

    /// @notice Aggregate calls, ensuring each returns success if required
    /// @param calls An array of Call3 structs
    /// @return returnData An array of Result structs
    function aggregate3(Call3[] calldata calls) public payable returns (Result[] memory returnData) {
        uint256 length = calls.length;
        returnData = new Result[](length);
        Call3 calldata calli;
        for (uint256 i = 0; i < length;) {
            Result memory result = returnData[i];
            calli = calls[i];
            (result.success, result.returnData) = calli.target.call(calli.callData);
            assembly {
            // Revert if the call fails and failure is not allowed
            // `allowFailure := calldataload(add(calli, 0x20))` and `success := mload(result)`
                if iszero(or(calldataload(add(calli, 0x20)), mload(result))) {
                // set "Error(string)" signature: bytes32(bytes4(keccak256("Error(string)")))
                    mstore(0x00, 0x08c379a000000000000000000000000000000000000000000000000000000000)
                // set data offset
                    mstore(0x04, 0x0000000000000000000000000000000000000000000000000000000000000020)
                // set length of revert string
                    mstore(0x24, 0x0000000000000000000000000000000000000000000000000000000000000017)
                // set revert string: bytes32(abi.encodePacked("Multicall3: call failed"))
                    mstore(0x44, 0x4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000)
                    revert(0x00, 0x64)
                }
            }
            unchecked { ++i; }
        }
    }

    /// @notice Aggregate calls with a msg value
    /// @notice Reverts if msg.value is less than the sum of the call values
    /// @param calls An array of Call3Value structs
    /// @return returnData An array of Result structs
    function aggregate3Value(Call3Value[] calldata calls) public payable returns (Result[] memory returnData) {
        uint256 valAccumulator;
        uint256 length = calls.length;
        returnData = new Result[](length);
        Call3Value calldata calli;
        for (uint256 i = 0; i < length;) {
            Result memory result = returnData[i];
            calli = calls[i];
            uint256 val = calli.value;
            // Humanity will be a Type V Kardashev Civilization before this overflows - andreas
            // ~ 10^25 Wei in existence << ~ 10^76 size uint fits in a uint256
            unchecked { valAccumulator += val; }
            (result.success, result.returnData) = calli.target.call{value: val}(calli.callData);
            assembly {
            // Revert if the call fails and failure is not allowed
            // `allowFailure := calldataload(add(calli, 0x20))` and `success := mload(result)`
                if iszero(or(calldataload(add(calli, 0x20)), mload(result))) {
                // set "Error(string)" signature: bytes32(bytes4(keccak256("Error(string)")))
                    mstore(0x00, 0x08c379a000000000000000000000000000000000000000000000000000000000)
                // set data offset
                    mstore(0x04, 0x0000000000000000000000000000000000000000000000000000000000000020)
                // set length of revert string
                    mstore(0x24, 0x0000000000000000000000000000000000000000000000000000000000000017)
                // set revert string: bytes32(abi.encodePacked("Multicall3: call failed"))
                    mstore(0x44, 0x4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000)
                    revert(0x00, 0x84)
                }
            }
            unchecked { ++i; }
        }
        // Finally, make sure the msg.value = SUM(call[0...i].value)
        require(msg.value == valAccumulator, "Multicall3: value mismatch");
    }

    /// @notice Returns the block hash for the given block number
    /// @param blockNumber The block number
    function getBlockHash(uint256 blockNumber) public view returns (bytes32 blockHash) {
        blockHash = blockhash(blockNumber);
    }

    /// @notice Returns the block number
    function getBlockNumber() public view returns (uint256 blockNumber) {
        blockNumber = block.number;
    }

    /// @notice Returns the block coinbase
    function getCurrentBlockCoinbase() public view returns (address coinbase) {
        coinbase = block.coinbase;
    }

    /// @notice Returns the block difficulty
    function getCurrentBlockDifficulty() public view returns (uint256 difficulty) {
        difficulty = block.difficulty;
    }

    /// @notice Returns the block gas limit
    function getCurrentBlockGasLimit() public view returns (uint256 gaslimit) {
        gaslimit = block.gaslimit;
    }

    /// @notice Returns the block timestamp
    function getCurrentBlockTimestamp() public view returns (uint256 timestamp) {
        timestamp = block.timestamp;
    }

    /// @notice Returns the (ETH) balance of a given address
    function getEthBalance(address addr) public view returns (uint256 balance) {
        balance = addr.balance;
    }

    /// @notice Returns the block hash of the last block
    function getLastBlockHash() public view returns (bytes32 blockHash) {
        unchecked {
            blockHash = blockhash(block.number - 1);
        }
    }

    /// @notice Gets the base fee of the given block
    /// @notice Can revert if the BASEFEE opcode is not implemented by the given chain
    function getBasefee() public view returns (uint256 basefee) {
        basefee = block.basefee;
    }

    /// @notice Returns the chain id
    function getChainId() public view returns (uint256 chainid) {
        chainid = block.chainid;
    }
}

Read Contract

getBasefee 0x3e64a696 → uint256
getBlockHash 0xee82ac5e → bytes32
getBlockNumber 0x42cbb15c → uint256
getChainId 0x3408e470 → uint256
getCurrentBlockCoinbase 0xa8b0574e → address
getCurrentBlockDifficulty 0x72425d9d → uint256
getCurrentBlockGasLimit 0x86d516e8 → uint256
getCurrentBlockTimestamp 0x0f28c97d → uint256
getEthBalance 0x4d2301cc → uint256
getLastBlockHash 0x27e86d6e → bytes32

Write Contract 6 functions

These functions modify contract state and require a wallet transaction to execute.

aggregate 0xd0707b67
tuple[] calls
returns: uint256, bytes[]
aggregate3 0xc2e047ff
tuple[] calls
returns: tuple[]
aggregate3Value 0x841a9d42
tuple[] calls
returns: tuple[]
blockAndAggregate 0x966c523e
tuple[] calls
returns: uint256, bytes32, tuple[]
tryAggregate 0x3997d064
bool requireSuccess
tuple[] calls
returns: tuple[]
tryBlockAndAggregate 0x28e439f3
bool requireSuccess
tuple[] calls
returns: uint256, bytes32, tuple[]

Recent Transactions

No transactions found for this address