ETH Price: $2,327.71 (-0.71%)

Contract

0xe84DCd8587287B997F51299430A396AD03aAEC06
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040167633542023-03-05 16:22:47555 days ago1678033367IN
 Create: CoWUidGenerator
0 ETH0.0130021825.77257007

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

Contract Source Code Verified (Exact Match)

Contract Name:
CoWUidGenerator

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2023-03-05
*/

// SPDX-License-Identifier: LGPL-3.0-or-later
pragma solidity ^0.7.6;
pragma abicoder v2;

interface GPv2SettlementContract {
    function domainSeparator() external view returns (bytes32);
}

contract CoWUidGenerator {
    using GPv2Order for GPv2Order.Data;
    GPv2SettlementContract settlement = GPv2SettlementContract(0x9008D19f58AAbD9eD0D60971565AA8510560ab41);

    function getUid(
        address sellToken, 
        address buyToken, 
        address receiver, 
        uint256 sellAmount, 
        uint256 buyAmount, 
        uint32 validTo, 
        bytes32 appData, 
        uint256 feeAmount, 
        bool isSell, 
        bool partiallyFillable) 
    public view returns (bytes32 hash,  bytes memory encoded){
        bytes32 kind = 0x6ed88e868af0a1983e3886d5f3e95a2fafbd6c3450bc229e27342283dc429ccc;
        if (isSell) {
            kind = 0xf3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775;
        }
        GPv2Order.Data memory order =  GPv2Order.Data(
            sellToken,
            buyToken,
            receiver,
            sellAmount,
            buyAmount,
            validTo,
            appData,
            feeAmount,
            kind,
            partiallyFillable,
            0x5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9,
            0x5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9
        );
        hash = order.hash(settlement.domainSeparator());
        encoded = abi.encode(order);
    }
}

library GPv2Order {
    /// @dev The complete data for a Gnosis Protocol order. This struct contains
    /// all order parameters that are signed for submitting to GP.
    struct Data {
        address sellToken;
        address buyToken;
        address receiver;
        uint256 sellAmount;
        uint256 buyAmount;
        uint32 validTo;
        bytes32 appData;
        uint256 feeAmount;
        bytes32 kind;
        bool partiallyFillable;
        bytes32 sellTokenBalance;
        bytes32 buyTokenBalance;
    }

    /// @dev The order EIP-712 type hash for the [`GPv2Order.Data`] struct.
    ///
    /// This value is pre-computed from the following expression:
    /// ```
    /// keccak256(
    ///     "Order(" +
    ///         "address sellToken," +
    ///         "address buyToken," +
    ///         "address receiver," +
    ///         "uint256 sellAmount," +
    ///         "uint256 buyAmount," +
    ///         "uint32 validTo," +
    ///         "bytes32 appData," +
    ///         "uint256 feeAmount," +
    ///         "string kind," +
    ///         "bool partiallyFillable" +
    ///         "string sellTokenBalance" +
    ///         "string buyTokenBalance" +
    ///     ")"
    /// )
    /// ```
    bytes32 internal constant TYPE_HASH =
        hex"d5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e489";

    /// @dev The marker value for a sell order for computing the order struct
    /// hash. This allows the EIP-712 compatible wallets to display a
    /// descriptive string for the order kind (instead of 0 or 1).
    ///
    /// This value is pre-computed from the following expression:
    /// ```
    /// keccak256("sell")
    /// ```
    bytes32 internal constant KIND_SELL =
        hex"f3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775";

    /// @dev The OrderKind marker value for a buy order for computing the order
    /// struct hash.
    ///
    /// This value is pre-computed from the following expression:
    /// ```
    /// keccak256("buy")
    /// ```
    bytes32 internal constant KIND_BUY =
        hex"6ed88e868af0a1983e3886d5f3e95a2fafbd6c3450bc229e27342283dc429ccc";

    /// @dev The TokenBalance marker value for using direct ERC20 balances for
    /// computing the order struct hash.
    ///
    /// This value is pre-computed from the following expression:
    /// ```
    /// keccak256("erc20")
    /// ```
    bytes32 internal constant BALANCE_ERC20 =
        hex"5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9";

    /// @dev The TokenBalance marker value for using Balancer Vault external
    /// balances (in order to re-use Vault ERC20 approvals) for computing the
    /// order struct hash.
    ///
    /// This value is pre-computed from the following expression:
    /// ```
    /// keccak256("external")
    /// ```
    bytes32 internal constant BALANCE_EXTERNAL =
        hex"abee3b73373acd583a130924aad6dc38cfdc44ba0555ba94ce2ff63980ea0632";

    /// @dev The TokenBalance marker value for using Balancer Vault internal
    /// balances for computing the order struct hash.
    ///
    /// This value is pre-computed from the following expression:
    /// ```
    /// keccak256("internal")
    /// ```
    bytes32 internal constant BALANCE_INTERNAL =
        hex"4ac99ace14ee0a5ef932dc609df0943ab7ac16b7583634612f8dc35a4289a6ce";

    /// @dev Marker address used to indicate that the receiver of the trade
    /// proceeds should the owner of the order.
    ///
    /// This is chosen to be `address(0)` for gas efficiency as it is expected
    /// to be the most common case.
    address internal constant RECEIVER_SAME_AS_OWNER = address(0);

    /// @dev The byte length of an order unique identifier.
    uint256 internal constant UID_LENGTH = 56;

    /// @dev Returns the actual receiver for an order. This function checks
    /// whether or not the [`receiver`] field uses the marker value to indicate
    /// it is the same as the order owner.
    ///
    /// @return receiver The actual receiver of trade proceeds.
    function actualReceiver(Data memory order, address owner)
        internal
        pure
        returns (address receiver)
    {
        if (order.receiver == RECEIVER_SAME_AS_OWNER) {
            receiver = owner;
        } else {
            receiver = order.receiver;
        }
    }

    /// @dev Return the EIP-712 signing hash for the specified order.
    ///
    /// @param order The order to compute the EIP-712 signing hash for.
    /// @param domainSeparator The EIP-712 domain separator to use.
    /// @return orderDigest The 32 byte EIP-712 struct hash.
    function hash(Data memory order, bytes32 domainSeparator)
        internal
        pure
        returns (bytes32 orderDigest)
    {
        bytes32 structHash;

        // NOTE: Compute the EIP-712 order struct hash in place. As suggested
        // in the EIP proposal, noting that the order struct has 10 fields, and
        // including the type hash `(12 + 1) * 32 = 416` bytes to hash.
        // <https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#rationale-for-encodedata>
        // solhint-disable-next-line no-inline-assembly
        assembly {
            let dataStart := sub(order, 32)
            let temp := mload(dataStart)
            mstore(dataStart, TYPE_HASH)
            structHash := keccak256(dataStart, 416)
            mstore(dataStart, temp)
        }

        // NOTE: Now that we have the struct hash, compute the EIP-712 signing
        // hash using scratch memory past the free memory pointer. The signing
        // hash is computed from `"\x19\x01" || domainSeparator || structHash`.
        // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory>
        // <https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#specification>
        // solhint-disable-next-line no-inline-assembly
        assembly {
            let freeMemoryPointer := mload(0x40)
            mstore(freeMemoryPointer, "\x19\x01")
            mstore(add(freeMemoryPointer, 2), domainSeparator)
            mstore(add(freeMemoryPointer, 34), structHash)
            orderDigest := keccak256(freeMemoryPointer, 66)
        }
    }

    /// @dev Packs order UID parameters into the specified memory location. The
    /// result is equivalent to `abi.encodePacked(...)` with the difference that
    /// it allows re-using the memory for packing the order UID.
    ///
    /// This function reverts if the order UID buffer is not the correct size.
    ///
    /// @param orderUid The buffer pack the order UID parameters into.
    /// @param orderDigest The EIP-712 struct digest derived from the order
    /// parameters.
    /// @param owner The address of the user who owns this order.
    /// @param validTo The epoch time at which the order will stop being valid.
    function packOrderUidParams(
        bytes memory orderUid,
        bytes32 orderDigest,
        address owner,
        uint32 validTo
    ) internal pure {
        require(orderUid.length == UID_LENGTH, "GPv2: uid buffer overflow");

        // NOTE: Write the order UID to the allocated memory buffer. The order
        // parameters are written to memory in **reverse order** as memory
        // operations write 32-bytes at a time and we want to use a packed
        // encoding. This means, for example, that after writing the value of
        // `owner` to bytes `20:52`, writing the `orderDigest` to bytes `0:32`
        // will **overwrite** bytes `20:32`. This is desirable as addresses are
        // only 20 bytes and `20:32` should be `0`s:
        //
        //        |           1111111111222222222233333333334444444444555555
        //   byte | 01234567890123456789012345678901234567890123456789012345
        // -------+---------------------------------------------------------
        //  field | [.........orderDigest..........][......owner.......][vT]
        // -------+---------------------------------------------------------
        // mstore |                         [000000000000000000000000000.vT]
        //        |                     [00000000000.......owner.......]
        //        | [.........orderDigest..........]
        //
        // Additionally, since Solidity `bytes memory` are length prefixed,
        // 32 needs to be added to all the offsets.
        //
        // solhint-disable-next-line no-inline-assembly
        assembly {
            mstore(add(orderUid, 56), validTo)
            mstore(add(orderUid, 52), owner)
            mstore(add(orderUid, 32), orderDigest)
        }
    }

    /// @dev Extracts specific order information from the standardized unique
    /// order id of the protocol.
    ///
    /// @param orderUid The unique identifier used to represent an order in
    /// the protocol. This uid is the packed concatenation of the order digest,
    /// the validTo order parameter and the address of the user who created the
    /// order. It is used by the user to interface with the contract directly,
    /// and not by calls that are triggered by the solvers.
    /// @return orderDigest The EIP-712 signing digest derived from the order
    /// parameters.
    /// @return owner The address of the user who owns this order.
    /// @return validTo The epoch time at which the order will stop being valid.
    function extractOrderUidParams(bytes calldata orderUid)
        internal
        pure
        returns (
            bytes32 orderDigest,
            address owner,
            uint32 validTo
        )
    {
        require(orderUid.length == UID_LENGTH, "GPv2: invalid uid");

        // Use assembly to efficiently decode packed calldata.
        // solhint-disable-next-line no-inline-assembly
        assembly {
            orderDigest := calldataload(orderUid.offset)
            owner := shr(96, calldataload(add(orderUid.offset, 32)))
            validTo := shr(224, calldataload(add(orderUid.offset, 52)))
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"sellToken","type":"address"},{"internalType":"address","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bool","name":"isSell","type":"bool"},{"internalType":"bool","name":"partiallyFillable","type":"bool"}],"name":"getUid","outputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"encoded","type":"bytes"}],"stateMutability":"view","type":"function"}]

6080604052739008d19f58aabd9ed0d60971565aa8510560ab416000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561006457600080fd5b506107bf806100746000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80635871d10a14610030575b600080fd5b61004a6004803603810190610045919061037b565b610061565b604051610058929190610608565b60405180910390f35b6000606060007f6ed88e868af0a1983e3886d5f3e95a2fafbd6c3450bc229e27342283dc429ccc60001b905084156100ba577ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677560001b90505b60006040518061018001604052808f73ffffffffffffffffffffffffffffffffffffffff1681526020018e73ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018c81526020018b81526020018a63ffffffff16815260200189815260200188815260200183815260200186151581526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960001b81526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960001b815250905061025060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b815260040160206040518083038186803b15801561020957600080fd5b505afa15801561021d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102419190610456565b8261028590919063ffffffff16565b9350806040516020016102639190610638565b604051602081830303815290604052925050509a509a98505050505050505050565b6000806020840380517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a08220925080825250506040517f19010000000000000000000000000000000000000000000000000000000000008152836002820152816022820152604281209250505092915050565b60008135905061030c81610716565b92915050565b6000813590506103218161072d565b92915050565b60008135905061033681610744565b92915050565b60008151905061034b81610744565b92915050565b6000813590506103608161075b565b92915050565b60008135905061037581610772565b92915050565b6000806000806000806000806000806101408b8d03121561039b57600080fd5b60006103a98d828e016102fd565b9a505060206103ba8d828e016102fd565b99505060406103cb8d828e016102fd565b98505060606103dc8d828e01610351565b97505060806103ed8d828e01610351565b96505060a06103fe8d828e01610366565b95505060c061040f8d828e01610327565b94505060e06104208d828e01610351565b9350506101006104328d828e01610312565b9250506101206104448d828e01610312565b9150509295989b9194979a5092959850565b60006020828403121561046857600080fd5b60006104768482850161033c565b91505092915050565b61048881610670565b82525050565b61049781610682565b82525050565b6104a68161068e565b82525050565b6104b58161068e565b82525050565b60006104c682610654565b6104d0818561065f565b93506104e08185602086016106d2565b6104e981610705565b840191505092915050565b6101808201600082015161050b600085018261047f565b50602082015161051e602085018261047f565b506040820151610531604085018261047f565b50606082015161054460608501826105ea565b50608082015161055760808501826105ea565b5060a082015161056a60a08501826105f9565b5060c082015161057d60c085018261049d565b5060e082015161059060e08501826105ea565b506101008201516105a561010085018261049d565b506101208201516105ba61012085018261048e565b506101408201516105cf61014085018261049d565b506101608201516105e461016085018261049d565b50505050565b6105f3816106b8565b82525050565b610602816106c2565b82525050565b600060408201905061061d60008301856104ac565b818103602083015261062f81846104bb565b90509392505050565b60006101808201905061064e60008301846104f4565b92915050565b600081519050919050565b600082825260208201905092915050565b600061067b82610698565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b60005b838110156106f05780820151818401526020810190506106d5565b838111156106ff576000848401525b50505050565b6000601f19601f8301169050919050565b61071f81610670565b811461072a57600080fd5b50565b61073681610682565b811461074157600080fd5b50565b61074d8161068e565b811461075857600080fd5b50565b610764816106b8565b811461076f57600080fd5b50565b61077b816106c2565b811461078657600080fd5b5056fea264697066735822122040ad3b53ec465b51bb09cdc3720f0e2ed42693f85c3c5f741297035a59b64be364736f6c63430007060033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80635871d10a14610030575b600080fd5b61004a6004803603810190610045919061037b565b610061565b604051610058929190610608565b60405180910390f35b6000606060007f6ed88e868af0a1983e3886d5f3e95a2fafbd6c3450bc229e27342283dc429ccc60001b905084156100ba577ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677560001b90505b60006040518061018001604052808f73ffffffffffffffffffffffffffffffffffffffff1681526020018e73ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018c81526020018b81526020018a63ffffffff16815260200189815260200188815260200183815260200186151581526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960001b81526020017f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960001b815250905061025060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f698da256040518163ffffffff1660e01b815260040160206040518083038186803b15801561020957600080fd5b505afa15801561021d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102419190610456565b8261028590919063ffffffff16565b9350806040516020016102639190610638565b604051602081830303815290604052925050509a509a98505050505050505050565b6000806020840380517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a08220925080825250506040517f19010000000000000000000000000000000000000000000000000000000000008152836002820152816022820152604281209250505092915050565b60008135905061030c81610716565b92915050565b6000813590506103218161072d565b92915050565b60008135905061033681610744565b92915050565b60008151905061034b81610744565b92915050565b6000813590506103608161075b565b92915050565b60008135905061037581610772565b92915050565b6000806000806000806000806000806101408b8d03121561039b57600080fd5b60006103a98d828e016102fd565b9a505060206103ba8d828e016102fd565b99505060406103cb8d828e016102fd565b98505060606103dc8d828e01610351565b97505060806103ed8d828e01610351565b96505060a06103fe8d828e01610366565b95505060c061040f8d828e01610327565b94505060e06104208d828e01610351565b9350506101006104328d828e01610312565b9250506101206104448d828e01610312565b9150509295989b9194979a5092959850565b60006020828403121561046857600080fd5b60006104768482850161033c565b91505092915050565b61048881610670565b82525050565b61049781610682565b82525050565b6104a68161068e565b82525050565b6104b58161068e565b82525050565b60006104c682610654565b6104d0818561065f565b93506104e08185602086016106d2565b6104e981610705565b840191505092915050565b6101808201600082015161050b600085018261047f565b50602082015161051e602085018261047f565b506040820151610531604085018261047f565b50606082015161054460608501826105ea565b50608082015161055760808501826105ea565b5060a082015161056a60a08501826105f9565b5060c082015161057d60c085018261049d565b5060e082015161059060e08501826105ea565b506101008201516105a561010085018261049d565b506101208201516105ba61012085018261048e565b506101408201516105cf61014085018261049d565b506101608201516105e461016085018261049d565b50505050565b6105f3816106b8565b82525050565b610602816106c2565b82525050565b600060408201905061061d60008301856104ac565b818103602083015261062f81846104bb565b90509392505050565b60006101808201905061064e60008301846104f4565b92915050565b600081519050919050565b600082825260208201905092915050565b600061067b82610698565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b60005b838110156106f05780820151818401526020810190506106d5565b838111156106ff576000848401525b50505050565b6000601f19601f8301169050919050565b61071f81610670565b811461072a57600080fd5b50565b61073681610682565b811461074157600080fd5b50565b61074d8161068e565b811461075857600080fd5b50565b610764816106b8565b811461076f57600080fd5b50565b61077b816106c2565b811461078657600080fd5b5056fea264697066735822122040ad3b53ec465b51bb09cdc3720f0e2ed42693f85c3c5f741297035a59b64be364736f6c63430007060033

Deployed Bytecode Sourcemap

201:1334:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;385:1147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;711:12;726:20;758:12;773:66;758:81;;;;854:6;850:112;;;884:66;877:73;;;;850:112;972:27;1003:425;;;;;;;;1032:9;1003:425;;;;;;1056:8;1003:425;;;;;;1079:8;1003:425;;;;;;1102:10;1003:425;;;;1127:9;1003:425;;;;1151:7;1003:425;;;;;;1173:7;1003:425;;;;1195:9;1003:425;;;;1219:4;1003:425;;;;1238:17;1003:425;;;;;;1270:66;1003:425;;;;;;1351:66;1003:425;;;;;972:456;;1446:40;1457:10;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1446:5;:10;;:40;;;;:::i;:::-;1439:47;;1518:5;1507:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;1497:27;;385:1147;;;;;;;;;;;;;;;:::o;6295:1622::-;6403:19;6440:18;6913:2;6906:5;6902:14;6948:9;6942:16;6990:9;6979;6972:28;7049:3;7038:9;7028:25;7014:39;;7085:4;7074:9;7067:23;6870:231;;7658:4;7652:11;7703:10;7684:17;7677:37;7762:15;7758:1;7739:17;7735:25;7728:50;7827:10;7822:2;7803:17;7799:26;7792:46;7896:2;7877:17;7867:32;7852:47;;7612:298;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:143::-;;524:6;518:13;509:22;;540:33;567:5;540:33;:::i;:::-;499:80;;;;:::o;585:139::-;;669:6;656:20;647:29;;685:33;712:5;685:33;:::i;:::-;637:87;;;;:::o;730:137::-;;813:6;800:20;791:29;;829:32;855:5;829:32;:::i;:::-;781:86;;;;:::o;873:1560::-;;;;;;;;;;;1127:3;1115:9;1106:7;1102:23;1098:33;1095:2;;;1144:1;1141;1134:12;1095:2;1187:1;1212:53;1257:7;1248:6;1237:9;1233:22;1212:53;:::i;:::-;1202:63;;1158:117;1314:2;1340:53;1385:7;1376:6;1365:9;1361:22;1340:53;:::i;:::-;1330:63;;1285:118;1442:2;1468:53;1513:7;1504:6;1493:9;1489:22;1468:53;:::i;:::-;1458:63;;1413:118;1570:2;1596:53;1641:7;1632:6;1621:9;1617:22;1596:53;:::i;:::-;1586:63;;1541:118;1698:3;1725:53;1770:7;1761:6;1750:9;1746:22;1725:53;:::i;:::-;1715:63;;1669:119;1827:3;1854:52;1898:7;1889:6;1878:9;1874:22;1854:52;:::i;:::-;1844:62;;1798:118;1955:3;1982:53;2027:7;2018:6;2007:9;2003:22;1982:53;:::i;:::-;1972:63;;1926:119;2084:3;2111:53;2156:7;2147:6;2136:9;2132:22;2111:53;:::i;:::-;2101:63;;2055:119;2213:3;2240:50;2282:7;2273:6;2262:9;2258:22;2240:50;:::i;:::-;2230:60;;2184:116;2339:3;2366:50;2408:7;2399:6;2388:9;2384:22;2366:50;:::i;:::-;2356:60;;2310:116;1085:1348;;;;;;;;;;;;;:::o;2439:284::-;;2558:2;2546:9;2537:7;2533:23;2529:32;2526:2;;;2574:1;2571;2564:12;2526:2;2617:1;2642:64;2698:7;2689:6;2678:9;2674:22;2642:64;:::i;:::-;2632:74;;2588:128;2516:207;;;;:::o;2729:108::-;2806:24;2824:5;2806:24;:::i;:::-;2801:3;2794:37;2784:53;;:::o;2843:99::-;2914:21;2929:5;2914:21;:::i;:::-;2909:3;2902:34;2892:50;;:::o;2948:108::-;3025:24;3043:5;3025:24;:::i;:::-;3020:3;3013:37;3003:53;;:::o;3062:118::-;3149:24;3167:5;3149:24;:::i;:::-;3144:3;3137:37;3127:53;;:::o;3186:360::-;;3300:38;3332:5;3300:38;:::i;:::-;3354:70;3417:6;3412:3;3354:70;:::i;:::-;3347:77;;3433:52;3478:6;3473:3;3466:4;3459:5;3455:16;3433:52;:::i;:::-;3510:29;3532:6;3510:29;:::i;:::-;3505:3;3501:39;3494:46;;3276:270;;;;;:::o;3606:2320::-;3745:6;3740:3;3736:16;3839:4;3832:5;3828:16;3822:23;3858:63;3915:4;3910:3;3906:14;3892:12;3858:63;:::i;:::-;3762:169;4017:4;4010:5;4006:16;4000:23;4036:63;4093:4;4088:3;4084:14;4070:12;4036:63;:::i;:::-;3941:168;4195:4;4188:5;4184:16;4178:23;4214:63;4271:4;4266:3;4262:14;4248:12;4214:63;:::i;:::-;4119:168;4375:4;4368:5;4364:16;4358:23;4394:63;4451:4;4446:3;4442:14;4428:12;4394:63;:::i;:::-;4297:170;4554:4;4547:5;4543:16;4537:23;4573:63;4630:4;4625:3;4621:14;4607:12;4573:63;:::i;:::-;4477:169;4731:4;4724:5;4720:16;4714:23;4750:61;4805:4;4800:3;4796:14;4782:12;4750:61;:::i;:::-;4656:165;4906:4;4899:5;4895:16;4889:23;4925:63;4982:4;4977:3;4973:14;4959:12;4925:63;:::i;:::-;4831:167;5085:4;5078:5;5074:16;5068:23;5104:63;5161:4;5156:3;5152:14;5138:12;5104:63;:::i;:::-;5008:169;5259:6;5252:5;5248:18;5242:25;5280:65;5337:6;5332:3;5328:16;5314:12;5280:65;:::i;:::-;5187:168;5450:6;5443:5;5439:18;5433:25;5471:59;5522:6;5517:3;5513:16;5499:12;5471:59;:::i;:::-;5365:175;5634:6;5627:5;5623:18;5617:25;5655:65;5712:6;5707:3;5703:16;5689:12;5655:65;:::i;:::-;5550:180;5823:6;5816:5;5812:18;5806:25;5844:65;5901:6;5896:3;5892:16;5878:12;5844:65;:::i;:::-;5740:179;3714:2212;;;:::o;5932:108::-;6009:24;6027:5;6009:24;:::i;:::-;6004:3;5997:37;5987:53;;:::o;6046:105::-;6121:23;6138:5;6121:23;:::i;:::-;6116:3;6109:36;6099:52;;:::o;6157:419::-;;6334:2;6323:9;6319:18;6311:26;;6347:71;6415:1;6404:9;6400:17;6391:6;6347:71;:::i;:::-;6465:9;6459:4;6455:20;6450:2;6439:9;6435:18;6428:48;6493:76;6564:4;6555:6;6493:76;:::i;:::-;6485:84;;6301:275;;;;;:::o;6582:307::-;;6755:3;6744:9;6740:19;6732:27;;6769:113;6879:1;6868:9;6864:17;6855:6;6769:113;:::i;:::-;6722:167;;;;:::o;6895:98::-;;6980:5;6974:12;6964:22;;6953:40;;;:::o;6999:168::-;;7116:6;7111:3;7104:19;7156:4;7151:3;7147:14;7132:29;;7094:73;;;;:::o;7173:96::-;;7239:24;7257:5;7239:24;:::i;:::-;7228:35;;7218:51;;;:::o;7275:90::-;;7352:5;7345:13;7338:21;7327:32;;7317:48;;;:::o;7371:77::-;;7437:5;7426:16;;7416:32;;;:::o;7454:126::-;;7531:42;7524:5;7520:54;7509:65;;7499:81;;;:::o;7586:77::-;;7652:5;7641:16;;7631:32;;;:::o;7669:93::-;;7745:10;7738:5;7734:22;7723:33;;7713:49;;;:::o;7768:307::-;7836:1;7846:113;7860:6;7857:1;7854:13;7846:113;;;7945:1;7940:3;7936:11;7930:18;7926:1;7921:3;7917:11;7910:39;7882:2;7879:1;7875:10;7870:15;;7846:113;;;7977:6;7974:1;7971:13;7968:2;;;8057:1;8048:6;8043:3;8039:16;8032:27;7968:2;7817:258;;;;:::o;8081:102::-;;8173:2;8169:7;8164:2;8157:5;8153:14;8149:28;8139:38;;8129:54;;;:::o;8189:122::-;8262:24;8280:5;8262:24;:::i;:::-;8255:5;8252:35;8242:2;;8301:1;8298;8291:12;8242:2;8232:79;:::o;8317:116::-;8387:21;8402:5;8387:21;:::i;:::-;8380:5;8377:32;8367:2;;8423:1;8420;8413:12;8367:2;8357:76;:::o;8439:122::-;8512:24;8530:5;8512:24;:::i;:::-;8505:5;8502:35;8492:2;;8551:1;8548;8541:12;8492:2;8482:79;:::o;8567:122::-;8640:24;8658:5;8640:24;:::i;:::-;8633:5;8630:35;8620:2;;8679:1;8676;8669:12;8620:2;8610:79;:::o;8695:120::-;8767:23;8784:5;8767:23;:::i;:::-;8760:5;8757:34;8747:2;;8805:1;8802;8795:12;8747:2;8737:78;:::o

Swarm Source

ipfs://40ad3b53ec465b51bb09cdc3720f0e2ed42693f85c3c5f741297035a59b64be3

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.