ETH Price: $3,409.40 (+3.44%)

Contract

0x0b23B95143Baf28e04686A892B0ebA4707efed5f
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Mint185042902023-11-05 7:21:59384 days ago1699168919IN
0x0b23B951...707efed5f
0 ETH0.0005541114.94297326
Mint185042902023-11-05 7:21:59384 days ago1699168919IN
0x0b23B951...707efed5f
0 ETH0.0006097316.44297326
Mint185042902023-11-05 7:21:59384 days ago1699168919IN
0x0b23B951...707efed5f
0 ETH0.0005541114.94297326
Mint185042902023-11-05 7:21:59384 days ago1699168919IN
0x0b23B951...707efed5f
0 ETH0.0005541114.94297326
Mint179764262023-08-23 9:10:59458 days ago1692781859IN
0x0b23B951...707efed5f
0 ETH0.0016159317.36075074
Mint178767752023-08-09 10:33:11472 days ago1691577191IN
0x0b23B951...707efed5f
0 ETH0.0016823617.90402356
Mint170295242023-04-12 4:20:11591 days ago1681273211IN
0x0b23B951...707efed5f
0 ETH0.0020804822.13475273
Mint168966052023-03-24 9:56:11610 days ago1679651771IN
0x0b23B951...707efed5f
0 ETH0.0015524116.50451011
Mint168965742023-03-24 9:49:47610 days ago1679651387IN
0x0b23B951...707efed5f
0 ETH0.0015607316.59473676
Mint168965512023-03-24 9:45:11610 days ago1679651111IN
0x0b23B951...707efed5f
0 ETH0.0015390216.36045555
Mint168965302023-03-24 9:40:59610 days ago1679650859IN
0x0b23B951...707efed5f
0 ETH0.0014745215.67642788
Mint168965132023-03-24 9:37:11610 days ago1679650631IN
0x0b23B951...707efed5f
0 ETH0.0015034215.9820031
Mint168964842023-03-24 9:31:11610 days ago1679650271IN
0x0b23B951...707efed5f
0 ETH0.0016205217.22493182
Mint168964672023-03-24 9:27:47610 days ago1679650067IN
0x0b23B951...707efed5f
0 ETH0.001461715.54412506
Mint168964402023-03-24 9:22:23610 days ago1679649743IN
0x0b23B951...707efed5f
0 ETH0.0015472216.44791024
Mint168964142023-03-24 9:17:11610 days ago1679649431IN
0x0b23B951...707efed5f
0 ETH0.0018571819.74051711
Mint168909622023-03-23 14:55:35610 days ago1679583335IN
0x0b23B951...707efed5f
0 ETH0.0032233134.28041204
Mint167454482023-03-03 3:56:59631 days ago1677815819IN
0x0b23B951...707efed5f
0 ETH0.0023632925.13444733
Mint165705992023-02-06 15:19:59655 days ago1675696799IN
0x0b23B951...707efed5f
0 ETH0.0025620827.24811268
Mint165252262023-01-31 7:10:23662 days ago1675149023IN
0x0b23B951...707efed5f
0 ETH0.0015396216.3724224
Mint163839222023-01-11 13:39:23681 days ago1673444363IN
0x0b23B951...707efed5f
0 ETH0.0023059224.7741342
Mint163839092023-01-11 13:36:35681 days ago1673444195IN
0x0b23B951...707efed5f
0 ETH0.0024620226.44214753
Mint163838932023-01-11 13:33:23681 days ago1673444003IN
0x0b23B951...707efed5f
0 ETH0.0026038427.97186383
Mint163783392023-01-10 18:55:59682 days ago1673376959IN
0x0b23B951...707efed5f
0 ETH0.0021927123.55273287
Mint163783152023-01-10 18:51:11682 days ago1673376671IN
0x0b23B951...707efed5f
0 ETH0.0023014524.71754713
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Minter

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
Yes with 7500 runs

Other Settings:
default evmVersion
File 1 of 6 : Minter.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

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

contract Minter is Authorizable {
    // The ERC721 contract to mint
    ElfNFT public immutable elfNFT;

    // The merkle root with deposits encoded into it as hash [address, tokenId]
    // Assumed to be a node sorted tree
    bytes32 public merkleRoot;

    constructor(address _token, bytes32 _merkleRoot) {
        elfNFT = ElfNFT(_token);
        merkleRoot = _merkleRoot;
    }

    /// @notice mints an NFT for an approved account in the merkle tree
    /// @param tokenId the unique id for the token
    /// @param merkleProof the merkle proof associated with the sender's address
    /// and tokenId that validates minting
    function mint(uint256 tokenId, bytes32[] memory merkleProof) public {
        // Hash the user plus the token id
        bytes32 leafHash = keccak256(abi.encodePacked(msg.sender, tokenId));

        // Verify the proof for this leaf
        require(
            MerkleProof.verify(merkleProof, merkleRoot, leafHash),
            "Invalid Proof"
        );

        // mint the token, assuming it hasn't already been minted
        elfNFT.mint(msg.sender, tokenId);
    }

    function setRewardsRoot(bytes32 _merkleRoot) public onlyOwner {
        merkleRoot = _merkleRoot;
    }

    // because we may change conditions for minting down the road, allow
    // transferring ownership of the NFT contract to a new minter.
    function transferNFTOwnership(address newOwner) public onlyOwner {
        elfNFT.setOwner(newOwner);
    }
}

File 2 of 6 : MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
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 Returns the rebuilt hash obtained by traversing a Merklee 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++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

File 3 of 6 : ElfNFT.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

import "@rari-capital/solmate/src/tokens/ERC721.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "./Authorizable.sol";

contract ElfNFT is ERC721, Authorizable {
    using Strings for uint256;

    string public baseURI;

    uint256 public count;

    /// @notice constructor
    /// @param _name the name of the NFT
    /// @param _symbol the symbol of the NFT
    constructor(
        string memory _name,
        string memory _symbol,
        address _owner,
        string memory _baseURI
    ) ERC721(_name, _symbol) {
        setOwner(_owner);
        // don't use setBaseURI since deployer isn't authorized yet
        baseURI = _baseURI;
    }

    /// @notice retrieves the tokenURI, which will be a concatenation of the
    /// 'baseURI' and the 'tokenId'
    /// @param tokenId an identifier for the token
    function tokenURI(uint256 tokenId)
        public
        view
        override
        returns (string memory)
    {
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, "/", tokenId.toString()))
                : "";
    }

    function setBaseURI(string memory _baseURI) public onlyAuthorized {
        baseURI = _baseURI;
    }

    function mint(address to, uint256 tokenId) public onlyOwner {
        _mint(to, tokenId);
        count++;
    }
}

File 4 of 6 : ERC721.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Modern, minimalist, and gas efficient ERC-721 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
/// @dev Note that balanceOf does not revert if passed the zero address, in defiance of the ERC.
abstract contract ERC721 {
    /*///////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 indexed id);

    event Approval(address indexed owner, address indexed spender, uint256 indexed id);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /*///////////////////////////////////////////////////////////////
                          METADATA STORAGE/LOGIC
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    function tokenURI(uint256 id) public view virtual returns (string memory);

    /*///////////////////////////////////////////////////////////////
                            ERC721 STORAGE                        
    //////////////////////////////////////////////////////////////*/

    mapping(address => uint256) public balanceOf;

    mapping(uint256 => address) public ownerOf;

    mapping(uint256 => address) public getApproved;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /*///////////////////////////////////////////////////////////////
                              CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;
    }

    /*///////////////////////////////////////////////////////////////
                              ERC721 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 id) public virtual {
        address owner = ownerOf[id];

        require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED");

        getApproved[id] = spender;

        emit Approval(owner, spender, id);
    }

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function transferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        require(from == ownerOf[id], "WRONG_FROM");

        require(to != address(0), "INVALID_RECIPIENT");

        require(
            msg.sender == from || msg.sender == getApproved[id] || isApprovedForAll[from][msg.sender],
            "NOT_AUTHORIZED"
        );

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            balanceOf[from]--;

            balanceOf[to]++;
        }

        ownerOf[id] = to;

        delete getApproved[id];

        emit Transfer(from, to, id);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes memory data
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    /*///////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 id) internal virtual {
        require(to != address(0), "INVALID_RECIPIENT");

        require(ownerOf[id] == address(0), "ALREADY_MINTED");

        // Counter overflow is incredibly unrealistic.
        unchecked {
            balanceOf[to]++;
        }

        ownerOf[id] = to;

        emit Transfer(address(0), to, id);
    }

    function _burn(uint256 id) internal virtual {
        address owner = ownerOf[id];

        require(ownerOf[id] != address(0), "NOT_MINTED");

        // Ownership check above ensures no underflow.
        unchecked {
            balanceOf[owner]--;
        }

        delete ownerOf[id];

        delete getApproved[id];

        emit Transfer(owner, address(0), id);
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL SAFE MINT LOGIC
    //////////////////////////////////////////////////////////////*/

    function _safeMint(address to, uint256 id) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _safeMint(
        address to,
        uint256 id,
        bytes memory data
    ) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }
}

/// @notice A generic interface for a contract which properly accepts ERC721 tokens.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
interface ERC721TokenReceiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 id,
        bytes calldata data
    ) external returns (bytes4);
}

File 5 of 6 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 6 of 6 : Authorizable.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity >=0.8.0;

contract Authorizable {
    // This contract allows a flexible authorization scheme

    // The owner who can change authorization status
    address public owner;
    // A mapping from an address to its authorization status
    mapping(address => bool) public authorized;

    /// @dev We set the deployer to the owner
    constructor() {
        owner = msg.sender;
    }

    /// @dev This modifier checks if the msg.sender is the owner
    modifier onlyOwner() {
        require(msg.sender == owner, "Sender not owner");
        _;
    }

    /// @dev This modifier checks if an address is authorized
    modifier onlyAuthorized() {
        require(isAuthorized(msg.sender), "Sender not Authorized");
        _;
    }

    /// @dev Returns true if an address is authorized
    /// @param who the address to check
    /// @return true if authorized false if not
    function isAuthorized(address who) public view returns (bool) {
        return authorized[who];
    }

    /// @dev Privileged function authorize an address
    /// @param who the address to authorize
    function authorize(address who) external onlyOwner {
        _authorize(who);
    }

    /// @dev Privileged function to de authorize an address
    /// @param who The address to remove authorization from
    function deauthorize(address who) external onlyOwner {
        authorized[who] = false;
    }

    /// @dev Function to change owner
    /// @param who The new owner address
    function setOwner(address who) public onlyOwner {
        owner = who;
    }

    /// @dev Inheritable function which authorizes someone
    /// @param who the address to authorize
    function _authorize(address who) internal {
        authorized[who] = true;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"deauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"elfNFT","outputs":[{"internalType":"contract ElfNFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setRewardsRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferNFTOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b50604051610b70380380610b7083398101604081905261002f9161005e565b60008054336001600160a01b031990911617905560609190911b6001600160601b031916608052600255610096565b60008060408385031215610070578182fd5b82516001600160a01b0381168114610086578283fd5b6020939093015192949293505050565b60805160601c610aaf6100c16000396000818160e80152818161049601526106ca0152610aaf6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80638da5cb5b11610081578063ba41b0c61161005b578063ba41b0c6146101d7578063d697a1a9146101ea578063fe9fbb80146101fd576100c9565b80638da5cb5b14610171578063b6a5d7de14610191578063b9181611146101a4576100c9565b806327c97fa5116100b257806327c97fa5146101345780632eb4a7ab146101475780633f17493d1461015e576100c9565b806313af4035146100ce57806320c590bc146100e3575b600080fd5b6100e16100dc3660046108af565b610236565b005b61010a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100e16101423660046108af565b610303565b61015060025481565b60405190815260200161012b565b6100e161016c3660046108af565b6103d0565b60005461010a9073ffffffffffffffffffffffffffffffffffffffff1681565b6100e161019f3660046108af565b6104f5565b6101c76101b23660046108af565b60016020526000908152604090205460ff1681565b604051901515815260200161012b565b6100e16101e5366004610902565b6105cf565b6100e16101f83660046108ea565b610740565b6101c761020b3660046108af565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016102b3565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016102b3565b6040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906313af403590602401600060405180830381600087803b1580156104da57600080fd5b505af11580156104ee573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016102b3565b6105cc8173ffffffffffffffffffffffffffffffffffffffff16600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b50565b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810183905260009060540160405160208183030381529060405280519060200120905061062f82600254836107c6565b610695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c69642050726f6f660000000000000000000000000000000000000060448201526064016102b3565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820152602481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906340c10f1990604401600060405180830381600087803b15801561072357600080fd5b505af1158015610737573d6000803e3d6000fd5b50505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016102b3565b600255565b6000826107d385846107dc565b14949350505050565b600081815b84518110156108a7576000858281518110610825577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311610867576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250610894565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061089f816109ec565b9150506107e1565b509392505050565b6000602082840312156108c0578081fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108e3578182fd5b9392505050565b6000602082840312156108fb578081fd5b5035919050565b60008060408385031215610914578081fd5b8235915060208084013567ffffffffffffffff80821115610933578384fd5b818601915086601f830112610946578384fd5b81358181111561095857610958610a4a565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110858211171561099b5761099b610a4a565b604052828152858101935084860182860187018b10156109b9578788fd5b8795505b838610156109db5780358552600195909501949386019386016109bd565b508096505050505050509250929050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610a43577f4e487b710000000000000000000000000000000000000000000000000000000081526011600452602481fd5b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea2646970667358221220670d15becb38f6dba2b9c596a1c2985086aa7d42962c9a6f16f860650ca7ea2964736f6c63430008030033000000000000000000000000db042927c36791bd500698c7d1bd81b6864229b5dcb25b2f04e6cde986427dfd8cda532dd75c0cd5db62bf8046edd05f62229e04

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100c95760003560e01c80638da5cb5b11610081578063ba41b0c61161005b578063ba41b0c6146101d7578063d697a1a9146101ea578063fe9fbb80146101fd576100c9565b80638da5cb5b14610171578063b6a5d7de14610191578063b9181611146101a4576100c9565b806327c97fa5116100b257806327c97fa5146101345780632eb4a7ab146101475780633f17493d1461015e576100c9565b806313af4035146100ce57806320c590bc146100e3575b600080fd5b6100e16100dc3660046108af565b610236565b005b61010a7f000000000000000000000000db042927c36791bd500698c7d1bd81b6864229b581565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100e16101423660046108af565b610303565b61015060025481565b60405190815260200161012b565b6100e161016c3660046108af565b6103d0565b60005461010a9073ffffffffffffffffffffffffffffffffffffffff1681565b6100e161019f3660046108af565b6104f5565b6101c76101b23660046108af565b60016020526000908152604090205460ff1681565b604051901515815260200161012b565b6100e16101e5366004610902565b6105cf565b6100e16101f83660046108ea565b610740565b6101c761020b3660046108af565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016102b3565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016102b3565b6040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000db042927c36791bd500698c7d1bd81b6864229b516906313af403590602401600060405180830381600087803b1580156104da57600080fd5b505af11580156104ee573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016102b3565b6105cc8173ffffffffffffffffffffffffffffffffffffffff16600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b50565b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526034810183905260009060540160405160208183030381529060405280519060200120905061062f82600254836107c6565b610695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c69642050726f6f660000000000000000000000000000000000000060448201526064016102b3565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820152602481018490527f000000000000000000000000db042927c36791bd500698c7d1bd81b6864229b573ffffffffffffffffffffffffffffffffffffffff16906340c10f1990604401600060405180830381600087803b15801561072357600080fd5b505af1158015610737573d6000803e3d6000fd5b50505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016102b3565b600255565b6000826107d385846107dc565b14949350505050565b600081815b84518110156108a7576000858281518110610825577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311610867576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250610894565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061089f816109ec565b9150506107e1565b509392505050565b6000602082840312156108c0578081fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108e3578182fd5b9392505050565b6000602082840312156108fb578081fd5b5035919050565b60008060408385031215610914578081fd5b8235915060208084013567ffffffffffffffff80821115610933578384fd5b818601915086601f830112610946578384fd5b81358181111561095857610958610a4a565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110858211171561099b5761099b610a4a565b604052828152858101935084860182860187018b10156109b9578788fd5b8795505b838610156109db5780358552600195909501949386019386016109bd565b508096505050505050509250929050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610a43577f4e487b710000000000000000000000000000000000000000000000000000000081526011600452602481fd5b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea2646970667358221220670d15becb38f6dba2b9c596a1c2985086aa7d42962c9a6f16f860650ca7ea2964736f6c63430008030033

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

000000000000000000000000db042927c36791bd500698c7d1bd81b6864229b5dcb25b2f04e6cde986427dfd8cda532dd75c0cd5db62bf8046edd05f62229e04

-----Decoded View---------------
Arg [0] : _token (address): 0xDb042927c36791Bd500698c7d1bD81b6864229b5
Arg [1] : _merkleRoot (bytes32): 0xdcb25b2f04e6cde986427dfd8cda532dd75c0cd5db62bf8046edd05f62229e04

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000db042927c36791bd500698c7d1bd81b6864229b5
Arg [1] : dcb25b2f04e6cde986427dfd8cda532dd75c0cd5db62bf8046edd05f62229e04


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.