Contract 0x8DF3c67FD45BDC1c866EE1119fd91dc462e4308C

Contract Overview

Balance:
0 HT

HT Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x9b5c67596e7ed86b7413476297a81f4f6a1060ac01fab2ed3b822f8dd3d1d603Blind Purchase105306252021-12-02 22:58:272 days 6 hrs ago0x157f1c29d391d7fa07a028723e61e0543f8fa486 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000099105752.25
0x93b87c2d7892e0f9be28247dd5e2538499fcb9c67975dac2eb394995f600f61eBlind Purchase104358182021-11-29 15:58:065 days 13 hrs ago0x5a453e84e8ab81a4ea5eb67166faa3872e80cfcc IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000132141 3
0xe84889a0b16ac26f2dbfd24d9490bc1d76e72ef366e94e53ee58aa124981c913Blind Purchase103643342021-11-27 4:23:548 days 1 hr ago0x00a8a221211e32ed81a4b355014a802e349c04ff IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000132141 3
0x8227fbea74a946fa83212a3c6f8277fc75654c4e47cf74844073e0c6b32f60ccBlind Purchase103637722021-11-27 3:55:488 days 1 hr ago0xe78202a1d55cf8cff43318a38535fae0a9241785 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000099105752.25
0x1dcebc27f9a6c0b9b35170ebd69041421117c70b11278eb6ab88330d376cc40eBlind Purchase103450562021-11-26 12:20:008 days 17 hrs ago0x00a8a221211e32ed81a4b355014a802e349c04ff IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000132141 3
0x3d29013b44ab323e77aaf26434a10ce6375b6c1207a5ff03a1c9815ffd4da467Blind Purchase103416452021-11-26 9:29:278 days 20 hrs ago0x38364941e02c98335591174fd457d922d549c6e1 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000132141 3
0x0618162d8de5c4502380c1cc2aa46af5772ade96554ab9164cfca2fc9facf52cBlind Purchase103414672021-11-26 9:20:338 days 20 hrs ago0xc2d759605bda14de80ffcad12217a9d14b410fb9 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.00011892692.7
0x42abd8a50659a671e68c86bf5f544a36592faaf55931bfa72b49de4d1362158fBlind Purchase103404192021-11-26 8:28:098 days 21 hrs ago0x94962fe6ee20e4e5d2546c21cfa683ec0b55152c IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.0001321413
0x0dda72ec1f3124ec12aa486260691cf23b6d962e038a69648e906177ef9f3f4dBlind Purchase103402442021-11-26 8:19:248 days 21 hrs ago0x306fd2081e07b9e3fb0a30a02a66fd6d71d99bd2 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.00011892692.7
0xa459f467a031c55ae89c5236aa5a351b50f694fc43139a5d48335e009bb5d563Blind Purchase103401012021-11-26 8:12:158 days 21 hrs ago0x8be694b7a6421738288eee9a8eddf2311c772c51 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.0001321413
0x024106f4755fe90c16cc68ecffb2d7972d2c833fcaa50975cb866faa363cdd03Blind Purchase103400102021-11-26 8:07:428 days 21 hrs ago0xfa065ced61a08c2ab2e4f483f58f10f5c86baa9f IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000132141 3
0x1a7f6db4176ce359bb8668da936f59c7528bbd2d230407a27b09087592e33ea2Blind Purchase103399982021-11-26 8:07:068 days 21 hrs ago0x0aa9f93a9dfc5edc7f0c728e4a978bc707d4b26b IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000133902883.04
0x84f730715ee49895fbb002f7f96ffd7dca1ad60f87b8f0f53b20201f052444d7Blind Purchase103399922021-11-26 8:06:488 days 21 hrs ago0x9c31e19310d8eb031182467b5ddf36de0e8e3ee0 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000099105752.25
0x3a12e000f9583a460559955d49324f267818f6e773af38d22e5bbb3d68b7082fBlind Purchase103399902021-11-26 8:06:428 days 21 hrs ago0x5a8428bd940c6fb2d58fbc6f61a998e7e81c1d74 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000130819592.97
0x30cc245b9303fee2d07243171bda28c755104d81d9dd4af681d42d76f5bec1eaBlind Purchase103399862021-11-26 8:06:308 days 21 hrs ago0x5bdb4fdd3c59203e08a87c62b7f40e9bce0ab905 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.0001321413
0xae28fa61f511cd33840d018777f216302738b3ea78cade1199d7ad05df589020Blind Purchase103399592021-11-26 8:05:098 days 21 hrs ago0x05cb14a02da47910cf9824715eefd51ba1b8f25d IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.0001321413
0xaef2e8447f85d1d722d008af15848178063ae017510facef3bcdba25b0d6aa8eBlind Purchase103399442021-11-26 8:04:248 days 21 hrs ago0x5a8428bd940c6fb2d58fbc6f61a998e7e81c1d74 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000127295832.89
0x3670b46622200974cbb011fa53f9c0775eb388fd2e331bafe3856ef5a7a6879fBlind Purchase103399382021-11-26 8:04:068 days 21 hrs ago0x5a8428bd940c6fb2d58fbc6f61a998e7e81c1d74 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000133021943.02
0x1036e277903407a3ee74d605874c4da4bc387a7402c4517b4448e6c29c82c4b2Blind Purchase103399332021-11-26 8:03:518 days 21 hrs ago0x930b6df0462673f872cb9a38d16b8f228108e007 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000099105752.25
0x955ab2e028b65e8a70650321382d893c583b2998f545504b666d93e69f5dbc43Blind Purchase103399242021-11-26 8:03:248 days 21 hrs ago0x97b4055f9ddf59fa1a948d0a1a910fe02bf1e2cf IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000099105752.25
0xc7231c3e0fb61482c9856d1a4b842395cae0fbe6bab4973e752a7ef562465123Blind Purchase103399222021-11-26 8:03:188 days 21 hrs ago0x5a8428bd940c6fb2d58fbc6f61a998e7e81c1d74 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000129938652.95
0xb21bf893d6d29599f9c17455b87e89964a1b33f180564938c46fe31571f99735Blind Purchase103399222021-11-26 8:03:188 days 21 hrs ago0xfa065ced61a08c2ab2e4f483f58f10f5c86baa9f IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000132141 3
0x62c8546d6c1152e5bb6e3b627e369719c9a160f1b0f3fbf85bbb98ab21ef7631Blind Purchase103399172021-11-26 8:03:038 days 21 hrs ago0x75949898f0904822cd89bb15a731add16b1c79f7 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000099105752.25
0x596243567b489d8e2e3c16128737fb7595a3a8133111e6c9ea026a43f5a55ccaBlind Purchase103399152021-11-26 8:02:578 days 21 hrs ago0x5a8428bd940c6fb2d58fbc6f61a998e7e81c1d74 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000133902883.04
0x2561cc75e08fe178687727445d46ab96eb7944af93f33e72b5daacec626acae8Blind Purchase103399142021-11-26 8:02:548 days 21 hrs ago0xfa97f44550db7da8bdc0f0763989fc203fd3aec7 IN 0x8df3c67fd45bdc1c866ee1119fd91dc462e4308c0 HT0.000099105752.25
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BlindBox

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-11-21
*/

// File: node_modules\@openzeppelin\contracts\introspection\IERC165.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin\contracts\token\ERC721\IERC721.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
      * @dev Safely transfers `tokenId` token from `from` to `to`.
      *
      * Requirements:
      *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
      * - `tokenId` token must exist and be owned by `from`.
      * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
      * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
      *
      * Emits a {Transfer} event.
      */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

// File: @openzeppelin\contracts\token\ERC20\IERC20.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: node_modules\@openzeppelin\contracts\GSN\Context.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin\contracts\access\Ownable.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: @openzeppelin\contracts\utils\ReentrancyGuard.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: node_modules\@openzeppelin\contracts\math\SafeMath.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin\contracts\utils\Counters.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;


/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath}
 * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never
 * directly accessed.
 */
library Counters {
    using SafeMath for uint256;

    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        // The {SafeMath} overflow check can be skipped here, see the comment at the top
        counter._value += 1;
    }

    function decrement(Counter storage counter) internal {
        counter._value = counter._value.sub(1);
    }
}

// File: contracts\interface\INFTcustom.sol

pragma solidity >=0.5.0 <0.8.0;

interface INFTcustom {

    function mintItem(address recipient) external returns (uint256);
}

// File: contracts\blindBox.sol

pragma solidity ^0.6.0;







contract BlindBox is Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    
    address[] public adminList;

    address[] public NFTList;
    uint256[] public SupplyList;
    
    uint256 public payPrice;
    address public payToken;

    bool public boxStatus;
    address public platformAddress;

    event Burn(uint256 tokenId, uint256 orderId);
    event BlindPurchase(address NFTaddress, uint256 tokenId);


    constructor() public {
        adminList.push(msg.sender);
        boxStatus = false;

        platformAddress = msg.sender;
    }
  
    function blindPurchase() public nonReentrant returns(address, uint256){
        uint256 remaining = getRemainder();
        require(remaining > 0, "supply is 0");
        require(boxStatus, "box is pause");

        IERC20(payToken).transferFrom(msg.sender, platformAddress, payPrice);

        uint256 randomness_ = psuedoRandomness();
        randomness_ = randomness_.mod(remaining);
 
        address resultAddress;

        for ( uint256 ind = 0; ind < SupplyList.length; ind++){
            if(randomness_ <= SupplyList[ind] && SupplyList[ind] > 0){
                resultAddress = NFTList[ind];
                SupplyList[ind] = SupplyList[ind].sub(1);
                break;
            }else{
                randomness_ = randomness_.sub(SupplyList[ind]);
            }
        }

        uint256 tokenId = INFTcustom(resultAddress).mintItem(msg.sender);
        
        emit BlindPurchase(resultAddress, tokenId);
        
        return (resultAddress, tokenId);
    }

    function getRemainder() public view returns(uint256){
        uint256 _tmpSupply = 0;
        for ( uint256 nIndex = 0; nIndex < SupplyList.length; nIndex++){
            _tmpSupply = _tmpSupply.add(SupplyList[nIndex]);
        }
        return _tmpSupply;
    }

    function setBoxSupply(address[] calldata _addressList, uint256[] calldata _numberList) external nonReentrant{
        require(onlyAdmin(msg.sender), "Only administrators can operate");
        require(_addressList.length > 0, "_addressList is empty");
        require(_addressList.length == _numberList.length, "Inconsistent array length");

        for ( uint256 nIndex = 0; nIndex < _addressList.length; nIndex++){
            require(_addressList[nIndex] != address(0), "NFT address is empty");
        }
        NFTList = _addressList;
        SupplyList = _numberList;
    }

    function setStatus(bool _status) public nonReentrant{
        require(onlyAdmin(msg.sender), "Only administrators can operate");
         boxStatus = _status;
    }

    function setPrice(address _token, uint256 _price) public nonReentrant{
        require(onlyAdmin(msg.sender), "Only administrators can operate");
        require(_token != address(0), "_token is empty");
        require(_price > 0, "_price is empty");
        payToken = _token;
        payPrice = _price;
    }

    function setPlatformAddress(address _token) public nonReentrant{
        require(onlyAdmin(msg.sender), "Only administrators can operate");
        require(_token != address(0), "_token is empty");

        platformAddress = _token;
    }

    function setAdminList(address[] calldata _list) external onlyOwner nonReentrant{
        require(_list.length > 0, "_list is empty");
        
        for ( uint256 nIndex = 0; nIndex < _list.length; nIndex++){
            require(_list[nIndex] != address(0), "admin is empty");
        }
        adminList = _list;
    }

    function onlyAdmin(address token) internal view returns (bool) {
        for ( uint256 nIndex = 0; nIndex < adminList.length; nIndex++){
            if (adminList[nIndex] == token) {
                return true;
            }
        }
        return false;
    }


    function psuedoRandomness() public view returns(uint256) {
        return uint256(keccak256(abi.encodePacked(
            block.timestamp + block.difficulty +
            ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)) +
            block.gaslimit + 
            ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)) +
            block.number
        )));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"NFTaddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"BlindPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"NFTList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"SupplyList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"adminList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blindPurchase","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"boxStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRemainder","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"psuedoRandomness","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_list","type":"address[]"}],"name":"setAdminList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addressList","type":"address[]"},{"internalType":"uint256[]","name":"_numberList","type":"uint256[]"}],"name":"setBoxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setPlatformAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50600061002161018a60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600180819055506002339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660146101000a81548160ff02191690831515021790555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610192565b600033905090565b6121c8806101a16000396000f3fe608060405234801561001057600080fd5b50600436106101155760003560e01c8063a7d18a49116100a2578063cc03c34211610071578063cc03c34214610528578063dbe55e561461056c578063f109a624146105b6578063f2fde38b146105d4578063fdde65451461061857610115565b8063a7d18a49146103e1578063ad1286c81461044f578063b5957064146104c8578063c93d979f146104e657610115565b80634ce115d8116100e95780634ce115d8146102f55780635c40f6f414610313578063715018a6146103435780638da5cb5b1461034d57806396336b301461039757610115565b8062e4768b1461011a57806311117fc8146101685780631dc52813146101d65780632276ee84146102a4575b600080fd5b6101666004803603604081101561013057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061063a565b005b6101946004803603602081101561017e57600080fd5b81019080803590602001909291905050506108a2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102a2600480360360408110156101ec57600080fd5b810190808035906020019064010000000081111561020957600080fd5b82018360208201111561021b57600080fd5b8035906020019184602083028401116401000000008311171561023d57600080fd5b90919293919293908035906020019064010000000081111561025e57600080fd5b82018360208201111561027057600080fd5b8035906020019184602083028401116401000000008311171561029257600080fd5b90919293919293905050506108de565b005b6102ac610be9565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6102fd611124565b6040518082815260200191505060405180910390f35b6103416004803603602081101561032957600080fd5b8101908080351515906020019092919050505061112a565b005b61034b61124a565b005b6103556113d2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61039f6113fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61040d600480360360208110156103f757600080fd5b8101908080359060200190929190505050611421565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104c66004803603602081101561046557600080fd5b810190808035906020019064010000000081111561048257600080fd5b82018360208201111561049457600080fd5b803590602001918460208302840111640100000000831117156104b657600080fd5b909192939192939050505061145d565b005b6104d0611727565b6040518082815260200191505060405180910390f35b610512600480360360208110156104fc57600080fd5b8101908080359060200190929190505050611824565b6040518082815260200191505060405180910390f35b61056a6004803603602081101561053e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611845565b005b610574611a2f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105be611a55565b6040518082815260200191505060405180910390f35b610616600480360360208110156105ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ab0565b005b610620611cbd565b604051808215151515815260200191505060405180910390f35b600260015414156106b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506106c433611cd0565b610736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4f6e6c792061646d696e6973747261746f72732063616e206f7065726174650081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5f746f6b656e20697320656d707479000000000000000000000000000000000081525060200191505060405180910390fd5b6000811161084f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5f707269636520697320656d707479000000000000000000000000000000000081525060200191505060405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600581905550600180819055505050565b600281815481106108af57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026001541415610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555061096833611cd0565b6109da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4f6e6c792061646d696e6973747261746f72732063616e206f7065726174650081525060200191505060405180910390fd5b60008484905011610a53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5f616464726573734c69737420697320656d707479000000000000000000000081525060200191505060405180910390fd5b818190508484905014610ace576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496e636f6e73697374656e74206172726179206c656e6774680000000000000081525060200191505060405180910390fd5b60008090505b84849050811015610bb757600073ffffffffffffffffffffffffffffffffffffffff16858583818110610b0357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610baa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e4654206164647265737320697320656d70747900000000000000000000000081525060200191505060405180910390fd5b8080600101915050610ad4565b50838360039190610bc9929190612017565b50818160049190610bdb9291906120b7565b506001808190555050505050565b60008060026001541415610c65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000610c77611a55565b905060008111610cef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f737570706c79206973203000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600660149054906101000a900460ff16610d71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f626f78206973207061757365000000000000000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610e7257600080fd5b505af1158015610e86573d6000803e3d6000fd5b505050506040513d6020811015610e9c57600080fd5b8101908080519060200190929190505050506000610eb8611727565b9050610ecd8282611d7290919063ffffffff16565b9050600080600090505b600480549050811015610fe55760048181548110610ef157fe5b90600052602060002001548311158015610f225750600060048281548110610f1557fe5b9060005260206000200154115b15610fac5760038181548110610f3457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150610f8c600160048381548110610f7357fe5b9060005260206000200154611dbc90919063ffffffff16565b60048281548110610f9957fe5b9060005260206000200181905550610fe5565b610fd660048281548110610fbc57fe5b906000526020600020015484611dbc90919063ffffffff16565b92508080600101915050610ed7565b5060008173ffffffffffffffffffffffffffffffffffffffff1663691c65d4336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561106757600080fd5b505af115801561107b573d6000803e3d6000fd5b505050506040513d602081101561109157600080fd5b810190808051906020019092919050505090507f43eb13454824d7c8192b7bf2b065af03ceb29f8b45965c21e98586ff2b52b6048282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a181819550955050505050600180819055509091565b60055481565b600260015414156111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506111b433611cd0565b611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4f6e6c792061646d696e6973747261746f72732063616e206f7065726174650081525060200191505060405180910390fd5b80600660146101000a81548160ff0219169083151502179055506001808190555050565b611252611e06565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611313576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6003818154811061142e57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611465611e06565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611526576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6002600154141561159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060008282905011611620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f5f6c69737420697320656d70747900000000000000000000000000000000000081525060200191505060405180910390fd5b60008090505b8282905081101561170957600073ffffffffffffffffffffffffffffffffffffffff1683838381811061165557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156116fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f61646d696e20697320656d70747900000000000000000000000000000000000081525060200191505060405180910390fd5b8080600101915050611626565b5081816002919061171b929190612017565b50600180819055505050565b6000434233604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019150506040516020818303038152906040528051906020012060001c8161178b57fe5b04454241604051602001808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019150506040516020818303038152906040528051906020012060001c816117ee57fe5b0444420101010101604051602001808281526020019150506040516020818303038152906040528051906020012060001c905090565b6004818154811061183157fe5b906000526020600020016000915090505481565b600260015414156118be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506118cf33611cd0565b611941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4f6e6c792061646d696e6973747261746f72732063616e206f7065726174650081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5f746f6b656e20697320656d707479000000000000000000000000000000000081525060200191505060405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001808190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000905060008090505b600480549050811015611aa857611a9960048281548110611a7f57fe5b906000526020600020015483611e0e90919063ffffffff16565b91508080600101915050611a62565b508091505090565b611ab8611e06565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061216d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660149054906101000a900460ff1681565b600080600090505b600280549050811015611d67578273ffffffffffffffffffffffffffffffffffffffff1660028281548110611d0957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d5a576001915050611d6d565b8080600101915050611cd8565b50600090505b919050565b6000611db483836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250611e96565b905092915050565b6000611dfe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f57565b905092915050565b600033905090565b600080828401905083811015611e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808314158290611f43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f08578082015181840152602081019050611eed565b50505050905090810190601f168015611f355780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828481611f4d57fe5b0690509392505050565b6000838311158290612004576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611fc9578082015181840152602081019050611fae565b50505050905090810190601f168015611ff65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b8280548282559060005260206000209081019282156120a6579160200282015b828111156120a557823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612037565b5b5090506120b39190612104565b5090565b8280548282559060005260206000209081019282156120f3579160200282015b828111156120f25782358255916020019190600101906120d7565b5b5090506121009190612147565b5090565b61214491905b8082111561214057600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555060010161210a565b5090565b90565b61216991905b8082111561216557600081600090555060010161214d565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220e2129ca03bd50c7efc45b627c148e53fc3d060a7b118594bdbceda43b9acfd3e64736f6c63430006060033

Deployed ByteCode Sourcemap

21780:4243:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21780:4243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;24434:317:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;24434:317:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21872:26;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;21872:26:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23662:589;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;23662:589:0;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;23662:589:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23662:589:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;23662:589:0;;;;;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;23662:589:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23662:589:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;23662:589:0;;;;;;;;;;;;:::i;:::-;;22370:1008;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21978:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24259:167;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;24259:167:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;11243:148;;;:::i;:::-;;10601:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22008:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21907:24;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;21907:24:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25010:328;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;25010:328:0;;;;;;;;;;27:11:-1;14;11:28;8:2;;;52:1;49;42:12;8:2;25010:328:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25010:328:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25010:328:0;;;;;;;;;;;;:::i;:::-;;25626:394;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21938:27;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;21938:27:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24759:243;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;24759:243:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;22068:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23386:268;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11546:244;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;11546:244:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;22040:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24434:317;13563:1;14169:7;;:19;;14161:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13563:1;14302:7;:18;;;;24522:21:::1;24532:10;24522:9;:21::i;:::-;24514:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24616:1;24598:20;;:6;:20;;;;24590:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24666:1;24657:6;:10;24649:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24709:6;24698:8;;:17;;;;;;;;;;;;;;;;;;24737:6;24726:8;:17;;;;13519:1:::0;14481:7;:22;;;;24434:317;;:::o;21872:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23662:589::-;13563:1;14169:7;;:19;;14161:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13563:1;14302:7;:18;;;;23789:21:::1;23799:10;23789:9;:21::i;:::-;23781:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23887:1;23865:12;;:19;;:23;23857:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23956:11;;:18;;23933:12;;:19;;:41;23925:79;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24023:14;24040:1:::0;24023:18:::1;;24017:159;24052:12;;:19;;24043:6;:28;24017:159;;;24137:1;24105:34;;:12;;24118:6;24105:20;;;;;;;;;;;;;;;:34;;;;24097:67;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24073:8;;;;;;;24017:159;;;;24196:12;;24186:7;:22;;;;;;;:::i;:::-;;24232:11;;24219:10;:24;;;;;;;:::i;:::-;;13519:1:::0;14481:7;:22;;;;23662:589;;;;:::o;22370:1008::-;22423:7;22432;13563:1;14169:7;;:19;;14161:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13563:1;14302:7;:18;;;;22451:17:::1;22471:14;:12;:14::i;:::-;22451:34;;22516:1;22504:9;:13;22496:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;22552:9;;;;;;;;;;;22544:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;22598:8;;;;;;;;;;;22591:29;;;22621:10;22633:15;;;;;;;;;;;22650:8;;22591:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22591:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22591:68:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;22591:68:0;;;;;;;;;;;;;;;;;22672:19;22694:18;:16;:18::i;:::-;22672:40;;22737:26;22753:9;22737:11;:15;;:26;;;;:::i;:::-;22723:40;;22777:21;22817:11:::0;22831:1:::1;22817:15;;22811:368;22840:10;:17;;;;22834:3;:23;22811:368;;;22898:10;22909:3;22898:15;;;;;;;;;;;;;;;;22883:11;:30;;:53;;;;;22935:1;22917:10;22928:3;22917:15;;;;;;;;;;;;;;;;:19;22883:53;22880:288;;;22972:7;22980:3;22972:12;;;;;;;;;;;;;;;;;;;;;;;;;22956:28;;23021:22;23041:1;23021:10;23032:3;23021:15;;;;;;;;;;;;;;;;:19;;:22;;;;:::i;:::-;23003:10;23014:3;23003:15;;;;;;;;;;;;;;;:40;;;;23062:5;;22880:288;23120:32;23136:10;23147:3;23136:15;;;;;;;;;;;;;;;;23120:11;:15;;:32;;;;:::i;:::-;23106:46;;22859:5;;;;;;;22811:368;;;;23191:15;23220:13;23209:34;;;23244:10;23209:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23209:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23209:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;23209:46:0;;;;;;;;;;;;;;;;23191:64;;23281:37;23295:13;23310:7;23281:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;23347:13;23362:7;23339:31;;;;;;;;13519:1:::0;14481:7;:22;;;;22370:1008;;:::o;21978:23::-;;;;:::o;24259:167::-;13563:1;14169:7;;:19;;14161:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13563:1;14302:7;:18;;;;24330:21:::1;24340:10;24330:9;:21::i;:::-;24322:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24411:7;24399:9;;:19;;;;;;;;;;;;;;;;;;13519:1:::0;14481:7;:22;;;;24259:167;:::o;11243:148::-;10823:12;:10;:12::i;:::-;10813:22;;:6;;;;;;;;;;;:22;;;10805:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11350:1:::1;11313:40;;11334:6;::::0;::::1;;;;;;;;;11313:40;;;;;;;;;;;;11381:1;11364:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;11243:148::o:0;10601:79::-;10639:7;10666:6;;;;;;;;;;;10659:13;;10601:79;:::o;22008:23::-;;;;;;;;;;;;;:::o;21907:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25010:328::-;10823:12;:10;:12::i;:::-;10813:22;;:6;;;;;;;;;;;:22;;;10805:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13563:1:::1;14169:7;;:19;;14161:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13563:1;14302:7;:18;;;;25123:1:::2;25108:5;;:12;;:16;25100:43;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;25170:14;25187:1:::0;25170:18:::2;;25164:139;25199:5;;:12;;25190:6;:21;25164:139;;;25270:1;25245:27;;:5;;25251:6;25245:13;;;;;;;;;;;;;;;:27;;;;25237:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;25213:8;;;;;;;25164:139;;;;25325:5;;25313:9;:17;;;;;;;:::i;:::-;;13519:1:::1;14481:7:::0;:22:::1;;;;25010:328:::0;;:::o;25626:394::-;25674:7;25987:12;25966:3;25948:10;25931:28;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25931:28:0;;;25921:39;;;;;;25913:48;;25912:58;;;;;;25880:14;25859:3;25837:14;25820:32;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25820:32:0;;;25810:43;;;;;;25802:52;;25801:62;;;;;;25768:16;25750:15;:34;:114;:144;:221;:249;25719:291;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25719:291:0;;;25709:302;;;;;;25701:311;;25694:318;;25626:394;:::o;21938:27::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24759:243::-;13563:1;14169:7;;:19;;14161:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13563:1;14302:7;:18;;;;24841:21:::1;24851:10;24841:9;:21::i;:::-;24833:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24935:1;24917:20;;:6;:20;;;;24909:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24988:6;24970:15;;:24;;;;;;;;;;;;;;;;;;13519:1:::0;14481:7;:22;;;;24759:243;:::o;22068:30::-;;;;;;;;;;;;;:::o;23386:268::-;23430:7;23449:18;23470:1;23449:22;;23488:14;23505:1;23488:18;;23482:137;23517:10;:17;;;;23508:6;:26;23482:137;;;23573:34;23588:10;23599:6;23588:18;;;;;;;;;;;;;;;;23573:10;:14;;:34;;;;:::i;:::-;23560:47;;23536:8;;;;;;;23482:137;;;;23636:10;23629:17;;;23386:268;:::o;11546:244::-;10823:12;:10;:12::i;:::-;10813:22;;:6;;;;;;;;;;;:22;;;10805:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11655:1:::1;11635:22;;:8;:22;;;;11627:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11745:8;11716:38;;11737:6;::::0;::::1;;;;;;;;;11716:38;;;;;;;;;;;;11774:8;11765:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;11546:244:::0;:::o;22040:21::-;;;;;;;;;;;;;:::o;25346:270::-;25403:4;25426:14;25443:1;25426:18;;25420:166;25455:9;:16;;;;25446:6;:25;25420:166;;;25522:5;25501:26;;:9;25511:6;25501:17;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;25497:78;;;25555:4;25548:11;;;;;25497:78;25473:8;;;;;;;25420:166;;;;25603:5;25596:12;;25346:270;;;;:::o;19159:130::-;19217:7;19244:37;19248:1;19251;19244:37;;;;;;;;;;;;;;;;;:3;:37::i;:::-;19237:44;;19159:130;;;;:::o;15951:136::-;16009:7;16036:43;16040:1;16043;16036:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16029:50;;15951:136;;;;:::o;9122:106::-;9175:15;9210:10;9203:17;;9122:106;:::o;15487:181::-;15545:7;15565:9;15581:1;15577;:5;15565:17;;15606:1;15601;:6;;15593:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15659:1;15652:8;;;15487:181;;;;:::o;19774:166::-;19860:7;19893:1;19888;:6;;19896:12;19880:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;19880:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19931:1;19927;:5;;;;;;19920:12;;19774:166;;;;;:::o;16390:192::-;16476:7;16509:1;16504;:6;;16512:12;16496:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;16496:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16536:9;16552:1;16548;:5;16536:17;;16573:1;16566:8;;;16390:192;;;;;:::o;21780:4243::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://e2129ca03bd50c7efc45b627c148e53fc3d060a7b118594bdbceda43b9acfd3e
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading