Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multi Chain
Multichain Addresses
N/ALatest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 8695692 | 187 days 20 hrs ago | IN | Create: SealHub | 0 ETH | 0.00870417 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
9660592 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH | ||||
9660484 | 16 days 23 hrs ago | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
SealHub
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import "@openzeppelin/contracts/utils/Counters.sol"; import "@opengsn/contracts/src/ERC2771Recipient.sol"; import "@big-whale-labs/versioned-contract/contracts/Versioned.sol"; import "@zk-kit/incremental-merkle-tree.sol/IncrementalBinaryTree.sol"; import "./interfaces/ICompleteECDSACheckerVerifier.sol"; contract SealHub is ERC2771Recipient, Versioned { using Counters for Counters.Counter; using IncrementalBinaryTree for IncrementalTreeData; // State address public verifierContract; Counters.Counter public numberOfCommitments; mapping(uint256 => bool) public commitmentMap; uint256[] public commitments; bytes32[] public merkleRoots; mapping(bytes32 => bool) public merkleRootMap; IncrementalTreeData public tree; // Events event CommitmentCreated(uint256 commitmentId, bytes32 merkleRoot); // Functions constructor( string memory _version, address _verifierContract, address _trustedForwarder, uint8 _depth ) Versioned(_version) { verifierContract = _verifierContract; _setTrustedForwarder(_trustedForwarder); tree.init(_depth, 0); } function createCommitment( ECDSAProof memory _ecdsaProof, UPrecomputesProof memory _uPrecomputesProof ) public { // Check the proof require( ICompleteECDSACheckerVerifier(verifierContract).verifyProofs( _ecdsaProof, _uPrecomputesProof ), "Invalid ZK proof" ); // Add the commitment uint256 commitment = _ecdsaProof.input[0]; commitmentMap[commitment] = true; commitments.push(commitment); numberOfCommitments.increment(); // Add to Merkle Tree tree.insert(commitment); bytes32 merkleRoot = bytes32(tree.root); merkleRoots.push(merkleRoot); merkleRootMap[merkleRoot] = true; emit CommitmentCreated(commitment, merkleRoot); } function isCommitmentMerkleRootValid( bytes32 merkleRoot ) external view returns (bool) { return merkleRootMap[merkleRoot]; } function _msgSender() internal view override(ERC2771Recipient) returns (address sender) { sender = ERC2771Recipient._msgSender(); } function _msgData() internal view override(ERC2771Recipient) returns (bytes calldata ret) { return ERC2771Recipient._msgData(); } }
// ,-, // * . /.( . // \|/ \ { // . _ . , . -*- . `-` // ,'-. * / \_ * / \_ /|\ * /\'__ *. * // (____". / \ / \, __ . _/ / \ * . . // . /\/\ /\/ :' __ \_ / \ _^/ ^/ `—./\ /\ . // * _ / \/ \ _/ \-‘\/ ` \ /\ /.' ^_ \_ .’\\ /_/\ ,'-. // /_\ /\ .- `. \/ \ /. / \ ;. _/ \ -. `_/ \/. \ _ (____". * // . / \ / `-.__ ^ / .-'.--\ - \/ _ `--./ .-' `-/. \ / \ . // / /. `. / / `. / ` .-' '-._ `._ /. \ // ~._,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-' // ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~~ // ~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~ // ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ // ๐ // _ // ₒ ><_> // _______ __ _______ // .-' | _ "\ |" \ /" _ "| ๐ // '--./ / _.---. (. |_) :) || | (: ( \___) // '-, (__..-` \ |: \/ |: | \/ \ // \ . | (| _ \\ |. | // \ ___ // `,.__. ,__.--/ |: |_) :) |\ | (: _( _| // '._/_.'___.-` (_______/ |__\| \_______) ๐ // // __ __ ___ __ __ __ ___ _______ // |" |/ \| "| /" | | "\ /""\ |" | /" "| // ๐ |' / \: |(: (__) :) / \ || | (: ______) // |: /' | \/ \/ /' /\ \ |: | ₒ \/ | // \// /\' | // __ \\ // __' \ \ |___ // ___)_ // / / \\ |(: ( ) :) / / \\ \ ( \_|: \ (: "| // |___/ \___| \__| |__/ (___/ \___) \_______) \_______) // ₒ৹ // ___ __ _______ ________ // _ |" | ₒ /""\ | _ "\ /" ) // ><_> || | / \ (. |_) :) (: \___/ // |: | /' /\ \ |: \/ \___ \ // \ |___ // __' \ (| _ \\ __/ \\ \_____)\_____ // ( \_|: \ / / \\ \ |: |_) :) /" \ :) /--v____ __`< // \_______) (___/ \___)(_______/ (_______/ )/ // ' // // ๐ . ' , ₒ // ₒ _______ // ____ .`_|___|_`. ____ // \ \ / / ₒ৹ // \ ' / ๐ // ₒ \/ // ₒ / \ ) ( // ( ₒ৹ ( ( ) // ) ) _ ) ) ( // ( ) ( ( ><_> ( ( ( ) // ) ) ( ( ) ) ) ) ) ) ( // ( ( ) ) ( ( ( ( ( ( ) // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // SPDX-License-Identifier: MIT pragma solidity ^0.8.16; contract Versioned { string public version; constructor(string memory _version) { version = _version; } }
// SPDX-License-Identifier: MIT // solhint-disable no-inline-assembly pragma solidity >=0.6.9; import "./interfaces/IERC2771Recipient.sol"; /** * @title The ERC-2771 Recipient Base Abstract Class - Implementation * * @notice Note that this contract was called `BaseRelayRecipient` in the previous revision of the GSN. * * @notice A base contract to be inherited by any contract that want to receive relayed transactions. * * @notice A subclass must use `_msgSender()` instead of `msg.sender`. */ abstract contract ERC2771Recipient is IERC2771Recipient { /* * Forwarder singleton we accept calls from */ address private _trustedForwarder; /** * :warning: **Warning** :warning: The Forwarder can have a full control over your Recipient. Only trust verified Forwarder. * @notice Method is not a required method to allow Recipients to trust multiple Forwarders. Not recommended yet. * @return forwarder The address of the Forwarder contract that is being used. */ function getTrustedForwarder() public virtual view returns (address forwarder){ return _trustedForwarder; } function _setTrustedForwarder(address _forwarder) internal { _trustedForwarder = _forwarder; } /// @inheritdoc IERC2771Recipient function isTrustedForwarder(address forwarder) public virtual override view returns(bool) { return forwarder == _trustedForwarder; } /// @inheritdoc IERC2771Recipient function _msgSender() internal override virtual view returns (address ret) { if (msg.data.length >= 20 && isTrustedForwarder(msg.sender)) { // At this point we know that the sender is a trusted forwarder, // so we trust that the last bytes of msg.data are the verified sender address. // extract sender address from the end of msg.data assembly { ret := shr(96,calldataload(sub(calldatasize(),20))) } } else { ret = msg.sender; } } /// @inheritdoc IERC2771Recipient function _msgData() internal override virtual view returns (bytes calldata ret) { if (msg.data.length >= 20 && isTrustedForwarder(msg.sender)) { return msg.data[0:msg.data.length-20]; } else { return msg.data; } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0; /** * @title The ERC-2771 Recipient Base Abstract Class - Declarations * * @notice A contract must implement this interface in order to support relayed transaction. * * @notice It is recommended that your contract inherits from the ERC2771Recipient contract. */ abstract contract IERC2771Recipient { /** * :warning: **Warning** :warning: The Forwarder can have a full control over your Recipient. Only trust verified Forwarder. * @param forwarder The address of the Forwarder contract that is being used. * @return isTrustedForwarder `true` if the Forwarder is trusted to forward relayed transactions by this Recipient. */ function isTrustedForwarder(address forwarder) public virtual view returns(bool); /** * @notice Use this method the contract anywhere instead of msg.sender to support relayed transactions. * @return sender The real sender of this call. * For a call that came through the Forwarder the real sender is extracted from the last 20 bytes of the `msg.data`. * Otherwise simply returns `msg.sender`. */ function _msgSender() internal virtual view returns (address); /** * @notice Use this method in the contract instead of `msg.data` when difference matters (hashing, signature, etc.) * @return data The real `msg.data` of this call. * For a call that came through the Forwarder, the real sender address was appended as the last 20 bytes * of the `msg.data` - so this method will strip those 20 bytes off. * Otherwise (if the call was made directly and not through the forwarder) simply returns `msg.data`. */ function _msgData() internal virtual view returns (bytes calldata); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
//SPDX-License-Identifier: MIT pragma solidity ^0.8.4; library PoseidonT3 { function poseidon(uint256[2] memory) public pure returns (uint256) {} } library PoseidonT6 { function poseidon(uint256[5] memory) public pure returns (uint256) {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import {PoseidonT3} from "./Hashes.sol"; // Each incremental tree has certain properties and data that will // be used to add new leaves. struct IncrementalTreeData { uint256 depth; // Depth of the tree (levels - 1). uint256 root; // Root hash of the tree. uint256 numberOfLeaves; // Number of leaves of the tree. mapping(uint256 => uint256) zeroes; // Zero hashes used for empty nodes (level -> zero hash). // The nodes of the subtrees used in the last addition of a leaf (level -> [left node, right node]). mapping(uint256 => uint256[2]) lastSubtrees; // Caching these values is essential to efficient appends. } /// @title Incremental binary Merkle tree. /// @dev The incremental tree allows to calculate the root hash each time a leaf is added, ensuring /// the integrity of the tree. library IncrementalBinaryTree { uint8 internal constant MAX_DEPTH = 32; uint256 internal constant SNARK_SCALAR_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617; /// @dev Initializes a tree. /// @param self: Tree data. /// @param depth: Depth of the tree. /// @param zero: Zero value to be used. function init( IncrementalTreeData storage self, uint256 depth, uint256 zero ) public { require(zero < SNARK_SCALAR_FIELD, "IncrementalBinaryTree: leaf must be < SNARK_SCALAR_FIELD"); require(depth > 0 && depth <= MAX_DEPTH, "IncrementalBinaryTree: tree depth must be between 1 and 32"); self.depth = depth; for (uint8 i = 0; i < depth; ) { self.zeroes[i] = zero; zero = PoseidonT3.poseidon([zero, zero]); unchecked { ++i; } } self.root = zero; } /// @dev Inserts a leaf in the tree. /// @param self: Tree data. /// @param leaf: Leaf to be inserted. function insert(IncrementalTreeData storage self, uint256 leaf) public { uint256 depth = self.depth; require(leaf < SNARK_SCALAR_FIELD, "IncrementalBinaryTree: leaf must be < SNARK_SCALAR_FIELD"); require(self.numberOfLeaves < 2**depth, "IncrementalBinaryTree: tree is full"); uint256 index = self.numberOfLeaves; uint256 hash = leaf; for (uint8 i = 0; i < depth; ) { if (index & 1 == 0) { self.lastSubtrees[i] = [hash, self.zeroes[i]]; } else { self.lastSubtrees[i][1] = hash; } hash = PoseidonT3.poseidon(self.lastSubtrees[i]); index >>= 1; unchecked { ++i; } } self.root = hash; self.numberOfLeaves += 1; } /// @dev Updates a leaf in the tree. /// @param self: Tree data. /// @param leaf: Leaf to be updated. /// @param newLeaf: New leaf. /// @param proofSiblings: Array of the sibling nodes of the proof of membership. /// @param proofPathIndices: Path of the proof of membership. function update( IncrementalTreeData storage self, uint256 leaf, uint256 newLeaf, uint256[] calldata proofSiblings, uint8[] calldata proofPathIndices ) public { require(newLeaf != leaf, "IncrementalBinaryTree: new leaf cannot be the same as the old one"); require(newLeaf < SNARK_SCALAR_FIELD, "IncrementalBinaryTree: new leaf must be < SNARK_SCALAR_FIELD"); require( verify(self, leaf, proofSiblings, proofPathIndices), "IncrementalBinaryTree: leaf is not part of the tree" ); uint256 depth = self.depth; uint256 hash = newLeaf; uint256 updateIndex; for (uint8 i = 0; i < depth; ) { updateIndex |= uint256(proofPathIndices[i]) << uint256(i); if (proofPathIndices[i] == 0) { if (proofSiblings[i] == self.lastSubtrees[i][1]) { self.lastSubtrees[i][0] = hash; } hash = PoseidonT3.poseidon([hash, proofSiblings[i]]); } else { if (proofSiblings[i] == self.lastSubtrees[i][0]) { self.lastSubtrees[i][1] = hash; } hash = PoseidonT3.poseidon([proofSiblings[i], hash]); } unchecked { ++i; } } require(updateIndex < self.numberOfLeaves, "IncrementalBinaryTree: leaf index out of range"); self.root = hash; } /// @dev Removes a leaf from the tree. /// @param self: Tree data. /// @param leaf: Leaf to be removed. /// @param proofSiblings: Array of the sibling nodes of the proof of membership. /// @param proofPathIndices: Path of the proof of membership. function remove( IncrementalTreeData storage self, uint256 leaf, uint256[] calldata proofSiblings, uint8[] calldata proofPathIndices ) public { update(self, leaf, self.zeroes[0], proofSiblings, proofPathIndices); } /// @dev Verify if the path is correct and the leaf is part of the tree. /// @param self: Tree data. /// @param leaf: Leaf to be removed. /// @param proofSiblings: Array of the sibling nodes of the proof of membership. /// @param proofPathIndices: Path of the proof of membership. /// @return True or false. function verify( IncrementalTreeData storage self, uint256 leaf, uint256[] calldata proofSiblings, uint8[] calldata proofPathIndices ) private view returns (bool) { require(leaf < SNARK_SCALAR_FIELD, "IncrementalBinaryTree: leaf must be < SNARK_SCALAR_FIELD"); uint256 depth = self.depth; require( proofPathIndices.length == depth && proofSiblings.length == depth, "IncrementalBinaryTree: length of path is not correct" ); uint256 hash = leaf; for (uint8 i = 0; i < depth; ) { require( proofSiblings[i] < SNARK_SCALAR_FIELD, "IncrementalBinaryTree: sibling node must be < SNARK_SCALAR_FIELD" ); require( proofPathIndices[i] == 1 || proofPathIndices[i] == 0, "IncrementalBinaryTree: path index is neither 0 nor 1" ); if (proofPathIndices[i] == 0) { hash = PoseidonT3.poseidon([hash, proofSiblings[i]]); } else { hash = PoseidonT3.poseidon([proofSiblings[i], hash]); } unchecked { ++i; } } return hash == self.root; } }
// ,-, // * . /.( . // \|/ \ { // . _ . , . -*- . `-` // ,'-. * / \_ * / \_ /|\ * /\'__ *. * // (____". / \ / \, __ . _/ / \ * . . // . /\/\ /\/ :' __ \_ / \ _^/ ^/ `—./\ /\ . // * _ / \/ \ _/ \-‘\/ ` \ /\ /.' ^_ \_ .’\\ /_/\ ,'-. // /_\ /\ .- `. \/ \ /. / \ ;. _/ \ -. `_/ \/. \ _ (____". * // . / \ / `-.__ ^ / .-'.--\ - \/ _ `--./ .-' `-/. \ / \ . // / /. `. / / `. / ` .-' '-._ `._ /. \ // ~._,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-' // ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~~ // ~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~ // ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ // ๐ // _ // ₒ ><_> // _______ __ _______ // .-' | _ "\ |" \ /" _ "| ๐ // '--./ / _.---. (. |_) :) || | (: ( \___) // '-, (__..-` \ |: \/ |: | \/ \ // \ . | (| _ \\ |. | // \ ___ // `,.__. ,__.--/ |: |_) :) |\ | (: _( _| // '._/_.'___.-` (_______/ |__\| \_______) ๐ // // __ __ ___ __ __ __ ___ _______ // |" |/ \| "| /" | | "\ /""\ |" | /" "| // ๐ |' / \: |(: (__) :) / \ || | (: ______) // |: /' | \/ \/ /' /\ \ |: | ₒ \/ | // \// /\' | // __ \\ // __' \ \ |___ // ___)_ // / / \\ |(: ( ) :) / / \\ \ ( \_|: \ (: "| // |___/ \___| \__| |__/ (___/ \___) \_______) \_______) // ₒ৹ // ___ __ _______ ________ // _ |" | ₒ /""\ | _ "\ /" ) // ><_> || | / \ (. |_) :) (: \___/ // |: | /' /\ \ |: \/ \___ \ // \ |___ // __' \ (| _ \\ __/ \\ \_____)\_____ // ( \_|: \ / / \\ \ |: |_) :) /" \ :) /--v____ __`< // \_______) (___/ \___)(_______/ (_______/ )/ // ' // // ๐ . ' , ₒ // ₒ _______ // ____ .`_|___|_`. ____ // \ \ / / ₒ৹ // \ ' / ๐ // ₒ \/ // ₒ / \ ) ( // ( ₒ৹ ( ( ) // ) ) _ ) ) ( // ( ) ( ( ><_> ( ( ( ) // ) ) ( ( ) ) ) ) ) ) ( // ( ( ) ) ( ( ( ( ( ( ) // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import "../models/ECDSAProof.sol"; import "../models/UPrecomputesProof.sol"; interface ICompleteECDSACheckerVerifier { function verifyProofs( ECDSAProof memory _ecdsaProof, UPrecomputesProof memory _uPrecomputesProof ) external view returns (bool r); }
// ,-, // * . /.( . // \|/ \ { // . _ . , . -*- . `-` // ,'-. * / \_ * / \_ /|\ * /\'__ *. * // (____". / \ / \, __ . _/ / \ * . . // . /\/\ /\/ :' __ \_ / \ _^/ ^/ `—./\ /\ . // * _ / \/ \ _/ \-‘\/ ` \ /\ /.' ^_ \_ .’\\ /_/\ ,'-. // /_\ /\ .- `. \/ \ /. / \ ;. _/ \ -. `_/ \/. \ _ (____". * // . / \ / `-.__ ^ / .-'.--\ - \/ _ `--./ .-' `-/. \ / \ . // / /. `. / / `. / ` .-' '-._ `._ /. \ // ~._,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-' // ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~~ // ~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~ // ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ // ๐ // _ // ₒ ><_> // _______ __ _______ // .-' | _ "\ |" \ /" _ "| ๐ // '--./ / _.---. (. |_) :) || | (: ( \___) // '-, (__..-` \ |: \/ |: | \/ \ // \ . | (| _ \\ |. | // \ ___ // `,.__. ,__.--/ |: |_) :) |\ | (: _( _| // '._/_.'___.-` (_______/ |__\| \_______) ๐ // // __ __ ___ __ __ __ ___ _______ // |" |/ \| "| /" | | "\ /""\ |" | /" "| // ๐ |' / \: |(: (__) :) / \ || | (: ______) // |: /' | \/ \/ /' /\ \ |: | ₒ \/ | // \// /\' | // __ \\ // __' \ \ |___ // ___)_ // / / \\ |(: ( ) :) / / \\ \ ( \_|: \ (: "| // |___/ \___| \__| |__/ (___/ \___) \_______) \_______) // ₒ৹ // ___ __ _______ ________ // _ |" | ₒ /""\ | _ "\ /" ) // ><_> || | / \ (. |_) :) (: \___/ // |: | /' /\ \ |: \/ \___ \ // \ |___ // __' \ (| _ \\ __/ \\ \_____)\_____ // ( \_|: \ / / \\ \ |: |_) :) /" \ :) /--v____ __`< // \_______) (___/ \___)(_______/ (_______/ )/ // ' // // ๐ . ' , ₒ // ₒ _______ // ____ .`_|___|_`. ____ // \ \ / / ₒ৹ // \ ' / ๐ // ₒ \/ // ₒ / \ ) ( // ( ₒ৹ ( ( ) // ) ) _ ) ) ( // ( ) ( ( ><_> ( ( ( ) // ) ) ( ( ) ) ) ) ) ) ( // ( ( ) ) ( ( ( ( ( ( ) // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; struct ECDSAProof { uint[2] a; uint[2][2] b; uint[2] c; uint[6] input; }
// ,-, // * . /.( . // \|/ \ { // . _ . , . -*- . `-` // ,'-. * / \_ * / \_ /|\ * /\'__ *. * // (____". / \ / \, __ . _/ / \ * . . // . /\/\ /\/ :' __ \_ / \ _^/ ^/ `—./\ /\ . // * _ / \/ \ _/ \-‘\/ ` \ /\ /.' ^_ \_ .’\\ /_/\ ,'-. // /_\ /\ .- `. \/ \ /. / \ ;. _/ \ -. `_/ \/. \ _ (____". * // . / \ / `-.__ ^ / .-'.--\ - \/ _ `--./ .-' `-/. \ / \ . // / /. `. / / `. / ` .-' '-._ `._ /. \ // ~._,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-'2_,-' // ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~ ~~~~~~~~ // ~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~ // ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ // ๐ // _ // ₒ ><_> // _______ __ _______ // .-' | _ "\ |" \ /" _ "| ๐ // '--./ / _.---. (. |_) :) || | (: ( \___) // '-, (__..-` \ |: \/ |: | \/ \ // \ . | (| _ \\ |. | // \ ___ // `,.__. ,__.--/ |: |_) :) |\ | (: _( _| // '._/_.'___.-` (_______/ |__\| \_______) ๐ // // __ __ ___ __ __ __ ___ _______ // |" |/ \| "| /" | | "\ /""\ |" | /" "| // ๐ |' / \: |(: (__) :) / \ || | (: ______) // |: /' | \/ \/ /' /\ \ |: | ₒ \/ | // \// /\' | // __ \\ // __' \ \ |___ // ___)_ // / / \\ |(: ( ) :) / / \\ \ ( \_|: \ (: "| // |___/ \___| \__| |__/ (___/ \___) \_______) \_______) // ₒ৹ // ___ __ _______ ________ // _ |" | ₒ /""\ | _ "\ /" ) // ><_> || | / \ (. |_) :) (: \___/ // |: | /' /\ \ |: \/ \___ \ // \ |___ // __' \ (| _ \\ __/ \\ \_____)\_____ // ( \_|: \ / / \\ \ |: |_) :) /" \ :) /--v____ __`< // \_______) (___/ \___)(_______/ (_______/ )/ // ' // // ๐ . ' , ₒ // ₒ _______ // ____ .`_|___|_`. ____ // \ \ / / ₒ৹ // \ ' / ๐ // ₒ \/ // ₒ / \ ) ( // ( ₒ৹ ( ( ) // ) ) _ ) ) ( // ( ) ( ( ><_> ( ( ( ) // ) ) ( ( ) ) ) ) ) ) ( // ( ( ) ) ( ( ( ( ( ( ) // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; struct UPrecomputesProof { uint[2] a; uint[2][2] b; uint[2] c; uint[1] input; }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": { "@zk-kit/incremental-merkle-tree.sol/IncrementalBinaryTree.sol": { "IncrementalBinaryTree": "0xab367606fdbe6ce8a692f3b02e302b7a4de2294c" } } }
[{"inputs":[{"internalType":"string","name":"_version","type":"string"},{"internalType":"address","name":"_verifierContract","type":"address"},{"internalType":"address","name":"_trustedForwarder","type":"address"},{"internalType":"uint8","name":"_depth","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"commitmentId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"CommitmentCreated","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"commitmentMap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"commitments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256[2]","name":"a","type":"uint256[2]"},{"internalType":"uint256[2][2]","name":"b","type":"uint256[2][2]"},{"internalType":"uint256[2]","name":"c","type":"uint256[2]"},{"internalType":"uint256[6]","name":"input","type":"uint256[6]"}],"internalType":"struct ECDSAProof","name":"_ecdsaProof","type":"tuple"},{"components":[{"internalType":"uint256[2]","name":"a","type":"uint256[2]"},{"internalType":"uint256[2][2]","name":"b","type":"uint256[2][2]"},{"internalType":"uint256[2]","name":"c","type":"uint256[2]"},{"internalType":"uint256[1]","name":"input","type":"uint256[1]"}],"internalType":"struct UPrecomputesProof","name":"_uPrecomputesProof","type":"tuple"}],"name":"createCommitment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTrustedForwarder","outputs":[{"internalType":"address","name":"forwarder","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"isCommitmentMerkleRootValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"merkleRootMap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"merkleRoots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfCommitments","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tree","outputs":[{"internalType":"uint256","name":"depth","type":"uint256"},{"internalType":"uint256","name":"root","type":"uint256"},{"internalType":"uint256","name":"numberOfLeaves","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"verifierContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162000dcc38038062000dcc83398101604081905262000034916200014b565b836001620000438282620002e7565b5050600280546001600160a01b0319166001600160a01b0385161790556200008782600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040516304257eed60e21b81526008600482015260ff821660248201526000604482015273ab367606fdbe6ce8a692f3b02e302b7a4de2294c90631095fbb49060640160006040518083038186803b158015620000e357600080fd5b505af4158015620000f8573d6000803e3d6000fd5b5050505050505050620003b3565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200013457600080fd5b919050565b805160ff811681146200013457600080fd5b600080600080608085870312156200016257600080fd5b84516001600160401b03808211156200017a57600080fd5b818701915087601f8301126200018f57600080fd5b815181811115620001a457620001a462000106565b604051601f8201601f19908116603f01168101908382118183101715620001cf57620001cf62000106565b81604052828152602093508a84848701011115620001ec57600080fd5b600091505b82821015620002105784820184015181830185015290830190620001f1565b60008484830101528098505050506200022b8188016200011c565b945050506200023d604086016200011c565b91506200024d6060860162000139565b905092959194509250565b600181811c908216806200026d57607f821691505b6020821081036200028e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002e257600081815260208120601f850160051c81016020861015620002bd5750805b601f850160051c820191505b81811015620002de57828155600101620002c9565b5050505b505050565b81516001600160401b0381111562000303576200030362000106565b6200031b8162000314845462000258565b8462000294565b602080601f8311600181146200035357600084156200033a5750858301515b600019600386901b1c1916600185901b178555620002de565b600085815260208120601f198616915b82811015620003845788860151825594840194600190910190840162000363565b5085821015620003a35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610a0980620003c36000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063b1e7ffad11610071578063b1e7ffad14610171578063ce1b815f14610194578063cf695688146101b9578063e3179f0c146101cc578063e9fe0532146101d6578063fd54b228146101f957600080fd5b8063231eaf4f146100b9578063450832dd146100f157806349ce89971461010657806354fd4d5014610127578063572b6c051461013c57806371c5ecb11461015e575b600080fd5b6100dc6100c73660046104f2565b60046020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6101046100ff3660046106cc565b610226565b005b6101196101143660046104f2565b610433565b6040519081526020016100e8565b61012f610454565b6040516100e891906107cf565b6100dc61014a36600461081d565b6000546001600160a01b0391821691161490565b61011961016c3660046104f2565b6104e2565b6100dc61017f3660046104f2565b60076020526000908152604090205460ff1681565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100e8565b6002546101a1906001600160a01b031681565b6003546101199081565b6100dc6101e43660046104f2565b60009081526007602052604090205460ff1690565b600854600954600a5461020b92919083565b604080519384526020840192909252908201526060016100e8565b600254604051635d4220ad60e01b81526001600160a01b0390911690635d4220ad9061025890859085906004016108a4565b602060405180830381865afa158015610275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102999190610977565b6102dc5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2102d2590383937b7b360811b604482015260640160405180910390fd5b6060820151516000818152600460205260408120805460ff1916600190811790915560058054808301825592527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0909101829055600380549091019055604051630b4381fd60e11b8152600860048201526024810182905273ab367606fdbe6ce8a692f3b02e302b7a4de2294c9063168703fa9060440160006040518083038186803b15801561038b57600080fd5b505af415801561039f573d6000803e3d6000fd5b50506009546006805460018082019092557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01829055600082815260076020908152604091829020805460ff191690931790925580518681529182018390529193507f5bec38d019c4cec2bfa098d7563f25f754a2a054a92516db7f56e8656c2adef692500160405180910390a150505050565b6005818154811061044357600080fd5b600091825260209091200154905081565b6001805461046190610999565b80601f016020809104026020016040519081016040528092919081815260200182805461048d90610999565b80156104da5780601f106104af576101008083540402835291602001916104da565b820191906000526020600020905b8154815290600101906020018083116104bd57829003601f168201915b505050505081565b6006818154811061044357600080fd5b60006020828403121561050457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156105445761054461050b565b60405290565b6040805190810167ffffffffffffffff811182821017156105445761054461050b565b600060405160c0810181811067ffffffffffffffff821117156105925761059261050b565b60405290508060c08301848111156105a957600080fd5b835b818110156105c35780358352602092830192016105ab565b50505092915050565b6000604051602080820182811067ffffffffffffffff821117156105f2576105f261050b565b80604052508192508084018581111561060a57600080fd5b845b81811015610623578035845292820192820161060c565b5050505092915050565b600082601f83011261063e57600080fd5b61064661054a565b80604084018581111561065857600080fd5b845b8181101561067257803584526020938401930161065a565b509095945050505050565b600082601f83011261068e57600080fd5b61069661054a565b8060808401858111156106a857600080fd5b845b81811015610672576106bc878261062d565b84526020909301926040016106aa565b6000808284036102e08112156106e157600080fd5b6101c0808212156106f157600080fd5b6106f9610521565b610703878761062d565b8152610712876040880161067d565b60208201526107248760c0880161062d565b60408201528661011f87011261073957600080fd5b61074787610100880161056d565b606082015293506101206101bf198301121561076257600080fd5b61076a610521565b91506107788682870161062d565b82525061078985610200860161067d565b602082015261079c85610280860161062d565b6040820152846102df8501126107b157600080fd5b6107bf856102c086016105cc565b6060820152809150509250929050565b600060208083528351808285015260005b818110156107fc578581018301518582016040015282016107e0565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561082f57600080fd5b81356001600160a01b038116811461084657600080fd5b9392505050565b8060005b6002811015610870578151845260209384019390910190600101610851565b50505050565b8060005b60028110156108705761088e84835161084d565b604093909301926020919091019060010161087a565b60006102e0820190506108b882855161084d565b6020808501516108cb6040850182610876565b5060408501516108de60c085018261084d565b506060850151610100840160005b6006811015610909578251825291830191908301906001016108ec565b50505061091b6101c08401855161084d565b8084015161092d610200850182610876565b50604084015161094161028085018261084d565b5060608401516102c0840160005b600181101561096c5782518252918301919083019060010161094f565b505050509392505050565b60006020828403121561098957600080fd5b8151801515811461084657600080fd5b600181811c908216806109ad57607f821691505b6020821081036109cd57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220e95e7ec2e030747cc08f5671cd61b5986c87c9d2e885bb84fa67e721d8ae478c64736f6c634300081300330000000000000000000000000000000000000000000000000000000000000080000000000000000000000000aa55a7bc08913d4a05990bc6eff5ac8478a8b307000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a87000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000006302e302e31320000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063b1e7ffad11610071578063b1e7ffad14610171578063ce1b815f14610194578063cf695688146101b9578063e3179f0c146101cc578063e9fe0532146101d6578063fd54b228146101f957600080fd5b8063231eaf4f146100b9578063450832dd146100f157806349ce89971461010657806354fd4d5014610127578063572b6c051461013c57806371c5ecb11461015e575b600080fd5b6100dc6100c73660046104f2565b60046020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6101046100ff3660046106cc565b610226565b005b6101196101143660046104f2565b610433565b6040519081526020016100e8565b61012f610454565b6040516100e891906107cf565b6100dc61014a36600461081d565b6000546001600160a01b0391821691161490565b61011961016c3660046104f2565b6104e2565b6100dc61017f3660046104f2565b60076020526000908152604090205460ff1681565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100e8565b6002546101a1906001600160a01b031681565b6003546101199081565b6100dc6101e43660046104f2565b60009081526007602052604090205460ff1690565b600854600954600a5461020b92919083565b604080519384526020840192909252908201526060016100e8565b600254604051635d4220ad60e01b81526001600160a01b0390911690635d4220ad9061025890859085906004016108a4565b602060405180830381865afa158015610275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102999190610977565b6102dc5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2102d2590383937b7b360811b604482015260640160405180910390fd5b6060820151516000818152600460205260408120805460ff1916600190811790915560058054808301825592527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0909101829055600380549091019055604051630b4381fd60e11b8152600860048201526024810182905273ab367606fdbe6ce8a692f3b02e302b7a4de2294c9063168703fa9060440160006040518083038186803b15801561038b57600080fd5b505af415801561039f573d6000803e3d6000fd5b50506009546006805460018082019092557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01829055600082815260076020908152604091829020805460ff191690931790925580518681529182018390529193507f5bec38d019c4cec2bfa098d7563f25f754a2a054a92516db7f56e8656c2adef692500160405180910390a150505050565b6005818154811061044357600080fd5b600091825260209091200154905081565b6001805461046190610999565b80601f016020809104026020016040519081016040528092919081815260200182805461048d90610999565b80156104da5780601f106104af576101008083540402835291602001916104da565b820191906000526020600020905b8154815290600101906020018083116104bd57829003601f168201915b505050505081565b6006818154811061044357600080fd5b60006020828403121561050457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156105445761054461050b565b60405290565b6040805190810167ffffffffffffffff811182821017156105445761054461050b565b600060405160c0810181811067ffffffffffffffff821117156105925761059261050b565b60405290508060c08301848111156105a957600080fd5b835b818110156105c35780358352602092830192016105ab565b50505092915050565b6000604051602080820182811067ffffffffffffffff821117156105f2576105f261050b565b80604052508192508084018581111561060a57600080fd5b845b81811015610623578035845292820192820161060c565b5050505092915050565b600082601f83011261063e57600080fd5b61064661054a565b80604084018581111561065857600080fd5b845b8181101561067257803584526020938401930161065a565b509095945050505050565b600082601f83011261068e57600080fd5b61069661054a565b8060808401858111156106a857600080fd5b845b81811015610672576106bc878261062d565b84526020909301926040016106aa565b6000808284036102e08112156106e157600080fd5b6101c0808212156106f157600080fd5b6106f9610521565b610703878761062d565b8152610712876040880161067d565b60208201526107248760c0880161062d565b60408201528661011f87011261073957600080fd5b61074787610100880161056d565b606082015293506101206101bf198301121561076257600080fd5b61076a610521565b91506107788682870161062d565b82525061078985610200860161067d565b602082015261079c85610280860161062d565b6040820152846102df8501126107b157600080fd5b6107bf856102c086016105cc565b6060820152809150509250929050565b600060208083528351808285015260005b818110156107fc578581018301518582016040015282016107e0565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561082f57600080fd5b81356001600160a01b038116811461084657600080fd5b9392505050565b8060005b6002811015610870578151845260209384019390910190600101610851565b50505050565b8060005b60028110156108705761088e84835161084d565b604093909301926020919091019060010161087a565b60006102e0820190506108b882855161084d565b6020808501516108cb6040850182610876565b5060408501516108de60c085018261084d565b506060850151610100840160005b6006811015610909578251825291830191908301906001016108ec565b50505061091b6101c08401855161084d565b8084015161092d610200850182610876565b50604084015161094161028085018261084d565b5060608401516102c0840160005b600181101561096c5782518252918301919083019060010161094f565b505050509392505050565b60006020828403121561098957600080fd5b8151801515811461084657600080fd5b600181811c908216806109ad57607f821691505b6020821081036109cd57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220e95e7ec2e030747cc08f5671cd61b5986c87c9d2e885bb84fa67e721d8ae478c64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000aa55a7bc08913d4a05990bc6eff5ac8478a8b307000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a87000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000006302e302e31320000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _version (string): 0.0.12
Arg [1] : _verifierContract (address): 0xAa55A7bc08913d4A05990Bc6eFf5ac8478A8b307
Arg [2] : _trustedForwarder (address): 0xB2b5841DBeF766d4b521221732F9B618fCf34A87
Arg [3] : _depth (uint8): 30
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 000000000000000000000000aa55a7bc08913d4a05990bc6eff5ac8478a8b307
Arg [2] : 000000000000000000000000b2b5841dbef766d4b521221732f9b618fcf34a87
Arg [3] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 302e302e31320000000000000000000000000000000000000000000000000000
Loading...
Loading
[ 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.