ETH Price: $2,137.91 (+3.52%)

Contract

0x4d1c8D2Bb7c84678b680FD348aa3586FdF92bDA6
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw168502152023-03-17 21:31:471102 days ago1679088707IN
0x4d1c8D2B...FdF92bDA6
0 ETH0.0026552287.17388181
Reserve168500622023-03-17 21:00:471102 days ago1679086847IN
0x4d1c8D2B...FdF92bDA6
0.029 ETH0.0020557630.10085057
Reserve168500592023-03-17 21:00:111102 days ago1679086811IN
0x4d1c8D2B...FdF92bDA6
0.029 ETH0.0019426928.46363408
Reserve168500542023-03-17 20:59:111102 days ago1679086751IN
0x4d1c8D2B...FdF92bDA6
0.029 ETH0.001959128.70321525
Reserve168500532023-03-17 20:58:591102 days ago1679086739IN
0x4d1c8D2B...FdF92bDA6
0.058 ETH0.0020286329.71146874
Reserve168500412023-03-17 20:56:351102 days ago1679086595IN
0x4d1c8D2B...FdF92bDA6
0.029 ETH0.0016562224.25774037
Reserve168500372023-03-17 20:55:471102 days ago1679086547IN
0x4d1c8D2B...FdF92bDA6
0.029 ETH0.0016642824.37231417
Reserve168500332023-03-17 20:54:591102 days ago1679086499IN
0x4d1c8D2B...FdF92bDA6
0.029 ETH0.0014612921.40090135
Reserve168500022023-03-17 20:48:471102 days ago1679086127IN
0x4d1c8D2B...FdF92bDA6
0.058 ETH0.0017594726.13098207
Reserve168499822023-03-17 20:44:471102 days ago1679085887IN
0x4d1c8D2B...FdF92bDA6
0.058 ETH0.0015485722.67442179
Reserve168499792023-03-17 20:44:111102 days ago1679085851IN
0x4d1c8D2B...FdF92bDA6
0.058 ETH0.0015388222.52847044
Reserve168499762023-03-17 20:43:231102 days ago1679085803IN
0x4d1c8D2B...FdF92bDA6
0.058 ETH0.001303319.0832222
Reserve168499582023-03-17 20:39:471102 days ago1679085587IN
0x4d1c8D2B...FdF92bDA6
0.058 ETH0.0012825619.04585952
Reserve168499522023-03-17 20:38:351102 days ago1679085515IN
0x4d1c8D2B...FdF92bDA6
0.029 ETH0.0013403419.91157048
Reserve168499472023-03-17 20:37:351102 days ago1679085455IN
0x4d1c8D2B...FdF92bDA6
0.058 ETH0.0014716621.5470205
Reserve168499472023-03-17 20:37:351102 days ago1679085455IN
0x4d1c8D2B...FdF92bDA6
0.058 ETH0.0014509221.5530205
Reserve168499422023-03-17 20:36:351102 days ago1679085395IN
0x4d1c8D2B...FdF92bDA6
0.058 ETH0.0015159522.51829283
Reserve168499192023-03-17 20:31:591102 days ago1679085119IN
0x4d1c8D2B...FdF92bDA6
0.058 ETH0.0016932425.13979122
Reserve168499092023-03-17 20:29:591102 days ago1679084999IN
0x4d1c8D2B...FdF92bDA6
0.029 ETH0.0018629927.28623253
Reserve168498992023-03-17 20:27:591102 days ago1679084879IN
0x4d1c8D2B...FdF92bDA6
0.029 ETH0.0015041322.02436793
Reserve168498442023-03-17 20:16:471102 days ago1679084207IN
0x4d1c8D2B...FdF92bDA6
0.058 ETH0.0017733625.96429539
Reserve168498182023-03-17 20:11:351102 days ago1679083895IN
0x4d1c8D2B...FdF92bDA6
0.029 ETH0.0024355835.67688388
Reserve168498092023-03-17 20:09:471102 days ago1679083787IN
0x4d1c8D2B...FdF92bDA6
0.058 ETH0.0020037129.34124924
Reserve168497792023-03-17 20:03:471102 days ago1679083427IN
0x4d1c8D2B...FdF92bDA6
0.058 ETH0.0032499348.27519998
Reserve168497772023-03-17 20:03:231102 days ago1679083403IN
0x4d1c8D2B...FdF92bDA6
0.058 ETH0.0033134448.55289318
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer168502152023-03-17 21:31:471102 days ago1679088707
0x4d1c8D2B...FdF92bDA6
15.08 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BirdyBytesReserve

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;

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

contract BirdyBytesReserve {
    address payable public withdrawer;
    bytes32 public merkleRoot;
    mapping(address => uint) public reservations;
    uint public totalSupply;
    uint public totalReservations;

    event Reservation(address who, uint amount, uint when);

    error AddressNotOnAllowList(address who);
    error UnsupportedReservationQuantity(uint quantity);
    error InvalidAmount(uint amountSent, uint amountRequired);
    error NotOwner(address who);
    error ReachedMaxReservations();
    error NotEnoughLeftInReservationSupply();

    constructor(address _withdrawer, bytes32 _merkleRoot, uint _totalSupply) payable {
        withdrawer = payable(_withdrawer);
        merkleRoot = _merkleRoot;
        totalSupply = _totalSupply;
    }

    function reserve(bytes32[] calldata _merkleProof, uint _amount) public payable {
        if (verifyAddress(_merkleProof) == false) {
            revert AddressNotOnAllowList(msg.sender);
        }

        if(_amount != 1 && _amount != 2) {
            revert UnsupportedReservationQuantity(_amount);
        }

        uint amountRequired = _amount * 0.029 ether;
        if(msg.value != amountRequired) {
            revert InvalidAmount(msg.value,  amountRequired);
        }

        if (reservations[msg.sender] + _amount > 2) {
            revert ReachedMaxReservations();
        }

        if (totalReservations + _amount > totalSupply) {
            revert NotEnoughLeftInReservationSupply();
        }
        
        reservations[msg.sender] = _amount + reservations[msg.sender];
        totalReservations = totalReservations + _amount;

        emit Reservation(msg.sender, _amount, block.timestamp);
    }

     function verifyAddress(bytes32[] calldata _merkleProof) private view returns (bool) {
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        return MerkleProof.verify(_merkleProof, merkleRoot, leaf);
    }


    function withdraw() public {
        if (msg.sender != withdrawer) {
            revert NotOwner(msg.sender);
        } 

        withdrawer.transfer(address(this).balance);
    }

    function balanceOf(address _who) public view returns (uint) {
        return reservations[_who];
    }
}

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_withdrawer","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"AddressNotOnAllowList","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountSent","type":"uint256"},{"internalType":"uint256","name":"amountRequired","type":"uint256"}],"name":"InvalidAmount","type":"error"},{"inputs":[],"name":"NotEnoughLeftInReservationSupply","type":"error"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"NotOwner","type":"error"},{"inputs":[],"name":"ReachedMaxReservations","type":"error"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"UnsupportedReservationQuantity","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"when","type":"uint256"}],"name":"Reservation","type":"event"},{"inputs":[{"internalType":"address","name":"_who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reservations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"totalReservations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawer","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405260405162000d8438038062000d84833981810160405281019062000029919062000160565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160018190555080600381905550505050620001bc565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000b28262000085565b9050919050565b620000c481620000a5565b8114620000d057600080fd5b50565b600081519050620000e481620000b9565b92915050565b6000819050919050565b620000ff81620000ea565b81146200010b57600080fd5b50565b6000815190506200011f81620000f4565b92915050565b6000819050919050565b6200013a8162000125565b81146200014657600080fd5b50565b6000815190506200015a816200012f565b92915050565b6000806000606084860312156200017c576200017b62000080565b5b60006200018c86828701620000d3565b93505060206200019f868287016200010e565b9250506040620001b28682870162000149565b9150509250925092565b610bb880620001cc6000396000f3fe60806040526004361061007b5760003560e01c806370a082311161004e57806370a0823114610109578063cdc1842414610146578063ed37226d14610171578063fd3dc53a1461019c5761007b565b806318160ddd146100805780632eb4a7ab146100ab5780633ccfd60b146100d657806350090c9c146100ed575b600080fd5b34801561008c57600080fd5b506100956101d9565b6040516100a29190610768565b60405180910390f35b3480156100b757600080fd5b506100c06101df565b6040516100cd919061079c565b60405180910390f35b3480156100e257600080fd5b506100eb6101e5565b005b61010760048036038101906101029190610852565b6102de565b005b34801561011557600080fd5b50610130600480360381019061012b9190610910565b610592565b60405161013d9190610768565b60405180910390f35b34801561015257600080fd5b5061015b6105db565b604051610168919061095e565b60405180910390f35b34801561017d57600080fd5b506101866105ff565b6040516101939190610768565b60405180910390f35b3480156101a857600080fd5b506101c360048036038101906101be9190610910565b610605565b6040516101d09190610768565b60405180910390f35b60035481565b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461027557336040517f245aecd300000000000000000000000000000000000000000000000000000000815260040161026c9190610988565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156102db573d6000803e3d6000fd5b50565b600015156102ec848461061d565b15150361033057336040517f5358e4980000000000000000000000000000000000000000000000000000000081526004016103279190610988565b60405180910390fd5b60018114158015610342575060028114155b1561038457806040517f3d99ccb400000000000000000000000000000000000000000000000000000000815260040161037b9190610768565b60405180910390fd5b600066670758aa7c80008261039991906109d2565b90508034146103e15734816040517f7c83fcf00000000000000000000000000000000000000000000000000000000081526004016103d8929190610a14565b60405180910390fd5b600282600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461042e9190610a3d565b1115610466576040517f7dd949d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354826004546104779190610a3d565b11156104af576040517f29ad1f8000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826104fa9190610a3d565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160045461054b9190610a3d565b6004819055507fd4f5ef8b5c5c845e4bb3a6bcbe0af0716d1a796eb1cd6996bae76e5d3515493c33834260405161058493929190610a71565b60405180910390a150505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60026020528060005260406000206000915090505481565b600080336040516020016106319190610af0565b604051602081830303815290604052805190602001209050610697848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600154836106a0565b91505092915050565b6000826106ad85846106b7565b1490509392505050565b60008082905060005b8451811015610702576106ed828683815181106106e0576106df610b0b565b5b602002602001015161070d565b915080806106fa90610b3a565b9150506106c0565b508091505092915050565b6000818310610725576107208284610738565b610730565b61072f8383610738565b5b905092915050565b600082600052816020526040600020905092915050565b6000819050919050565b6107628161074f565b82525050565b600060208201905061077d6000830184610759565b92915050565b6000819050919050565b61079681610783565b82525050565b60006020820190506107b1600083018461078d565b92915050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126107e6576107e56107c1565b5b8235905067ffffffffffffffff811115610803576108026107c6565b5b60208301915083602082028301111561081f5761081e6107cb565b5b9250929050565b61082f8161074f565b811461083a57600080fd5b50565b60008135905061084c81610826565b92915050565b60008060006040848603121561086b5761086a6107b7565b5b600084013567ffffffffffffffff811115610889576108886107bc565b5b610895868287016107d0565b935093505060206108a88682870161083d565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006108dd826108b2565b9050919050565b6108ed816108d2565b81146108f857600080fd5b50565b60008135905061090a816108e4565b92915050565b600060208284031215610926576109256107b7565b5b6000610934848285016108fb565b91505092915050565b6000610948826108b2565b9050919050565b6109588161093d565b82525050565b6000602082019050610973600083018461094f565b92915050565b610982816108d2565b82525050565b600060208201905061099d6000830184610979565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006109dd8261074f565b91506109e88361074f565b92508282026109f68161074f565b91508282048414831517610a0d57610a0c6109a3565b5b5092915050565b6000604082019050610a296000830185610759565b610a366020830184610759565b9392505050565b6000610a488261074f565b9150610a538361074f565b9250828201905080821115610a6b57610a6a6109a3565b5b92915050565b6000606082019050610a866000830186610979565b610a936020830185610759565b610aa06040830184610759565b949350505050565b60008160601b9050919050565b6000610ac082610aa8565b9050919050565b6000610ad282610ab5565b9050919050565b610aea610ae5826108d2565b610ac7565b82525050565b6000610afc8284610ad9565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000610b458261074f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610b7757610b766109a3565b5b60018201905091905056fea2646970667358221220725bcfc53a0db6cf802871befcc2412204d6485bef563184fb2480ffc9b1400f64736f6c634300081200330000000000000000000000000f366a411dc9f8a1611cad614d8f451436fc4f4b7827c1c18f940278609d2bdf09eb1c4c6f1e3a2be59b36b28969dfd4120b86db0000000000000000000000000000000000000000000000000000000000000bb8

Deployed Bytecode

0x60806040526004361061007b5760003560e01c806370a082311161004e57806370a0823114610109578063cdc1842414610146578063ed37226d14610171578063fd3dc53a1461019c5761007b565b806318160ddd146100805780632eb4a7ab146100ab5780633ccfd60b146100d657806350090c9c146100ed575b600080fd5b34801561008c57600080fd5b506100956101d9565b6040516100a29190610768565b60405180910390f35b3480156100b757600080fd5b506100c06101df565b6040516100cd919061079c565b60405180910390f35b3480156100e257600080fd5b506100eb6101e5565b005b61010760048036038101906101029190610852565b6102de565b005b34801561011557600080fd5b50610130600480360381019061012b9190610910565b610592565b60405161013d9190610768565b60405180910390f35b34801561015257600080fd5b5061015b6105db565b604051610168919061095e565b60405180910390f35b34801561017d57600080fd5b506101866105ff565b6040516101939190610768565b60405180910390f35b3480156101a857600080fd5b506101c360048036038101906101be9190610910565b610605565b6040516101d09190610768565b60405180910390f35b60035481565b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461027557336040517f245aecd300000000000000000000000000000000000000000000000000000000815260040161026c9190610988565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156102db573d6000803e3d6000fd5b50565b600015156102ec848461061d565b15150361033057336040517f5358e4980000000000000000000000000000000000000000000000000000000081526004016103279190610988565b60405180910390fd5b60018114158015610342575060028114155b1561038457806040517f3d99ccb400000000000000000000000000000000000000000000000000000000815260040161037b9190610768565b60405180910390fd5b600066670758aa7c80008261039991906109d2565b90508034146103e15734816040517f7c83fcf00000000000000000000000000000000000000000000000000000000081526004016103d8929190610a14565b60405180910390fd5b600282600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461042e9190610a3d565b1115610466576040517f7dd949d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354826004546104779190610a3d565b11156104af576040517f29ad1f8000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826104fa9190610a3d565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160045461054b9190610a3d565b6004819055507fd4f5ef8b5c5c845e4bb3a6bcbe0af0716d1a796eb1cd6996bae76e5d3515493c33834260405161058493929190610a71565b60405180910390a150505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60026020528060005260406000206000915090505481565b600080336040516020016106319190610af0565b604051602081830303815290604052805190602001209050610697848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600154836106a0565b91505092915050565b6000826106ad85846106b7565b1490509392505050565b60008082905060005b8451811015610702576106ed828683815181106106e0576106df610b0b565b5b602002602001015161070d565b915080806106fa90610b3a565b9150506106c0565b508091505092915050565b6000818310610725576107208284610738565b610730565b61072f8383610738565b5b905092915050565b600082600052816020526040600020905092915050565b6000819050919050565b6107628161074f565b82525050565b600060208201905061077d6000830184610759565b92915050565b6000819050919050565b61079681610783565b82525050565b60006020820190506107b1600083018461078d565b92915050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126107e6576107e56107c1565b5b8235905067ffffffffffffffff811115610803576108026107c6565b5b60208301915083602082028301111561081f5761081e6107cb565b5b9250929050565b61082f8161074f565b811461083a57600080fd5b50565b60008135905061084c81610826565b92915050565b60008060006040848603121561086b5761086a6107b7565b5b600084013567ffffffffffffffff811115610889576108886107bc565b5b610895868287016107d0565b935093505060206108a88682870161083d565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006108dd826108b2565b9050919050565b6108ed816108d2565b81146108f857600080fd5b50565b60008135905061090a816108e4565b92915050565b600060208284031215610926576109256107b7565b5b6000610934848285016108fb565b91505092915050565b6000610948826108b2565b9050919050565b6109588161093d565b82525050565b6000602082019050610973600083018461094f565b92915050565b610982816108d2565b82525050565b600060208201905061099d6000830184610979565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006109dd8261074f565b91506109e88361074f565b92508282026109f68161074f565b91508282048414831517610a0d57610a0c6109a3565b5b5092915050565b6000604082019050610a296000830185610759565b610a366020830184610759565b9392505050565b6000610a488261074f565b9150610a538361074f565b9250828201905080821115610a6b57610a6a6109a3565b5b92915050565b6000606082019050610a866000830186610979565b610a936020830185610759565b610aa06040830184610759565b949350505050565b60008160601b9050919050565b6000610ac082610aa8565b9050919050565b6000610ad282610ab5565b9050919050565b610aea610ae5826108d2565b610ac7565b82525050565b6000610afc8284610ad9565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000610b458261074f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610b7757610b766109a3565b5b60018201905091905056fea2646970667358221220725bcfc53a0db6cf802871befcc2412204d6485bef563184fb2480ffc9b1400f64736f6c63430008120033

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

0000000000000000000000000f366a411dc9f8a1611cad614d8f451436fc4f4b7827c1c18f940278609d2bdf09eb1c4c6f1e3a2be59b36b28969dfd4120b86db0000000000000000000000000000000000000000000000000000000000000bb8

-----Decoded View---------------
Arg [0] : _withdrawer (address): 0x0f366A411Dc9F8a1611cAD614D8f451436fc4f4B
Arg [1] : _merkleRoot (bytes32): 0x7827c1c18f940278609d2bdf09eb1c4c6f1e3a2be59b36b28969dfd4120b86db
Arg [2] : _totalSupply (uint256): 3000

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000f366a411dc9f8a1611cad614d8f451436fc4f4b
Arg [1] : 7827c1c18f940278609d2bdf09eb1c4c6f1e3a2be59b36b28969dfd4120b86db
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000bb8


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.