ETH Price: $3,744.01 (+0.23%)

Contract

0x2c884e50D2535697BD96fB7875d6F51356762324
 

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Value
Claim1076177202023-07-31 20:10:17299 days ago1690834217IN
0x2c884e50...356762324
0 ETH0.00000020.00205135
Claim1076149172023-07-31 18:36:51299 days ago1690828611IN
0x2c884e50...356762324
0 ETH0.000003850.03795641
Claim1076146992023-07-31 18:29:35299 days ago1690828175IN
0x2c884e50...356762324
0 ETH0.000000090.00097008
Claim1076144512023-07-31 18:21:19299 days ago1690827679IN
0x2c884e50...356762324
0 ETH0.000003850.03790462
Claim1076144202023-07-31 18:20:17299 days ago1690827617IN
0x2c884e50...356762324
0 ETH0.000009370.09215008
Claim1076143372023-07-31 18:17:31299 days ago1690827451IN
0x2c884e50...356762324
0 ETH0.000000210.0020888
Claim1076141452023-07-31 18:11:07299 days ago1690827067IN
0x2c884e50...356762324
0 ETH0.000000080.00085993
Claim1076141192023-07-31 18:10:15299 days ago1690827015IN
0x2c884e50...356762324
0 ETH0.000000090.00091395
Claim1076137402023-07-31 17:57:37299 days ago1690826257IN
0x2c884e50...356762324
0 ETH0.000004890.04850013
Claim1076134572023-07-31 17:48:11299 days ago1690825691IN
0x2c884e50...356762324
0 ETH0.000000040.00048303
Claim1076132812023-07-31 17:42:19299 days ago1690825339IN
0x2c884e50...356762324
0 ETH0.000003310.03285618
Claim1076101582023-07-31 15:58:13299 days ago1690819093IN
0x2c884e50...356762324
0 ETH0.000000460.0045896
Claim1076090542023-07-31 15:21:25299 days ago1690816885IN
0x2c884e50...356762324
0 ETH0.000000610.00608752
Claim1076088882023-07-31 15:15:53299 days ago1690816553IN
0x2c884e50...356762324
0 ETH0.000000010.00014711
Claim1076088342023-07-31 15:14:05299 days ago1690816445IN
0x2c884e50...356762324
0 ETH0.000000010.00016152
Claim1076084182023-07-31 15:00:13299 days ago1690815613IN
0x2c884e50...356762324
0 ETH00.00001071
Claim1076080882023-07-31 14:49:13299 days ago1690814953IN
0x2c884e50...356762324
0 ETH00.00003554
Claim1076072062023-07-31 14:19:49299 days ago1690813189IN
0x2c884e50...356762324
0 ETH0.000000010.00012255
Claim1076054782023-07-31 13:22:13299 days ago1690809733IN
0x2c884e50...356762324
0 ETH0.00000030.00300725
Claim1076039832023-07-31 12:32:23299 days ago1690806743IN
0x2c884e50...356762324
0 ETH00.00000066
Claim1076037492023-07-31 12:24:35299 days ago1690806275IN
0x2c884e50...356762324
0 ETH00.00000971
Claim1075977472023-07-31 9:04:31299 days ago1690794271IN
0x2c884e50...356762324
0 ETH00.0000015
Claim1075952742023-07-31 7:42:05299 days ago1690789325IN
0x2c884e50...356762324
0 ETH00.00000063
Claim1075948962023-07-31 7:29:29299 days ago1690788569IN
0x2c884e50...356762324
0 ETH0.000004890.04850012
Claim1075946612023-07-31 7:21:39299 days ago1690788099IN
0x2c884e50...356762324
0 ETH00.00000017
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
1075578852023-07-30 10:55:47300 days ago1690714547
0x2c884e50...356762324
0 ETH
1075538232023-07-30 8:40:23300 days ago1690706423
0x2c884e50...356762324
0 ETH
1075537412023-07-30 8:37:39300 days ago1690706259
0x2c884e50...356762324
0 ETH
1075536642023-07-30 8:35:05300 days ago1690706105
0x2c884e50...356762324
0 ETH
1075536042023-07-30 8:33:05300 days ago1690705985
0x2c884e50...356762324
0 ETH
1075530362023-07-30 8:14:09300 days ago1690704849
0x2c884e50...356762324
0 ETH
1075527572023-07-30 8:04:51300 days ago1690704291
0x2c884e50...356762324
0 ETH
1075521822023-07-30 7:45:41300 days ago1690703141
0x2c884e50...356762324
0 ETH
1075520512023-07-30 7:41:19300 days ago1690702879
0x2c884e50...356762324
0 ETH
1075520422023-07-30 7:41:01300 days ago1690702861
0x2c884e50...356762324
0 ETH
1075520332023-07-30 7:40:43300 days ago1690702843
0x2c884e50...356762324
0 ETH
1075520242023-07-30 7:40:25300 days ago1690702825
0x2c884e50...356762324
0 ETH
1075520182023-07-30 7:40:13300 days ago1690702813
0x2c884e50...356762324
0 ETH
1075520052023-07-30 7:39:47300 days ago1690702787
0x2c884e50...356762324
0 ETH
1075519872023-07-30 7:39:11300 days ago1690702751
0x2c884e50...356762324
0 ETH
1075519772023-07-30 7:38:51300 days ago1690702731
0x2c884e50...356762324
0 ETH
1075519672023-07-30 7:38:31300 days ago1690702711
0x2c884e50...356762324
0 ETH
1075519392023-07-30 7:37:35300 days ago1690702655
0x2c884e50...356762324
0 ETH
1075514842023-07-30 7:22:25300 days ago1690701745
0x2c884e50...356762324
0 ETH
1075514702023-07-30 7:21:57300 days ago1690701717
0x2c884e50...356762324
0 ETH
1075511262023-07-30 7:10:29300 days ago1690701029
0x2c884e50...356762324
0 ETH
1075511102023-07-30 7:09:57300 days ago1690700997
0x2c884e50...356762324
0 ETH
1075510952023-07-30 7:09:27300 days ago1690700967
0x2c884e50...356762324
0 ETH
1075510762023-07-30 7:08:49300 days ago1690700929
0x2c884e50...356762324
0 ETH
1075510612023-07-30 7:08:19300 days ago1690700899
0x2c884e50...356762324
0 ETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
KreskoCollectionClaimer

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 3 : KreskoCollectionClaimer.sol
//SPDX-License-Identifier: MIT

pragma solidity >=0.8.18;

import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
import {IKreskoCollection} from "./interfaces/IKreskoCollection.sol";

/**
 * @title Kresko NFT Claimer
 * @author Kresko
 * @notice This contract allows users to claim their Kresko NFTs
 * @dev claimer contract using merkle proofs to verify the claim
 */
contract KreskoCollectionClaimer {
    bytes32 public immutable merkleRoot;

    IKreskoCollection public collection;

    // address => tokenId => claimed
    mapping(address => mapping(uint256 => bool)) public claimed;

    /**
     * @dev Constructor.
     * @param _merkleRoot The merkle root to set.
     */
    constructor(address _collection, bytes32 _merkleRoot) {
        merkleRoot = _merkleRoot;
        collection = IKreskoCollection(_collection);
    }

    /**
     * @dev claim a NFT based on their address
     * @param _account account to mint the nft to
     * @param _id token id to claim.
     * @param _proof The merkle proof to verify.
     */
    function claim(
        address _account,
        uint256 _id,
        uint256 _amount,
        bytes32[] calldata _proof
    ) external {
        bytes32 leaf = keccak256(
            bytes.concat(keccak256(abi.encode(msg.sender, _id, _amount)))
        );
        require(!claimed[msg.sender][_id], "already claimed");
        require(MerkleProof.verify(_proof, merkleRoot, leaf), "Invalid proof");

        collection.mint(_account, _id, _amount);

        claimed[msg.sender][_id] = true;
    }
}

File 2 of 3 : MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Tree proofs.
 *
 * The tree and the proofs can be generated using our
 * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].
 * You will find a quickstart guide in the readme.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 * OpenZeppelin's JavaScript library generates merkle trees that are safe
 * against this attack out of the box.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Calldata version of {verify}
     *
     * _Available since v4.7._
     */
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Calldata version of {processProof}
     *
     * _Available since v4.7._
     */
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Calldata version of {multiProofVerify}
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * _Available since v4.7._
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Calldata version of {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

File 3 of 3 : IKreskoCollection.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

interface IKreskoCollection {
    function mint(address _to, uint256 _tokenId, uint _amount) external;
}

Settings
{
  "evmVersion": "paris",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": [],
  "viaIR": true,
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_collection","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collection","outputs":[{"internalType":"contract IKreskoCollection","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]

60a03461008b57601f61052238819003918201601f19168301916001600160401b0383118484101761009057808492604094855283398101031261008b5780516001600160a01b038116919082900361008b5760200151608052600080546001600160a01b03191691909117905560405161047b90816100a7823960805181818160d7015261028e0152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe608080604052600436101561001357600080fd5b600090813560e01c908163172bd6de146100fa575080632eb4a7ab146100bf5780634dd6c8de1461007657637de1e5361461004d57600080fd5b34610073578060031936011261007357546040516001600160a01b039091168152602090f35b80fd5b50346100735760403660031901126100735760209060ff906040906001600160a01b036100a16103f2565b16815260018452818120602435825284522054166040519015158152f35b503461007357806003193601126100735760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b8234610073576080366003190112610073576101146103f2565b9167ffffffffffffffff606435116103ee573660236064350112156103ee5767ffffffffffffffff60643560040135116103ee573660246064356004013560051b6064350101116103ee573360208201908152602435604083015260443560608084019190915282529061018960808261040d565b5190206040519060208201526020815280604081011067ffffffffffffffff60408301111761034e57604081016040528051602082012090338352600160205260408320602435845260205260ff6040842054166103b65750604051906101fc60206064356004013560051b018361040d565b60643560048101358352602401602083015b60246064356004013560051b606435010182106103a65750509082915b81518310156102895760208360051b830101519081811060001461027a578452602052604083205b916000198114610266576001019161022b565b634e487b7160e01b84526011600452602484fd5b90845260205260408320610253565b8484917f00000000000000000000000000000000000000000000000000000000000000000361037157815482916001600160a01b0390911690813b1561036d57604051630ab714fb60e11b81526001600160a01b039190911660048201526024803590820152604480359082015291908290606490829084905af1801561036257610336575b50338152600160205260408120602435825260205260408120600160ff1982541617905580f35b67ffffffffffffffff811161034e576040528161030f565b634e487b7160e01b82526041600452602482fd5b6040513d84823e3d90fd5b5050fd5b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606490fd5b813581526020918201910161020e565b604060649162461bcd60e51b8282015260206044820152600f838201526e185b1c9958591e4818db185a5b5959608a1b608482015201fd5b5080fd5b600435906001600160a01b038216820361040857565b600080fd5b90601f8019910116810190811067ffffffffffffffff82111761042f57604052565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220f348b9afa821b8989ea85196325094f60d5a59ea7507d4ac9559f15829d7d41f64736f6c63430008120033000000000000000000000000abdb949a18d27367118573a217e5353ede5a0f1e1960619e7702e0cf0580a234adddc03a67c791de14e1030c6f60335696e4adcd

Deployed Bytecode

0x608080604052600436101561001357600080fd5b600090813560e01c908163172bd6de146100fa575080632eb4a7ab146100bf5780634dd6c8de1461007657637de1e5361461004d57600080fd5b34610073578060031936011261007357546040516001600160a01b039091168152602090f35b80fd5b50346100735760403660031901126100735760209060ff906040906001600160a01b036100a16103f2565b16815260018452818120602435825284522054166040519015158152f35b503461007357806003193601126100735760206040517f1960619e7702e0cf0580a234adddc03a67c791de14e1030c6f60335696e4adcd8152f35b8234610073576080366003190112610073576101146103f2565b9167ffffffffffffffff606435116103ee573660236064350112156103ee5767ffffffffffffffff60643560040135116103ee573660246064356004013560051b6064350101116103ee573360208201908152602435604083015260443560608084019190915282529061018960808261040d565b5190206040519060208201526020815280604081011067ffffffffffffffff60408301111761034e57604081016040528051602082012090338352600160205260408320602435845260205260ff6040842054166103b65750604051906101fc60206064356004013560051b018361040d565b60643560048101358352602401602083015b60246064356004013560051b606435010182106103a65750509082915b81518310156102895760208360051b830101519081811060001461027a578452602052604083205b916000198114610266576001019161022b565b634e487b7160e01b84526011600452602484fd5b90845260205260408320610253565b8484917f1960619e7702e0cf0580a234adddc03a67c791de14e1030c6f60335696e4adcd0361037157815482916001600160a01b0390911690813b1561036d57604051630ab714fb60e11b81526001600160a01b039190911660048201526024803590820152604480359082015291908290606490829084905af1801561036257610336575b50338152600160205260408120602435825260205260408120600160ff1982541617905580f35b67ffffffffffffffff811161034e576040528161030f565b634e487b7160e01b82526041600452602482fd5b6040513d84823e3d90fd5b5050fd5b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606490fd5b813581526020918201910161020e565b604060649162461bcd60e51b8282015260206044820152600f838201526e185b1c9958591e4818db185a5b5959608a1b608482015201fd5b5080fd5b600435906001600160a01b038216820361040857565b600080fd5b90601f8019910116810190811067ffffffffffffffff82111761042f57604052565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220f348b9afa821b8989ea85196325094f60d5a59ea7507d4ac9559f15829d7d41f64736f6c63430008120033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000abdb949a18d27367118573a217e5353ede5a0f1e1960619e7702e0cf0580a234adddc03a67c791de14e1030c6f60335696e4adcd

-----Decoded View---------------
Arg [0] : _collection (address): 0xAbDb949a18d27367118573A217E5353EDe5A0f1E
Arg [1] : _merkleRoot (bytes32): 0x1960619e7702e0cf0580a234adddc03a67c791de14e1030c6f60335696e4adcd

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000abdb949a18d27367118573a217e5353ede5a0f1e
Arg [1] : 1960619e7702e0cf0580a234adddc03a67c791de14e1030c6f60335696e4adcd


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
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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