More Info
Private Name Tags
ContractCreator
Latest 16 from a total of 16 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 21382597 | 11 days ago | IN | 0 ETH | 0.00158224 | ||||
Claim | 21376931 | 12 days ago | IN | 0 ETH | 0.00134746 | ||||
Claim | 21252761 | 29 days ago | IN | 0 ETH | 0.00131221 | ||||
Claim | 21234074 | 32 days ago | IN | 0 ETH | 0.00110176 | ||||
Claim | 21232885 | 32 days ago | IN | 0 ETH | 0.00079824 | ||||
Claim | 21211640 | 35 days ago | IN | 0 ETH | 0.00103907 | ||||
Claim | 21211635 | 35 days ago | IN | 0 ETH | 0.00089942 | ||||
Claim | 21154094 | 43 days ago | IN | 0 ETH | 0.00090392 | ||||
Claim | 21154037 | 43 days ago | IN | 0 ETH | 0.00095478 | ||||
Claim | 21133024 | 46 days ago | IN | 0 ETH | 0.00154044 | ||||
Claim | 21132922 | 46 days ago | IN | 0 ETH | 0.00179446 | ||||
Claim | 21131789 | 46 days ago | IN | 0 ETH | 0.00174029 | ||||
Claim | 21129608 | 46 days ago | IN | 0 ETH | 0.00212318 | ||||
Claim | 21128276 | 46 days ago | IN | 0 ETH | 0.00157174 | ||||
Claim | 21128252 | 46 days ago | IN | 0 ETH | 0.00134614 | ||||
Claim | 21096227 | 51 days ago | IN | 0 ETH | 0.00042892 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 18 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
||||
---|---|---|---|---|---|---|---|
21382597 | 11 days ago | 0 ETH | |||||
21376931 | 12 days ago | 0 ETH | |||||
21252761 | 29 days ago | 0 ETH | |||||
21234074 | 32 days ago | 0 ETH | |||||
21232885 | 32 days ago | 0 ETH | |||||
21211640 | 35 days ago | 0 ETH | |||||
21211635 | 35 days ago | 0 ETH | |||||
21154094 | 43 days ago | 0 ETH | |||||
21154037 | 43 days ago | 0 ETH | |||||
21133024 | 46 days ago | 0 ETH | |||||
21132922 | 46 days ago | 0 ETH | |||||
21131789 | 46 days ago | 0 ETH | |||||
21129608 | 46 days ago | 0 ETH | |||||
21128276 | 46 days ago | 0 ETH | |||||
21128252 | 46 days ago | 0 ETH | |||||
21096264 | 51 days ago | 0 ETH | |||||
21096227 | 51 days ago | 0 ETH | |||||
21096208 | 51 days ago | 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
Contract Source Code (Solidity Standard Json-Input format)
// 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); } }
// 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; } }
// 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) } } }
// 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); }
// 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; } }
// 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); }
{ "optimizer": { "enabled": true, "runs": 2000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "remappings": [] }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.