ETH Price: $3,294.66 (-1.07%)

Contract

0xfdd15965c9d1013bde17F4802e26EAEBAc0595FD
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim213825972024-12-11 23:38:5911 days ago1733960339IN
0xfdd15965...BAc0595FD
0 ETH0.0015822417.60551285
Claim213769312024-12-11 4:37:4712 days ago1733891867IN
0xfdd15965...BAc0595FD
0 ETH0.0013474614.98970626
Claim212527612024-11-23 20:15:1129 days ago1732392911IN
0xfdd15965...BAc0595FD
0 ETH0.0013122114.59982756
Claim212340742024-11-21 5:39:3532 days ago1732167575IN
0xfdd15965...BAc0595FD
0 ETH0.0011017612.25782243
Claim212328852024-11-21 1:40:1132 days ago1732153211IN
0xfdd15965...BAc0595FD
0 ETH0.000798248.88117566
Claim212116402024-11-18 2:33:4735 days ago1731897227IN
0xfdd15965...BAc0595FD
0 ETH0.0010390711.5622833
Claim212116352024-11-18 2:32:4735 days ago1731897167IN
0xfdd15965...BAc0595FD
0 ETH0.0008994210.00567856
Claim211540942024-11-10 1:51:1143 days ago1731203471IN
0xfdd15965...BAc0595FD
0 ETH0.0009039210.62575718
Claim211540372024-11-10 1:39:3543 days ago1731202775IN
0xfdd15965...BAc0595FD
0 ETH0.0009547811.22376979
Claim211330242024-11-07 3:15:3546 days ago1730949335IN
0xfdd15965...BAc0595FD
0 ETH0.0015404417.14097994
Claim211329222024-11-07 2:54:5946 days ago1730948099IN
0xfdd15965...BAc0595FD
0 ETH0.0017944619.96508681
Claim211317892024-11-06 23:07:2346 days ago1730934443IN
0xfdd15965...BAc0595FD
0 ETH0.0017402919.36712428
Claim211296082024-11-06 15:49:2346 days ago1730908163IN
0xfdd15965...BAc0595FD
0 ETH0.0021231823.62166435
Claim211282762024-11-06 11:21:2346 days ago1730892083IN
0xfdd15965...BAc0595FD
0 ETH0.0015717417.48914317
Claim211282522024-11-06 11:16:2346 days ago1730891783IN
0xfdd15965...BAc0595FD
0 ETH0.0013461414.97864902
Claim210962272024-11-01 23:57:4751 days ago1730505467IN
0xfdd15965...BAc0595FD
0 ETH0.000428925.0419865

Latest 18 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
213825972024-12-11 23:38:5911 days ago1733960339
0xfdd15965...BAc0595FD
0 ETH
213769312024-12-11 4:37:4712 days ago1733891867
0xfdd15965...BAc0595FD
0 ETH
212527612024-11-23 20:15:1129 days ago1732392911
0xfdd15965...BAc0595FD
0 ETH
212340742024-11-21 5:39:3532 days ago1732167575
0xfdd15965...BAc0595FD
0 ETH
212328852024-11-21 1:40:1132 days ago1732153211
0xfdd15965...BAc0595FD
0 ETH
212116402024-11-18 2:33:4735 days ago1731897227
0xfdd15965...BAc0595FD
0 ETH
212116352024-11-18 2:32:4735 days ago1731897167
0xfdd15965...BAc0595FD
0 ETH
211540942024-11-10 1:51:1143 days ago1731203471
0xfdd15965...BAc0595FD
0 ETH
211540372024-11-10 1:39:3543 days ago1731202775
0xfdd15965...BAc0595FD
0 ETH
211330242024-11-07 3:15:3546 days ago1730949335
0xfdd15965...BAc0595FD
0 ETH
211329222024-11-07 2:54:5946 days ago1730948099
0xfdd15965...BAc0595FD
0 ETH
211317892024-11-06 23:07:2346 days ago1730934443
0xfdd15965...BAc0595FD
0 ETH
211296082024-11-06 15:49:2346 days ago1730908163
0xfdd15965...BAc0595FD
0 ETH
211282762024-11-06 11:21:2346 days ago1730892083
0xfdd15965...BAc0595FD
0 ETH
211282522024-11-06 11:16:2346 days ago1730891783
0xfdd15965...BAc0595FD
0 ETH
210962642024-11-02 0:05:1151 days ago1730505911
0xfdd15965...BAc0595FD
0 ETH
210962272024-11-01 23:57:4751 days ago1730505467
0xfdd15965...BAc0595FD
0 ETH
210962082024-11-01 23:53:5951 days ago1730505239
0xfdd15965...BAc0595FD
0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MerkleClaim

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion
File 1 of 6 : MerkleDropComic2_2.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;

import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
import "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";

interface IERC1155 {
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

contract MerkleClaim is ERC1155Holder {
    address public contractOwner;
    bytes32 public merkleRoot;
    address public targetContract;

    mapping (address => bool) claimed;

    constructor(bytes32 root) {
        merkleRoot = root;
        targetContract = 0x43EdD2A55dfA0953f31692Ffa18A95A38f2F7E05;
        contractOwner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == contractOwner, "Not the Owner");
        _;
    }

    // Update merkle root
    function updateRoot(bytes32 newRoot) external onlyOwner {
        merkleRoot = newRoot;
    }

    // Update Owner
    function updateOwner(address newOwner) external onlyOwner {
        contractOwner = newOwner;
    }

    // Update the target contract
    function setTargetContract(address newContract) external onlyOwner {
        targetContract = newContract;
    }

    // Transfer out tokens from the contract
    function transferOut(address receiver, uint256 id, uint256 amount) external onlyOwner {
        IERC1155(targetContract).safeTransferFrom(address(this), receiver, id, amount, "");
    }
    // Batch transfer out tokens from the contract
    function batchTransferOut(address receiver, uint256[] calldata ids, uint256[] calldata amounts) external onlyOwner {
        IERC1155(targetContract).safeBatchTransferFrom(address(this), receiver, ids, amounts, "");
    }

    /////
    // Merkle Tree Claim section
    /////
    function claim(uint256 tier, address claimer, bytes32[] calldata proof) external {
        require (!claimed[claimer], "Claimed");
        require(_verify(_leaf(tier, claimer), proof), "Invalid");

        claimed[claimer] = true;

        // Transfer to claimer
        IERC1155(targetContract).safeTransferFrom(address(this), claimer, tier + 20, 1, "");       
    }

    function _leaf(uint256 tier, address claimer) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked(tier, claimer));
    }

    function _verify(bytes32 leaf, bytes32[] memory proof) internal view returns (bool) {
        return MerkleProof.verify(proof, merkleRoot, leaf);
    }

}

File 2 of 6 : ERC1155Holder.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC1155/utils/ERC1155Holder.sol)

pragma solidity ^0.8.20;

import {IERC165, ERC165} from "../../../utils/introspection/ERC165.sol";
import {IERC1155Receiver} from "../IERC1155Receiver.sol";

/**
 * @dev Simple implementation of `IERC1155Receiver` that will allow a contract to hold ERC-1155 tokens.
 *
 * IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be
 * stuck.
 */
abstract contract ERC1155Holder is ERC165, IERC1155Receiver {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
    }

    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] memory,
        uint256[] memory,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155BatchReceived.selector;
    }
}

File 3 of 6 : MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.20;

/**
 * @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 The multiproof provided is not valid.
     */
    error MerkleProofInvalidMultiproof();

    /**
     * @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}
     */
    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.
     */
    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}
     */
    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.
     */
    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.
     */
    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).
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds 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 proofLen = proof.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proofLen != totalHashes + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // 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 from 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) {
            if (proofPos != proofLen) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                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.
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds 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 proofLen = proof.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proofLen != totalHashes + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // 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 from 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) {
            if (proofPos != proofLen) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Sorts the pair (a, b) and hashes the result.
     */
    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    /**
     * @dev Implementation of keccak256(abi.encode(a, b)) that doesn't allocate or expand memory.
     */
    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 4 of 6 : IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.20;

import {IERC165} from "../../utils/introspection/IERC165.sol";

/**
 * @dev Interface that must be implemented by smart contracts in order to receive
 * ERC-1155 token transfers.
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC-1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC-1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 5 of 6 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)

pragma solidity ^0.8.20;

import {IERC165} from "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 6 of 6 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[ERC].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"batchTransferOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"address","name":"claimer","type":"address"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newContract","type":"address"}],"name":"setTargetContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"targetContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"updateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newRoot","type":"bytes32"}],"name":"updateRoot","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052348015600e575f80fd5b50604051610e8a380380610e8a833981016040819052602b916065565b600155600280546001600160a01b03199081167343edd2a55dfa0953f31692ffa18a95a38f2f7e05179091555f805490911633179055607b565b5f602082840312156074575f80fd5b5051919050565b610e02806100885f395ff3fe608060405234801561000f575f80fd5b50600436106100cf575f3560e01c8063bc197c811161007d578063ce606ee011610058578063ce606ee014610207578063f23a6e6114610219578063f72d82cf14610251575f80fd5b8063bc197c8114610160578063bd90df70146101c9578063c63a94c8146101f4575f80fd5b806347fc822f116100ad57806347fc822f14610127578063814785eb1461013a578063880cdc311461014d575f80fd5b806301ffc9a7146100d357806321ff9970146100fb5780632eb4a7ab14610110575b5f80fd5b6100e66100e13660046108e2565b610264565b60405190151581526020015b60405180910390f35b61010e610109366004610921565b6102fc565b005b61011960015481565b6040519081526020016100f2565b61010e610135366004610953565b61034f565b61010e61014836600461096c565b6103d2565b61010e61015b366004610953565b6104b4565b61019861016e366004610acd565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016100f2565b6002546101dc906001600160a01b031681565b6040516001600160a01b0390911681526020016100f2565b61010e610202366004610bc4565b610536565b5f546101dc906001600160a01b031681565b610198610227366004610c44565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b61010e61025f366004610c98565b610606565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e00000000000000000000000000000000000000000000000000000000014806102f657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f546001600160a01b0316331461034a5760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329027bbb732b960991b60448201526064015b60405180910390fd5b600155565b5f546001600160a01b031633146103985760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329027bbb732b960991b6044820152606401610341565b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461041b5760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329027bbb732b960991b6044820152606401610341565b6002546040517ff242432a0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038581166024830152604482018590526064820184905260a060848301525f60a48301529091169063f242432a9060c4015f604051808303815f87803b158015610499575f80fd5b505af11580156104ab573d5f803e3d5ffd5b50505050505050565b5f546001600160a01b031633146104fd5760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329027bbb732b960991b6044820152606401610341565b5f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461057f5760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329027bbb732b960991b6044820152606401610341565b6002546040517f2eb2c2d60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632eb2c2d6906105d290309089908990899089908990600401610d37565b5f604051808303815f87803b1580156105e9575f80fd5b505af11580156105fb573d5f803e3d5ffd5b505050505050505050565b6001600160a01b0383165f9081526003602052604090205460ff161561066e5760405162461bcd60e51b815260206004820152600760248201527f436c61696d6564000000000000000000000000000000000000000000000000006044820152606401610341565b6106b361067b85856107ea565b8383808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061084a92505050565b6106ff5760405162461bcd60e51b815260206004820152600760248201527f496e76616c6964000000000000000000000000000000000000000000000000006044820152606401610341565b6001600160a01b038084165f90815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556002541663f242432a3085610756886014610d99565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03938416600482015292909116602483015260448201526001606482015260a060848201525f60a482015260c4015f604051808303815f87803b1580156107ce575f80fd5b505af11580156107e0573d5f803e3d5ffd5b5050505050505050565b5f828260405160200161082c92919091825260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602082015260340190565b60405160208183030381529060405280519060200120905092915050565b5f610858826001548561085f565b9392505050565b5f8261086b8584610874565b14949350505050565b5f81815b84518110156108ae576108a48286838151811061089757610897610db8565b60200260200101516108b6565b9150600101610878565b509392505050565b5f8183106108d0575f828152602084905260409020610858565b5f838152602083905260409020610858565b5f602082840312156108f2575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610858575f80fd5b5f60208284031215610931575f80fd5b5035919050565b80356001600160a01b038116811461094e575f80fd5b919050565b5f60208284031215610963575f80fd5b61085882610938565b5f805f6060848603121561097e575f80fd5b61098784610938565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156109d9576109d961099c565b604052919050565b5f82601f8301126109f0575f80fd5b813567ffffffffffffffff811115610a0a57610a0a61099c565b8060051b610a1a602082016109b0565b91825260208185018101929081019086841115610a35575f80fd5b6020860192505b83831015610a57578235825260209283019290910190610a3c565b9695505050505050565b5f82601f830112610a70575f80fd5b813567ffffffffffffffff811115610a8a57610a8a61099c565b610a9d6020601f19601f840116016109b0565b818152846020838601011115610ab1575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215610ae1575f80fd5b610aea86610938565b9450610af860208701610938565b9350604086013567ffffffffffffffff811115610b13575f80fd5b610b1f888289016109e1565b935050606086013567ffffffffffffffff811115610b3b575f80fd5b610b47888289016109e1565b925050608086013567ffffffffffffffff811115610b63575f80fd5b610b6f88828901610a61565b9150509295509295909350565b5f8083601f840112610b8c575f80fd5b50813567ffffffffffffffff811115610ba3575f80fd5b6020830191508360208260051b8501011115610bbd575f80fd5b9250929050565b5f805f805f60608688031215610bd8575f80fd5b610be186610938565b9450602086013567ffffffffffffffff811115610bfc575f80fd5b610c0888828901610b7c565b909550935050604086013567ffffffffffffffff811115610c27575f80fd5b610c3388828901610b7c565b969995985093965092949392505050565b5f805f805f60a08688031215610c58575f80fd5b610c6186610938565b9450610c6f60208701610938565b93506040860135925060608601359150608086013567ffffffffffffffff811115610b63575f80fd5b5f805f8060608587031215610cab575f80fd5b84359350610cbb60208601610938565b9250604085013567ffffffffffffffff811115610cd6575f80fd5b610ce287828801610b7c565b95989497509550505050565b8183525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115610d1e575f80fd5b8260051b80836020870137939093016020019392505050565b6001600160a01b03871681526001600160a01b038616602082015260a060408201525f610d6860a083018688610cee565b8281036060840152610d7b818587610cee565b83810360809094019390935250505f81526020019695505050505050565b808201808211156102f657634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220d0a52faa0db25a1453de62443e8ad50b4c9d76805556d57ece013b19897eaff164736f6c634300081a0033cb5a72d356e78cd7eac648b780ec0cdfcd83db061308a1d69a0db195972d8cc3

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106100cf575f3560e01c8063bc197c811161007d578063ce606ee011610058578063ce606ee014610207578063f23a6e6114610219578063f72d82cf14610251575f80fd5b8063bc197c8114610160578063bd90df70146101c9578063c63a94c8146101f4575f80fd5b806347fc822f116100ad57806347fc822f14610127578063814785eb1461013a578063880cdc311461014d575f80fd5b806301ffc9a7146100d357806321ff9970146100fb5780632eb4a7ab14610110575b5f80fd5b6100e66100e13660046108e2565b610264565b60405190151581526020015b60405180910390f35b61010e610109366004610921565b6102fc565b005b61011960015481565b6040519081526020016100f2565b61010e610135366004610953565b61034f565b61010e61014836600461096c565b6103d2565b61010e61015b366004610953565b6104b4565b61019861016e366004610acd565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016100f2565b6002546101dc906001600160a01b031681565b6040516001600160a01b0390911681526020016100f2565b61010e610202366004610bc4565b610536565b5f546101dc906001600160a01b031681565b610198610227366004610c44565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b61010e61025f366004610c98565b610606565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e00000000000000000000000000000000000000000000000000000000014806102f657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f546001600160a01b0316331461034a5760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329027bbb732b960991b60448201526064015b60405180910390fd5b600155565b5f546001600160a01b031633146103985760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329027bbb732b960991b6044820152606401610341565b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461041b5760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329027bbb732b960991b6044820152606401610341565b6002546040517ff242432a0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038581166024830152604482018590526064820184905260a060848301525f60a48301529091169063f242432a9060c4015f604051808303815f87803b158015610499575f80fd5b505af11580156104ab573d5f803e3d5ffd5b50505050505050565b5f546001600160a01b031633146104fd5760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329027bbb732b960991b6044820152606401610341565b5f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461057f5760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329027bbb732b960991b6044820152606401610341565b6002546040517f2eb2c2d60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632eb2c2d6906105d290309089908990899089908990600401610d37565b5f604051808303815f87803b1580156105e9575f80fd5b505af11580156105fb573d5f803e3d5ffd5b505050505050505050565b6001600160a01b0383165f9081526003602052604090205460ff161561066e5760405162461bcd60e51b815260206004820152600760248201527f436c61696d6564000000000000000000000000000000000000000000000000006044820152606401610341565b6106b361067b85856107ea565b8383808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061084a92505050565b6106ff5760405162461bcd60e51b815260206004820152600760248201527f496e76616c6964000000000000000000000000000000000000000000000000006044820152606401610341565b6001600160a01b038084165f90815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556002541663f242432a3085610756886014610d99565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03938416600482015292909116602483015260448201526001606482015260a060848201525f60a482015260c4015f604051808303815f87803b1580156107ce575f80fd5b505af11580156107e0573d5f803e3d5ffd5b5050505050505050565b5f828260405160200161082c92919091825260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602082015260340190565b60405160208183030381529060405280519060200120905092915050565b5f610858826001548561085f565b9392505050565b5f8261086b8584610874565b14949350505050565b5f81815b84518110156108ae576108a48286838151811061089757610897610db8565b60200260200101516108b6565b9150600101610878565b509392505050565b5f8183106108d0575f828152602084905260409020610858565b5f838152602083905260409020610858565b5f602082840312156108f2575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610858575f80fd5b5f60208284031215610931575f80fd5b5035919050565b80356001600160a01b038116811461094e575f80fd5b919050565b5f60208284031215610963575f80fd5b61085882610938565b5f805f6060848603121561097e575f80fd5b61098784610938565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156109d9576109d961099c565b604052919050565b5f82601f8301126109f0575f80fd5b813567ffffffffffffffff811115610a0a57610a0a61099c565b8060051b610a1a602082016109b0565b91825260208185018101929081019086841115610a35575f80fd5b6020860192505b83831015610a57578235825260209283019290910190610a3c565b9695505050505050565b5f82601f830112610a70575f80fd5b813567ffffffffffffffff811115610a8a57610a8a61099c565b610a9d6020601f19601f840116016109b0565b818152846020838601011115610ab1575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215610ae1575f80fd5b610aea86610938565b9450610af860208701610938565b9350604086013567ffffffffffffffff811115610b13575f80fd5b610b1f888289016109e1565b935050606086013567ffffffffffffffff811115610b3b575f80fd5b610b47888289016109e1565b925050608086013567ffffffffffffffff811115610b63575f80fd5b610b6f88828901610a61565b9150509295509295909350565b5f8083601f840112610b8c575f80fd5b50813567ffffffffffffffff811115610ba3575f80fd5b6020830191508360208260051b8501011115610bbd575f80fd5b9250929050565b5f805f805f60608688031215610bd8575f80fd5b610be186610938565b9450602086013567ffffffffffffffff811115610bfc575f80fd5b610c0888828901610b7c565b909550935050604086013567ffffffffffffffff811115610c27575f80fd5b610c3388828901610b7c565b969995985093965092949392505050565b5f805f805f60a08688031215610c58575f80fd5b610c6186610938565b9450610c6f60208701610938565b93506040860135925060608601359150608086013567ffffffffffffffff811115610b63575f80fd5b5f805f8060608587031215610cab575f80fd5b84359350610cbb60208601610938565b9250604085013567ffffffffffffffff811115610cd6575f80fd5b610ce287828801610b7c565b95989497509550505050565b8183525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115610d1e575f80fd5b8260051b80836020870137939093016020019392505050565b6001600160a01b03871681526001600160a01b038616602082015260a060408201525f610d6860a083018688610cee565b8281036060840152610d7b818587610cee565b83810360809094019390935250505f81526020019695505050505050565b808201808211156102f657634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220d0a52faa0db25a1453de62443e8ad50b4c9d76805556d57ece013b19897eaff164736f6c634300081a0033

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

cb5a72d356e78cd7eac648b780ec0cdfcd83db061308a1d69a0db195972d8cc3

-----Decoded View---------------
Arg [0] : root (bytes32): 0xcb5a72d356e78cd7eac648b780ec0cdfcd83db061308a1d69a0db195972d8cc3

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : cb5a72d356e78cd7eac648b780ec0cdfcd83db061308a1d69a0db195972d8cc3


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.