Contract 0xa0c9c01357f917837db2161209dd7eac1681c0eb

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x0bcfcb63f4a4e9651b770d34f12d27de0d1ffbe1f7de2b9b94b407bc1571ee2e72250532021-05-07 21:57:294 mins ago0x08d52aae3b546c31cef0eabfec181d21ca93071c IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00091008
0xbccefbf514cf0bbda4be27f6d404d41217626d01b14e87da3fa101c28cbf17bb72249772021-05-07 21:53:417 mins ago0x08d52aae3b546c31cef0eabfec181d21ca93071c IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00091008
0x8ca09187676c563dbf1ad92b279dfee46cbe739ab55613182bf010a20b79aadc72246312021-05-07 21:35:2626 mins ago0xde06535735e4a8f8fd322d4cabd9125cfbe3343f IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00081261
0x761b216a26ea7cf7b0ee81eef9b68e5ea411eb5da9c2bf10a2b9bc981c0a293c72244852021-05-07 21:28:0833 mins ago0x08d52aae3b546c31cef0eabfec181d21ca93071c IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00081261
0x388781c71ed596a5a580ff40b45f2d860e1aee758911ff089332cce7797c405172242442021-05-07 21:15:4645 mins ago0x168310a1111953d9e259f7c03f0e20f2bc27ed7a IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.001476
0xc73cb5abea22a2e1e88e10f41e1d60fce7c728a96ea7e9e7049597c280e5963a72242282021-05-07 21:14:5846 mins ago0x168310a1111953d9e259f7c03f0e20f2bc27ed7a IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.001476
0xe81990d32d5b1dc11f8cb012d7e6797583407289cc03fe22887bf109819808b072239842021-05-07 21:01:101 hr ago0x26d6d7478e710dd00daa619ce9763317ef199d99 IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00014015
0x7cf1241661e66709b07d8bc2489f266f14eefc51e57b9eed9ef2b579e161d44b72239712021-05-07 21:00:271 hr 1 min ago0x10426d044b63481948eeee6a1c8adc3c1bfa491f IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00014021
0xeaaf36be92d8e655e9d18431b5823cd066d49c29e4449d24693213f39751546e72239622021-05-07 20:59:581 hr 1 min ago0x10426d044b63481948eeee6a1c8adc3c1bfa491f IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00014015
0xb5689adc2b4b77751a6c3035dc6838f7f94d0ec76f529b64df2570e27c8c031072239562021-05-07 20:59:401 hr 1 min ago0x10426d044b63481948eeee6a1c8adc3c1bfa491f IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00014015
0x619eb53a630a2f633588e49cd8cf6840f0a06734534109596047bcda28659a4a72239512021-05-07 20:59:251 hr 2 mins ago0x10426d044b63481948eeee6a1c8adc3c1bfa491f IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00014015
0x7d422e4adcfbd0d9a6a50588798a29ee6f9baa5e6c0534f23bf8afe2dbfe19e672239462021-05-07 20:59:101 hr 2 mins ago0x10426d044b63481948eeee6a1c8adc3c1bfa491f IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00014015
0xf36c7650051571c252b9624dfd294539cd8d80be710d350c0dd1f8bd7fc2466272239382021-05-07 20:58:461 hr 2 mins ago0x16e82083f8f906d63a67531047f8e9bd21149768 IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00091008
0xf4ffcf13ba3dc73d738c44a68c8c311996b60f60318a4f10ea1d05e5dda7466972238852021-05-07 20:56:071 hr 5 mins ago0x10426d044b63481948eeee6a1c8adc3c1bfa491f IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00142059
0x35452a9fbf38e2eaa26fb1b60e8004ee60bcb541fdb8be5bccbd4eca6c22a08d72238542021-05-07 20:54:341 hr 7 mins ago0xdab8b25ef6074865578e19457f8a073bb27d486c IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00014015
0x44fc94ccdf66e1caf6113ff1388b8c748e3086840b7cd5a2bbd8bf390cae573872238472021-05-07 20:54:131 hr 7 mins ago0x10426d044b63481948eeee6a1c8adc3c1bfa491f IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00147606
0x811f154264e82d91a5b7a1a07454c82b1d4350acb555cff8150e30480443ea0772238042021-05-07 20:52:041 hr 9 mins ago0x10426d044b63481948eeee6a1c8adc3c1bfa491f IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00147606
0x4915adb29743667c63f49b8ef456ae0a69ecca11cb88494fd3cf6a90282d20f072237752021-05-07 20:50:371 hr 11 mins ago0x10426d044b63481948eeee6a1c8adc3c1bfa491f IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00147606
0x92ddf32c35b959c1e7d9198c488dbce4373b8d8594c13adc84d4671fb5cdd6b972236812021-05-07 20:45:551 hr 15 mins ago0x10426d044b63481948eeee6a1c8adc3c1bfa491f IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00147606
0x60ef1375f97d51870246fa07c29c483912756e6d911d52ff1d86a6ae152eee4772236422021-05-07 20:43:581 hr 17 mins ago0x13d873246bb01c5c0528bc144da9d0732ccf31a2 IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00091008
0x7c8196da068e72bf6629dc8cef3f3da7773838293402d248b73c33c93122dff172236342021-05-07 20:43:341 hr 18 mins ago0x13d873246bb01c5c0528bc144da9d0732ccf31a2 IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00091008
0x575192c55db8fa22e180b10ea32ed4ad63aac021a18cc355321c4980d969dbfb72236072021-05-07 20:42:131 hr 19 mins ago0x10426d044b63481948eeee6a1c8adc3c1bfa491f IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00147606
0x2c3bed67445969fbe387a625a422bfafe7519a627dc54182e7867811bccd423d72235242021-05-07 20:37:481 hr 23 mins ago0x10426d044b63481948eeee6a1c8adc3c1bfa491f IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00147606
0x1c0cc0c1a9678209ec1a1eb26802a4ed350af1f8a4fe165990794af84551362772234492021-05-07 20:34:031 hr 27 mins ago0x195a4076b4734a56d2ba31db481ccf683d48cbe7 IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00091008
0x0e62637da4e4603f0250e4bbe7adb0625b25ab1eb5743f11ddda462846d5124472233552021-05-07 20:29:211 hr 32 mins ago0x70523eeb54a7595b3cfa7ddd89e9521201a2c0ed IN  0xa0c9c01357f917837db2161209dd7eac1681c0eb0 BNB0.00091008
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Market

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 8 : Market.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
pragma experimental ABIEncoderV2;

import "../oz/access/Ownable.sol";
import "../oz/token/ERC20/IERC20.sol";
import "../oz/token/ERC721/utils/ERC721Holder.sol";
import '../oz/token/ERC721/IERC721.sol';
import '../oz/utils/Context.sol';

    
struct Type {
    uint id;
    uint bonus;
    uint rarity;
}

interface IGenNFT is IERC721 {
    function getTypeByTokenId(uint id) external view returns (Type memory);
}

contract Market is ERC721Holder, Ownable{
    
    struct Ask {
      uint256 nftId;
      uint256 typeId;
      uint256 price;
      uint256 soldTime;
      uint256 index;
      uint256 listTime;
      uint256 nonce;
      address owner;
    }
    

    struct PersonalIndexer {
        bytes32[] listings;
        uint256 indexLength;
    }
    
    mapping(bytes32 => Ask) public _bazaar;
    bytes32[] public _indexer;
    bytes32[] public _soldIndexer;
    uint256 public _indexerLength;
    mapping(address => PersonalIndexer) public _userBazaar;
    uint256 public _fees;
    address public brnr;
    
 
    IERC20 gen;
    IGenNFT nft;

    // fees is in terms of parts per 1e4;

    constructor(IERC20 g, IGenNFT n, uint256 fees) {
        gen = g;
        nft = n;
        _fees=fees;
        brnr = 0x000000000000000000000000000000000000dEaD;
    }
    
    
    
    modifier ownerOnly(uint256 nftId) {
        require(nft.ownerOf(nftId) == _msgSender(), "MarketPlace: You must own the NFT to perform this operation.");
        _;
    }
    
    
    // checking if sold
    function marketOperable(bytes32 askId) internal virtual {
        require(_bazaar[askId].soldTime == 0, "MarketPlace: NFT product already sold.");
    }
    
    
    // get list of all active listings
    function getIndexer() public view virtual returns(bytes32[] memory) {
        return _indexer;
    }
    
        // get list of all active listings
    function getFullMarket() public view returns(Ask[] memory) {
        Ask[] memory asks = new Ask[](_indexerLength);
        for (uint256 i = 0; i < _indexerLength; i++) {
            asks[i] = _bazaar[_indexer[i]];
        }
        return asks;
    }
    
    function getFullUserMarket(address _user) public view returns(Ask[] memory) {
        Ask[] memory asks = new Ask[](_userBazaar[_user].indexLength);
        for (uint256 i = 0; i < _userBazaar[_user].indexLength; i++) {
            asks[i] = _bazaar[_userBazaar[_user].listings[i]];
        }
        return asks;
    }
    
    // get info about any particular askId
    function getBazaar(bytes32 askId) public view virtual returns (Ask memory) {
        return _bazaar[askId];
    }
  
  
    //  get length of indexer (active listings only)
    function getIndexLength() public view virtual returns(uint256) {
        return _indexerLength;
    }
    
    // get list of sold listings
    function getSoldIndexer() public view virtual returns(bytes32[] memory) {
        return _soldIndexer;
    }
    
    //list of listings of a particulat user
    function getUserIndexer(address user) public view virtual returns (bytes32[] memory) {
        return _userBazaar[user].listings;
    }
    
    // owner call: update fees
    function updateFees(uint256 fees) public onlyOwner {
        require(fees <= 1e4, "Fees cannot be more than 100%.");
        _fees = fees;
    }
    
    // personal listings array length
    function getUserIndexLength(address user) public view virtual returns(uint256) {
        return _userBazaar[user].indexLength;
    }
    
    function _list(uint256 nftId, bytes32 askId) internal virtual {
        _bazaar[askId].owner = _msgSender();
        _bazaar[askId].nftId = nftId;
        _bazaar[askId].typeId = nft.getTypeByTokenId(nftId).id;
        _bazaar[askId].index=_indexerLength;
        if (_indexerLength == _indexer.length) {
            _indexer.push(askId);
        } else {
            _indexer[_indexerLength] = askId;
        }
        _bazaar[askId].listTime = block.timestamp;
        _indexerLength++;
        nft.safeTransferFrom(msg.sender, address(this), nftId);
    }
    
    // public indexing remove
    function popFromIndexer(bytes32 askId) internal virtual {
        uint256 index = _bazaar[askId].index;
        _indexer[index] = _indexer[_indexerLength - 1];
        _bazaar[_indexer[index]].index=index;
        delete _indexer[_indexerLength - 1];
        _indexerLength--;
    }
    
    
    //personal indexing push 
    function _pushToUserIndexer(address user, bytes32 askId) internal virtual {
        if (_userBazaar[user].indexLength == _userBazaar[user].listings.length) {
            _userBazaar[user].listings.push(askId);    
        } else {
            _userBazaar[user].listings[_userBazaar[user].indexLength] = askId;
        }
        
        _bazaar[askId].nonce=_userBazaar[user].indexLength;
        _userBazaar[user].indexLength++;
    }
    
    
    //personal indexing pop
    function _popFromUserIndexer(address user, bytes32 askId) internal virtual {
        uint256 index = _bazaar[askId].nonce;
        _userBazaar[user].listings[index] = _userBazaar[user].listings[_userBazaar[user].indexLength- 1];
        _bazaar[_userBazaar[user].listings[index]].nonce=index;
        delete _userBazaar[user].listings[_userBazaar[user].indexLength - 1];
        _userBazaar[user].indexLength--;
    }
  
    
    // well...
    function getaskId(uint256 nftId, address user) public pure returns(bytes32 askId) {
        askId = keccak256(abi.encodePacked(nftId, user));
    }
    
    
    // place new ask or update price 
    function placeAsk(uint256 nftId, uint256 price) external virtual ownerOnly(nftId) returns(bytes32) {
        bytes32 askId = getaskId(nftId, _msgSender());
        marketOperable(askId);
        if (_bazaar[askId].listTime == 0) {
            _list(nftId, askId);
            _pushToUserIndexer(_msgSender(), askId);
        }
        _bazaar[askId].price = price;
        return askId;
    }
    
        // place new ask or update price 
    function updatePrice(uint256 nftId, uint256 price) public {
        bytes32 askId = getaskId(nftId, _msgSender());
        marketOperable(askId);

        _bazaar[askId].price = price;
    }
    
   
    
    // revoke ask of nft that you own/ not own 
    function revokeAsk(uint256 nftId) external virtual {
        bytes32 askId = getaskId(nftId, _msgSender());
        marketOperable(askId);
        require(_bazaar[askId].listTime != 0, "MarketPlace: Cannot revoke ask for unlisted NFT product.");
        popFromIndexer(askId);
        _popFromUserIndexer(_msgSender(), askId);
        nft.safeTransferFrom(address(this), msg.sender, _bazaar[askId].nftId);
        delete _bazaar[askId];
    }
    
    
    //  duh
    function buyNFT(bytes32 askId) external virtual {
        uint nftId = _bazaar[askId].nftId;
        uint256 price = _bazaar[askId].price;
        gen.transferFrom(_msgSender(), _bazaar[askId].owner, price * (1e4 - _fees) /1e4);
        gen.transferFrom(_msgSender(), brnr, price * _fees /1e4);
        nft.safeTransferFrom(address(this), _msgSender(), nftId);
        popFromIndexer(askId);
        _soldIndexer.push(askId);
        _bazaar[askId].soldTime=block.timestamp;
        _bazaar[askId].index=0;
    }
}

File 2 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";
/**
 * @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.
 */
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;
    }
}

File 3 of 8 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.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 4 of 8 : IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @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 5 of 8 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}

File 6 of 8 : ERC721Holder.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC721Receiver.sol";

  /**
   * @dev Implementation of the {IERC721Receiver} interface.
   *
   * Accepts all token transfers.
   * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
   */
contract ERC721Holder is IERC721Receiver {

    /**
     * @dev See {IERC721Receiver-onERC721Received}.
     *
     * Always returns `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }
}

File 7 of 8 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.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 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) {
        return msg.sender;
    }

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

File 8 of 8 : IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.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);
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"g","type":"address"},{"internalType":"contract IGenNFT","name":"n","type":"address"},{"internalType":"uint256","name":"fees","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"bytes32","name":"","type":"bytes32"}],"name":"_bazaar","outputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"soldTime","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"listTime","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_indexer","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_indexerLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_soldIndexer","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_userBazaar","outputs":[{"internalType":"uint256","name":"indexLength","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"brnr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"askId","type":"bytes32"}],"name":"buyNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"askId","type":"bytes32"}],"name":"getBazaar","outputs":[{"components":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"soldTime","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"listTime","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"internalType":"struct Market.Ask","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFullMarket","outputs":[{"components":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"soldTime","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"listTime","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"internalType":"struct Market.Ask[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getFullUserMarket","outputs":[{"components":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"soldTime","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"listTime","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"internalType":"struct Market.Ask[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIndexLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIndexer","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSoldIndexer","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserIndexLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserIndexer","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"getaskId","outputs":[{"internalType":"bytes32","name":"askId","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"placeAsk","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"revokeAsk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fees","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162001d3b38038062001d3b8339810160408190526200003491620000d8565b600062000040620000d4565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600880546001600160a01b039485166001600160a01b0319918216179091556009805493909416928116929092179092556006919091556007805490911661dead17905562000138565b3390565b600080600060608486031215620000ed578283fd5b8351620000fa816200011f565b60208501519093506200010d816200011f565b80925050604084015190509250925092565b6001600160a01b03811681146200013557600080fd5b50565b611bf380620001486000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806375a8b702116100de578063c228fed611610097578063e1ba7d0111610071578063e1ba7d0114610327578063e895474e1461032f578063edd644d314610337578063f2fde38b1461034a57610173565b8063c228fed614610304578063d212a69a1461030c578063d7fcb3b81461031457610173565b806375a8b7021461028e57806378dacee1146102a1578063814390ef146102b457806382367b2d146102d457806388f23238146102e75780638da5cb5b146102ef57610173565b80632e0d97ed116101305780632e0d97ed1461021857806331ce68501461022b57806340febe0b1461024b5780635f2331e31461026b5780636df4ea3414610273578063715018a61461028657610173565b806311801fe314610178578063150b7a02146101a157806317118469146101c15780631bdad27a146101d657806323154af2146101fd578063286c588d14610210575b600080fd5b61018b610186366004611593565b61035d565b60405161019891906118a6565b60405180910390f35b6101b46101af3660046115d2565b61037b565b60405161019891906118af565b6101d46101cf3660046116ae565b61038b565b005b6101e96101e43660046116ae565b6105e4565b604051610198989796959493929190611a8b565b61018b61020b3660046116ae565b610631565b61018b610652565b61018b610226366004611721565b610658565b61023e610239366004611593565b61068b565b604051610198919061181f565b61025e610259366004611593565b6106f7565b6040516101989190611863565b61023e6108a0565b61018b610281366004611593565b6108f8565b6101d461090d565b61018b61029c366004611750565b61099f565b6101d46102af3660046116ae565b610abb565b6102c76102c23660046116ae565b610b21565b6040516101989190611a76565b6101d46102e2366004611750565b610b9f565b61025e610bcd565b6102f7610d2b565b60405161019891906117e7565b61023e610d3a565b61018b610d90565b61018b6103223660046116ae565b610d96565b61018b610da6565b6102f7610dac565b6101d46103453660046116ae565b610dbb565b6101d4610358366004611593565b610ee1565b6001600160a01b031660009081526005602052604090206001015490565b630a85bd0160e11b949350505050565b600081815260016020526040902080546002909101546008546001600160a01b03166323b872dd6103ba610fa1565b6000868152600160205260409020600701546006546001600160a01b0390911690612710906103e99082611b33565b6103f39087611b14565b6103fd9190611af4565b6040518463ffffffff1660e01b815260040161041b939291906117fb565b602060405180830381600087803b15801561043557600080fd5b505af1158015610449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046d919061168e565b506008546001600160a01b03166323b872dd610487610fa1565b6007546006546001600160a01b0390911690612710906104a79087611b14565b6104b19190611af4565b6040518463ffffffff1660e01b81526004016104cf939291906117fb565b602060405180830381600087803b1580156104e957600080fd5b505af11580156104fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610521919061168e565b506009546001600160a01b03166342842e0e3061053c610fa1565b856040518463ffffffff1660e01b815260040161055b939291906117fb565b600060405180830381600087803b15801561057557600080fd5b505af1158015610589573d6000803e3d6000fd5b5050505061059683610fa5565b505060038054600181810183557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b909101839055600092835260205260408220429181019190915560040155565b60016020819052600091825260409091208054918101546002820154600383015460048401546005850154600686015460079096015494959394929391929091906001600160a01b031688565b6003818154811061064157600080fd5b600091825260209091200154905081565b60045481565b6000828260405160200161066d9291906117c7565b60405160208183030381529060405280519060200120905092915050565b6001600160a01b0381166000908152600560209081526040918290208054835181840281018401909452808452606093928301828280156106eb57602002820191906000526020600020905b8154815260200190600101908083116106d7575b50505050509050919050565b6001600160a01b0381166000908152600560205260408120600101546060919067ffffffffffffffff81111561073d57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561077657816020015b610763611545565b81526020019060019003908161075b5790505b50905060005b6001600160a01b038416600090815260056020526040902060010154811015610899576001600160a01b038416600090815260056020526040812080546001929190849081106107dc57634e487b7160e01b600052603260045260246000fd5b600091825260208083209091015483528281019390935260409182019020815161010081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600701546001600160a01b031660e0820152825183908390811061087b57634e487b7160e01b600052603260045260246000fd5b6020026020010181905250808061089190611b61565b91505061077c565b5092915050565b606060038054806020026020016040519081016040528092919081815260200182805480156108ee57602002820191906000526020600020905b8154815260200190600101908083116108da575b5050505050905090565b60056020526000908152604090206001015481565b610915610fa1565b6001600160a01b0316610926610d2b565b6001600160a01b0316146109555760405162461bcd60e51b815260040161094c906119fb565b60405180910390fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000826109aa610fa1565b6009546040516331a9108f60e11b81526001600160a01b039283169290911690636352211e906109de9085906004016118a6565b60206040518083038186803b1580156109f657600080fd5b505afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e91906115b6565b6001600160a01b031614610a545760405162461bcd60e51b815260040161094c90611967565b6000610a6285610226610fa1565b9050610a6d816110c2565b600081815260016020526040902060050154610a9e57610a8d85826110f4565b610a9e610a98610fa1565b826112cb565b600081815260016020526040902060020184905591505092915050565b610ac3610fa1565b6001600160a01b0316610ad4610d2b565b6001600160a01b031614610afa5760405162461bcd60e51b815260040161094c906119fb565b612710811115610b1c5760405162461bcd60e51b815260040161094c906119c4565b600655565b610b29611545565b506000908152600160208181526040928390208351610100810185528154815292810154918301919091526002810154928201929092526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007909101546001600160a01b031660e082015290565b6000610bad83610226610fa1565b9050610bb8816110c2565b60009081526001602052604090206002015550565b6060600060045467ffffffffffffffff811115610bfa57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610c3357816020015b610c20611545565b815260200190600190039081610c185790505b50905060005b600454811015610d25576001600060028381548110610c6857634e487b7160e01b600052603260045260246000fd5b600091825260208083209091015483528281019390935260409182019020815161010081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600701546001600160a01b031660e08201528251839083908110610d0757634e487b7160e01b600052603260045260246000fd5b60200260200101819052508080610d1d90611b61565b915050610c39565b50905090565b6000546001600160a01b031690565b606060028054806020026020016040519081016040528092919081815260200182805480156108ee57602002820191906000526020600020908154815260200190600101908083116108da575050505050905090565b60065481565b6002818154811061064157600080fd5b60045490565b6007546001600160a01b031681565b6000610dc982610226610fa1565b9050610dd4816110c2565b600081815260016020526040902060050154610e025760405162461bcd60e51b815260040161094c9061190a565b610e0b81610fa5565b610e1c610e16610fa1565b826113ae565b60095460008281526001602052604090819020549051632142170760e11b81526001600160a01b03909216916342842e0e91610e5e91309133916004016117fb565b600060405180830381600087803b158015610e7857600080fd5b505af1158015610e8c573d6000803e3d6000fd5b505050600091825250600160208190526040822082815590810182905560028101829055600381018290556004810182905560058101829055600681019190915560070180546001600160a01b031916905550565b610ee9610fa1565b6001600160a01b0316610efa610d2b565b6001600160a01b031614610f205760405162461bcd60e51b815260040161094c906119fb565b6001600160a01b038116610f465760405162461bcd60e51b815260040161094c906118c4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b60006001600083815260200190815260200160002060040154905060026001600454610fd19190611b33565b81548110610fef57634e487b7160e01b600052603260045260246000fd5b90600052602060002001546002828154811061101b57634e487b7160e01b600052603260045260246000fd5b906000526020600020018190555080600160006002848154811061104f57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154815260200190815260200160002060040181905550600260016004546110809190611b33565b8154811061109e57634e487b7160e01b600052603260045260246000fd5b6000918252602082200181905560048054916110b983611b4a565b91905055505050565b600081815260016020526040902060030154156110f15760405162461bcd60e51b815260040161094c90611a30565b50565b6110fc610fa1565b600082815260016020526040908190206007810180546001600160a01b0319166001600160a01b039485161790558490556009549051634331052360e11b81529116906386620a46906111539085906004016118a6565b60606040518083038186803b15801561116b57600080fd5b505afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a391906116c6565b51600082815260016020819052604090912090810191909155600480549101819055600254141561120857600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01819055611239565b8060026004548154811061122c57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001555b600081815260016020526040812042600590910155600480549161125c83611b61565b9091555050600954604051632142170760e11b81526001600160a01b03909116906342842e0e90611295903390309087906004016117fb565b600060405180830381600087803b1580156112af57600080fd5b505af11580156112c3573d6000803e3d6000fd5b505050505050565b6001600160a01b038216600090815260056020526040902080546001909101541415611321576001600160a01b03821660009081526005602090815260408220805460018101825590835291200181905561136d565b6001600160a01b03821660009081526005602052604090206001810154815483929190811061136057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001555b6001600160a01b038216600081815260056020818152604080842060019081018054888752918452918520600601819055948452919052906110b983611b61565b6000818152600160208181526040808420600601546001600160a01b038716855260059092529092208082015490916113e691611b33565b8154811061140457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03861683526005909152604090912080548390811061144857634e487b7160e01b600052603260045260246000fd5b9060005260206000200181905550806001600060056000876001600160a01b03166001600160a01b0316815260200190815260200160002060000184815481106114a257634e487b7160e01b600052603260045260246000fd5b600091825260208083209091015483528281019390935260409182018120600601939093556001600160a01b0386168352600590915290206001808201546114ea9190611b33565b8154811061150857634e487b7160e01b600052603260045260246000fd5b600091825260208083209091018290556001600160a01b0385168252600590526040812060010180549161153b83611b4a565b9190505550505050565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b6000602082840312156115a4578081fd5b81356115af81611ba8565b9392505050565b6000602082840312156115c7578081fd5b81516115af81611ba8565b600080600080608085870312156115e7578283fd5b84356115f281611ba8565b935060208581013561160381611ba8565b935060408601359250606086013567ffffffffffffffff80821115611626578384fd5b818801915088601f830112611639578384fd5b81358181111561164b5761164b611b92565b61165d601f8201601f19168501611aca565b91508082528984828501011115611672578485fd5b8084840185840137810190920192909252939692955090935050565b60006020828403121561169f578081fd5b815180151581146115af578182fd5b6000602082840312156116bf578081fd5b5035919050565b6000606082840312156116d7578081fd5b6040516060810181811067ffffffffffffffff821117156116fa576116fa611b92565b80604052508251815260208301516020820152604083015160408201528091505092915050565b60008060408385031215611733578182fd5b82359150602083013561174581611ba8565b809150509250929050565b60008060408385031215611762578182fd5b50508035926020909101359150565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260018060a01b0360e08201511660e08301525050565b91825260601b6bffffffffffffffffffffffff1916602082015260340190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252825182820181905260009190848201906040850190845b818110156118575783518352928401929184019160010161183b565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561185757611892838551611771565b92840192610100929092019160010161187f565b90815260200190565b6001600160e01b031991909116815260200190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526038908201527f4d61726b6574506c6163653a2043616e6e6f74207265766f6b652061736b206660408201527f6f7220756e6c6973746564204e46542070726f647563742e0000000000000000606082015260800190565b6020808252603c908201527f4d61726b6574506c6163653a20596f75206d757374206f776e20746865204e4660408201527f5420746f20706572666f726d2074686973206f7065726174696f6e2e00000000606082015260800190565b6020808252601e908201527f466565732063616e6e6f74206265206d6f7265207468616e20313030252e0000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f4d61726b6574506c6163653a204e46542070726f6475637420616c72656164796040820152651039b7b6321760d11b606082015260800190565b6101008101611a858284611771565b92915050565b978852602088019690965260408701949094526060860192909252608085015260a084015260c08301526001600160a01b031660e08201526101000190565b60405181810167ffffffffffffffff81118282101715611aec57611aec611b92565b604052919050565b600082611b0f57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611b2e57611b2e611b7c565b500290565b600082821015611b4557611b45611b7c565b500390565b600081611b5957611b59611b7c565b506000190190565b6000600019821415611b7557611b75611b7c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110f157600080fdfea26469706673582212208c0b30c52cd59592641fb7b3c9fd888d2df23f16c9e837e639595372403516e464736f6c63430008000033000000000000000000000000b0f2939a1c0e43683e5954c9fe142f7df9f8d9670000000000000000000000002d801b4737f2c1079a8f63f4f57832f276d71c7600000000000000000000000000000000000000000000000000000000000001f4

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

000000000000000000000000b0f2939a1c0e43683e5954c9fe142f7df9f8d9670000000000000000000000002d801b4737f2c1079a8f63f4f57832f276d71c7600000000000000000000000000000000000000000000000000000000000001f4

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000b0f2939a1c0e43683e5954c9fe142f7df9f8d967
Arg [1] : 0000000000000000000000002d801b4737f2c1079a8f63f4f57832f276d71c76
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001f4


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.