ETH Price: $2,422.99 (-0.08%)

Contract

0xfbEFF61e5fc75EC1089AdB4410930d0D8310B9aE
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw188873062023-12-28 23:14:11282 days ago1703805251IN
0xfbEFF61e...D8310B9aE
0 ETH0.0005624718.47030225
Mint188871562023-12-28 22:43:59282 days ago1703803439IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.0004948719.22353113
Mint188871552023-12-28 22:43:47282 days ago1703803427IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.0007142919.63328524
Mint188871542023-12-28 22:43:35282 days ago1703803415IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.0010371819.39309334
Mint188871502023-12-28 22:42:47282 days ago1703803367IN
0xfbEFF61e...D8310B9aE
0.033 ETH0.0010561819.74849326
Mint188871422023-12-28 22:41:11282 days ago1703803271IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.0009808918.34070113
Mint188871412023-12-28 22:40:59282 days ago1703803259IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.000685418.83923954
Mint188871352023-12-28 22:39:47282 days ago1703803187IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.001057319.76935804
Mint188871262023-12-28 22:37:59282 days ago1703803079IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.0010039818.77237651
Mint188871262023-12-28 22:37:59282 days ago1703803079IN
0xfbEFF61e...D8310B9aE
0.033 ETH0.0006829718.77237651
Mint188871252023-12-28 22:37:47282 days ago1703803067IN
0xfbEFF61e...D8310B9aE
0.055 ETH0.0010118.8850075
Mint188871242023-12-28 22:37:35282 days ago1703803055IN
0xfbEFF61e...D8310B9aE
0.022 ETH0.0006467817.77756644
Mint188871082023-12-28 22:34:23282 days ago1703802863IN
0xfbEFF61e...D8310B9aE
0.055 ETH0.001101920.60323471
Mint188871072023-12-28 22:34:11282 days ago1703802851IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.0007530520.69843553
Mint188871052023-12-28 22:33:47282 days ago1703802827IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.0007013219.27682944
Mint188871042023-12-28 22:33:35282 days ago1703802815IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.0006941119.07842362
Mint188870992023-12-28 22:32:35282 days ago1703802755IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.0007451220.48053128
Mint188870972023-12-28 22:32:11282 days ago1703802731IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.0006527217.94076516
Mint188870952023-12-28 22:31:47282 days ago1703802707IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.0010017418.73049452
Mint188870882023-12-28 22:30:23282 days ago1703802623IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.0006734218.50989137
Mint188870842023-12-28 22:29:35282 days ago1703802575IN
0xfbEFF61e...D8310B9aE
0.022 ETH0.000980118.32579255
Mint188870652023-12-28 22:25:47282 days ago1703802347IN
0xfbEFF61e...D8310B9aE
0.022 ETH0.0009883618.4802518
Mint188870492023-12-28 22:22:35282 days ago1703802155IN
0xfbEFF61e...D8310B9aE
0.022 ETH0.0010488619.61155981
Mint188870452023-12-28 22:21:47282 days ago1703802107IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.0010010418.71747363
Mint188870342023-12-28 22:19:35282 days ago1703801975IN
0xfbEFF61e...D8310B9aE
0.011 ETH0.000993518.57646499
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
188873062023-12-28 23:14:11282 days ago1703805251
0xfbEFF61e...D8310B9aE
5.9675 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Darknezz

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 2 : Darknezz.sol
// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.13;

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

contract Darknezz {

    error MaxSupplyReached();
    error UserMaxSupplyReached();
    error InvalidValue();
    error RequestingTooMany();
    error TransferFailed();
    error OnlyOwner();
    error WlMintNotActive();
    error MintNotActive();

    event Mint(address indexed minter, uint256 indexed amount, uint256 startID);

    uint256 public TOTAL_SUPPLY = 0;
    mapping (address=>uint16) balances;
    mapping (address=>uint16) wlBalances;
    uint256 public immutable WL_PRICE = 0.0055 * 1 ether;
    uint256 public immutable PRICE = 0.0110 * 1 ether;
    uint256 public immutable MAX_SUPPLY = 555;
    uint public immutable MAX_PER_WALLET_WL = 3;
    uint16 public immutable MAX_PER_WALLET = 5;
    bool public wlMintActive = false;
    bool public mintActive = false;
    bytes32 public merkleRoot;
    address OWNER;

    modifier onlyOwner() {
        if (msg.sender != OWNER) {
            revert OnlyOwner();
        }
        _;
    }

    constructor (bytes32 _merkleRoot) {
        OWNER = msg.sender;
        merkleRoot = _merkleRoot;
    }

    function setWlMintActive(bool _wlMintActive) external onlyOwner {
        wlMintActive = _wlMintActive;
    }

    function setMintActive(bool _mintActive) external onlyOwner {
        mintActive = _mintActive;
    }

    function getWlBalance(address _address) external view returns (uint16) {
        return wlBalances[_address];
    }

    function getBalance(address _address) external view returns (uint16) {
        return balances[_address];
    }

    function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner {
        merkleRoot = _merkleRoot;
    }

    function setOwner(address _owner) external onlyOwner {
        OWNER = _owner;
    }

    function wlMint(uint256 amount,bytes32[] memory proof) external payable {
        if (!wlMintActive) { revert WlMintNotActive(); }
        if (TOTAL_SUPPLY == MAX_SUPPLY) { revert MaxSupplyReached(); }
        if ((TOTAL_SUPPLY + amount) > MAX_SUPPLY) { revert RequestingTooMany(); }
        if ((WL_PRICE * amount) != msg.value) { revert InvalidValue(); }
        if (wlBalances[msg.sender] + amount > MAX_PER_WALLET_WL) { revert UserMaxSupplyReached(); }
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(MerkleProof.verify(proof, merkleRoot, leaf), "Invalid proof");

        emit Mint(msg.sender, amount, TOTAL_SUPPLY);
        
        unchecked {
            TOTAL_SUPPLY += amount;
            wlBalances[msg.sender] += uint16(amount);
        }
    }

    function mint(uint256 amount) external payable {
        if (!mintActive) { revert MintNotActive(); }
        if (TOTAL_SUPPLY == MAX_SUPPLY) { revert MaxSupplyReached(); }
        if ((TOTAL_SUPPLY + amount) > MAX_SUPPLY) { revert RequestingTooMany(); }
        if ((PRICE * amount) != msg.value) { revert InvalidValue(); }
        if (balances[msg.sender] + amount > MAX_PER_WALLET) { revert UserMaxSupplyReached(); }

        emit Mint(msg.sender, amount, TOTAL_SUPPLY);
        
        unchecked {
            TOTAL_SUPPLY += amount;
            balances[msg.sender] += uint16(amount);
        }
    }


    function withdraw() external onlyOwner {
        (bool success,) = address(OWNER).call{value: address(this).balance}("");
        if (!success) {
            revert TransferFailed();
        }
    }
}

File 2 of 2 : 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)
        }
    }
}

Settings
{
  "remappings": [
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidValue","type":"error"},{"inputs":[],"name":"MaxSupplyReached","type":"error"},{"inputs":[],"name":"MintNotActive","type":"error"},{"inputs":[],"name":"OnlyOwner","type":"error"},{"inputs":[],"name":"RequestingTooMany","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"inputs":[],"name":"UserMaxSupplyReached","type":"error"},{"inputs":[],"name":"WlMintNotActive","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startID","type":"uint256"}],"name":"Mint","type":"event"},{"inputs":[],"name":"MAX_PER_WALLET","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_WALLET_WL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WL_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getWlBalance","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_mintActive","type":"bool"}],"name":"setMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_wlMintActive","type":"bool"}],"name":"setWlMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"wlMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"wlMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

6101206040526000805566138a388a43c000608052662714711487800060a05261022b60c052600360e0819052600561010052805461ffff1916905534801561004757600080fd5b50604051610d21380380610d2183398101604081905261006691610080565b600580546001600160a01b03191633179055600455610099565b60006020828403121561009257600080fd5b5051919050565b60805160a05160c05160e05161010051610c0c61011560003960008181610120015261086b0152600081816102e501526105db015260008181610215015281816104f2015281816105340152818161077f01526107c101526000818161031901526108140152600081816101e101526105870152610c0c6000f3fe6080604052600436106101095760003560e01c806351222f3311610095578063902d55a511610064578063902d55a51461033b578063a0712d6814610351578063c91be70d14610364578063ee1cc94414610384578063f8b2cb4f146103a457600080fd5b806351222f33146102995780637cb64759146102b3578063828122ab146102d35780638d859f3e1461030757600080fd5b806331c3c7a0116100dc57806331c3c7a0146101cf57806332cb6b0c146102035780633ccfd60b146102375780633ef0d36d1461024c5780634f8ed95c1461025f57600080fd5b80630f2cdd6c1461010e57806313af40351461015a57806325fd90f31461017c5780632eb4a7ab146101ab575b600080fd5b34801561011a57600080fd5b506101427f000000000000000000000000000000000000000000000000000000000000000081565b60405161ffff90911681526020015b60405180910390f35b34801561016657600080fd5b5061017a610175366004610a3c565b6103de565b005b34801561018857600080fd5b5060035461019b90610100900460ff1681565b6040519015158152602001610151565b3480156101b757600080fd5b506101c160045481565b604051908152602001610151565b3480156101db57600080fd5b506101c17f000000000000000000000000000000000000000000000000000000000000000081565b34801561020f57600080fd5b506101c17f000000000000000000000000000000000000000000000000000000000000000081565b34801561024357600080fd5b5061017a61042b565b61017a61025a366004610a7b565b6104cd565b34801561026b57600080fd5b5061014261027a366004610a3c565b6001600160a01b031660009081526002602052604090205461ffff1690565b3480156102a557600080fd5b5060035461019b9060ff1681565b3480156102bf57600080fd5b5061017a6102ce366004610b45565b610725565b3480156102df57600080fd5b506101c17f000000000000000000000000000000000000000000000000000000000000000081565b34801561031357600080fd5b506101c17f000000000000000000000000000000000000000000000000000000000000000081565b34801561034757600080fd5b506101c160005481565b61017a61035f366004610b45565b610755565b34801561037057600080fd5b5061017a61037f366004610b5e565b61092c565b34801561039057600080fd5b5061017a61039f366004610b5e565b61096a565b3480156103b057600080fd5b506101426103bf366004610a3c565b6001600160a01b031660009081526001602052604090205461ffff1690565b6005546001600160a01b0316331461040957604051635fc483c560e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461045657604051635fc483c560e01b815260040160405180910390fd5b6005546040516000916001600160a01b03169047908381818185875af1925050503d80600081146104a3576040519150601f19603f3d011682016040523d82523d6000602084013e6104a8565b606091505b50509050806104ca576040516312171d8360e31b815260040160405180910390fd5b50565b60035460ff166104f05760405163ed5bf9ab60e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000600054036105325760405163d05cb60960e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000826000546105619190610b96565b111561058057604051639e0456c360e01b815260040160405180910390fd5b346105ab837f0000000000000000000000000000000000000000000000000000000000000000610ba9565b146105c957604051632a9ffab760e21b815260040160405180910390fd5b336000908152600260205260409020547f00000000000000000000000000000000000000000000000000000000000000009061060a90849061ffff16610b96565b111561062957604051630157715d60e61b815260040160405180910390fd5b6040516bffffffffffffffffffffffff193360601b16602082015260009060340160405160208183030381529060405280519060200120905061066f82600454836109af565b6106af5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b604482015260640160405180910390fd5b82336001600160a01b03167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f6000546040516106ed91815260200190565b60405180910390a350506000805482018155338152600260205260409020805461ffff19811661ffff91821690930116919091179055565b6005546001600160a01b0316331461075057604051635fc483c560e01b815260040160405180910390fd5b600455565b600354610100900460ff1661077d5760405163914edb0f60e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000600054036107bf5760405163d05cb60960e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000816000546107ee9190610b96565b111561080d57604051639e0456c360e01b815260040160405180910390fd5b34610838827f0000000000000000000000000000000000000000000000000000000000000000610ba9565b1461085657604051632a9ffab760e21b815260040160405180910390fd5b3360009081526001602052604090205461ffff7f000000000000000000000000000000000000000000000000000000000000000081169161089991849116610b96565b11156108b857604051630157715d60e61b815260040160405180910390fd5b80336001600160a01b03167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f6000546040516108f691815260200190565b60405180910390a36000805482018155338152600160205260409020805461ffff19811661ffff91821690930116919091179055565b6005546001600160a01b0316331461095757604051635fc483c560e01b815260040160405180910390fd5b6003805460ff1916911515919091179055565b6005546001600160a01b0316331461099557604051635fc483c560e01b815260040160405180910390fd5b600380549115156101000261ff0019909216919091179055565b6000826109bc85846109c5565b14949350505050565b600081815b8451811015610a00576109f6828683815181106109e9576109e9610bc0565b6020026020010151610a0a565b91506001016109ca565b5090505b92915050565b6000818310610a26576000828152602084905260409020610a35565b60008381526020839052604090205b9392505050565b600060208284031215610a4e57600080fd5b81356001600160a01b0381168114610a3557600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a8e57600080fd5b8235915060208084013567ffffffffffffffff80821115610aae57600080fd5b818601915086601f830112610ac257600080fd5b813581811115610ad457610ad4610a65565b8060051b604051601f19603f83011681018181108582111715610af957610af9610a65565b604052918252848201925083810185019189831115610b1757600080fd5b938501935b82851015610b3557843584529385019392850192610b1c565b8096505050505050509250929050565b600060208284031215610b5757600080fd5b5035919050565b600060208284031215610b7057600080fd5b81358015158114610a3557600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a0457610a04610b80565b8082028115828204841417610a0457610a04610b80565b634e487b7160e01b600052603260045260246000fdfea26469706673582212204da051f136372bc18de018c90b3e77146328d1b886f199bf50ec4168af838bc164736f6c634300081700338d4e0b71c1101d533a72376cd3197ab218c056f023425dd7652e46174b690b61

Deployed Bytecode

0x6080604052600436106101095760003560e01c806351222f3311610095578063902d55a511610064578063902d55a51461033b578063a0712d6814610351578063c91be70d14610364578063ee1cc94414610384578063f8b2cb4f146103a457600080fd5b806351222f33146102995780637cb64759146102b3578063828122ab146102d35780638d859f3e1461030757600080fd5b806331c3c7a0116100dc57806331c3c7a0146101cf57806332cb6b0c146102035780633ccfd60b146102375780633ef0d36d1461024c5780634f8ed95c1461025f57600080fd5b80630f2cdd6c1461010e57806313af40351461015a57806325fd90f31461017c5780632eb4a7ab146101ab575b600080fd5b34801561011a57600080fd5b506101427f000000000000000000000000000000000000000000000000000000000000000581565b60405161ffff90911681526020015b60405180910390f35b34801561016657600080fd5b5061017a610175366004610a3c565b6103de565b005b34801561018857600080fd5b5060035461019b90610100900460ff1681565b6040519015158152602001610151565b3480156101b757600080fd5b506101c160045481565b604051908152602001610151565b3480156101db57600080fd5b506101c17f00000000000000000000000000000000000000000000000000138a388a43c00081565b34801561020f57600080fd5b506101c17f000000000000000000000000000000000000000000000000000000000000022b81565b34801561024357600080fd5b5061017a61042b565b61017a61025a366004610a7b565b6104cd565b34801561026b57600080fd5b5061014261027a366004610a3c565b6001600160a01b031660009081526002602052604090205461ffff1690565b3480156102a557600080fd5b5060035461019b9060ff1681565b3480156102bf57600080fd5b5061017a6102ce366004610b45565b610725565b3480156102df57600080fd5b506101c17f000000000000000000000000000000000000000000000000000000000000000381565b34801561031357600080fd5b506101c17f000000000000000000000000000000000000000000000000002714711487800081565b34801561034757600080fd5b506101c160005481565b61017a61035f366004610b45565b610755565b34801561037057600080fd5b5061017a61037f366004610b5e565b61092c565b34801561039057600080fd5b5061017a61039f366004610b5e565b61096a565b3480156103b057600080fd5b506101426103bf366004610a3c565b6001600160a01b031660009081526001602052604090205461ffff1690565b6005546001600160a01b0316331461040957604051635fc483c560e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461045657604051635fc483c560e01b815260040160405180910390fd5b6005546040516000916001600160a01b03169047908381818185875af1925050503d80600081146104a3576040519150601f19603f3d011682016040523d82523d6000602084013e6104a8565b606091505b50509050806104ca576040516312171d8360e31b815260040160405180910390fd5b50565b60035460ff166104f05760405163ed5bf9ab60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000022b600054036105325760405163d05cb60960e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000022b826000546105619190610b96565b111561058057604051639e0456c360e01b815260040160405180910390fd5b346105ab837f00000000000000000000000000000000000000000000000000138a388a43c000610ba9565b146105c957604051632a9ffab760e21b815260040160405180910390fd5b336000908152600260205260409020547f00000000000000000000000000000000000000000000000000000000000000039061060a90849061ffff16610b96565b111561062957604051630157715d60e61b815260040160405180910390fd5b6040516bffffffffffffffffffffffff193360601b16602082015260009060340160405160208183030381529060405280519060200120905061066f82600454836109af565b6106af5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b604482015260640160405180910390fd5b82336001600160a01b03167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f6000546040516106ed91815260200190565b60405180910390a350506000805482018155338152600260205260409020805461ffff19811661ffff91821690930116919091179055565b6005546001600160a01b0316331461075057604051635fc483c560e01b815260040160405180910390fd5b600455565b600354610100900460ff1661077d5760405163914edb0f60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000022b600054036107bf5760405163d05cb60960e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000022b816000546107ee9190610b96565b111561080d57604051639e0456c360e01b815260040160405180910390fd5b34610838827f0000000000000000000000000000000000000000000000000027147114878000610ba9565b1461085657604051632a9ffab760e21b815260040160405180910390fd5b3360009081526001602052604090205461ffff7f000000000000000000000000000000000000000000000000000000000000000581169161089991849116610b96565b11156108b857604051630157715d60e61b815260040160405180910390fd5b80336001600160a01b03167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f6000546040516108f691815260200190565b60405180910390a36000805482018155338152600160205260409020805461ffff19811661ffff91821690930116919091179055565b6005546001600160a01b0316331461095757604051635fc483c560e01b815260040160405180910390fd5b6003805460ff1916911515919091179055565b6005546001600160a01b0316331461099557604051635fc483c560e01b815260040160405180910390fd5b600380549115156101000261ff0019909216919091179055565b6000826109bc85846109c5565b14949350505050565b600081815b8451811015610a00576109f6828683815181106109e9576109e9610bc0565b6020026020010151610a0a565b91506001016109ca565b5090505b92915050565b6000818310610a26576000828152602084905260409020610a35565b60008381526020839052604090205b9392505050565b600060208284031215610a4e57600080fd5b81356001600160a01b0381168114610a3557600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a8e57600080fd5b8235915060208084013567ffffffffffffffff80821115610aae57600080fd5b818601915086601f830112610ac257600080fd5b813581811115610ad457610ad4610a65565b8060051b604051601f19603f83011681018181108582111715610af957610af9610a65565b604052918252848201925083810185019189831115610b1757600080fd5b938501935b82851015610b3557843584529385019392850192610b1c565b8096505050505050509250929050565b600060208284031215610b5757600080fd5b5035919050565b600060208284031215610b7057600080fd5b81358015158114610a3557600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610a0457610a04610b80565b8082028115828204841417610a0457610a04610b80565b634e487b7160e01b600052603260045260246000fdfea26469706673582212204da051f136372bc18de018c90b3e77146328d1b886f199bf50ec4168af838bc164736f6c63430008170033

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

8d4e0b71c1101d533a72376cd3197ab218c056f023425dd7652e46174b690b61

-----Decoded View---------------
Arg [0] : _merkleRoot (bytes32): 0x8d4e0b71c1101d533a72376cd3197ab218c056f023425dd7652e46174b690b61

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


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  ]
[ 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.