Contract 0x582d3cc68c2af9a72eea64c894a077ca8f867f07

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x189f33102b07bb39108a778d3e3e4be75d4d258731b42b1e84288961b1b42717Buy94748732021-10-27 7:09:471 min ago0x7d770573b9ff74891f537ed2372fa9dd05156db6 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000381777752.25
0x73c579c8f0bedd2b6d1132cc8d869ca228463e4a2c20f50116fc604ae5fce5d7Buy94748672021-10-27 7:09:291 min ago0x7d770573b9ff74891f537ed2372fa9dd05156db6 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.0003973322.25
0x03a52da8bbba3ecb4e4a959535586e3ca59d0e54541d7c6d9c963ca32cae49dbBuy94748622021-10-27 7:09:141 min ago0xbff47d5b49ed37cfa3597173f3bbd56c45d65ace IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000447927752.25
0x3f5bc7ee5a8428846e23cf5a89f24e41f870c09b1ad15872b0be38bf60a68f2bWithdraw94748492021-10-27 7:08:352 mins ago0xd8c61750da9c771a7a20a0f5d1c277fb9144e86e IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000098219252.25
0x0fb1a3eb56ebe819d1f026ae29d6d477e31bf3115ba5093a6119d1591c2ccce3Buy94748262021-10-27 7:07:263 mins ago0x7d770573b9ff74891f537ed2372fa9dd05156db6 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000381777752.25
0x5345a56d118cdf6de4eb5f3962dd53c543a2c792906fdad28df22c0dc37a03b4Buy94748202021-10-27 7:07:083 mins ago0x6340930b69aee2aa91f03d441e251b79bed43b66 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000381777752.25
0x07829aecc4fb1c6451520b3a191ce2a90adff4a815cbf53735122e363467c1c1Withdraw94748052021-10-27 7:06:234 mins ago0xf980295f67291604565ee78fe1a471f8b49831ed IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000098219252.25
0x239b3ee3c4665c0b9201c33b2dc91e954c6ca151e95a312d5e18047ea97332cbBuy94748052021-10-27 7:06:234 mins ago0x6340930b69aee2aa91f03d441e251b79bed43b66 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000381777752.25
0x3865169b8902d43f817d9a9211f64550c34eebf417da57ea024db1f7685a1881Buy94747982021-10-27 7:06:024 mins ago0x6340930b69aee2aa91f03d441e251b79bed43b66 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000381777752.25
0x3b8b72c00c3483cef4fa781c0c4a3b67d22f94cbdab1c61f76da9767cca9340eBuy94747912021-10-27 7:05:415 mins ago0x6340930b69aee2aa91f03d441e251b79bed43b66 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000381777752.25
0xe9b9fc2304094d49401cd8ab12f57467c62cf8874749216c3182c3ce0f7495f3Buy94747842021-10-27 7:05:205 mins ago0x6340930b69aee2aa91f03d441e251b79bed43b66 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000381777752.25
0xdc7f8e278ed2218f311c4a42ff4eef1ae0eb5c381d6ceb7728d31fb9c6a511bfBuy94747622021-10-27 7:04:146 mins ago0x6340930b69aee2aa91f03d441e251b79bed43b66 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000381777752.25
0x70986e82645a674783fda3a9e043c31cee0f03b708cad3f710ff68d52a5a2d72Buy94747552021-10-27 7:03:536 mins ago0x6340930b69aee2aa91f03d441e251b79bed43b66 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000381777752.25
0x62e56b911adedf3cf88e056dd4916cf6b538ca0de4b4d0393a86fb0d822a1b3fBuy94747482021-10-27 7:03:327 mins ago0x6340930b69aee2aa91f03d441e251b79bed43b66 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000381777752.25
0xfad404f418bad9dd0044012688cf1c8d89a78707db7a2ff49aad9c129061d0fdBuy94747412021-10-27 7:03:117 mins ago0x6340930b69aee2aa91f03d441e251b79bed43b66 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000381777752.25
0x0eebb7af53f29a1be7b83e82ab8ee08c045c361db01b9af175c746144710382dBuy94747002021-10-27 7:01:089 mins ago0x6340930b69aee2aa91f03d441e251b79bed43b66 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000381777752.25
0x3d2ad1d81bdf7d02da022a9a36ad92aba3ddeef77f0ebad61fe6a06ff94d6ee9Buy94746762021-10-27 6:59:5610 mins ago0x6340930b69aee2aa91f03d441e251b79bed43b66 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000381777752.25
0xb184bb251290c53c4ac4dfd349c86762a3fce654dda626b73c8663adf7e94606Buy94746692021-10-27 6:59:3511 mins ago0x6340930b69aee2aa91f03d441e251b79bed43b66 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000420252752.25
0xbd43ad0457a115565eb19c6ce9ad2be1e6727fb46d0949dcc82d59665a83d4f9Buy94746562021-10-27 6:58:5611 mins ago0x6340930b69aee2aa91f03d441e251b79bed43b66 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000381777752.25
0x9a8ff770f0b4c48e7830c80f15a753668b41ef6de5ed6d8e1edfb38d31aea0dfWithdraw94746432021-10-27 6:58:1712 mins ago0xcf24197c9f2c3137ec798d6948896295e7467404 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000098219252.25
0x67e41a858ff29b555abdf9a3ac23ffd2fa6bfbbc780ebb20e91dce3e7e24d8f3Buy94746342021-10-27 6:57:5012 mins ago0xef37cb61544f7e7fb79988ee5980045d3a3e0ed2 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000420252752.25
0x33eff49abe48879b5b135d3c2c21c340b389931d3a164b9e13ed6a9dcb13e437Withdraw94746132021-10-27 6:56:4714 mins ago0xc3d2ef1ee801f28a2b8a089c360fcc80e8c08c04 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000136694252.25
0x155ca4321cdabf90d8a8836638f7d893efe9995da2c1ca5118bdab7572f9f852Buy94746072021-10-27 6:56:2914 mins ago0xef37cb61544f7e7fb79988ee5980045d3a3e0ed2 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000420252752.25
0x161415c4ea987a969a0da025a06223c70bca692b2ebf00001e811f0cddaec9b2Buy94745892021-10-27 6:55:3515 mins ago0xef37cb61544f7e7fb79988ee5980045d3a3e0ed2 IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000381777752.25
0x5287fed9606d028e6ccf4676a216a10677935c0d7add2c9be188867f905e8523Buy94745742021-10-27 6:54:5015 mins ago0xb76e9d9c7146b5c2c103553cff9d9de0cd53329b IN  0x582d3cc68c2af9a72eea64c894a077ca8f867f070 HT0.000392577752.25
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Trade

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-07-13
*/

//SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.7.0;
pragma experimental ABIEncoderV2;

contract Context {
    function _msgSender() internal view returns (address) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this;
        return msg.data;
    }
}

abstract 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() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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;
    }
}

library Roles {
    struct Role {
        mapping(address => bool) bearer;
    }

    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles:account already has role");
        role.bearer[account] = true;
    }

    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    function has(Role storage role, address account)
        internal
        view
        returns (bool)
    {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}

contract OperatorRole is Context {
    using Roles for Roles.Role;

    event OperatorAdded(address indexed account);
    event OperatorRemoved(address indexed account);

    Roles.Role private _operators;

    modifier onlyOperator() {
        require(
            isOperator(_msgSender()),
            "OperatorRole: caller does not have the operator role"
        );
        _;
    }

    function isOperator(address account) public view returns (bool) {
        return _operators.has(account);
    }

    function _addOperator(address account) internal {
        _operators.add(account);
        emit OperatorAdded(account);
    }

    function _removeOperator(address account) internal {
        _operators.remove(account);
        emit OperatorRemoved(account);
    }
}

contract OwnableOperatorRole is Ownable, OperatorRole {
    function addOperator(address account) public onlyOwner {
        _addOperator(account);
    }

    function removeOperator(address account) public onlyOwner {
        _removeOperator(account);
    }
}

interface IERC20 {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);
}

/// @title ERC-721 Non-Fungible Token Standard
/// @dev See https://eips.ethereum.org/EIPS/eip-721
///  Note: the ERC-165 identifier for this interface is 0x80ac58cd.
/* is ERC165 */
interface IERC721 {
    /// @dev This emits when ownership of any NFT changes by any mechanism.
    ///  This event emits when NFTs are created (`from` == 0) and destroyed
    ///  (`to` == 0). Exception: during contract creation, any number of NFTs
    ///  may be created and assigned without emitting Transfer. At the time of
    ///  any transfer, the approved address for that NFT (if any) is reset to none.
    event Transfer(
        address indexed _from,
        address indexed _to,
        uint256 indexed _tokenId
    );

    /// @dev This emits when the approved address for an NFT is changed or
    ///  reaffirmed. The zero address indicates there is no approved address.
    ///  When a Transfer event emits, this also indicates that the approved
    ///  address for that NFT (if any) is reset to none.
    event Approval(
        address indexed _owner,
        address indexed _approved,
        uint256 indexed _tokenId
    );

    /// @dev This emits when an operator is enabled or disabled for an owner.
    ///  The operator can manage all NFTs of the owner.
    event ApprovalForAll(
        address indexed _owner,
        address indexed _operator,
        bool _approved
    );

    /// @notice Count all NFTs assigned to an owner
    /// @dev NFTs assigned to the zero address are considered invalid, and this
    ///  function throws for queries about the zero address.
    /// @param _owner An address for whom to query the balance
    /// @return The number of NFTs owned by `_owner`, possibly zero
    function balanceOf(address _owner) external view returns (uint256);

    /// @notice Find the owner of an NFT
    /// @dev NFTs assigned to zero address are considered invalid, and queries
    ///  about them do throw.
    /// @param _tokenId The identifier for an NFT
    /// @return The address of the owner of the NFT
    function ownerOf(uint256 _tokenId) external view returns (address);

    /// @notice Transfers the ownership of an NFT from one address to another address
    /// @dev Throws unless `msg.sender` is the current owner, an authorized
    ///  operator, or the approved address for this NFT. Throws if `_from` is
    ///  not the current owner. Throws if `_to` is the zero address. Throws if
    ///  `_tokenId` is not a valid NFT. When transfer is complete, this function
    ///  checks if `_to` is a smart contract (code size > 0). If so, it calls
    ///  `onERC721Received` on `_to` and throws if the return value is not
    ///  `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
    /// @param _from The current owner of the NFT
    /// @param _to The new owner
    /// @param _tokenId The NFT to transfer
    /// @param data Additional data with no specified format, sent in call to `_to`
    function safeTransferFrom(
        address _from,
        address _to,
        uint256 _tokenId,
        bytes memory data
    ) external payable;

    /// @notice Transfers the ownership of an NFT from one address to another address
    /// @dev This works identically to the other function with an extra data parameter,
    ///  except this function just sets data to "".
    /// @param _from The current owner of the NFT
    /// @param _to The new owner
    /// @param _tokenId The NFT to transfer
    function safeTransferFrom(
        address _from,
        address _to,
        uint256 _tokenId
    ) external payable;

    /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE
    ///  TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE
    ///  THEY MAY BE PERMANENTLY LOST
    /// @dev Throws unless `msg.sender` is the current owner, an authorized
    ///  operator, or the approved address for this NFT. Throws if `_from` is
    ///  not the current owner. Throws if `_to` is the zero address. Throws if
    ///  `_tokenId` is not a valid NFT.
    /// @param _from The current owner of the NFT
    /// @param _to The new owner
    /// @param _tokenId The NFT to transfer
    function transferFrom(
        address _from,
        address _to,
        uint256 _tokenId
    ) external payable;

    /// @notice Change or reaffirm the approved address for an NFT
    /// @dev The zero address indicates there is no approved address.
    ///  Throws unless `msg.sender` is the current NFT owner, or an authorized
    ///  operator of the current owner.
    /// @param _approved The new approved NFT controller
    /// @param _tokenId The NFT to approve
    function approve(address _approved, uint256 _tokenId) external payable;

    /// @notice Enable or disable approval for a third party ("operator") to manage
    ///  all of `msg.sender`'s assets
    /// @dev Emits the ApprovalForAll event. The contract MUST allow
    ///  multiple operators per owner.
    /// @param _operator Address to add to the set of authorized operators
    /// @param _approved True if the operator is approved, false to revoke approval
    function setApprovalForAll(address _operator, bool _approved) external;

    /// @notice Get the approved address for a single NFT
    /// @dev Throws if `_tokenId` is not a valid NFT.
    /// @param _tokenId The NFT to find the approved address for
    /// @return The approved address for this NFT, or the zero address if there is none
    function getApproved(uint256 _tokenId) external view returns (address);

    /// @notice Query if an address is an authorized operator for another address
    /// @param _owner The address that owns the NFTs
    /// @param _operator The address that acts on behalf of the owner
    /// @return True if `_operator` is an approved operator for `_owner`, false otherwise
    function isApprovedForAll(address _owner, address _operator)
        external
        view
        returns (bool);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Trade is OwnableOperatorRole {
    using SafeMath for uint256;

    // default 100
    uint256 fee;
    address benefitAddress;
    address nftAddress;
    address erc20Address;

    constructor(
        address _benefitAddress,
        address _nftAddress,
        address _erc20Address
    ) {
        fee = 100;
        benefitAddress = _benefitAddress;
        nftAddress = _nftAddress;
        erc20Address = _erc20Address;
    }

    function changeFee(uint256 newFee) public onlyOperator {
        fee = newFee;
    }

    function changeBenifitAddress(address _benefitAddress) public onlyOperator {
        benefitAddress = _benefitAddress;
    }

    function changenftAddress(address _nftAddress) public onlyOperator {
        nftAddress = _nftAddress;
    }

    function changeErc20Address(address _erc20Address) public onlyOperator {
        erc20Address = _erc20Address;
    }

    //##################################################################################
    // 订单账本相关方法
    //##################################################################################

    enum OrderState {Open, Close, Cancel}

    struct Order {
        OrderState state;
        uint256 nftId;
        uint256 price;
        address nftAddress;
        address erc20Address;
        address ownerAddress;
    }

    mapping(bytes32 => Order) public orderStore;

    function _addOrder(
        uint256 nftId,
        uint256 price,
        address ownerAddress,
        bytes32 key
    ) internal {
        Order memory order =
            Order(
                OrderState.Open,
                nftId,
                price,
                nftAddress,
                erc20Address,
                ownerAddress
            );
        orderStore[key] = order;
    }

    function prepareKey(
        uint256 nftId,
        uint256 price,
        address _nftAddress,
        address _erc20Address,
        address ownerAddress
    ) internal pure returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    nftId,
                    price,
                    _nftAddress,
                    _erc20Address,
                    ownerAddress
                )
            );
    }

    //##################################################################################
    // transfer相关方法
    //##################################################################################

    function erc20safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        require(
            token.transferFrom(from, to, value),
            "failure while transferring"
        );
    }

    function erc721safeTransferFrom(
        IERC721 token,
        address from,
        address to,
        uint256 tokenId
    ) internal {
        token.safeTransferFrom(from, to, tokenId);
    }

    //##################################################################################
    // trade相关方法
    //##################################################################################
    mapping(address => uint256) public userBalances;

    event Putaway(
        address indexed owner,
        address nftAdress,
        address erc20Address,
        uint256 nftId,
        uint256 price,
        bytes32 indexed key
    );
    event Cancel(
        address indexed owner,
        address nftAdress,
        address erc20Address,
        uint256 nftId,
        uint256 price,
        bytes32 indexed key
    );
    event Buy(
        address indexed seller,
        address indexed buyer,
        address nftAdress,
        address erc20Address,
        uint256 nftId,
        uint256 price,
        bytes32 indexed key
    );

    function onERC721ExReceived(
        address,
        address from,
        uint256[] memory cardIds,
        bytes memory data
    ) external returns (bytes4) {
        if (msg.sender == nftAddress) {
            uint256 number;
            for (uint256 i = 0; i < data.length; i++) {
                number =
                    number +
                    uint8(data[i]) *
                    (2**(8 * (data.length - (i + 1))));
            }
            uint256 operate = (number << 255) >> 255;
            uint256 price = number >> 1;

            if (operate == 1) {
                _putaway(cardIds[0], price, from);
            } else {
                return 0;
            }
        }

        return 0x0f7b88e3;
    }

    function _putaway(
        uint256 nftId,
        uint256 price,
        address from
    ) internal returns (bytes32) {
        bytes32 key =
            prepareKey(nftId, price, nftAddress, erc20Address, msg.sender);
        _addOrder(nftId, price, from, key);

        emit Putaway(from, nftAddress, erc20Address, nftId, price, key);

        return key;
    }

    function withdraw(uint256 amount) public {
        uint256 balance = userBalances[msg.sender];
        require(balance >= amount, "Trade:sender have not enough balance");

        userBalances[msg.sender] = balance.sub(amount);
        IERC20 erc20 = IERC20(erc20Address);
        erc20.transfer(msg.sender, amount);
    }

    function cancel(bytes32 key) public {
        Order storage order = orderStore[key];

        require(
            order.ownerAddress == msg.sender,
            "Trade:sender not the order owner"
        );

        // transfer
        IERC721 nft = IERC721(order.nftAddress);
        erc721safeTransferFrom(
            nft,
            address(this),
            order.ownerAddress,
            order.nftId
        );

        // change state
        order.state = OrderState.Cancel;

        emit Cancel(
            order.ownerAddress,
            order.nftAddress,
            order.erc20Address,
            order.nftId,
            order.price,
            key
        );
    }

    function batchCancel(bytes32[] memory keys) public {
        for (uint256 i = 0; i < keys.length; i++) {
            bytes32 key = keys[i];
            cancel(key);
        }
    }

    function buy(bytes32 key) public {
        Order storage order = orderStore[key];

        require(order.state == OrderState.Open, "Trade:orderState is not open");
        // check erc20 approved
        IERC20 erc20 = IERC20(order.erc20Address);
        require(
            erc20.allowance(msg.sender, address(this)) >= order.price,
            "ERC20:not approved enought amount"
        );

        // calc fee
        uint256 feeValue = order.price.mul(fee).div(10000);
        uint256 tradeValue = order.price.sub(feeValue);

        // transfer erc20
        erc20safeTransferFrom(erc20, msg.sender, benefitAddress, feeValue);
        erc20safeTransferFrom(erc20, msg.sender, address(this), tradeValue);

        userBalances[order.ownerAddress] = userBalances[order.ownerAddress].add(
            tradeValue
        );

        // transfer nft721
        IERC721 erc721 = IERC721(order.nftAddress);
        erc721safeTransferFrom(erc721, address(this), msg.sender, order.nftId);

        order.state = OrderState.Close;
        emit Buy(
            order.ownerAddress,
            msg.sender,
            order.nftAddress,
            order.erc20Address,
            order.nftId,
            order.price,
            key
        );
    }

    function createOperate(uint256 price) public pure returns (bytes memory) {
        uint256 priceOperate = (price << 1) | 1;
        bytes memory result = toBytes0(priceOperate);
        return result;
    }

    function toBytes0(uint256 _num) public pure returns (bytes memory _ret) {
        assembly {
            _ret := mload(0x10)
            mstore(_ret, 0x20)
            mstore(add(_ret, 0x20), _num)
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_benefitAddress","type":"address"},{"internalType":"address","name":"_nftAddress","type":"address"},{"internalType":"address","name":"_erc20Address","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"address","name":"nftAdress","type":"address"},{"indexed":false,"internalType":"address","name":"erc20Address","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"nftAdress","type":"address"},{"indexed":false,"internalType":"address","name":"erc20Address","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"Cancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"OperatorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"OperatorRemoved","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"nftAdress","type":"address"},{"indexed":false,"internalType":"address","name":"erc20Address","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"Putaway","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"keys","type":"bytes32[]"}],"name":"batchCancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"buy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_benefitAddress","type":"address"}],"name":"changeBenifitAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20Address","type":"address"}],"name":"changeErc20Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"changeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nftAddress","type":"address"}],"name":"changenftAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"createOperate","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256[]","name":"cardIds","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721ExReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"orderStore","outputs":[{"internalType":"enum Trade.OrderState","name":"state","type":"uint8"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"address","name":"erc20Address","type":"address"},{"internalType":"address","name":"ownerAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"toBytes0","outputs":[{"internalType":"bytes","name":"_ret","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162002f3038038062002f308339818101604052810190620000379190620001da565b600062000049620001bb60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350606460028190555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200027e565b600033905090565b600081519050620001d48162000264565b92915050565b600080600060608486031215620001f057600080fd5b60006200020086828701620001c3565b93505060206200021386828701620001c3565b92505060406200022686828701620001c3565b9150509250925092565b60006200023d8262000244565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6200026f8162000230565b81146200027b57600080fd5b50565b612ca2806200028e6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80636d70f7ae116100ad5780639c9a1061116100715780639c9a10611461031b578063a3c91e2814610337578063ac8a584a14610353578063c4d252f51461036f578063f2fde38b1461038b57610121565b80636d70f7ae1461028b578063715018a6146102bb5780638da5cb5b146102c557806391dd92e8146102e35780639870d7fe146102ff57610121565b80632ef44fd9116100f45780632ef44fd9146101d257806334e0685e146101ee5780634b468df31461020a5780635014f51a1461023a5780636a1db1bf1461026f57610121565b80630f7b88e31461012657806321ecadb11461015657806326224c64146101865780632e1a7d4d146101b6575b600080fd5b610140600480360381019061013b9190611f7d565b6103a7565b60405161014d919061270f565b60405180910390f35b610170600480360381019061016b91906120a3565b6104b6565b60405161017d919061272a565b60405180910390f35b6101a0600480360381019061019b9190611f54565b6104cc565b6040516101ad919061296f565b60405180910390f35b6101d060048036038101906101cb91906120a3565b6104e4565b005b6101ec60048036038101906101e79190611f54565b61067b565b005b61020860048036038101906102039190612010565b61070e565b005b610224600480360381019061021f91906120a3565b61074d565b604051610231919061272a565b60405180910390f35b610254600480360381019061024f919061207a565b610771565b6040516102669695949392919061274c565b60405180910390f35b610289600480360381019061028491906120a3565b61081a565b005b6102a560048036038101906102a09190611f54565b610873565b6040516102b291906126f4565b60405180910390f35b6102c3610890565b005b6102cd6109ca565b6040516102da919061260b565b60405180910390f35b6102fd60048036038101906102f89190611f54565b6109f3565b005b61031960048036038101906103149190611f54565b610a86565b005b6103356004803603810190610330919061207a565b610b0e565b005b610351600480360381019061034c9190611f54565b610f33565b005b61036d60048036038101906103689190611f54565b610fc6565b005b6103896004803603810190610384919061207a565b61104e565b005b6103a560048036038101906103a09190611f54565b611248565b005b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156104a357600080600090505b835181101561044c576001810184510360080260020a84828151811061042957fe5b602001015160f81c60f81b60f81c60ff1602820191508080600101915050610407565b50600060ff8083901b901c90506000600183901c905060018214156104905761048a8660008151811061047b57fe5b602002602001015182896113f1565b5061049f565b600060e01b93505050506104ae565b5050505b630f7b88e360e01b90505b949350505050565b6060601051905060208152816020820152919050565b60076020528060005260406000206000915090505481565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561056b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610562906128cf565b60405180910390fd5b61057e82826114f790919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b815260040161062392919061264f565b602060405180830381600087803b15801561063d57600080fd5b505af1158015610651573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106759190612051565b50505050565b61068b610686611541565b610873565b6106ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c1906128ef565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60005b815181101561074957600082828151811061072857fe5b6020026020010151905061073b8161104e565b508080600101915050610711565b5050565b6060600060018084901b1790506000610765826104b6565b90508092505050919050565b60066020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905086565b61082a610825611541565b610873565b610869576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610860906128ef565b60405180910390fd5b8060028190555050565b600061088982600161154990919063ffffffff16565b9050919050565b610898611541565b73ffffffffffffffffffffffffffffffffffffffff166108b66109ca565b73ffffffffffffffffffffffffffffffffffffffff161461090c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109039061288f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a036109fe611541565b610873565b610a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a39906128ef565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610a8e611541565b73ffffffffffffffffffffffffffffffffffffffff16610aac6109ca565b73ffffffffffffffffffffffffffffffffffffffff1614610b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af99061288f565b60405180910390fd5b610b0b81611611565b50565b600060066000838152602001908152602001600020905060006002811115610b3257fe5b8160000160009054906101000a900460ff166002811115610b4f57fe5b14610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b869061294f565b60405180910390fd5b60008160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600201548173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401610bf8929190612626565b60206040518083038186803b158015610c1057600080fd5b505afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4891906120cc565b1015610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c809061290f565b60405180910390fd5b6000610cb8612710610caa600254866002015461166b90919063ffffffff16565b6116db90919063ffffffff16565b90506000610cd38285600201546114f790919063ffffffff16565b9050610d038333600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611725565b610d0f83333084611725565b610d8581600760008760050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117f990919063ffffffff16565b600760008660050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008460030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610e25813033886001015461184e565b60018560000160006101000a81548160ff02191690836002811115610e4657fe5b0217905550853373ffffffffffffffffffffffffffffffffffffffff168660050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fda7770931377256117c9f4e2ccdbcfcbedaf100a604b73ba478231b0d49ab5ac8860030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168960040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a600101548b60020154604051610f2394939291906126af565b60405180910390a4505050505050565b610f43610f3e611541565b610873565b610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f79906128ef565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610fce611541565b73ffffffffffffffffffffffffffffffffffffffff16610fec6109ca565b73ffffffffffffffffffffffffffffffffffffffff1614611042576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110399061288f565b60405180910390fd5b61104b816118c3565b50565b60006006600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee9061280f565b60405180910390fd5b60008160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061115481308460050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856001015461184e565b60028260000160006101000a81548160ff0219169083600281111561117557fe5b0217905550828260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe8569e534108ab0d2013d8c8c67784440d20cecab86e43d13e1545f7a2a221c28460030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168660010154876002015460405161123b94939291906126af565b60405180910390a3505050565b611250611541565b73ffffffffffffffffffffffffffffffffffffffff1661126e6109ca565b73ffffffffffffffffffffffffffffffffffffffff16146112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb9061288f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b906127cf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806114458585600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163361191d565b905061145385858584611959565b808373ffffffffffffffffffffffffffffffffffffffff167fd8be01cac58e65e09c738f7a31a9e75e8f7f8a317efaf6baeda7605e74a32b94600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689896040516114e494939291906126af565b60405180910390a3809150509392505050565b600061153983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b4c565b905092915050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b1906128af565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611625816001611ba790919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d60405160405180910390a250565b60008083141561167e57600090506116d5565b600082840290508284828161168f57fe5b04146116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c79061286f565b60405180910390fd5b809150505b92915050565b600061171d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c4f565b905092915050565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff1660e01b815260040161176293929190612678565b602060405180830381600087803b15801561177c57600080fd5b505af1158015611790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b49190612051565b6117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea9061292f565b60405180910390fd5b50505050565b600080828401905083811015611844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183b906127ef565b60405180910390fd5b8091505092915050565b8373ffffffffffffffffffffffffffffffffffffffff166342842e0e8484846040518463ffffffff1660e01b815260040161188b93929190612678565b600060405180830381600087803b1580156118a557600080fd5b505af11580156118b9573d6000803e3d6000fd5b5050505050505050565b6118d7816001611cb090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d60405160405180910390a250565b6000858585858560405160200161193895949392919061298a565b60405160208183030381529060405280519060200120905095945050505050565b60006040518060c001604052806000600281111561197357fe5b8152602001868152602001858152602001600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152509050806006600084815260200190815260200160002060008201518160000160006101000a81548160ff02191690836002811115611a5457fe5b0217905550602082015181600101556040820151816002015560608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b6000838311158290611b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8b91906127ad565b60405180910390fd5b5060008385039050809150509392505050565b611bb18282611549565b15611bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be89061282f565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008083118290611c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8d91906127ad565b60405180910390fd5b506000838581611ca257fe5b049050809150509392505050565b611cba8282611549565b611cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf09061284f565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611d6a611d6584612a0e565b6129dd565b90508083825260208201905082856020860282011115611d8957600080fd5b60005b85811015611db95781611d9f8882611eeb565b845260208401935060208301925050600181019050611d8c565b5050509392505050565b6000611dd6611dd184612a3a565b6129dd565b90508083825260208201905082856020860282011115611df557600080fd5b60005b85811015611e255781611e0b8882611f2a565b845260208401935060208301925050600181019050611df8565b5050509392505050565b6000611e42611e3d84612a66565b6129dd565b905082815260208101848484011115611e5a57600080fd5b611e65848285612ba7565b509392505050565b600081359050611e7c81612c10565b92915050565b600082601f830112611e9357600080fd5b8135611ea3848260208601611d57565b91505092915050565b600082601f830112611ebd57600080fd5b8135611ecd848260208601611dc3565b91505092915050565b600081519050611ee581612c27565b92915050565b600081359050611efa81612c3e565b92915050565b600082601f830112611f1157600080fd5b8135611f21848260208601611e2f565b91505092915050565b600081359050611f3981612c55565b92915050565b600081519050611f4e81612c55565b92915050565b600060208284031215611f6657600080fd5b6000611f7484828501611e6d565b91505092915050565b60008060008060808587031215611f9357600080fd5b6000611fa187828801611e6d565b9450506020611fb287828801611e6d565b935050604085013567ffffffffffffffff811115611fcf57600080fd5b611fdb87828801611eac565b925050606085013567ffffffffffffffff811115611ff857600080fd5b61200487828801611f00565b91505092959194509250565b60006020828403121561202257600080fd5b600082013567ffffffffffffffff81111561203c57600080fd5b61204884828501611e82565b91505092915050565b60006020828403121561206357600080fd5b600061207184828501611ed6565b91505092915050565b60006020828403121561208c57600080fd5b600061209a84828501611eeb565b91505092915050565b6000602082840312156120b557600080fd5b60006120c384828501611f2a565b91505092915050565b6000602082840312156120de57600080fd5b60006120ec84828501611f3f565b91505092915050565b6120fe81612b5f565b82525050565b61210d81612ace565b82525050565b61211c81612ae0565b82525050565b61212b81612af6565b82525050565b600061213c82612a96565b6121468185612aac565b9350612156818560208601612bb6565b61215f81612beb565b840191505092915050565b61217381612b71565b82525050565b600061218482612aa1565b61218e8185612abd565b935061219e818560208601612bb6565b6121a781612beb565b840191505092915050565b60006121bf602683612abd565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612225601b83612abd565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000612265602083612abd565b91507f54726164653a73656e646572206e6f7420746865206f72646572206f776e65726000830152602082019050919050565b60006122a5601e83612abd565b91507f526f6c65733a6163636f756e7420616c72656164792068617320726f6c6500006000830152602082019050919050565b60006122e5602183612abd565b91507f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061234b602183612abd565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006123b1602083612abd565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006123f1602283612abd565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612457602483612abd565b91507f54726164653a73656e6465722068617665206e6f7420656e6f7567682062616c60008301527f616e6365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006124bd603483612abd565b91507f4f70657261746f72526f6c653a2063616c6c657220646f6573206e6f7420686160008301527f766520746865206f70657261746f7220726f6c650000000000000000000000006020830152604082019050919050565b6000612523602183612abd565b91507f45524332303a6e6f7420617070726f76656420656e6f7567687420616d6f756e60008301527f74000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612589601a83612abd565b91507f6661696c757265207768696c65207472616e7366657272696e670000000000006000830152602082019050919050565b60006125c9601c83612abd565b91507f54726164653a6f726465725374617465206973206e6f74206f70656e000000006000830152602082019050919050565b61260581612b55565b82525050565b60006020820190506126206000830184612104565b92915050565b600060408201905061263b60008301856120f5565b6126486020830184612104565b9392505050565b600060408201905061266460008301856120f5565b61267160208301846125fc565b9392505050565b600060608201905061268d6000830186612104565b61269a6020830185612104565b6126a760408301846125fc565b949350505050565b60006080820190506126c46000830187612104565b6126d16020830186612104565b6126de60408301856125fc565b6126eb60608301846125fc565b95945050505050565b60006020820190506127096000830184612113565b92915050565b60006020820190506127246000830184612122565b92915050565b600060208201905081810360008301526127448184612131565b905092915050565b600060c082019050612761600083018961216a565b61276e60208301886125fc565b61277b60408301876125fc565b6127886060830186612104565b6127956080830185612104565b6127a260a0830184612104565b979650505050505050565b600060208201905081810360008301526127c78184612179565b905092915050565b600060208201905081810360008301526127e8816121b2565b9050919050565b6000602082019050818103600083015261280881612218565b9050919050565b6000602082019050818103600083015261282881612258565b9050919050565b6000602082019050818103600083015261284881612298565b9050919050565b60006020820190508181036000830152612868816122d8565b9050919050565b600060208201905081810360008301526128888161233e565b9050919050565b600060208201905081810360008301526128a8816123a4565b9050919050565b600060208201905081810360008301526128c8816123e4565b9050919050565b600060208201905081810360008301526128e88161244a565b9050919050565b60006020820190508181036000830152612908816124b0565b9050919050565b6000602082019050818103600083015261292881612516565b9050919050565b600060208201905081810360008301526129488161257c565b9050919050565b60006020820190508181036000830152612968816125bc565b9050919050565b600060208201905061298460008301846125fc565b92915050565b600060a08201905061299f60008301886125fc565b6129ac60208301876125fc565b6129b96040830186612104565b6129c66060830185612104565b6129d36080830184612104565b9695505050505050565b6000604051905081810181811067ffffffffffffffff82111715612a0457612a03612be9565b5b8060405250919050565b600067ffffffffffffffff821115612a2957612a28612be9565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612a5557612a54612be9565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612a8157612a80612be9565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612ad982612b35565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050612b3082612bfc565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612b6a82612b83565b9050919050565b6000612b7c82612b22565b9050919050565b6000612b8e82612b95565b9050919050565b6000612ba082612b35565b9050919050565b82818337600083830152505050565b60005b83811015612bd4578082015181840152602081019050612bb9565b83811115612be3576000848401525b50505050565bfe5b6000601f19601f8301169050919050565b60038110612c0d57612c0c612be9565b5b50565b612c1981612ace565b8114612c2457600080fd5b50565b612c3081612ae0565b8114612c3b57600080fd5b50565b612c4781612aec565b8114612c5257600080fd5b50565b612c5e81612b55565b8114612c6957600080fd5b5056fea2646970667358221220ebe740ce86db00c523e9fb16abbc8ce6c8d855d137c851d705938e7a6e8154ad64736f6c63430007060033000000000000000000000000becf3f0bbb20eb1f920e01794ed291d9e0cfa60b00000000000000000000000063d4dea2c18300b3f6e2812c350c1157e34704430000000000000000000000001b625dd82aeb3aac21398ea9933fbd56e9652383

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

000000000000000000000000becf3f0bbb20eb1f920e01794ed291d9e0cfa60b00000000000000000000000063d4dea2c18300b3f6e2812c350c1157e34704430000000000000000000000001b625dd82aeb3aac21398ea9933fbd56e9652383

-----Decoded View---------------
Arg [0] : _benefitAddress (address): 0xbecf3f0bbb20eb1f920e01794ed291d9e0cfa60b
Arg [1] : _nftAddress (address): 0x63d4dea2c18300b3f6e2812c350c1157e3470443
Arg [2] : _erc20Address (address): 0x1b625dd82aeb3aac21398ea9933fbd56e9652383

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000becf3f0bbb20eb1f920e01794ed291d9e0cfa60b
Arg [1] : 00000000000000000000000063d4dea2c18300b3f6e2812c350c1157e3470443
Arg [2] : 0000000000000000000000001b625dd82aeb3aac21398ea9933fbd56e9652383


Deployed ByteCode Sourcemap

12474:8056:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16403:755;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20308:219;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15729:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17549:329;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13037:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18606:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20090:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13870:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;12943:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3222:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1514:148;;;:::i;:::-;;863:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13171:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3683:95;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18799:1283;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13289:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3786:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17886:712;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1817:281;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16403:755;16560:6;16597:10;;;;;;;;;;;16583:24;;:10;:24;;;16579:542;;;16624:14;16658:9;16670:1;16658:13;;16653:209;16677:4;:11;16673:1;:15;16653:209;;;16841:1;16837;:5;16822:4;:11;:21;16817:1;:27;16813:1;:32;16780:4;16785:1;16780:7;;;;;;;;;;;;;;;;16774:14;;:72;;;16744:6;:102;16714:132;;16690:3;;;;;;;16653:209;;;;16876:15;16913:3;16905;16895:6;:13;;16894:22;;16876:40;;16931:13;16957:1;16947:6;:11;;16931:27;;16990:1;16979:7;:12;16975:135;;;17012:33;17021:7;17029:1;17021:10;;;;;;;;;;;;;;17033:5;17040:4;17012:8;:33::i;:::-;;16975:135;;;17093:1;17086:8;;;;;;;;;16975:135;16579:542;;;;17140:10;17133:17;;;;16403:755;;;;;;;:::o;20308:219::-;20361:17;20429:4;20423:11;20415:19;;20461:4;20455;20448:18;20504:4;20497;20491;20487:15;20480:29;20400:120;;;:::o;15729:47::-;;;;;;;;;;;;;;;;;:::o;17549:329::-;17601:15;17619:12;:24;17632:10;17619:24;;;;;;;;;;;;;;;;17601:42;;17673:6;17662:7;:17;;17654:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;17760:19;17772:6;17760:7;:11;;:19;;;;:::i;:::-;17733:12;:24;17746:10;17733:24;;;;;;;;;;;;;;;:46;;;;17790:12;17812;;;;;;;;;;;17790:35;;17836:5;:14;;;17851:10;17863:6;17836:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17549:329;;;:::o;13037:126::-;3090:24;3101:12;:10;:12::i;:::-;3090:10;:24::i;:::-;3068:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;13140:15:::1;13123:14;;:32;;;;;;;;;;;;;;;;;;13037:126:::0;:::o;18606:185::-;18673:9;18668:116;18692:4;:11;18688:1;:15;18668:116;;;18725:11;18739:4;18744:1;18739:7;;;;;;;;;;;;;;18725:21;;18761:11;18768:3;18761:6;:11::i;:::-;18668:116;18705:3;;;;;;;18668:116;;;;18606:185;:::o;20090:210::-;20149:12;20174:20;20212:1;20207;20198:5;:10;;20197:16;20174:39;;20224:19;20246:22;20255:12;20246:8;:22::i;:::-;20224:44;;20286:6;20279:13;;;;20090:210;;;:::o;13870:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12943:86::-;3090:24;3101:12;:10;:12::i;:::-;3090:10;:24::i;:::-;3068:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;13015:6:::1;13009:3;:12;;;;12943:86:::0;:::o;3222:113::-;3280:4;3304:23;3319:7;3304:10;:14;;:23;;;;:::i;:::-;3297:30;;3222:113;;;:::o;1514:148::-;1094:12;:10;:12::i;:::-;1083:23;;:7;:5;:7::i;:::-;:23;;;1075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1621:1:::1;1584:40;;1605:6;::::0;::::1;;;;;;;;1584:40;;;;;;;;;;;;1652:1;1635:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1514:148::o:0;863:87::-;909:7;936:6;;;;;;;;;;;929:13;;863:87;:::o;13171:110::-;3090:24;3101:12;:10;:12::i;:::-;3090:10;:24::i;:::-;3068:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;13262:11:::1;13249:10;;:24;;;;;;;;;;;;;;;;;;13171:110:::0;:::o;3683:95::-;1094:12;:10;:12::i;:::-;1083:23;;:7;:5;:7::i;:::-;:23;;;1075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3749:21:::1;3762:7;3749:12;:21::i;:::-;3683:95:::0;:::o;18799:1283::-;18843:19;18865:10;:15;18876:3;18865:15;;;;;;;;;;;18843:37;;18916:15;18901:30;;;;;;;;:5;:11;;;;;;;;;;;;:30;;;;;;;;;18893:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19008:12;19030:5;:18;;;;;;;;;;;;19008:41;;19128:5;:11;;;19082:5;:15;;;19098:10;19118:4;19082:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;19060:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;19234:16;19253:31;19278:5;19253:20;19269:3;;19253:5;:11;;;:15;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;19234:50;;19295:18;19316:25;19332:8;19316:5;:11;;;:15;;:25;;;;:::i;:::-;19295:46;;19381:66;19403:5;19410:10;19422:14;;;;;;;;;;;19438:8;19381:21;:66::i;:::-;19458:67;19480:5;19487:10;19507:4;19514:10;19458:21;:67::i;:::-;19573:72;19624:10;19573:12;:32;19586:5;:18;;;;;;;;;;;;19573:32;;;;;;;;;;;;;;;;:36;;:72;;;;:::i;:::-;19538:12;:32;19551:5;:18;;;;;;;;;;;;19538:32;;;;;;;;;;;;;;;:107;;;;19686:14;19711:5;:16;;;;;;;;;;;;19686:42;;19739:70;19762:6;19778:4;19785:10;19797:5;:11;;;19739:22;:70::i;:::-;19836:16;19822:5;:11;;;:30;;;;;;;;;;;;;;;;;;;;;;;;20060:3;19919:10;19868:206;;19886:5;:18;;;;;;;;;;;;19868:206;;;19944:5;:16;;;;;;;;;;;;19975:5;:18;;;;;;;;;;;;20008:5;:11;;;20034:5;:11;;;19868:206;;;;;;;;;:::i;:::-;;;;;;;;18799:1283;;;;;;:::o;13289:118::-;3090:24;3101:12;:10;:12::i;:::-;3090:10;:24::i;:::-;3068:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;13386:13:::1;13371:12;;:28;;;;;;;;;;;;;;;;;;13289:118:::0;:::o;3786:101::-;1094:12;:10;:12::i;:::-;1083:23;;:7;:5;:7::i;:::-;:23;;;1075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3855:24:::1;3871:7;3855:15;:24::i;:::-;3786:101:::0;:::o;17886:712::-;17933:19;17955:10;:15;17966:3;17955:15;;;;;;;;;;;17933:37;;18027:10;18005:32;;:5;:18;;;;;;;;;;;;:32;;;17983:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;18131:11;18153:5;:16;;;;;;;;;;;;18131:39;;18181:138;18218:3;18244:4;18264:5;:18;;;;;;;;;;;;18297:5;:11;;;18181:22;:138::i;:::-;18371:17;18357:5;:11;;;:31;;;;;;;;;;;;;;;;;;;;;;;;18576:3;18427:5;:18;;;;;;;;;;;;18406:184;;;18460:5;:16;;;;;;;;;;;;18491:5;:18;;;;;;;;;;;;18524:5;:11;;;18550:5;:11;;;18406:184;;;;;;;;;:::i;:::-;;;;;;;;17886:712;;;:::o;1817:281::-;1094:12;:10;:12::i;:::-;1083:23;;:7;:5;:7::i;:::-;:23;;;1075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1940:1:::1;1920:22;;:8;:22;;;;1898:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;2053:8;2024:38;;2045:6;::::0;::::1;;;;;;;;2024:38;;;;;;;;;;;;2082:8;2073:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1817:281:::0;:::o;17166:375::-;17280:7;17300:11;17327:62;17338:5;17345;17352:10;;;;;;;;;;;17364:12;;;;;;;;;;;17378:10;17327;:62::i;:::-;17300:89;;17400:34;17410:5;17417;17424:4;17430:3;17400:9;:34::i;:::-;17506:3;17460:4;17452:58;;;17466:10;;;;;;;;;;;17478:12;;;;;;;;;;;17492:5;17499;17452:58;;;;;;;;;:::i;:::-;;;;;;;;17530:3;17523:10;;;17166:375;;;;;:::o;11124:136::-;11182:7;11209:43;11213:1;11216;11209:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11202:50;;11124:136;;;;:::o;127:90::-;172:7;199:10;192:17;;127:90;:::o;2572:235::-;2671:4;2720:1;2701:21;;:7;:21;;;;2693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2779:4;:11;;:20;2791:7;2779:20;;;;;;;;;;;;;;;;;;;;;;;;;2772:27;;2572:235;;;;:::o;3343:128::-;3402:23;3417:7;3402:10;:14;;:23;;;;:::i;:::-;3455:7;3441:22;;;;;;;;;;;;3343:128;:::o;11500:250::-;11558:7;11587:1;11582;:6;11578:47;;;11612:1;11605:8;;;;11578:47;11637:9;11653:1;11649;:5;11637:17;;11682:1;11677;11673;:5;;;;;;:10;11665:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;11741:1;11734:8;;;11500:250;;;;;:::o;11758:132::-;11816:7;11843:39;11847:1;11850;11843:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11836:46;;11758:132;;;;:::o;15037:268::-;15208:5;:18;;;15227:4;15233:2;15237:5;15208:35;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15186:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;15037:268;;;;:::o;10937:179::-;10995:7;11015:9;11031:1;11027;:5;11015:17;;11056:1;11051;:6;;11043:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;11107:1;11100:8;;;10937:179;;;;:::o;15313:202::-;15466:5;:22;;;15489:4;15495:2;15499:7;15466:41;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15313:202;;;;:::o;3479:136::-;3541:26;3559:7;3541:10;:17;;:26;;;;:::i;:::-;3599:7;3583:24;;;;;;;;;;;;3479:136;:::o;14346:472::-;14537:7;14638:5;14666;14694:11;14728:13;14764:12;14605:190;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14577:233;;;;;;14557:253;;14346:472;;;;;;;:::o;13922:416::-;14069:18;14103:193;;;;;;;;14127:15;14103:193;;;;;;;;;;;;14161:5;14103:193;;;;14185:5;14103:193;;;;14209:10;;;;;;;;;;;14103:193;;;;;;14238:12;;;;;;;;;;;14103:193;;;;;;14269:12;14103:193;;;;;14069:227;;14325:5;14307:10;:15;14318:3;14307:15;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13922:416;;;;;:::o;11268:224::-;11388:7;11421:1;11416;:6;;11424:12;11408:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11448:9;11464:1;11460;:5;11448:17;;11483:1;11476:8;;;11268:224;;;;;:::o;2196:177::-;2274:18;2278:4;2284:7;2274:3;:18::i;:::-;2273:19;2265:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;2361:4;2338;:11;;:20;2350:7;2338:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;2196:177;;:::o;11898:223::-;12018:7;12050:1;12046;:5;12053:12;12038:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12077:9;12093:1;12089;:5;;;;;;12077:17;;12112:1;12105:8;;;11898:223;;;;;:::o;2381:183::-;2461:18;2465:4;2471:7;2461:3;:18::i;:::-;2453:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;2551:5;2528:4;:11;;:20;2540:7;2528:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;2381:183;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;669:622::-;;790:80;805:64;862:6;805:64;:::i;:::-;790:80;:::i;:::-;781:89;;890:5;918:6;911:5;904:21;944:4;937:5;933:16;926:23;;969:6;1019:3;1011:4;1003:6;999:17;994:3;990:27;987:36;984:2;;;1036:1;1033;1026:12;984:2;1064:1;1049:236;1074:6;1071:1;1068:13;1049:236;;;1141:3;1169:37;1202:3;1190:10;1169:37;:::i;:::-;1164:3;1157:50;1236:4;1231:3;1227:14;1220:21;;1270:4;1265:3;1261:14;1254:21;;1109:176;1096:1;1093;1089:9;1084:14;;1049:236;;;1053:14;771:520;;;;;;;:::o;1297:342::-;;1399:64;1414:48;1455:6;1414:48;:::i;:::-;1399:64;:::i;:::-;1390:73;;1486:6;1479:5;1472:21;1524:4;1517:5;1513:16;1562:3;1553:6;1548:3;1544:16;1541:25;1538:2;;;1579:1;1576;1569:12;1538:2;1592:41;1626:6;1621:3;1616;1592:41;:::i;:::-;1380:259;;;;;;:::o;1645:139::-;;1729:6;1716:20;1707:29;;1745:33;1772:5;1745:33;:::i;:::-;1697:87;;;;:::o;1807:303::-;;1927:3;1920:4;1912:6;1908:17;1904:27;1894:2;;1945:1;1942;1935:12;1894:2;1985:6;1972:20;2010:94;2100:3;2092:6;2085:4;2077:6;2073:17;2010:94;:::i;:::-;2001:103;;1884:226;;;;;:::o;2133:303::-;;2253:3;2246:4;2238:6;2234:17;2230:27;2220:2;;2271:1;2268;2261:12;2220:2;2311:6;2298:20;2336:94;2426:3;2418:6;2411:4;2403:6;2399:17;2336:94;:::i;:::-;2327:103;;2210:226;;;;;:::o;2442:137::-;;2527:6;2521:13;2512:22;;2543:30;2567:5;2543:30;:::i;:::-;2502:77;;;;:::o;2585:139::-;;2669:6;2656:20;2647:29;;2685:33;2712:5;2685:33;:::i;:::-;2637:87;;;;:::o;2743:271::-;;2847:3;2840:4;2832:6;2828:17;2824:27;2814:2;;2865:1;2862;2855:12;2814:2;2905:6;2892:20;2930:78;3004:3;2996:6;2989:4;2981:6;2977:17;2930:78;:::i;:::-;2921:87;;2804:210;;;;;:::o;3020:139::-;;3104:6;3091:20;3082:29;;3120:33;3147:5;3120:33;:::i;:::-;3072:87;;;;:::o;3165:143::-;;3253:6;3247:13;3238:22;;3269:33;3296:5;3269:33;:::i;:::-;3228:80;;;;:::o;3314:262::-;;3422:2;3410:9;3401:7;3397:23;3393:32;3390:2;;;3438:1;3435;3428:12;3390:2;3481:1;3506:53;3551:7;3542:6;3531:9;3527:22;3506:53;:::i;:::-;3496:63;;3452:117;3380:196;;;;:::o;3582:952::-;;;;;3775:3;3763:9;3754:7;3750:23;3746:33;3743:2;;;3792:1;3789;3782:12;3743:2;3835:1;3860:53;3905:7;3896:6;3885:9;3881:22;3860:53;:::i;:::-;3850:63;;3806:117;3962:2;3988:53;4033:7;4024:6;4013:9;4009:22;3988:53;:::i;:::-;3978:63;;3933:118;4118:2;4107:9;4103:18;4090:32;4149:18;4141:6;4138:30;4135:2;;;4181:1;4178;4171:12;4135:2;4209:78;4279:7;4270:6;4259:9;4255:22;4209:78;:::i;:::-;4199:88;;4061:236;4364:2;4353:9;4349:18;4336:32;4395:18;4387:6;4384:30;4381:2;;;4427:1;4424;4417:12;4381:2;4455:62;4509:7;4500:6;4489:9;4485:22;4455:62;:::i;:::-;4445:72;;4307:220;3733:801;;;;;;;:::o;4540:405::-;;4673:2;4661:9;4652:7;4648:23;4644:32;4641:2;;;4689:1;4686;4679:12;4641:2;4760:1;4749:9;4745:17;4732:31;4790:18;4782:6;4779:30;4776:2;;;4822:1;4819;4812:12;4776:2;4850:78;4920:7;4911:6;4900:9;4896:22;4850:78;:::i;:::-;4840:88;;4703:235;4631:314;;;;:::o;4951:278::-;;5067:2;5055:9;5046:7;5042:23;5038:32;5035:2;;;5083:1;5080;5073:12;5035:2;5126:1;5151:61;5204:7;5195:6;5184:9;5180:22;5151:61;:::i;:::-;5141:71;;5097:125;5025:204;;;;:::o;5235:262::-;;5343:2;5331:9;5322:7;5318:23;5314:32;5311:2;;;5359:1;5356;5349:12;5311:2;5402:1;5427:53;5472:7;5463:6;5452:9;5448:22;5427:53;:::i;:::-;5417:63;;5373:117;5301:196;;;;:::o;5503:262::-;;5611:2;5599:9;5590:7;5586:23;5582:32;5579:2;;;5627:1;5624;5617:12;5579:2;5670:1;5695:53;5740:7;5731:6;5720:9;5716:22;5695:53;:::i;:::-;5685:63;;5641:117;5569:196;;;;:::o;5771:284::-;;5890:2;5878:9;5869:7;5865:23;5861:32;5858:2;;;5906:1;5903;5896:12;5858:2;5949:1;5974:64;6030:7;6021:6;6010:9;6006:22;5974:64;:::i;:::-;5964:74;;5920:128;5848:207;;;;:::o;6061:147::-;6156:45;6195:5;6156:45;:::i;:::-;6151:3;6144:58;6134:74;;:::o;6214:118::-;6301:24;6319:5;6301:24;:::i;:::-;6296:3;6289:37;6279:53;;:::o;6338:109::-;6419:21;6434:5;6419:21;:::i;:::-;6414:3;6407:34;6397:50;;:::o;6453:115::-;6538:23;6555:5;6538:23;:::i;:::-;6533:3;6526:36;6516:52;;:::o;6574:360::-;;6688:38;6720:5;6688:38;:::i;:::-;6742:70;6805:6;6800:3;6742:70;:::i;:::-;6735:77;;6821:52;6866:6;6861:3;6854:4;6847:5;6843:16;6821:52;:::i;:::-;6898:29;6920:6;6898:29;:::i;:::-;6893:3;6889:39;6882:46;;6664:270;;;;;:::o;6940:155::-;7039:49;7082:5;7039:49;:::i;:::-;7034:3;7027:62;7017:78;;:::o;7101:364::-;;7217:39;7250:5;7217:39;:::i;:::-;7272:71;7336:6;7331:3;7272:71;:::i;:::-;7265:78;;7352:52;7397:6;7392:3;7385:4;7378:5;7374:16;7352:52;:::i;:::-;7429:29;7451:6;7429:29;:::i;:::-;7424:3;7420:39;7413:46;;7193:272;;;;;:::o;7471:370::-;;7634:67;7698:2;7693:3;7634:67;:::i;:::-;7627:74;;7731:34;7727:1;7722:3;7718:11;7711:55;7797:8;7792:2;7787:3;7783:12;7776:30;7832:2;7827:3;7823:12;7816:19;;7617:224;;;:::o;7847:325::-;;8010:67;8074:2;8069:3;8010:67;:::i;:::-;8003:74;;8107:29;8103:1;8098:3;8094:11;8087:50;8163:2;8158:3;8154:12;8147:19;;7993:179;;;:::o;8178:330::-;;8341:67;8405:2;8400:3;8341:67;:::i;:::-;8334:74;;8438:34;8434:1;8429:3;8425:11;8418:55;8499:2;8494:3;8490:12;8483:19;;8324:184;;;:::o;8514:328::-;;8677:67;8741:2;8736:3;8677:67;:::i;:::-;8670:74;;8774:32;8770:1;8765:3;8761:11;8754:53;8833:2;8828:3;8824:12;8817:19;;8660:182;;;:::o;8848:365::-;;9011:67;9075:2;9070:3;9011:67;:::i;:::-;9004:74;;9108:34;9104:1;9099:3;9095:11;9088:55;9174:3;9169:2;9164:3;9160:12;9153:25;9204:2;9199:3;9195:12;9188:19;;8994:219;;;:::o;9219:365::-;;9382:67;9446:2;9441:3;9382:67;:::i;:::-;9375:74;;9479:34;9475:1;9470:3;9466:11;9459:55;9545:3;9540:2;9535:3;9531:12;9524:25;9575:2;9570:3;9566:12;9559:19;;9365:219;;;:::o;9590:330::-;;9753:67;9817:2;9812:3;9753:67;:::i;:::-;9746:74;;9850:34;9846:1;9841:3;9837:11;9830:55;9911:2;9906:3;9902:12;9895:19;;9736:184;;;:::o;9926:366::-;;10089:67;10153:2;10148:3;10089:67;:::i;:::-;10082:74;;10186:34;10182:1;10177:3;10173:11;10166:55;10252:4;10247:2;10242:3;10238:12;10231:26;10283:2;10278:3;10274:12;10267:19;;10072:220;;;:::o;10298:368::-;;10461:67;10525:2;10520:3;10461:67;:::i;:::-;10454:74;;10558:34;10554:1;10549:3;10545:11;10538:55;10624:6;10619:2;10614:3;10610:12;10603:28;10657:2;10652:3;10648:12;10641:19;;10444:222;;;:::o;10672:384::-;;10835:67;10899:2;10894:3;10835:67;:::i;:::-;10828:74;;10932:34;10928:1;10923:3;10919:11;10912:55;10998:22;10993:2;10988:3;10984:12;10977:44;11047:2;11042:3;11038:12;11031:19;;10818:238;;;:::o;11062:365::-;;11225:67;11289:2;11284:3;11225:67;:::i;:::-;11218:74;;11322:34;11318:1;11313:3;11309:11;11302:55;11388:3;11383:2;11378:3;11374:12;11367:25;11418:2;11413:3;11409:12;11402:19;;11208:219;;;:::o;11433:324::-;;11596:67;11660:2;11655:3;11596:67;:::i;:::-;11589:74;;11693:28;11689:1;11684:3;11680:11;11673:49;11748:2;11743:3;11739:12;11732:19;;11579:178;;;:::o;11763:326::-;;11926:67;11990:2;11985:3;11926:67;:::i;:::-;11919:74;;12023:30;12019:1;12014:3;12010:11;12003:51;12080:2;12075:3;12071:12;12064:19;;11909:180;;;:::o;12095:118::-;12182:24;12200:5;12182:24;:::i;:::-;12177:3;12170:37;12160:53;;:::o;12219:222::-;;12350:2;12339:9;12335:18;12327:26;;12363:71;12431:1;12420:9;12416:17;12407:6;12363:71;:::i;:::-;12317:124;;;;:::o;12447:348::-;;12614:2;12603:9;12599:18;12591:26;;12627:79;12703:1;12692:9;12688:17;12679:6;12627:79;:::i;:::-;12716:72;12784:2;12773:9;12769:18;12760:6;12716:72;:::i;:::-;12581:214;;;;;:::o;12801:348::-;;12968:2;12957:9;12953:18;12945:26;;12981:79;13057:1;13046:9;13042:17;13033:6;12981:79;:::i;:::-;13070:72;13138:2;13127:9;13123:18;13114:6;13070:72;:::i;:::-;12935:214;;;;;:::o;13155:442::-;;13342:2;13331:9;13327:18;13319:26;;13355:71;13423:1;13412:9;13408:17;13399:6;13355:71;:::i;:::-;13436:72;13504:2;13493:9;13489:18;13480:6;13436:72;:::i;:::-;13518;13586:2;13575:9;13571:18;13562:6;13518:72;:::i;:::-;13309:288;;;;;;:::o;13603:553::-;;13818:3;13807:9;13803:19;13795:27;;13832:71;13900:1;13889:9;13885:17;13876:6;13832:71;:::i;:::-;13913:72;13981:2;13970:9;13966:18;13957:6;13913:72;:::i;:::-;13995;14063:2;14052:9;14048:18;14039:6;13995:72;:::i;:::-;14077;14145:2;14134:9;14130:18;14121:6;14077:72;:::i;:::-;13785:371;;;;;;;:::o;14162:210::-;;14287:2;14276:9;14272:18;14264:26;;14300:65;14362:1;14351:9;14347:17;14338:6;14300:65;:::i;:::-;14254:118;;;;:::o;14378:218::-;;14507:2;14496:9;14492:18;14484:26;;14520:69;14586:1;14575:9;14571:17;14562:6;14520:69;:::i;:::-;14474:122;;;;:::o;14602:309::-;;14751:2;14740:9;14736:18;14728:26;;14800:9;14794:4;14790:20;14786:1;14775:9;14771:17;14764:47;14828:76;14899:4;14890:6;14828:76;:::i;:::-;14820:84;;14718:193;;;;:::o;14917:799::-;;15200:3;15189:9;15185:19;15177:27;;15214:83;15294:1;15283:9;15279:17;15270:6;15214:83;:::i;:::-;15307:72;15375:2;15364:9;15360:18;15351:6;15307:72;:::i;:::-;15389;15457:2;15446:9;15442:18;15433:6;15389:72;:::i;:::-;15471;15539:2;15528:9;15524:18;15515:6;15471:72;:::i;:::-;15553:73;15621:3;15610:9;15606:19;15597:6;15553:73;:::i;:::-;15636;15704:3;15693:9;15689:19;15680:6;15636:73;:::i;:::-;15167:549;;;;;;;;;:::o;15722:313::-;;15873:2;15862:9;15858:18;15850:26;;15922:9;15916:4;15912:20;15908:1;15897:9;15893:17;15886:47;15950:78;16023:4;16014:6;15950:78;:::i;:::-;15942:86;;15840:195;;;;:::o;16041:419::-;;16245:2;16234:9;16230:18;16222:26;;16294:9;16288:4;16284:20;16280:1;16269:9;16265:17;16258:47;16322:131;16448:4;16322:131;:::i;:::-;16314:139;;16212:248;;;:::o;16466:419::-;;16670:2;16659:9;16655:18;16647:26;;16719:9;16713:4;16709:20;16705:1;16694:9;16690:17;16683:47;16747:131;16873:4;16747:131;:::i;:::-;16739:139;;16637:248;;;:::o;16891:419::-;;17095:2;17084:9;17080:18;17072:26;;17144:9;17138:4;17134:20;17130:1;17119:9;17115:17;17108:47;17172:131;17298:4;17172:131;:::i;:::-;17164:139;;17062:248;;;:::o;17316:419::-;;17520:2;17509:9;17505:18;17497:26;;17569:9;17563:4;17559:20;17555:1;17544:9;17540:17;17533:47;17597:131;17723:4;17597:131;:::i;:::-;17589:139;;17487:248;;;:::o;17741:419::-;;17945:2;17934:9;17930:18;17922:26;;17994:9;17988:4;17984:20;17980:1;17969:9;17965:17;17958:47;18022:131;18148:4;18022:131;:::i;:::-;18014:139;;17912:248;;;:::o;18166:419::-;;18370:2;18359:9;18355:18;18347:26;;18419:9;18413:4;18409:20;18405:1;18394:9;18390:17;18383:47;18447:131;18573:4;18447:131;:::i;:::-;18439:139;;18337:248;;;:::o;18591:419::-;;18795:2;18784:9;18780:18;18772:26;;18844:9;18838:4;18834:20;18830:1;18819:9;18815:17;18808:47;18872:131;18998:4;18872:131;:::i;:::-;18864:139;;18762:248;;;:::o;19016:419::-;;19220:2;19209:9;19205:18;19197:26;;19269:9;19263:4;19259:20;19255:1;19244:9;19240:17;19233:47;19297:131;19423:4;19297:131;:::i;:::-;19289:139;;19187:248;;;:::o;19441:419::-;;19645:2;19634:9;19630:18;19622:26;;19694:9;19688:4;19684:20;19680:1;19669:9;19665:17;19658:47;19722:131;19848:4;19722:131;:::i;:::-;19714:139;;19612:248;;;:::o;19866:419::-;;20070:2;20059:9;20055:18;20047:26;;20119:9;20113:4;20109:20;20105:1;20094:9;20090:17;20083:47;20147:131;20273:4;20147:131;:::i;:::-;20139:139;;20037:248;;;:::o;20291:419::-;;20495:2;20484:9;20480:18;20472:26;;20544:9;20538:4;20534:20;20530:1;20519:9;20515:17;20508:47;20572:131;20698:4;20572:131;:::i;:::-;20564:139;;20462:248;;;:::o;20716:419::-;;20920:2;20909:9;20905:18;20897:26;;20969:9;20963:4;20959:20;20955:1;20944:9;20940:17;20933:47;20997:131;21123:4;20997:131;:::i;:::-;20989:139;;20887:248;;;:::o;21141:419::-;;21345:2;21334:9;21330:18;21322:26;;21394:9;21388:4;21384:20;21380:1;21369:9;21365:17;21358:47;21422:131;21548:4;21422:131;:::i;:::-;21414:139;;21312:248;;;:::o;21566:222::-;;21697:2;21686:9;21682:18;21674:26;;21710:71;21778:1;21767:9;21763:17;21754:6;21710:71;:::i;:::-;21664:124;;;;:::o;21794:664::-;;22037:3;22026:9;22022:19;22014:27;;22051:71;22119:1;22108:9;22104:17;22095:6;22051:71;:::i;:::-;22132:72;22200:2;22189:9;22185:18;22176:6;22132:72;:::i;:::-;22214;22282:2;22271:9;22267:18;22258:6;22214:72;:::i;:::-;22296;22364:2;22353:9;22349:18;22340:6;22296:72;:::i;:::-;22378:73;22446:3;22435:9;22431:19;22422:6;22378:73;:::i;:::-;22004:454;;;;;;;;:::o;22464:278::-;;22530:2;22524:9;22514:19;;22572:4;22564:6;22560:17;22679:6;22667:10;22664:22;22643:18;22631:10;22628:34;22625:62;22622:2;;;22690:13;;:::i;:::-;22622:2;22725:10;22721:2;22714:22;22504:238;;;;:::o;22748:306::-;;22915:18;22907:6;22904:30;22901:2;;;22937:13;;:::i;:::-;22901:2;22982:4;22974:6;22970:17;22962:25;;23042:4;23036;23032:15;23024:23;;22830:224;;;:::o;23060:306::-;;23227:18;23219:6;23216:30;23213:2;;;23249:13;;:::i;:::-;23213:2;23294:4;23286:6;23282:17;23274:25;;23354:4;23348;23344:15;23336:23;;23142:224;;;:::o;23372:326::-;;23523:18;23515:6;23512:30;23509:2;;;23545:13;;:::i;:::-;23509:2;23625:4;23621:9;23614:4;23606:6;23602:17;23598:33;23590:41;;23686:4;23680;23676:15;23668:23;;23438:260;;;:::o;23704:98::-;;23789:5;23783:12;23773:22;;23762:40;;;:::o;23808:99::-;;23894:5;23888:12;23878:22;;23867:40;;;:::o;23913:168::-;;24030:6;24025:3;24018:19;24070:4;24065:3;24061:14;24046:29;;24008:73;;;;:::o;24087:169::-;;24205:6;24200:3;24193:19;24245:4;24240:3;24236:14;24221:29;;24183:73;;;;:::o;24262:96::-;;24328:24;24346:5;24328:24;:::i;:::-;24317:35;;24307:51;;;:::o;24364:90::-;;24441:5;24434:13;24427:21;24416:32;;24406:48;;;:::o;24460:77::-;;24526:5;24515:16;;24505:32;;;:::o;24543:149::-;;24619:66;24612:5;24608:78;24597:89;;24587:105;;;:::o;24698:139::-;;24778:5;24767:16;;24784:47;24825:5;24784:47;:::i;:::-;24757:80;;;:::o;24843:126::-;;24920:42;24913:5;24909:54;24898:65;;24888:81;;;:::o;24975:77::-;;25041:5;25030:16;;25020:32;;;:::o;25058:134::-;;25149:37;25180:5;25149:37;:::i;:::-;25136:50;;25126:66;;;:::o;25198:139::-;;25293:38;25325:5;25293:38;:::i;:::-;25280:51;;25270:67;;;:::o;25343:126::-;;25426:37;25457:5;25426:37;:::i;:::-;25413:50;;25403:66;;;:::o;25475:113::-;;25558:24;25576:5;25558:24;:::i;:::-;25545:37;;25535:53;;;:::o;25594:154::-;25678:6;25673:3;25668;25655:30;25740:1;25731:6;25726:3;25722:16;25715:27;25645:103;;;:::o;25754:307::-;25822:1;25832:113;25846:6;25843:1;25840:13;25832:113;;;25931:1;25926:3;25922:11;25916:18;25912:1;25907:3;25903:11;25896:39;25868:2;25865:1;25861:10;25856:15;;25832:113;;;25963:6;25960:1;25957:13;25954:2;;;26043:1;26034:6;26029:3;26025:16;26018:27;25954:2;25803:258;;;;:::o;26067:48::-;26100:9;26121:102;;26213:2;26209:7;26204:2;26197:5;26193:14;26189:28;26179:38;;26169:54;;;:::o;26229:114::-;26316:1;26309:5;26306:12;26296:2;;26322:13;;:::i;:::-;26296:2;26286:57;:::o;26349:122::-;26422:24;26440:5;26422:24;:::i;:::-;26415:5;26412:35;26402:2;;26461:1;26458;26451:12;26402:2;26392:79;:::o;26477:116::-;26547:21;26562:5;26547:21;:::i;:::-;26540:5;26537:32;26527:2;;26583:1;26580;26573:12;26527:2;26517:76;:::o;26599:122::-;26672:24;26690:5;26672:24;:::i;:::-;26665:5;26662:35;26652:2;;26711:1;26708;26701:12;26652:2;26642:79;:::o;26727:122::-;26800:24;26818:5;26800:24;:::i;:::-;26793:5;26790:35;26780:2;;26839:1;26836;26829:12;26780:2;26770:79;:::o

Swarm Source

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