ERC-721
Overview
Max Total Supply
313 POSITION
Holders
139
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ERC721
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-23 */ // File: contracts/nft/erc721.sol pragma solidity 0.8.0; /** * @dev ERC-721 non-fungible token standard. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface IERC721 { /** * @dev 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 ); /** * @dev Transfers the ownership of an NFT from one address to another address. * @notice 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,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 calldata _data ) external; /** * @dev Transfers the ownership of an NFT from one address to another address. * @notice 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; /** * @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. * @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else * they may be permanently lost. * @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; /** * @dev Set or reaffirm the approved address for an NFT. * @notice 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; /** * @dev Enables or disables approval for a third party ("operator") to manage all of * `msg.sender`'s assets. It also emits the ApprovalForAll event. * @notice The contract MUST allow multiple operators per owner. * @param _operator Address to add to the set of authorized operators. * @param _approved True if the operators is approved, false to revoke approval. */ function setApprovalForAll( address _operator, bool _approved ) external; /** * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are * considered invalid, and this function throws for queries about the zero address. * @param _owner Address for whom to query the balance. * @return Balance of _owner. */ function balanceOf( address _owner ) external view returns (uint256); /** * @dev Returns the address of the owner of the NFT. NFTs assigned to the zero address are * considered invalid, and queries about them do throw. * @param _tokenId The identifier for an NFT. * @return Address of _tokenId owner. */ function ownerOf( uint256 _tokenId ) external view returns (address); /** * @dev Get the approved address for a single NFT. * @notice Throws if `_tokenId` is not a valid NFT. * @param _tokenId The NFT to find the approved address for. * @return Address that _tokenId is approved for. */ function getApproved( uint256 _tokenId ) external view returns (address); /** * @dev Returns true if `_operator` is an approved operator for `_owner`, false otherwise. * @param _owner The address that owns the NFTs. * @param _operator The address that acts on behalf of the owner. * @return True if approved for all, false otherwise. */ function isApprovedForAll( address _owner, address _operator ) external view returns (bool); } // File: contracts/nft/erc721-token-receiver.sol pragma solidity 0.8.0; /** * @dev ERC-721 interface for accepting safe transfers. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface IERC721TokenReceiver { /** * @dev Handle the receipt of a NFT. The ERC721 smart contract calls this function on the * recipient after a `transfer`. This function MAY throw to revert and reject the transfer. Return * of other than the magic value MUST result in the transaction being reverted. * Returns `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` unless throwing. * @notice The contract address is always the message sender. A wallet/broker/auction application * MUST implement the wallet interface if it will accept safe transfers. * @param _operator The address which called `safeTransferFrom` function. * @param _from The address which previously owned the token. * @param _tokenId The NFT identifier which is being transferred. * @param _data Additional data with no specified format. * @return Returns `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. */ function onERC721Received( address _operator, address _from, uint256 _tokenId, bytes calldata _data ) external returns(bytes4); } // File: contracts/nft/erc165.sol pragma solidity 0.8.0; /** * @dev A standard for detecting smart contract interfaces. * See: https://eips.ethereum.org/EIPS/eip-165. */ interface ERC165 { /** * @dev Checks if the smart contract includes a specific interface. * This function uses less than 30,000 gas. * @param _interfaceID The interface identifier, as specified in ERC-165. * @return True if _interfaceID is supported, false otherwise. */ function supportsInterface( bytes4 _interfaceID ) external view returns (bool); } // File: contracts/nft/supports-interface.sol pragma solidity 0.8.0; /** * @dev Implementation of standard for detect smart contract interfaces. */ contract SupportsInterface is ERC165 { /** * @dev Mapping of supported intefraces. You must not set element 0xffffffff to true. */ mapping(bytes4 => bool) internal supportedInterfaces; /** * @dev Contract constructor. */ constructor() { supportedInterfaces[0x01ffc9a7] = true; // ERC165 } /** * @dev Function to check which interfaces are suported by this contract. * @param _interfaceID Id of the interface. * @return True if _interfaceID is supported, false otherwise. */ function supportsInterface( bytes4 _interfaceID ) external override view returns (bool) { return supportedInterfaces[_interfaceID]; } } // File: contracts/nft/address-utils.sol pragma solidity 0.8.0; /** * @dev Utility library of inline functions on addresses. * @notice Based on: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol * Requires EIP-1052. */ library AddressUtils { /** * @dev Returns whether the target address is a contract. * @param _addr Address to check. * @return addressCheck True if _addr is a contract, false if not. */ function isContract( address _addr ) internal view returns (bool addressCheck) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; assembly { codehash := extcodehash(_addr) } // solhint-disable-line addressCheck = (codehash != 0x0 && codehash != accountHash); } } // File: contracts/nft/nf-token.sol pragma solidity 0.8.0; /** * @dev Implementation of ERC-721 non-fungible token standard. */ contract NFToken is IERC721, SupportsInterface { using AddressUtils for address; /** * @dev List of revert message codes. Implementing dApp should handle showing the correct message. * Based on 0xcert framework error codes. */ string constant ZERO_ADDRESS = "003001"; string constant NOT_VALID_NFT = "003002"; string constant NOT_OWNER_OR_OPERATOR = "003003"; string constant NOT_OWNER_APPROVED_OR_OPERATOR = "003004"; string constant NOT_ABLE_TO_RECEIVE_NFT = "003005"; string constant NFT_ALREADY_EXISTS = "003006"; string constant NOT_OWNER = "003007"; string constant IS_OWNER = "003008"; /** * @dev Magic value of a smart contract that can receive NFT. * Equal to: bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")). */ bytes4 internal constant MAGIC_ON_ERC721_RECEIVED = 0x150b7a02; /** * @dev A mapping from NFT ID to the address that owns it. */ mapping (uint256 => address) internal idToOwner; /** * @dev Mapping from NFT ID to approved address. */ mapping (uint256 => address) internal idToApproval; /** * @dev Mapping from owner address to count of their tokens. */ mapping (address => uint256) private ownerToNFTokenCount; /** * @dev Mapping from owner address to mapping of operator addresses. */ mapping (address => mapping (address => bool)) internal ownerToOperators; /** * @dev Guarantees that the msg.sender is an owner or operator of the given NFT. * @param _tokenId ID of the NFT to validate. */ modifier canOperate( uint256 _tokenId ) { address tokenOwner = idToOwner[_tokenId]; require( tokenOwner == msg.sender || ownerToOperators[tokenOwner][msg.sender], NOT_OWNER_OR_OPERATOR ); _; } /** * @dev Guarantees that the msg.sender is allowed to transfer NFT. * @param _tokenId ID of the NFT to transfer. */ modifier canTransfer( uint256 _tokenId ) { address tokenOwner = idToOwner[_tokenId]; require( tokenOwner == msg.sender || idToApproval[_tokenId] == msg.sender || ownerToOperators[tokenOwner][msg.sender], NOT_OWNER_APPROVED_OR_OPERATOR ); _; } /** * @dev Guarantees that _tokenId is a valid Token. * @param _tokenId ID of the NFT to validate. */ modifier validNFToken( uint256 _tokenId ) { require(idToOwner[_tokenId] != address(0), NOT_VALID_NFT); _; } /** * @dev Contract constructor. */ constructor() { supportedInterfaces[0x80ac58cd] = true; // ERC721 } /** * @dev Transfers the ownership of an NFT from one address to another address. This function can * be changed to payable. * @notice 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,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 calldata _data ) external override { _safeTransferFrom(_from, _to, _tokenId, _data); } /** * @dev Transfers the ownership of an NFT from one address to another address. This function can * be changed to payable. * @notice 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 override { _safeTransferFrom(_from, _to, _tokenId, ""); } /** * @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. This function can be changed to payable. * @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else * they may be permanently lost. * @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 override canTransfer(_tokenId) validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; require(tokenOwner == _from, NOT_OWNER); require(_to != address(0), ZERO_ADDRESS); _transfer(_to, _tokenId); } /** * @dev Set or reaffirm the approved address for an NFT. This function can be changed to payable. * @notice 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 Address to be approved for the given NFT ID. * @param _tokenId ID of the token to be approved. */ function approve( address _approved, uint256 _tokenId ) external override canOperate(_tokenId) validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; require(_approved != tokenOwner, IS_OWNER); idToApproval[_tokenId] = _approved; emit Approval(tokenOwner, _approved, _tokenId); } /** * @dev Enables or disables approval for a third party ("operator") to manage all of * `msg.sender`'s assets. It also emits the ApprovalForAll event. * @notice This works even if sender doesn't own any tokens at the time. * @param _operator Address to add to the set of authorized operators. * @param _approved True if the operators is approved, false to revoke approval. */ function setApprovalForAll( address _operator, bool _approved ) external override { ownerToOperators[msg.sender][_operator] = _approved; emit ApprovalForAll(msg.sender, _operator, _approved); } /** * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are * considered invalid, and this function throws for queries about the zero address. * @param _owner Address for whom to query the balance. * @return Balance of _owner. */ function balanceOf( address _owner ) external override view returns (uint256) { require(_owner != address(0), ZERO_ADDRESS); return _getOwnerNFTCount(_owner); } /** * @dev Returns the address of the owner of the NFT. NFTs assigned to the zero address are * considered invalid, and queries about them do throw. * @param _tokenId The identifier for an NFT. * @return _owner Address of _tokenId owner. */ function ownerOf( uint256 _tokenId ) external override view returns (address _owner) { _owner = idToOwner[_tokenId]; require(_owner != address(0), NOT_VALID_NFT); } /** * @dev Get the approved address for a single NFT. * @notice Throws if `_tokenId` is not a valid NFT. * @param _tokenId ID of the NFT to query the approval of. * @return Address that _tokenId is approved for. */ function getApproved( uint256 _tokenId ) external override view validNFToken(_tokenId) returns (address) { return idToApproval[_tokenId]; } /** * @dev Checks if `_operator` is an approved operator for `_owner`. * @param _owner The address that owns the NFTs. * @param _operator The address that acts on behalf of the owner. * @return True if approved for all, false otherwise. */ function isApprovedForAll( address _owner, address _operator ) external override view returns (bool) { return ownerToOperators[_owner][_operator]; } /** * @dev Actually performs the transfer. * @notice Does NO checks. * @param _to Address of a new owner. * @param _tokenId The NFT that is being transferred. */ function _transfer( address _to, uint256 _tokenId ) internal { address from = idToOwner[_tokenId]; _clearApproval(_tokenId); _removeNFToken(from, _tokenId); _addNFToken(_to, _tokenId); emit Transfer(from, _to, _tokenId); } /** * @dev Mints a new NFT. * @notice This is an internal function which should be called from user-implemented external * mint function. Its purpose is to show and properly initialize data structures when using this * implementation. * @param _to The address that will own the minted NFT. * @param _tokenId of the NFT to be minted by the msg.sender. */ function _mint( address _to, uint256 _tokenId ) internal virtual { require(_to != address(0), ZERO_ADDRESS); require(idToOwner[_tokenId] == address(0), NFT_ALREADY_EXISTS); _addNFToken(_to, _tokenId); emit Transfer(address(0), _to, _tokenId); } /** * @dev Burns a NFT. * @notice This is an internal function which should be called from user-implemented external burn * function. Its purpose is to show and properly initialize data structures when using this * implementation. Also, note that this burn implementation allows the minter to re-mint a burned * NFT. * @param _tokenId ID of the NFT to be burned. */ function _burn( uint256 _tokenId ) internal virtual validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; _clearApproval(_tokenId); _removeNFToken(tokenOwner, _tokenId); emit Transfer(tokenOwner, address(0), _tokenId); } /** * @dev Removes a NFT from owner. * @notice Use and override this function with caution. Wrong usage can have serious consequences. * @param _from Address from which we want to remove the NFT. * @param _tokenId Which NFT we want to remove. */ function _removeNFToken( address _from, uint256 _tokenId ) internal virtual { require(idToOwner[_tokenId] == _from, NOT_OWNER); ownerToNFTokenCount[_from] -= 1; delete idToOwner[_tokenId]; } /** * @dev Assigns a new NFT to owner. * @notice Use and override this function with caution. Wrong usage can have serious consequences. * @param _to Address to which we want to add the NFT. * @param _tokenId Which NFT we want to add. */ function _addNFToken( address _to, uint256 _tokenId ) internal virtual { require(idToOwner[_tokenId] == address(0), NFT_ALREADY_EXISTS); idToOwner[_tokenId] = _to; ownerToNFTokenCount[_to] += 1; } /** * @dev Helper function that gets NFT count of owner. This is needed for overriding in enumerable * extension to remove double storage (gas optimization) of owner NFT count. * @param _owner Address for whom to query the count. * @return Number of _owner NFTs. */ function _getOwnerNFTCount( address _owner ) internal virtual view returns (uint256) { return ownerToNFTokenCount[_owner]; } /** * @dev Actually perform the safeTransferFrom. * @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 ) private canTransfer(_tokenId) validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; require(tokenOwner == _from, NOT_OWNER); require(_to != address(0), ZERO_ADDRESS); _transfer(_to, _tokenId); if (_to.isContract()) { bytes4 retval = IERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data); require(retval == MAGIC_ON_ERC721_RECEIVED, NOT_ABLE_TO_RECEIVE_NFT); } } /** * @dev Clears the current approval of a given NFT ID. * @param _tokenId ID of the NFT to be transferred. */ function _clearApproval( uint256 _tokenId ) private { delete idToApproval[_tokenId]; } } // File: contracts/nft/erc721-enumerable.sol pragma solidity 0.8.0; /** * @dev Optional enumeration extension for ERC-721 non-fungible token standard. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface IERC721Enumerable { /** * @dev Returns a count of valid NFTs tracked by this contract, where each one of them has an * assigned and queryable owner not equal to the zero address. * @return Total supply of NFTs. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token identifier for the `_index`th NFT. Sort order is not specified. * @param _index A counter less than `totalSupply()`. * @return Token id. */ function tokenByIndex( uint256 _index ) external view returns (uint256); function mint( address _to, uint256 _tokenId ) external; /** * @dev Returns the token identifier for the `_index`th NFT assigned to `_owner`. Sort order is * not specified. It throws if `_index` >= `balanceOf(_owner)` or if `_owner` is the zero address, * representing invalid NFTs. * @param _owner An address where we are interested in NFTs owned by them. * @param _index A counter less than `balanceOf(_owner)`. * @return Token id. */ function tokenOfOwnerByIndex( address _owner, uint256 _index ) external view returns (uint256); } // File: contracts/nft/erc721-metadata.sol pragma solidity 0.8.0; /** * @dev Optional metadata extension for ERC-721 non-fungible token standard. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface IERC721Metadata { /** * @dev Returns a descriptive name for a collection of NFTs in this contract. * @return _name Representing name. */ function name() external view returns (string memory _name); /** * @dev Returns a abbreviated name for a collection of NFTs in this contract. * @return _symbol Representing symbol. */ function symbol() external view returns (string memory _symbol); /** * @dev Returns a distinct Uniform Resource Identifier (URI) for a given asset. It Throws if * `_tokenId` is not a valid NFT. URIs are defined in RFC3986. The URI may point to a JSON file * that conforms to the "ERC721 Metadata JSON Schema". * @return URI of _tokenId. */ function tokenURI(uint256 _tokenId) external view returns (string memory); } // File: contracts/nft/nf-token-enumerable.sol // SPDX-License-Identifier: MIT pragma solidity 0.8.0; /** * @dev Optional enumeration implementation for ERC-721 non-fungible token standard. */ contract ERC721 is NFToken, IERC721Enumerable, IERC721Metadata { modifier onlyFactory { require( (factoryAddr == msg.sender) || (owner == msg.sender), "onlyFactory"); _; } modifier onlyOwner { require(owner == msg.sender, "onlyOwner"); _; } /** * @dev A descriptive name for a collection of NFTs. */ string internal nftName; /** * @dev An abbreviated name for NFTokens. */ string internal nftSymbol; /** * @dev Mapping from NFT ID to metadata uri. */ mapping (uint256 => string) internal idToUri; /** * @dev List of revert message codes. Implementing dApp should handle showing the correct message. * Based on 0xcert framework error codes. */ string constant INVALID_INDEX = "005007"; /** * @dev Array of all NFT IDs. */ uint256[] internal tokens; address public factoryAddr; address public owner; /** * @dev Mapping from token ID to its index in global tokens array. */ mapping(uint256 => uint256) internal idToIndex; /** * @dev Mapping from owner to list of owned NFT IDs. */ mapping(address => uint256[]) internal ownerToIds; /** * @dev Mapping from NFT ID to its index in the owner tokens list. */ mapping(uint256 => uint256) internal idToOwnerIndex; /** * @dev Contract constructor. */ constructor(string memory _nftName, string memory _nftSymbol) { supportedInterfaces[0x780e9d63] = true; // ERC721Enumerable nftName = _nftName; nftSymbol = _nftSymbol; owner = msg.sender; } function setFactoryAddr(address _factoryAddr) external onlyOwner returns (bool) { factoryAddr = _factoryAddr; return true; } function getFactoryAddr() external view returns (address) { return factoryAddr; } /** * @dev Returns a descriptive name for a collection of NFTokens. * @return _name Representing name. */ function name() external override view returns (string memory _name) { _name = nftName; } /** * @dev Returns an abbreviated name for NFTokens. * @return _symbol Representing symbol. */ function symbol() external override view returns (string memory _symbol) { _symbol = nftSymbol; } /** * @dev A distinct URI (RFC 3986) for a given NFT. * @param _tokenId Id for which we want uri. * @return URI of _tokenId. */ function tokenURI( uint256 _tokenId ) external override view validNFToken(_tokenId) returns (string memory) { return idToUri[_tokenId]; } /** * @dev Returns the count of all existing NFTokens. * @return Total supply of NFTs. */ function totalSupply() external override view returns (uint256) { return tokens.length; } /** * @dev Returns NFT ID by its index. * @param _index A counter less than `totalSupply()`. * @return Token id. */ function tokenByIndex( uint256 _index ) external override view returns (uint256) { require(_index < tokens.length, INVALID_INDEX); return tokens[_index]; } /** * @dev returns the n-th NFT ID from a list of owner's tokens. * @param _owner Token owner's address. * @param _index Index number representing n-th token in owner's list of tokens. * @return Token id. */ function tokenOfOwnerByIndex( address _owner, uint256 _index ) external override view returns (uint256) { require(_index < ownerToIds[_owner].length, INVALID_INDEX); return ownerToIds[_owner][_index]; } function mint( address _to, uint256 _tokenId ) external onlyFactory override { _mint(_to, _tokenId); } /** * @dev Set a distinct URI (RFC 3986) for a given NFT ID. * @notice This is an internal function which should be called from user-implemented external * function. Its purpose is to show and properly initialize data structures when using this * implementation. * @param _tokenId Id for which we want URI. * @param _uri String representing RFC 3986 URI. */ function _setTokenUri( uint256 _tokenId, string memory _uri ) internal validNFToken(_tokenId) { idToUri[_tokenId] = _uri; } /** * @dev Mints a new NFT. * @notice This is an internal function which should be called from user-implemented external * mint function. Its purpose is to show and properly initialize data structures when using this * implementation. * @param _to The address that will own the minted NFT. * @param _tokenId of the NFT to be minted by the msg.sender. */ function _mint( address _to, uint256 _tokenId ) internal override virtual { super._mint(_to, _tokenId); tokens.push(_tokenId); idToIndex[_tokenId] = tokens.length - 1; } /** * @dev Burns a NFT. * @notice This is an internal function which should be called from user-implemented external * burn function. Its purpose is to show and properly initialize data structures when using this * implementation. Also, note that this burn implementation allows the minter to re-mint a burned * NFT. * @param _tokenId ID of the NFT to be burned. */ function _burn( uint256 _tokenId ) internal override virtual { super._burn(_tokenId); uint256 tokenIndex = idToIndex[_tokenId]; uint256 lastTokenIndex = tokens.length - 1; uint256 lastToken = tokens[lastTokenIndex]; tokens[tokenIndex] = lastToken; tokens.pop(); // This wastes gas if you are burning the last token but saves a little gas if you are not. idToIndex[lastToken] = tokenIndex; idToIndex[_tokenId] = 0; } /** * @dev Removes a NFT from an address. * @notice Use and override this function with caution. Wrong usage can have serious consequences. * @param _from Address from wich we want to remove the NFT. * @param _tokenId Which NFT we want to remove. */ function _removeNFToken( address _from, uint256 _tokenId ) internal override virtual { require(idToOwner[_tokenId] == _from, NOT_OWNER); delete idToOwner[_tokenId]; uint256 tokenToRemoveIndex = idToOwnerIndex[_tokenId]; uint256 lastTokenIndex = ownerToIds[_from].length - 1; if (lastTokenIndex != tokenToRemoveIndex) { uint256 lastToken = ownerToIds[_from][lastTokenIndex]; ownerToIds[_from][tokenToRemoveIndex] = lastToken; idToOwnerIndex[lastToken] = tokenToRemoveIndex; } ownerToIds[_from].pop(); } /** * @dev Assigns a new NFT to an address. * @notice Use and override this function with caution. Wrong usage can have serious consequences. * @param _to Address to wich we want to add the NFT. * @param _tokenId Which NFT we want to add. */ function _addNFToken( address _to, uint256 _tokenId ) internal override virtual { require(idToOwner[_tokenId] == address(0), NFT_ALREADY_EXISTS); idToOwner[_tokenId] = _to; ownerToIds[_to].push(_tokenId); idToOwnerIndex[_tokenId] = ownerToIds[_to].length - 1; } /** * @dev Helper function that gets NFT count of owner. This is needed for overriding in enumerable * extension to remove double storage(gas optimization) of owner NFT count. * @param _owner Address for whom to query the count. * @return Number of _owner NFTs. */ function _getOwnerNFTCount( address _owner ) internal override virtual view returns (uint256) { return ownerToIds[_owner].length; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_nftName","type":"string"},{"internalType":"string","name":"_nftSymbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factoryAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFactoryAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_factoryAddr","type":"address"}],"name":"setFactoryAddr","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162001b0f38038062001b0f83398101604081905262000034916200025f565b600060208181527f67be87c3ff9960ca1e9cfac5cab2ff4747269cf9ed20c9b7306235ac35a491c58054600160ff1991821681179092557ff7815fccbf112960a73756e185887fedcb9fc64ca0a16cc5923b7960ed780800805482168317905563780e9d6360e01b9093527f77b7bbe0e49b76487c9476b5db3354cf5270619d0037ccb899c2a4c4a75b43188054909316179091558251620000dd91600591908501906200010e565b508051620000f39060069060208401906200010e565b5050600a80546001600160a01b031916331790555062000319565b8280546200011c90620002c6565b90600052602060002090601f0160209004810192826200014057600085556200018b565b82601f106200015b57805160ff19168380011785556200018b565b828001600101855582156200018b579182015b828111156200018b5782518255916020019190600101906200016e565b50620001999291506200019d565b5090565b5b808211156200019957600081556001016200019e565b600082601f830112620001c5578081fd5b81516001600160401b0380821115620001e257620001e262000303565b6040516020601f8401601f19168201810183811183821017156200020a576200020a62000303565b604052838252858401810187101562000221578485fd5b8492505b8383101562000244578583018101518284018201529182019162000225565b838311156200025557848185840101525b5095945050505050565b6000806040838503121562000272578182fd5b82516001600160401b038082111562000289578384fd5b6200029786838701620001b4565b93506020850151915080821115620002ad578283fd5b50620002bc85828601620001b4565b9150509250929050565b600281046001821680620002db57607f821691505b60208210811415620002fd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6117e680620003296000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806342842e0e116100d857806395d89b411161008c578063b88d4fde11610066578063b88d4fde146102cf578063c87b56dd146102e2578063e985e9c5146102f557610177565b806395d89b41146102ac578063963671be146102b4578063a22cb465146102bc57610177565b80636352211e116100bd5780636352211e1461027e57806370a08231146102915780638da5cb5b146102a457610177565b806342842e0e146102585780634f6ccce71461026b57610177565b806318160ddd1161012f5780632b8174c2116101145780632b8174c21461022a5780632f745c591461023257806340c10f191461024557610177565b806318160ddd1461020257806323b872dd1461021757610177565b8063081812fc11610160578063081812fc146101ba578063095ea7b3146101da5780630b5a01fa146101ef57610177565b806301ffc9a71461017c57806306fdde03146101a5575b600080fd5b61018f61018a3660046115a7565b610308565b60405161019c9190611692565b60405180910390f35b6101ad610343565b60405161019c919061169d565b6101cd6101c83660046115df565b6103d5565b60405161019c9190611642565b6101ed6101e836600461157e565b610457565b005b61018f6101fd366004611420565b610627565b61020a610679565b60405161019c919061171e565b6101ed610225366004611473565b61067f565b6101cd61083a565b61020a61024036600461157e565b610849565b6101ed61025336600461157e565b6108ee565b6101ed610266366004611473565b61093b565b61020a6102793660046115df565b61095b565b6101cd61028c3660046115df565b6109d1565b61020a61029f366004611420565b610a29565b6101cd610a80565b6101ad610a8f565b6101cd610a9e565b6101ed6102ca366004611544565b610aad565b6101ed6102dd3660046114ae565b610b1c565b6101ad6102f03660046115df565b610b65565b61018f610303366004611441565b610c60565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b6060600580546103529061174a565b80601f016020809104026020016040519081016040528092919081815260200182805461037e9061174a565b80156103cb5780601f106103a0576101008083540402835291602001916103cb565b820191906000526020600020905b8154815290600101906020018083116103ae57829003601f168201915b5050505050905090565b6000818152600160209081526040808320548151808301909252600682526518181998181960d11b9282019290925283916001600160a01b03166104355760405162461bcd60e51b815260040161042c919061169d565b60405180910390fd5b506000838152600260205260409020546001600160a01b031691505b50919050565b60008181526001602052604090205481906001600160a01b0316338114806104a257506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b6040518060400160405280600681526020017f3030333030330000000000000000000000000000000000000000000000000000815250906104f65760405162461bcd60e51b815260040161042c919061169d565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b03166105505760405162461bcd60e51b815260040161042c919061169d565b50600084815260016020908152604091829020548251808401909352600683527f3030333030380000000000000000000000000000000000000000000000000000918301919091526001600160a01b03908116919087168214156105c75760405162461bcd60e51b815260040161042c919061169d565b5060008581526002602052604080822080546001600160a01b0319166001600160a01b038a811691821790925591518893918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050505050565b600a546000906001600160a01b031633146106545760405162461bcd60e51b815260040161042c906116e7565b50600980546001600160a01b0383166001600160a01b03199091161790556001919050565b60085490565b60008181526001602052604090205481906001600160a01b0316338114806106bd57506000828152600260205260409020546001600160a01b031633145b806106eb57506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b815250906107285760405162461bcd60e51b815260040161042c919061169d565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b03166107825760405162461bcd60e51b815260040161042c919061169d565b50600084815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b039081169190881682146107e15760405162461bcd60e51b815260040161042c919061169d565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b0387166108265760405162461bcd60e51b815260040161042c919061169d565b506108318686610c8e565b50505050505050565b6009546001600160a01b031690565b6001600160a01b0382166000908152600c60209081526040808320548151808301909252600682526530303530303760d01b928201929092529083106108a25760405162461bcd60e51b815260040161042c919061169d565b506001600160a01b0383166000908152600c602052604090208054839081106108db57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b6009546001600160a01b03163314806109115750600a546001600160a01b031633145b61092d5760405162461bcd60e51b815260040161042c906116b0565b6109378282610d09565b5050565b61095683838360405180602001604052806000815250610d69565b505050565b60085460408051808201909152600681526530303530303760d01b6020820152600091831061099d5760405162461bcd60e51b815260040161042c919061169d565b50600882815481106109bf57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091526001600160a01b031690816104515760405162461bcd60e51b815260040161042c919061169d565b60408051808201909152600681526530303330303160d01b60208201526000906001600160a01b038316610a705760405162461bcd60e51b815260040161042c919061169d565b50610a7a82611046565b92915050565b600a546001600160a01b031681565b6060600680546103529061174a565b6009546001600160a01b031681565b3360008181526004602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190610b10908590611692565b60405180910390a35050565b610b5e85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610d6992505050565b5050505050565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b9183019190915260609183916001600160a01b0316610bc05760405162461bcd60e51b815260040161042c919061169d565b5060008381526007602052604090208054610bda9061174a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c069061174a565b8015610c535780601f10610c2857610100808354040283529160200191610c53565b820191906000526020600020905b815481529060010190602001808311610c3657829003601f168201915b5050505050915050919050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6000818152600160205260409020546001600160a01b0316610caf82611061565b610cb9818361107f565b610cc38383611226565b81836001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b610d1382826112ea565b600880546001818101835560008390527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee39091018390559054610d569190611727565b6000918252600b60205260409091205550565b60008281526001602052604090205482906001600160a01b031633811480610da757506000828152600260205260409020546001600160a01b031633145b80610dd557506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b81525090610e125760405162461bcd60e51b815260040161042c919061169d565b50600084815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528591906001600160a01b0316610e6c5760405162461bcd60e51b815260040161042c919061169d565b50600085815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b03908116919089168214610ecb5760405162461bcd60e51b815260040161042c919061169d565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b038816610f105760405162461bcd60e51b815260040161042c919061169d565b50610f1b8787610c8e565b610f2d876001600160a01b03166113cd565b1561103c57604051630a85bd0160e11b81526000906001600160a01b0389169063150b7a0290610f679033908d908c908c90600401611656565b602060405180830381600087803b158015610f8157600080fd5b505af1158015610f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb991906115c3565b60408051808201909152600681527f303033303035000000000000000000000000000000000000000000000000000060208201529091507fffffffff000000000000000000000000000000000000000000000000000000008216630a85bd0160e11b146110395760405162461bcd60e51b815260040161042c919061169d565b50505b5050505050505050565b6001600160a01b03166000908152600c602052604090205490565b600090815260026020526040902080546001600160a01b0319169055565b600081815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b038481169116146110da5760405162461bcd60e51b815260040161042c919061169d565b50600081815260016020818152604080842080546001600160a01b0319169055600d8252808420546001600160a01b0387168552600c90925283205490929161112291611727565b90508181146111d5576001600160a01b0384166000908152600c6020526040812080548390811061116357634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600c6000876001600160a01b03166001600160a01b0316815260200190815260200160002084815481106111b557634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600d9052604090208290555b6001600160a01b0384166000908152600c6020526040902080548061120a57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b03161561127d5760405162461bcd60e51b815260040161042c919061169d565b50600081815260016020818152604080842080546001600160a01b0319166001600160a01b038816908117909155808552600c83529084208054808501825581865292852090920185905590925290546112d79190611727565b6000918252600d60205260409091205550565b60408051808201909152600681526530303330303160d01b60208201526001600160a01b03831661132e5760405162461bcd60e51b815260040161042c919061169d565b50600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b0316156113865760405162461bcd60e51b815260040161042c919061169d565b506113918282611226565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906114015750808214155b949350505050565b80356001600160a01b038116811461033e57600080fd5b600060208284031215611431578081fd5b61143a82611409565b9392505050565b60008060408385031215611453578081fd5b61145c83611409565b915061146a60208401611409565b90509250929050565b600080600060608486031215611487578081fd5b61149084611409565b925061149e60208501611409565b9150604084013590509250925092565b6000806000806000608086880312156114c5578081fd5b6114ce86611409565b94506114dc60208701611409565b935060408601359250606086013567ffffffffffffffff808211156114ff578283fd5b818801915088601f830112611512578283fd5b813581811115611520578384fd5b896020828501011115611531578384fd5b9699959850939650602001949392505050565b60008060408385031215611556578182fd5b61155f83611409565b915060208301358015158114611573578182fd5b809150509250929050565b60008060408385031215611590578182fd5b61159983611409565b946020939093013593505050565b6000602082840312156115b8578081fd5b813561143a8161177f565b6000602082840312156115d4578081fd5b815161143a8161177f565b6000602082840312156115f0578081fd5b5035919050565b60008151808452815b8181101561161c57602081850181015186830182015201611600565b8181111561162d5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261168860808301846115f7565b9695505050505050565b901515815260200190565b60006020825261143a60208301846115f7565b6020808252600b908201527f6f6e6c79466163746f7279000000000000000000000000000000000000000000604082015260600190565b60208082526009908201527f6f6e6c794f776e65720000000000000000000000000000000000000000000000604082015260600190565b90815260200190565b60008282101561174557634e487b7160e01b81526011600452602481fd5b500390565b60028104600182168061175e57607f821691505b6020821081141561045157634e487b7160e01b600052602260045260246000fd5b7fffffffff00000000000000000000000000000000000000000000000000000000811681146117ad57600080fd5b5056fea26469706673582212205dad40e1dc5618cf81ee8cec935f28910cdacf52a7b3be5331e1251ab929c05864736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000d4269466920506f736974696f6e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008504f534954494f4e000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101775760003560e01c806342842e0e116100d857806395d89b411161008c578063b88d4fde11610066578063b88d4fde146102cf578063c87b56dd146102e2578063e985e9c5146102f557610177565b806395d89b41146102ac578063963671be146102b4578063a22cb465146102bc57610177565b80636352211e116100bd5780636352211e1461027e57806370a08231146102915780638da5cb5b146102a457610177565b806342842e0e146102585780634f6ccce71461026b57610177565b806318160ddd1161012f5780632b8174c2116101145780632b8174c21461022a5780632f745c591461023257806340c10f191461024557610177565b806318160ddd1461020257806323b872dd1461021757610177565b8063081812fc11610160578063081812fc146101ba578063095ea7b3146101da5780630b5a01fa146101ef57610177565b806301ffc9a71461017c57806306fdde03146101a5575b600080fd5b61018f61018a3660046115a7565b610308565b60405161019c9190611692565b60405180910390f35b6101ad610343565b60405161019c919061169d565b6101cd6101c83660046115df565b6103d5565b60405161019c9190611642565b6101ed6101e836600461157e565b610457565b005b61018f6101fd366004611420565b610627565b61020a610679565b60405161019c919061171e565b6101ed610225366004611473565b61067f565b6101cd61083a565b61020a61024036600461157e565b610849565b6101ed61025336600461157e565b6108ee565b6101ed610266366004611473565b61093b565b61020a6102793660046115df565b61095b565b6101cd61028c3660046115df565b6109d1565b61020a61029f366004611420565b610a29565b6101cd610a80565b6101ad610a8f565b6101cd610a9e565b6101ed6102ca366004611544565b610aad565b6101ed6102dd3660046114ae565b610b1c565b6101ad6102f03660046115df565b610b65565b61018f610303366004611441565b610c60565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b6060600580546103529061174a565b80601f016020809104026020016040519081016040528092919081815260200182805461037e9061174a565b80156103cb5780601f106103a0576101008083540402835291602001916103cb565b820191906000526020600020905b8154815290600101906020018083116103ae57829003601f168201915b5050505050905090565b6000818152600160209081526040808320548151808301909252600682526518181998181960d11b9282019290925283916001600160a01b03166104355760405162461bcd60e51b815260040161042c919061169d565b60405180910390fd5b506000838152600260205260409020546001600160a01b031691505b50919050565b60008181526001602052604090205481906001600160a01b0316338114806104a257506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b6040518060400160405280600681526020017f3030333030330000000000000000000000000000000000000000000000000000815250906104f65760405162461bcd60e51b815260040161042c919061169d565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b03166105505760405162461bcd60e51b815260040161042c919061169d565b50600084815260016020908152604091829020548251808401909352600683527f3030333030380000000000000000000000000000000000000000000000000000918301919091526001600160a01b03908116919087168214156105c75760405162461bcd60e51b815260040161042c919061169d565b5060008581526002602052604080822080546001600160a01b0319166001600160a01b038a811691821790925591518893918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050505050565b600a546000906001600160a01b031633146106545760405162461bcd60e51b815260040161042c906116e7565b50600980546001600160a01b0383166001600160a01b03199091161790556001919050565b60085490565b60008181526001602052604090205481906001600160a01b0316338114806106bd57506000828152600260205260409020546001600160a01b031633145b806106eb57506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b815250906107285760405162461bcd60e51b815260040161042c919061169d565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b03166107825760405162461bcd60e51b815260040161042c919061169d565b50600084815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b039081169190881682146107e15760405162461bcd60e51b815260040161042c919061169d565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b0387166108265760405162461bcd60e51b815260040161042c919061169d565b506108318686610c8e565b50505050505050565b6009546001600160a01b031690565b6001600160a01b0382166000908152600c60209081526040808320548151808301909252600682526530303530303760d01b928201929092529083106108a25760405162461bcd60e51b815260040161042c919061169d565b506001600160a01b0383166000908152600c602052604090208054839081106108db57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b6009546001600160a01b03163314806109115750600a546001600160a01b031633145b61092d5760405162461bcd60e51b815260040161042c906116b0565b6109378282610d09565b5050565b61095683838360405180602001604052806000815250610d69565b505050565b60085460408051808201909152600681526530303530303760d01b6020820152600091831061099d5760405162461bcd60e51b815260040161042c919061169d565b50600882815481106109bf57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091526001600160a01b031690816104515760405162461bcd60e51b815260040161042c919061169d565b60408051808201909152600681526530303330303160d01b60208201526000906001600160a01b038316610a705760405162461bcd60e51b815260040161042c919061169d565b50610a7a82611046565b92915050565b600a546001600160a01b031681565b6060600680546103529061174a565b6009546001600160a01b031681565b3360008181526004602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190610b10908590611692565b60405180910390a35050565b610b5e85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610d6992505050565b5050505050565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b9183019190915260609183916001600160a01b0316610bc05760405162461bcd60e51b815260040161042c919061169d565b5060008381526007602052604090208054610bda9061174a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c069061174a565b8015610c535780601f10610c2857610100808354040283529160200191610c53565b820191906000526020600020905b815481529060010190602001808311610c3657829003601f168201915b5050505050915050919050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6000818152600160205260409020546001600160a01b0316610caf82611061565b610cb9818361107f565b610cc38383611226565b81836001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b610d1382826112ea565b600880546001818101835560008390527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee39091018390559054610d569190611727565b6000918252600b60205260409091205550565b60008281526001602052604090205482906001600160a01b031633811480610da757506000828152600260205260409020546001600160a01b031633145b80610dd557506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b81525090610e125760405162461bcd60e51b815260040161042c919061169d565b50600084815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528591906001600160a01b0316610e6c5760405162461bcd60e51b815260040161042c919061169d565b50600085815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b03908116919089168214610ecb5760405162461bcd60e51b815260040161042c919061169d565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b038816610f105760405162461bcd60e51b815260040161042c919061169d565b50610f1b8787610c8e565b610f2d876001600160a01b03166113cd565b1561103c57604051630a85bd0160e11b81526000906001600160a01b0389169063150b7a0290610f679033908d908c908c90600401611656565b602060405180830381600087803b158015610f8157600080fd5b505af1158015610f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb991906115c3565b60408051808201909152600681527f303033303035000000000000000000000000000000000000000000000000000060208201529091507fffffffff000000000000000000000000000000000000000000000000000000008216630a85bd0160e11b146110395760405162461bcd60e51b815260040161042c919061169d565b50505b5050505050505050565b6001600160a01b03166000908152600c602052604090205490565b600090815260026020526040902080546001600160a01b0319169055565b600081815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b038481169116146110da5760405162461bcd60e51b815260040161042c919061169d565b50600081815260016020818152604080842080546001600160a01b0319169055600d8252808420546001600160a01b0387168552600c90925283205490929161112291611727565b90508181146111d5576001600160a01b0384166000908152600c6020526040812080548390811061116357634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600c6000876001600160a01b03166001600160a01b0316815260200190815260200160002084815481106111b557634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600d9052604090208290555b6001600160a01b0384166000908152600c6020526040902080548061120a57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b03161561127d5760405162461bcd60e51b815260040161042c919061169d565b50600081815260016020818152604080842080546001600160a01b0319166001600160a01b038816908117909155808552600c83529084208054808501825581865292852090920185905590925290546112d79190611727565b6000918252600d60205260409091205550565b60408051808201909152600681526530303330303160d01b60208201526001600160a01b03831661132e5760405162461bcd60e51b815260040161042c919061169d565b50600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b0316156113865760405162461bcd60e51b815260040161042c919061169d565b506113918282611226565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906114015750808214155b949350505050565b80356001600160a01b038116811461033e57600080fd5b600060208284031215611431578081fd5b61143a82611409565b9392505050565b60008060408385031215611453578081fd5b61145c83611409565b915061146a60208401611409565b90509250929050565b600080600060608486031215611487578081fd5b61149084611409565b925061149e60208501611409565b9150604084013590509250925092565b6000806000806000608086880312156114c5578081fd5b6114ce86611409565b94506114dc60208701611409565b935060408601359250606086013567ffffffffffffffff808211156114ff578283fd5b818801915088601f830112611512578283fd5b813581811115611520578384fd5b896020828501011115611531578384fd5b9699959850939650602001949392505050565b60008060408385031215611556578182fd5b61155f83611409565b915060208301358015158114611573578182fd5b809150509250929050565b60008060408385031215611590578182fd5b61159983611409565b946020939093013593505050565b6000602082840312156115b8578081fd5b813561143a8161177f565b6000602082840312156115d4578081fd5b815161143a8161177f565b6000602082840312156115f0578081fd5b5035919050565b60008151808452815b8181101561161c57602081850181015186830182015201611600565b8181111561162d5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261168860808301846115f7565b9695505050505050565b901515815260200190565b60006020825261143a60208301846115f7565b6020808252600b908201527f6f6e6c79466163746f7279000000000000000000000000000000000000000000604082015260600190565b60208082526009908201527f6f6e6c794f776e65720000000000000000000000000000000000000000000000604082015260600190565b90815260200190565b60008282101561174557634e487b7160e01b81526011600452602481fd5b500390565b60028104600182168061175e57607f821691505b6020821081141561045157634e487b7160e01b600052602260045260246000fd5b7fffffffff00000000000000000000000000000000000000000000000000000000811681146117ad57600080fd5b5056fea26469706673582212205dad40e1dc5618cf81ee8cec935f28910cdacf52a7b3be5331e1251ab929c05864736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000d4269466920506f736974696f6e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008504f534954494f4e000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _nftName (string): BiFi Position
Arg [1] : _nftSymbol (string): POSITION
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [3] : 4269466920506f736974696f6e00000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 504f534954494f4e000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
25861:7865:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8520:172;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27832:120;;;:::i;:::-;;;;;;;:::i;18014:183::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15799:352::-;;;;;;:::i;:::-;;:::i;:::-;;27473:137;;;;;;:::i;:::-;;:::i;28641:120::-;;;:::i;:::-;;;;;;;:::i;15025:353::-;;;;;;:::i;:::-;;:::i;27616:89::-;;;:::i;29338:251::-;;;;;;:::i;:::-;;:::i;29595:131::-;;;;;;:::i;:::-;;:::i;14270:179::-;;;;;;:::i;:::-;;:::i;28902:199::-;;;;;;:::i;:::-;;:::i;17562:208::-;;;;;;:::i;:::-;;:::i;17088:204::-;;;;;;:::i;:::-;;:::i;26775:20::-;;;:::i;28068:128::-;;;:::i;26744:26::-;;;:::i;16562:232::-;;;;;;:::i;:::-;;:::i;13651:209::-;;;;;;:::i;:::-;;:::i;28349:181::-;;;;;;:::i;:::-;;:::i;18466:192::-;;;;;;:::i;:::-;;:::i;8520:172::-;8653:33;;;8630:4;8653:33;;;;;;;;;;;;;8520:172;;;;:::o;27832:120::-;27900:19;27939:7;27931:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27832:120;:::o;18014:183::-;18143:7;12583:19;;;:9;:19;;;;;;;;;12618:13;;;;;;;;;;;-1:-1:-1;;;12618:13:0;;;;;;;18119:8;;-1:-1:-1;;;;;12583:19:0;12575:57;;;;-1:-1:-1;;;12575:57:0;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;18169:22:0::1;::::0;;;:12:::1;:22;::::0;;;;;-1:-1:-1;;;;;18169:22:0::1;::::0;-1:-1:-1;12639:1:0::1;18014:183:::0;;;;:::o;15799:352::-;11767:18;11788:19;;;:9;:19;;;;;;15912:8;;-1:-1:-1;;;;;11788:19:0;11844:10;11830:24;;;:68;;-1:-1:-1;;;;;;11858:28:0;;;;;;:16;:28;;;;;;;;11887:10;11858:40;;;;;;;;;;11830:68;11907:21;;;;;;;;;;;;;;;;;11814:121;;;;;-1:-1:-1;;;11814:121:0;;;;;;;;:::i;:::-;-1:-1:-1;12614:1:0::1;12583:19:::0;;;:9:::1;:19;::::0;;;;;;;;;12618:13;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;12618:13:0;;::::1;::::0;;;;15940:8;;12618:13;-1:-1:-1;;;;;12583:19:0::1;12575:57;;;;-1:-1:-1::0;;;12575:57:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;15960:18:0::2;15981:19:::0;;;:9:::2;:19;::::0;;;;;;;;;16040:8;;;;::::2;::::0;;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;-1:-1:-1;;;;;15981:19:0;;::::2;::::0;16040:8;16015:23;::::2;::::0;::::2;;16007:42;;;;-1:-1:-1::0;;;16007:42:0::2;;;;;;;;:::i;:::-;-1:-1:-1::0;16058:22:0::2;::::0;;;:12:::2;:22;::::0;;;;;:34;;-1:-1:-1;;;;;;16058:34:0::2;-1:-1:-1::0;;;;;16058:34:0;;::::2;::::0;;::::2;::::0;;;16104:41;;16058:22;;16104:41;;::::2;::::0;::::2;::::0;::::2;12639:1;11942::::1;15799:352:::0;;;;:::o;27473:137::-;26100:5;;27547:4;;-1:-1:-1;;;;;26100:5:0;26109:10;26100:19;26092:41;;;;-1:-1:-1;;;26092:41:0;;;;;;;:::i;:::-;-1:-1:-1;27560:11:0::1;:26:::0;;-1:-1:-1;;;;;27560:26:0;::::1;-1:-1:-1::0;;;;;;27560:26:0;;::::1;;::::0;;;27473:137;;;:::o;28641:120::-;28742:6;:13;28641:120;:::o;15025:353::-;12147:18;12168:19;;;:9;:19;;;;;;15158:8;;-1:-1:-1;;;;;12168:19:0;12224:10;12210:24;;;:71;;-1:-1:-1;12245:22:0;;;;:12;:22;;;;;;-1:-1:-1;;;;;12245:22:0;12271:10;12245:36;12210:71;:122;;;-1:-1:-1;;;;;;12292:28:0;;;;;;:16;:28;;;;;;;;12321:10;12292:40;;;;;;;;;;12210:122;12341:30;;;;;;;;;;;;;-1:-1:-1;;;12341:30:0;;;12194:184;;;;;-1:-1:-1;;;12194:184:0;;;;;;;;:::i;:::-;-1:-1:-1;12614:1:0::1;12583:19:::0;;;:9:::1;:19;::::0;;;;;;;;;12618:13;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;12618:13:0;;::::1;::::0;;;;15186:8;;12618:13;-1:-1:-1;;;;;12583:19:0::1;12575:57;;;;-1:-1:-1::0;;;12575:57:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;15206:18:0::2;15227:19:::0;;;:9:::2;:19;::::0;;;;;;;;;15282:9;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;15282:9:0;;::::2;::::0;;;;-1:-1:-1;;;;;15227:19:0;;::::2;::::0;15282:9;15261:19;::::2;::::0;::::2;15253:39;;;;-1:-1:-1::0;;;15253:39:0::2;;;;;;;;:::i;:::-;-1:-1:-1::0;15326:12:0::2;::::0;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;15326:12:0::2;::::0;::::2;::::0;-1:-1:-1;;;;;15307:17:0;::::2;15299:40;;;;-1:-1:-1::0;;;15299:40:0::2;;;;;;;;:::i;:::-;;15348:24;15358:3;15363:8;15348:9;:24::i;:::-;12639:1;12385::::1;15025:353:::0;;;;;:::o;27616:89::-;27688:11;;-1:-1:-1;;;;;27688:11:0;27616:89;:::o;29338:251::-;-1:-1:-1;;;;;29502:18:0;;29466:7;29502:18;;;:10;:18;;;;;;;;:25;29529:13;;;;;;;;;;;-1:-1:-1;;;29529:13:0;;;;;;;;29493:34;;29485:58;;;;-1:-1:-1;;;29485:58:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;29557:18:0;;;;;;:10;:18;;;;;:26;;29576:6;;29557:26;;;;-1:-1:-1;;;29557:26:0;;;;;;;;;;;;;;;;;29550:33;;29338:251;;;;:::o;29595:131::-;25979:11;;-1:-1:-1;;;;;25979:11:0;25994:10;25979:25;;25978:52;;-1:-1:-1;26010:5:0;;-1:-1:-1;;;;;26010:5:0;26019:10;26010:19;25978:52;25969:77;;;;-1:-1:-1;;;25969:77:0;;;;;;;:::i;:::-;29700:20:::1;29706:3;29711:8;29700:5;:20::i;:::-;29595:131:::0;;:::o;14270:179::-;14400:43;14418:5;14425:3;14430:8;14400:43;;;;;;;;;;;;:17;:43::i;:::-;14270:179;;;:::o;28902:199::-;29038:6;:13;29053;;;;;;;;;;;;-1:-1:-1;;;29053:13:0;;;;29002:7;;29029:22;;29021:46;;;;-1:-1:-1;;;29021:46:0;;;;;;;;:::i;:::-;;29081:6;29088;29081:14;;;;;;-1:-1:-1;;;29081:14:0;;;;;;;;;;;;;;;;;29074:21;;28902:199;;;:::o;17562:208::-;17659:14;17694:19;;;:9;:19;;;;;;;;;;17750:13;;;;;;;;;;;-1:-1:-1;;;17750:13:0;;;;;;;-1:-1:-1;;;;;17694:19:0;;17728:20;17720:44;;;;-1:-1:-1;;;17720:44:0;;;;;;;;:::i;17088:204::-;17234:12;;;;;;;;;;;;-1:-1:-1;;;17234:12:0;;;;17185:7;;-1:-1:-1;;;;;17212:20:0;;17204:43;;;;-1:-1:-1;;;17204:43:0;;;;;;;;:::i;:::-;;17261:25;17279:6;17261:17;:25::i;:::-;17254:32;17088:204;-1:-1:-1;;17088:204:0:o;26775:20::-;;;-1:-1:-1;;;;;26775:20:0;;:::o;28068:128::-;28138:21;28181:9;28171:19;;;;;:::i;26744:26::-;;;-1:-1:-1;;;;;26744:26:0;;:::o;16562:232::-;16694:10;16677:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;16677:39:0;;;;;;;;;;;:51;;-1:-1:-1;;16677:51:0;;;;;;;16740:48;;16677:39;;16694:10;16740:48;;;;16677:51;;16740:48;:::i;:::-;;;;;;;;16562:232;;:::o;13651:209::-;13808:46;13826:5;13833:3;13838:8;13848:5;;13808:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13808:17:0;;-1:-1:-1;;;13808:46:0:i;:::-;13651:209;;;;;:::o;28349:181::-;12614:1;12583:19;;;:9;:19;;;;;;;;;;12618:13;;;;;;;;;;;-1:-1:-1;;;12618:13:0;;;;;;;28475;;28451:8;;-1:-1:-1;;;;;12583:19:0;12575:57;;;;-1:-1:-1;;;12575:57:0;;;;;;;;:::i;:::-;-1:-1:-1;28507:17:0::1;::::0;;;:7:::1;:17;::::0;;;;28500:24;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28349:181:::0;;;;:::o;18466:192::-;-1:-1:-1;;;;;18617:24:0;;;18594:4;18617:24;;;:16;:24;;;;;;;;:35;;;;;;;;;;;;;;;18466:192::o;18849:275::-;18938:12;18953:19;;;:9;:19;;;;;;-1:-1:-1;;;;;18953:19:0;18979:24;18963:8;18979:14;:24::i;:::-;19012:30;19027:4;19033:8;19012:14;:30::i;:::-;19049:26;19061:3;19066:8;19049:11;:26::i;:::-;19109:8;19104:3;-1:-1:-1;;;;;19089:29:0;19098:4;-1:-1:-1;;;;;19089:29:0;;;;;;;;;;;18849:275;;;:::o;30669:218::-;30781:26;30793:3;30798:8;30781:11;:26::i;:::-;30814:6;:21;;;;;;;;-1:-1:-1;30814:21:0;;;;;;;;;;30864:13;;:17;;30814:21;30864:17;:::i;:::-;30842:19;;;;:9;:19;;;;;;:39;-1:-1:-1;30669:218:0:o;22252:591::-;12147:18;12168:19;;;:9;:19;;;;;;22400:8;;-1:-1:-1;;;;;12168:19:0;12224:10;12210:24;;;:71;;-1:-1:-1;12245:22:0;;;;:12;:22;;;;;;-1:-1:-1;;;;;12245:22:0;12271:10;12245:36;12210:71;:122;;;-1:-1:-1;;;;;;12292:28:0;;;;;;:16;:28;;;;;;;;12321:10;12292:40;;;;;;;;;;12210:122;12341:30;;;;;;;;;;;;;-1:-1:-1;;;12341:30:0;;;12194:184;;;;;-1:-1:-1;;;12194:184:0;;;;;;;;:::i;:::-;-1:-1:-1;12614:1:0::1;12583:19:::0;;;:9:::1;:19;::::0;;;;;;;;;12618:13;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;12618:13:0;;::::1;::::0;;;;22428:8;;12618:13;-1:-1:-1;;;;;12583:19:0::1;12575:57;;;;-1:-1:-1::0;;;12575:57:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;22448:18:0::2;22469:19:::0;;;:9:::2;:19;::::0;;;;;;;;;22524:9;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;22524:9:0;;::::2;::::0;;;;-1:-1:-1;;;;;22469:19:0;;::::2;::::0;22524:9;22503:19;::::2;::::0;::::2;22495:39;;;;-1:-1:-1::0;;;22495:39:0::2;;;;;;;;:::i;:::-;-1:-1:-1::0;22568:12:0::2;::::0;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;22568:12:0::2;::::0;::::2;::::0;-1:-1:-1;;;;;22549:17:0;::::2;22541:40;;;;-1:-1:-1::0;;;22541:40:0::2;;;;;;;;:::i;:::-;;22590:24;22600:3;22605:8;22590:9;:24::i;:::-;22627:16;:3;-1:-1:-1::0;;;;;22627:14:0::2;;:16::i;:::-;22623:215;;;22675:78;::::0;-1:-1:-1;;;22675:78:0;;22659:13:::2;::::0;-1:-1:-1;;;;;22675:42:0;::::2;::::0;::::2;::::0;:78:::2;::::0;22718:10:::2;::::0;22730:5;;22737:8;;22747:5;;22675:78:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22806:23;::::0;;;;::::2;::::0;;;::::2;::::0;;::::2;;::::0;::::2;::::0;22659:94;;-1:-1:-1;22770:34:0;;::::2;-1:-1:-1::0;;;22770:34:0::2;22762:68;;;;-1:-1:-1::0;;;22762:68:0::2;;;;;;;;:::i;:::-;;22623:215;;12639:1;12385::::1;22252:591:::0;;;;;;:::o;33548:175::-;-1:-1:-1;;;;;33692:18:0;33666:7;33692:18;;;:10;:18;;;;;:25;;33548:175::o;22976:110::-;23058:22;;;;:12;:22;;;;;23051:29;;-1:-1:-1;;;;;;23051:29:0;;;22976:110::o;32064:602::-;32195:19;;;;:9;:19;;;;;;;;;;32225:9;;;;;;;;;;;-1:-1:-1;;;32225:9:0;;;;;;;-1:-1:-1;;;;;32195:28:0;;;:19;;:28;32187:48;;;;-1:-1:-1;;;32187:48:0;;;;;;;;:::i;:::-;-1:-1:-1;32249:19:0;;;;:9;:19;;;;;;;;32242:26;;-1:-1:-1;;;;;;32242:26:0;;;32306:14;:24;;;;;;-1:-1:-1;;;;;32362:17:0;;;;:10;:17;;;;;:24;32306;;32249:19;32362:28;;;:::i;:::-;32337:53;;32421:18;32403:14;:36;32399:230;;-1:-1:-1;;;;;32475:17:0;;32455;32475;;;:10;:17;;;;;:33;;32493:14;;32475:33;;;;-1:-1:-1;;;32475:33:0;;;;;;;;;;;;;;;;;32455:53;;32557:9;32517:10;:17;32528:5;-1:-1:-1;;;;;32517:17:0;-1:-1:-1;;;;;32517:17:0;;;;;;;;;;;;32535:18;32517:37;;;;;;-1:-1:-1;;;32517:37:0;;;;;;;;;;;;;;;;;;;;:49;;;;32575:25;;;:14;:25;;;;;:46;;;32399:230;-1:-1:-1;;;;;32637:17:0;;;;;;:10;:17;;;;;:23;;;;;-1:-1:-1;;;32637:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;32064:602;;;;:::o;32937:317::-;33094:1;33063:19;;;:9;:19;;;;;;;;;;33098:18;;;;;;;;;;;-1:-1:-1;;;33098:18:0;;;;;;;-1:-1:-1;;;;;33063:19:0;:33;33055:62;;;;-1:-1:-1;;;33055:62:0;;;;;;;;:::i;:::-;-1:-1:-1;33124:19:0;;;;:9;:19;;;;;;;;:25;;-1:-1:-1;;;;;;33124:25:0;-1:-1:-1;;;;;33124:25:0;;;;;;;;33158:15;;;:10;:15;;;;;:30;;;;;;;;;;;;;;;;;;;33222:15;;;:22;;:26;;33124:9;33222:26;:::i;:::-;33195:24;;;;:14;:24;;;;;;:53;-1:-1:-1;32937:317:0:o;19515:297::-;19640:12;;;;;;;;;;;;-1:-1:-1;;;19640:12:0;;;;-1:-1:-1;;;;;19621:17:0;;19613:40;;;;-1:-1:-1;;;19613:40:0;;;;;;;;:::i;:::-;-1:-1:-1;19699:1:0;19668:19;;;:9;:19;;;;;;;;;;19703:18;;;;;;;;;;;-1:-1:-1;;;19703:18:0;;;;;;;-1:-1:-1;;;;;19668:19:0;:33;19660:62;;;;-1:-1:-1;;;19660:62:0;;;;;;;;:::i;:::-;;19731:26;19743:3;19748:8;19731:11;:26::i;:::-;19771:35;;19797:8;;-1:-1:-1;;;;;19771:35:0;;;19788:1;;19771:35;;19788:1;;19771:35;19515:297;;:::o;9193:780::-;9276:17;9858:18;;9762:66;9924:15;;;;;:42;;;9955:11;9943:8;:23;;9924:42;9908:59;9193:780;-1:-1:-1;;;;9193:780:0:o;14:198:1:-;84:20;;-1:-1:-1;;;;;133:54:1;;123:65;;113:2;;202:1;199;192:12;217:198;;329:2;317:9;308:7;304:23;300:32;297:2;;;350:6;342;335:22;297:2;378:31;399:9;378:31;:::i;:::-;368:41;287:128;-1:-1:-1;;;287:128:1:o;420:274::-;;;549:2;537:9;528:7;524:23;520:32;517:2;;;570:6;562;555:22;517:2;598:31;619:9;598:31;:::i;:::-;588:41;;648:40;684:2;673:9;669:18;648:40;:::i;:::-;638:50;;507:187;;;;;:::o;699:342::-;;;;845:2;833:9;824:7;820:23;816:32;813:2;;;866:6;858;851:22;813:2;894:31;915:9;894:31;:::i;:::-;884:41;;944:40;980:2;969:9;965:18;944:40;:::i;:::-;934:50;;1031:2;1020:9;1016:18;1003:32;993:42;;803:238;;;;;:::o;1046:862::-;;;;;;1228:3;1216:9;1207:7;1203:23;1199:33;1196:2;;;1250:6;1242;1235:22;1196:2;1278:31;1299:9;1278:31;:::i;:::-;1268:41;;1328:40;1364:2;1353:9;1349:18;1328:40;:::i;:::-;1318:50;;1415:2;1404:9;1400:18;1387:32;1377:42;;1470:2;1459:9;1455:18;1442:32;1493:18;1534:2;1526:6;1523:14;1520:2;;;1555:6;1547;1540:22;1520:2;1598:6;1587:9;1583:22;1573:32;;1643:7;1636:4;1632:2;1628:13;1624:27;1614:2;;1670:6;1662;1655:22;1614:2;1715;1702:16;1741:2;1733:6;1730:14;1727:2;;;1762:6;1754;1747:22;1727:2;1812:7;1807:2;1798:6;1794:2;1790:15;1786:24;1783:37;1780:2;;;1838:6;1830;1823:22;1780:2;1186:722;;;;-1:-1:-1;1186:722:1;;-1:-1:-1;1874:2:1;1866:11;;1896:6;1186:722;-1:-1:-1;;;1186:722:1:o;1913:369::-;;;2039:2;2027:9;2018:7;2014:23;2010:32;2007:2;;;2060:6;2052;2045:22;2007:2;2088:31;2109:9;2088:31;:::i;:::-;2078:41;;2169:2;2158:9;2154:18;2141:32;2216:5;2209:13;2202:21;2195:5;2192:32;2182:2;;2243:6;2235;2228:22;2182:2;2271:5;2261:15;;;1997:285;;;;;:::o;2287:266::-;;;2416:2;2404:9;2395:7;2391:23;2387:32;2384:2;;;2437:6;2429;2422:22;2384:2;2465:31;2486:9;2465:31;:::i;:::-;2455:41;2543:2;2528:18;;;;2515:32;;-1:-1:-1;;;2374:179:1:o;2558:257::-;;2669:2;2657:9;2648:7;2644:23;2640:32;2637:2;;;2690:6;2682;2675:22;2637:2;2734:9;2721:23;2753:32;2779:5;2753:32;:::i;2820:261::-;;2942:2;2930:9;2921:7;2917:23;2913:32;2910:2;;;2963:6;2955;2948:22;2910:2;3000:9;2994:16;3019:32;3045:5;3019:32;:::i;3086:190::-;;3198:2;3186:9;3177:7;3173:23;3169:32;3166:2;;;3219:6;3211;3204:22;3166:2;-1:-1:-1;3247:23:1;;3156:120;-1:-1:-1;3156:120:1:o;3281:477::-;;3362:5;3356:12;3389:6;3384:3;3377:19;3414:3;3426:162;3440:6;3437:1;3434:13;3426:162;;;3502:4;3558:13;;;3554:22;;3548:29;3530:11;;;3526:20;;3519:59;3455:12;3426:162;;;3606:6;3603:1;3600:13;3597:2;;;3672:3;3665:4;3656:6;3651:3;3647:16;3643:27;3636:40;3597:2;-1:-1:-1;3740:2:1;3719:15;-1:-1:-1;;3715:29:1;3706:39;;;;3747:4;3702:50;;3332:426;-1:-1:-1;;3332:426:1:o;3763:226::-;-1:-1:-1;;;;;3927:55:1;;;;3909:74;;3897:2;3882:18;;3864:125::o;3994:513::-;;-1:-1:-1;;;;;4298:2:1;4290:6;4286:15;4275:9;4268:34;4350:2;4342:6;4338:15;4333:2;4322:9;4318:18;4311:43;;4390:6;4385:2;4374:9;4370:18;4363:34;4433:3;4428:2;4417:9;4413:18;4406:31;4454:47;4496:3;4485:9;4481:19;4473:6;4454:47;:::i;:::-;4446:55;4197:310;-1:-1:-1;;;;;;4197:310:1:o;4512:187::-;4677:14;;4670:22;4652:41;;4640:2;4625:18;;4607:92::o;4704:221::-;;4853:2;4842:9;4835:21;4873:46;4915:2;4904:9;4900:18;4892:6;4873:46;:::i;4930:335::-;5132:2;5114:21;;;5171:2;5151:18;;;5144:30;5210:13;5205:2;5190:18;;5183:41;5256:2;5241:18;;5104:161::o;5270:332::-;5472:2;5454:21;;;5511:1;5491:18;;;5484:29;5549:11;5544:2;5529:18;;5522:39;5593:2;5578:18;;5444:158::o;5607:177::-;5753:25;;;5741:2;5726:18;;5708:76::o;5789:285::-;;5857:1;5854;5851:8;5848:2;;;-1:-1:-1;;;5889:4:1;5882:91;5996:4;5993:1;5986:15;6027:4;6021;6014:18;5848:2;-1:-1:-1;6059:9:1;;5838:236::o;6079:437::-;6164:1;6154:12;;6211:1;6201:12;;;6222:2;;6276:4;6268:6;6264:17;6254:27;;6222:2;6329;6321:6;6318:14;6298:18;6295:38;6292:2;;;-1:-1:-1;;;6363:1:1;6356:88;6467:4;6464:1;6457:15;6495:4;6492:1;6485:15;6521:179;6608:66;6601:5;6597:78;6590:5;6587:89;6577:2;;6690:1;6687;6680:12;6577:2;6567:133;:::o
Swarm Source
ipfs://5dad40e1dc5618cf81ee8cec935f28910cdacf52a7b3be5331e1251ab929c058
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.