ETH Price: $3,107.71 (-0.98%)

Token

Asterix (ASTX)
 

Overview

Max Total Supply

7,344 ASTX

Holders

1,267

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
chadcote.eth
Balance
0 ASTX
0x2f09c6faa5db81c3ad18fe24acc8d5b455c8e0d8
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AsterixMirror

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 1000 runs

Other Settings:
paris EvmVersion, MIT license
File 1 of 2 : AsterixMirror.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import "./DN404Mirror.sol";

contract AsterixMirror is DN404Mirror {
    constructor() DN404Mirror(tx.origin) {}
}

File 2 of 2 : DN404Mirror.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @title DN404Mirror
/// @notice DN404Mirror provides an interface for interacting with the
/// NFT tokens in a DN404 implementation.
///
/// @author vectorized.eth (@optimizoor)
/// @author Quit (@0xQuit)
/// @author Michael Amadi (@AmadiMichaels)
/// @author cygaar (@0xCygaar)
/// @author Thomas (@0xjustadev)
/// @author Harrison (@PopPunkOnChain)
///
/// @dev Note:
/// - The ERC721 data is stored in the base DN404 contract.
contract DN404Mirror {
    /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
    /*                           EVENTS                           */
    /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/

    /// @dev Emitted when token `id` is transferred from `from` to `to`.
    event Transfer(address indexed from, address indexed to, uint256 indexed id);

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

    /// @dev Emitted when `owner` enables or disables `operator` to manage all of their tokens.
    event ApprovalForAll(address indexed owner, address indexed operator, bool isApproved);

    /// @dev `keccak256(bytes("Transfer(address,address,uint256)"))`.
    uint256 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

    /// @dev `keccak256(bytes("Approval(address,address,uint256)"))`.
    uint256 private constant _APPROVAL_EVENT_SIGNATURE =
        0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925;

    /// @dev `keccak256(bytes("ApprovalForAll(address,address,bool)"))`.
    uint256 private constant _APPROVAL_FOR_ALL_EVENT_SIGNATURE =
        0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31;

    /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
    /*                        CUSTOM ERRORS                       */
    /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/

    /// @dev Thrown when a call for an NFT function did not originate
    /// from the base DN404 contract.
    error SenderNotBase();

    /// @dev Thrown when a call for an NFT function did not originate from the deployer.
    error SenderNotDeployer();

    /// @dev Thrown when transferring an NFT to a contract address that
    /// does not implement ERC721Receiver.
    error TransferToNonERC721ReceiverImplementer();

    /// @dev Thrown when linking to the DN404 base contract and the
    /// DN404 supportsInterface check fails or the call reverts.
    error CannotLink();

    /// @dev Thrown when a linkMirrorContract call is received and the
    /// NFT mirror contract has already been linked to a DN404 base contract.
    error AlreadyLinked();

    /// @dev Thrown when retrieving the base DN404 address when a link has not
    /// been established.
    error NotLinked();

    /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
    /*                          STORAGE                           */
    /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/

    /// @dev Struct contain the NFT mirror contract storage.
    struct DN404NFTStorage {
        address baseERC20;
        address deployer;
    }

    /// @dev Returns a storage pointer for DN404NFTStorage.
    function _getDN404NFTStorage() internal pure virtual returns (DN404NFTStorage storage $) {
        /// @solidity memory-safe-assembly
        assembly {
            // `uint72(bytes9(keccak256("DN404_MIRROR_STORAGE")))`.
            $.slot := 0x3602298b8c10b01230 // Truncate to 9 bytes to reduce bytecode size.
        }
    }

    /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
    /*                        CONSTRUCTOR                         */
    /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/

    constructor(address deployer) {
        // For non-proxies, we will store the deployer so that only the deployer can
        // link the base contract.
        _getDN404NFTStorage().deployer = deployer;
    }

    /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
    /*                     ERC721 OPERATIONS                      */
    /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/

    /// @dev Returns the token collection name from the base DN404 contract.
    function name() public view virtual returns (string memory result) {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            result := mload(0x40)
            mstore(0x00, 0x06fdde03) // `name()`.
            if iszero(staticcall(gas(), base, 0x1c, 0x04, 0x00, 0x00)) {
                returndatacopy(result, 0x00, returndatasize())
                revert(result, returndatasize())
            }
            returndatacopy(0x00, 0x00, 0x20)
            returndatacopy(result, mload(0x00), 0x20)
            returndatacopy(add(result, 0x20), add(mload(0x00), 0x20), mload(result))
            mstore(0x40, add(add(result, 0x20), mload(result)))
        }
    }

    /// @dev Returns the token collection symbol from the base DN404 contract.
    function symbol() public view virtual returns (string memory result) {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            result := mload(0x40)
            mstore(0x00, 0x95d89b41) // `symbol()`.
            if iszero(staticcall(gas(), base, 0x1c, 0x04, 0x00, 0x00)) {
                returndatacopy(result, 0x00, returndatasize())
                revert(result, returndatasize())
            }
            returndatacopy(0x00, 0x00, 0x20)
            returndatacopy(result, mload(0x00), 0x20)
            returndatacopy(add(result, 0x20), add(mload(0x00), 0x20), mload(result))
            mstore(0x40, add(add(result, 0x20), mload(result)))
        }
    }

    /// @dev Returns the Uniform Resource Identifier (URI) for token `id` from
    /// the base DN404 contract.
    function tokenURI(uint256 id) public view virtual returns (string memory result) {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            result := mload(0x40)
            mstore(0x20, id)
            mstore(0x00, 0xc87b56dd) // `tokenURI()`.
            if iszero(staticcall(gas(), base, 0x1c, 0x24, 0x00, 0x00)) {
                returndatacopy(result, 0x00, returndatasize())
                revert(result, returndatasize())
            }
            returndatacopy(0x00, 0x00, 0x20)
            returndatacopy(result, mload(0x00), 0x20)
            returndatacopy(add(result, 0x20), add(mload(0x00), 0x20), mload(result))
            mstore(0x40, add(add(result, 0x20), mload(result)))
        }
    }

    /// @dev Returns the total NFT supply from the base DN404 contract.
    function totalSupply() public view virtual returns (uint256 result) {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, 0xe2c79281) // `totalNFTSupply()`.
            if iszero(
                and(gt(returndatasize(), 0x1f), staticcall(gas(), base, 0x1c, 0x04, 0x00, 0x20))
            ) {
                returndatacopy(mload(0x40), 0x00, returndatasize())
                revert(mload(0x40), returndatasize())
            }
            result := mload(0x00)
        }
    }

    /// @dev Returns the number of NFT tokens owned by `owner` from the base DN404 contract.
    ///
    /// Requirements:
    /// - `owner` must not be the zero address.
    function balanceOf(address owner) public view virtual returns (uint256 result) {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x20, shr(96, shl(96, owner)))
            mstore(0x00, 0xf5b100ea) // `balanceOfNFT(address)`.
            if iszero(
                and(gt(returndatasize(), 0x1f), staticcall(gas(), base, 0x1c, 0x24, 0x00, 0x20))
            ) {
                returndatacopy(mload(0x40), 0x00, returndatasize())
                revert(mload(0x40), returndatasize())
            }
            result := mload(0x00)
        }
    }

    /// @dev Returns the owner of token `id` from the base DN404 contract.
    ///
    /// Requirements:
    /// - Token `id` must exist.
    function ownerOf(uint256 id) public view virtual returns (address result) {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, 0x6352211e) // `ownerOf(uint256)`.
            mstore(0x20, id)
            if iszero(
                and(gt(returndatasize(), 0x1f), staticcall(gas(), base, 0x1c, 0x24, 0x00, 0x20))
            ) {
                returndatacopy(mload(0x40), 0x00, returndatasize())
                revert(mload(0x40), returndatasize())
            }
            result := shr(96, mload(0x0c))
        }
    }

    /// @dev Sets `spender` as the approved account to manage token `id` in
    /// the base DN404 contract.
    ///
    /// Requirements:
    /// - Token `id` must exist.
    /// - The caller must be the owner of the token,
    ///   or an approved operator for the token owner.
    ///
    /// Emits an {Approval} event.
    function approve(address spender, uint256 id) public virtual {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            spender := shr(96, shl(96, spender))
            let m := mload(0x40)
            mstore(0x00, 0xd10b6e0c) // `approveNFT(address,uint256,address)`.
            mstore(0x20, spender)
            mstore(0x40, id)
            mstore(0x60, caller())
            if iszero(
                and(
                    gt(returndatasize(), 0x1f),
                    call(gas(), base, callvalue(), 0x1c, 0x64, 0x00, 0x20)
                )
            ) {
                returndatacopy(m, 0x00, returndatasize())
                revert(m, returndatasize())
            }
            mstore(0x40, m) // Restore the free memory pointer.
            mstore(0x60, 0) // Restore the zero pointer.
            // Emit the {Approval} event.
            log4(codesize(), 0x00, _APPROVAL_EVENT_SIGNATURE, shr(96, mload(0x0c)), spender, id)
        }
    }

    /// @dev Returns the account approved to manage token `id` from
    /// the base DN404 contract.
    ///
    /// Requirements:
    /// - Token `id` must exist.
    function getApproved(uint256 id) public view virtual returns (address result) {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, 0x081812fc) // `getApproved(uint256)`.
            mstore(0x20, id)
            if iszero(
                and(gt(returndatasize(), 0x1f), staticcall(gas(), base, 0x1c, 0x24, 0x00, 0x20))
            ) {
                returndatacopy(mload(0x40), 0x00, returndatasize())
                revert(mload(0x40), returndatasize())
            }
            result := shr(96, mload(0x0c))
        }
    }

    /// @dev Sets whether `operator` is approved to manage the tokens of the caller in
    /// the base DN404 contract.
    ///
    /// Emits an {ApprovalForAll} event.
    function setApprovalForAll(address operator, bool approved) public virtual {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            operator := shr(96, shl(96, operator))
            let m := mload(0x40)
            mstore(0x00, 0x813500fc) // `setApprovalForAll(address,bool,address)`.
            mstore(0x20, operator)
            mstore(0x40, iszero(iszero(approved)))
            mstore(0x60, caller())
            if iszero(
                and(eq(mload(0x00), 1), call(gas(), base, callvalue(), 0x1c, 0x64, 0x00, 0x20))
            ) {
                returndatacopy(m, 0x00, returndatasize())
                revert(m, returndatasize())
            }
            // Emit the {ApprovalForAll} event.
            log3(0x40, 0x20, _APPROVAL_FOR_ALL_EVENT_SIGNATURE, caller(), operator)
            mstore(0x40, m) // Restore the free memory pointer.
            mstore(0x60, 0) // Restore the zero pointer.
        }
    }

    /// @dev Returns whether `operator` is approved to manage the tokens of `owner` from
    /// the base DN404 contract.
    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        returns (bool result)
    {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            let m := mload(0x40)
            mstore(0x40, operator)
            mstore(0x2c, shl(96, owner))
            mstore(0x0c, 0xe985e9c5000000000000000000000000) // `isApprovedForAll(address,address)`.
            if iszero(
                and(gt(returndatasize(), 0x1f), staticcall(gas(), base, 0x1c, 0x44, 0x00, 0x20))
            ) {
                returndatacopy(m, 0x00, returndatasize())
                revert(m, returndatasize())
            }
            mstore(0x40, m) // Restore the free memory pointer.
            result := iszero(iszero(mload(0x00)))
        }
    }

    /// @dev Transfers token `id` from `from` to `to`.
    ///
    /// Requirements:
    ///
    /// - Token `id` must exist.
    /// - `from` must be the owner of the token.
    /// - `to` cannot be the zero address.
    /// - The caller must be the owner of the token, or be approved to manage the token.
    ///
    /// Emits a {Transfer} event.
    function transferFrom(address from, address to, uint256 id) public virtual {
        address base = baseERC20();
        /// @solidity memory-safe-assembly
        assembly {
            from := shr(96, shl(96, from))
            to := shr(96, shl(96, to))
            let m := mload(0x40)
            mstore(m, 0xe5eb36c8) // `transferFromNFT(address,address,uint256,address)`.
            mstore(add(m, 0x20), from)
            mstore(add(m, 0x40), to)
            mstore(add(m, 0x60), id)
            mstore(add(m, 0x80), caller())
            if iszero(
                and(eq(mload(m), 1), call(gas(), base, callvalue(), add(m, 0x1c), 0x84, m, 0x20))
            ) {
                returndatacopy(m, 0x00, returndatasize())
                revert(m, returndatasize())
            }
            // Emit the {Transfer} event.
            log4(codesize(), 0x00, _TRANSFER_EVENT_SIGNATURE, from, to, id)
        }
    }

    /// @dev Equivalent to `safeTransferFrom(from, to, id, "")`.
    function safeTransferFrom(address from, address to, uint256 id) public payable virtual {
        transferFrom(from, to, id);

        if (_hasCode(to)) _checkOnERC721Received(from, to, id, "");
    }

    /// @dev Transfers token `id` from `from` to `to`.
    ///
    /// Requirements:
    ///
    /// - Token `id` must exist.
    /// - `from` must be the owner of the token.
    /// - `to` cannot be the zero address.
    /// - The caller must be the owner of the token, or be approved to manage the token.
    /// - 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 id, bytes calldata data)
        public
        virtual
    {
        transferFrom(from, to, id);

        if (_hasCode(to)) _checkOnERC721Received(from, to, id, data);
    }

    /// @dev Returns true if this contract implements the interface defined by `interfaceId`.
    /// See: https://eips.ethereum.org/EIPS/eip-165
    /// This function call must use less than 30000 gas.
    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool result) {
        /// @solidity memory-safe-assembly
        assembly {
            let s := shr(224, interfaceId)
            // ERC165: 0x01ffc9a7, ERC721: 0x80ac58cd, ERC721Metadata: 0x5b5e139f.
            result := or(or(eq(s, 0x01ffc9a7), eq(s, 0x80ac58cd)), eq(s, 0x5b5e139f))
        }
    }

    /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
    /*                     MIRROR OPERATIONS                      */
    /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/

    /// @dev Returns the address of the base DN404 contract.
    function baseERC20() public view virtual returns (address base) {
        base = _getDN404NFTStorage().baseERC20;
        if (base == address(0)) revert NotLinked();
    }

    /// @dev Fallback modifier to execute calls from the base DN404 contract.
    modifier dn404NFTFallback() virtual {
        DN404NFTStorage storage $ = _getDN404NFTStorage();

        uint256 fnSelector = _calldataload(0x00) >> 224;

        // `logTransfer(uint256[])`.
        if (fnSelector == 0x263c69d6) {
            if (msg.sender != $.baseERC20) revert SenderNotBase();
            /// @solidity memory-safe-assembly
            assembly {
                // When returndatacopy copies 1 or more out-of-bounds bytes, it reverts.
                returndatacopy(0x00, returndatasize(), lt(calldatasize(), 0x20))
                let o := add(0x24, calldataload(0x04)) // Packed logs offset.
                returndatacopy(0x00, returndatasize(), lt(calldatasize(), o))
                let end := add(o, shl(5, calldataload(sub(o, 0x20))))
                returndatacopy(0x00, returndatasize(), lt(calldatasize(), end))

                for {} iszero(eq(o, end)) { o := add(0x20, o) } {
                    let d := calldataload(o) // Entry in the packed logs.
                    let a := shr(96, d) // The address.
                    let b := and(1, d) // Whether it is a burn.
                    log4(
                        codesize(),
                        0x00,
                        _TRANSFER_EVENT_SIGNATURE,
                        mul(a, b),
                        mul(a, iszero(b)),
                        shr(168, shl(160, d))
                    )
                }
                mstore(0x00, 0x01)
                return(0x00, 0x20)
            }
        }
        // `linkMirrorContract(address)`.
        if (fnSelector == 0x0f4599e5) {
            if ($.deployer != address(0)) {
                if (address(uint160(_calldataload(0x04))) != $.deployer) {
                    revert SenderNotDeployer();
                }
            }
            if ($.baseERC20 != address(0)) revert AlreadyLinked();
            $.baseERC20 = msg.sender;
            /// @solidity memory-safe-assembly
            assembly {
                mstore(0x00, 0x01)
                return(0x00, 0x20)
            }
        }
        _;
    }

    /// @dev Fallback function for calls from base DN404 contract.
    fallback() external payable virtual dn404NFTFallback {}

    receive() external payable virtual {}

    /*«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-«-*/
    /*                      PRIVATE HELPERS                       */
    /*-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»-»*/

    /// @dev Returns the calldata value at `offset`.
    function _calldataload(uint256 offset) private pure returns (uint256 value) {
        /// @solidity memory-safe-assembly
        assembly {
            value := calldataload(offset)
        }
    }

    /// @dev Returns if `a` has bytecode of non-zero length.
    function _hasCode(address a) private view returns (bool result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := extcodesize(a) // Can handle dirty upper bits.
        }
    }

    /// @dev Perform a call to invoke {IERC721Receiver-onERC721Received} on `to`.
    /// Reverts if the target does not support the function correctly.
    function _checkOnERC721Received(address from, address to, uint256 id, bytes memory data)
        private
    {
        /// @solidity memory-safe-assembly
        assembly {
            // Prepare the calldata.
            let m := mload(0x40)
            let onERC721ReceivedSelector := 0x150b7a02
            mstore(m, onERC721ReceivedSelector)
            mstore(add(m, 0x20), caller()) // The `operator`, which is always `msg.sender`.
            mstore(add(m, 0x40), shr(96, shl(96, from)))
            mstore(add(m, 0x60), id)
            mstore(add(m, 0x80), 0x80)
            let n := mload(data)
            mstore(add(m, 0xa0), n)
            if n { pop(staticcall(gas(), 4, add(data, 0x20), n, add(m, 0xc0), n)) }
            // Revert if the call reverts.
            if iszero(call(gas(), to, 0, add(m, 0x1c), add(n, 0xa4), m, 0x20)) {
                if returndatasize() {
                    // Bubble up the revert if the call reverts.
                    returndatacopy(m, 0x00, returndatasize())
                    revert(m, returndatasize())
                }
            }
            // Load the returndata and compare it.
            if iszero(eq(mload(m), shl(224, onERC721ReceivedSelector))) {
                mstore(0x00, 0xd1a57ed6) // `TransferToNonERC721ReceiverImplementer()`.
                revert(0x1c, 0x04)
            }
        }
    }
}

Settings
{
  "remappings": [
    "forge-std/=test/utils/forge-std/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "solady/=lib/solady/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyLinked","type":"error"},{"inputs":[],"name":"CannotLink","type":"error"},{"inputs":[],"name":"NotLinked","type":"error"},{"inputs":[],"name":"SenderNotBase","type":"error"},{"inputs":[],"name":"SenderNotDeployer","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","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":"isApproved","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseERC20","outputs":[{"internalType":"address","name":"base","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"result","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":"result","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"result","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"result","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"result","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"result","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50683602298b8c10b0123180546001600160a01b03191632179055610ca98061003a6000396000f3fe6080604052600436106100ec5760003560e01c80636352211e1161008a578063a22cb46511610059578063a22cb4651461044b578063b88d4fde1461046b578063c87b56dd1461048b578063e985e9c5146104ab576100f3565b80636352211e146103e157806370a082311461040157806395d89b411461042157806397e5311c14610436576100f3565b8063095ea7b3116100c6578063095ea7b31461036b57806318160ddd1461038b57806323b872dd146103ae57806342842e0e146103ce576100f3565b806301ffc9a7146102bf57806306fdde0314610311578063081812fc14610333576100f3565b366100f357005b683602298b8c10b0123060003560e01c63263c69d68190036101d85781546001600160a01b03163314610152576040517f363cb31200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602036103d60003e6004356024018036103d60003e602081033560051b81018036103d60003e5b8082146101cb5781358060601c816001168260a01b60a81c811583028284027fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600038a4505050816020019150610179565b5050600160005260206000f35b80630f4599e5036102bd5760018201546001600160a01b0316156102475760018201546001600160a01b03166004356001600160a01b031614610247576040517fc59ec47a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81546001600160a01b031615610289576040517fbf656a4600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317825560016000908152602090f35b005b3480156102cb57600080fd5b506102fc6102da366004610a1b565b6301ffc9a760e09190911c9081146380ac58cd821417635b5e139f9091141790565b60405190151581526020015b60405180910390f35b34801561031d57600080fd5b506103266104cb565b6040516103089190610a64565b34801561033f57600080fd5b5061035361034e366004610ab3565b610525565b6040516001600160a01b039091168152602001610308565b34801561037757600080fd5b506102bd610386366004610ae8565b61056c565b34801561039757600080fd5b506103a06105f2565b604051908152602001610308565b3480156103ba57600080fd5b506102bd6103c9366004610b12565b610630565b6102bd6103dc366004610b12565b6106bf565b3480156103ed57600080fd5b506103536103fc366004610ab3565b6106f1565b34801561040d57600080fd5b506103a061041c366004610b4e565b61072b565b34801561042d57600080fd5b50610326610775565b34801561044257600080fd5b506103536107a7565b34801561045757600080fd5b506102bd610466366004610b69565b6107f5565b34801561047757600080fd5b506102bd610486366004610ba5565b610878565b34801561049757600080fd5b506103266104a6366004610ab3565b6108d3565b3480156104b757600080fd5b506102fc6104c6366004610c40565b610933565b606060006104d76107a7565b905060405191506306fdde036000526000806004601c845afa6104fd573d6000833e3d82fd5b60206000803e6020600051833e8151602060005101602084013e815160208301016040525090565b6000806105306107a7565b905063081812fc60005282602052602060006024601c845afa601f3d111661055f573d60006040513e3d604051fd5b5050600c5160601c919050565b60006105766107a7565b90508260601b60601c925060405163d10b6e0c600052836020528260405233606052602060006064601c34865af1601f3d11166105b6573d6000823e3d81fd5b806040525060006060528183600c5160601c7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600038a4505050565b6000806105fd6107a7565b905063e2c79281600052602060006004601c845afa601f3d1116610628573d60006040513e3d604051fd5b505060005190565b600061063a6107a7565b90508360601b60601c93508260601b60601c925060405163e5eb36c881528460208201528360408201528260608201523360808201526020816084601c840134865af1600182511416610690573d6000823e3d81fd5b508183857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600038a450505050565b6106ca838383610630565b813b156106ec576106ec8383836040518060200160405280600081525061098f565b505050565b6000806106fc6107a7565b9050636352211e60005282602052602060006024601c845afa601f3d111661055f573d60006040513e3d604051fd5b6000806107366107a7565b90508260601b60601c60205263f5b100ea600052602060006024601c845afa601f3d111661076b573d60006040513e3d604051fd5b5050600051919050565b606060006107816107a7565b905060405191506395d89b416000526000806004601c845afa6104fd573d6000833e3d82fd5b683602298b8c10b01230546001600160a01b0316806107f2576040517f5b2a47ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90565b60006107ff6107a7565b90508260601b60601c925060405163813500fc6000528360205282151560405233606052602060006064601c34865af160016000511416610843573d6000823e3d81fd5b83337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160206040a36040525050600060605250565b610883858585610630565b833b156108cc576108cc85858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061098f92505050565b5050505050565b606060006108df6107a7565b905060405191508260205263c87b56dd6000526000806024601c845afa610909573d6000833e3d82fd5b60206000803e6020600051833e8151602060005101602084013e8151602083010160405250919050565b60008061093e6107a7565b9050604051836040528460601b602c526fe985e9c5000000000000000000000000600c52602060006044601c855afa601f3d111661097f573d6000823e3d81fd5b6040525050600051151592915050565b60405163150b7a028082523360208301528560601b60601c604083015283606083015260808083015282518060a084015280156109d6578060c08401826020870160045afa505b60208360a48301601c860160008a5af16109f9573d156109f9573d6000843e3d83fd5b508060e01b825114610a135763d1a57ed66000526004601cfd5b505050505050565b600060208284031215610a2d57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a5d57600080fd5b9392505050565b60006020808352835180602085015260005b81811015610a9257858101830151858201604001528201610a76565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215610ac557600080fd5b5035919050565b80356001600160a01b0381168114610ae357600080fd5b919050565b60008060408385031215610afb57600080fd5b610b0483610acc565b946020939093013593505050565b600080600060608486031215610b2757600080fd5b610b3084610acc565b9250610b3e60208501610acc565b9150604084013590509250925092565b600060208284031215610b6057600080fd5b610a5d82610acc565b60008060408385031215610b7c57600080fd5b610b8583610acc565b915060208301358015158114610b9a57600080fd5b809150509250929050565b600080600080600060808688031215610bbd57600080fd5b610bc686610acc565b9450610bd460208701610acc565b935060408601359250606086013567ffffffffffffffff80821115610bf857600080fd5b818801915088601f830112610c0c57600080fd5b813581811115610c1b57600080fd5b896020828501011115610c2d57600080fd5b9699959850939650602001949392505050565b60008060408385031215610c5357600080fd5b610c5c83610acc565b9150610c6a60208401610acc565b9050925092905056fea2646970667358221220a83e4e77099b969a4e7ed1255be25c95e2133a4bb30b7ca382f26bfb4c4d86e164736f6c63430008180033

Deployed Bytecode

0x6080604052600436106100ec5760003560e01c80636352211e1161008a578063a22cb46511610059578063a22cb4651461044b578063b88d4fde1461046b578063c87b56dd1461048b578063e985e9c5146104ab576100f3565b80636352211e146103e157806370a082311461040157806395d89b411461042157806397e5311c14610436576100f3565b8063095ea7b3116100c6578063095ea7b31461036b57806318160ddd1461038b57806323b872dd146103ae57806342842e0e146103ce576100f3565b806301ffc9a7146102bf57806306fdde0314610311578063081812fc14610333576100f3565b366100f357005b683602298b8c10b0123060003560e01c63263c69d68190036101d85781546001600160a01b03163314610152576040517f363cb31200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602036103d60003e6004356024018036103d60003e602081033560051b81018036103d60003e5b8082146101cb5781358060601c816001168260a01b60a81c811583028284027fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600038a4505050816020019150610179565b5050600160005260206000f35b80630f4599e5036102bd5760018201546001600160a01b0316156102475760018201546001600160a01b03166004356001600160a01b031614610247576040517fc59ec47a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81546001600160a01b031615610289576040517fbf656a4600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317825560016000908152602090f35b005b3480156102cb57600080fd5b506102fc6102da366004610a1b565b6301ffc9a760e09190911c9081146380ac58cd821417635b5e139f9091141790565b60405190151581526020015b60405180910390f35b34801561031d57600080fd5b506103266104cb565b6040516103089190610a64565b34801561033f57600080fd5b5061035361034e366004610ab3565b610525565b6040516001600160a01b039091168152602001610308565b34801561037757600080fd5b506102bd610386366004610ae8565b61056c565b34801561039757600080fd5b506103a06105f2565b604051908152602001610308565b3480156103ba57600080fd5b506102bd6103c9366004610b12565b610630565b6102bd6103dc366004610b12565b6106bf565b3480156103ed57600080fd5b506103536103fc366004610ab3565b6106f1565b34801561040d57600080fd5b506103a061041c366004610b4e565b61072b565b34801561042d57600080fd5b50610326610775565b34801561044257600080fd5b506103536107a7565b34801561045757600080fd5b506102bd610466366004610b69565b6107f5565b34801561047757600080fd5b506102bd610486366004610ba5565b610878565b34801561049757600080fd5b506103266104a6366004610ab3565b6108d3565b3480156104b757600080fd5b506102fc6104c6366004610c40565b610933565b606060006104d76107a7565b905060405191506306fdde036000526000806004601c845afa6104fd573d6000833e3d82fd5b60206000803e6020600051833e8151602060005101602084013e815160208301016040525090565b6000806105306107a7565b905063081812fc60005282602052602060006024601c845afa601f3d111661055f573d60006040513e3d604051fd5b5050600c5160601c919050565b60006105766107a7565b90508260601b60601c925060405163d10b6e0c600052836020528260405233606052602060006064601c34865af1601f3d11166105b6573d6000823e3d81fd5b806040525060006060528183600c5160601c7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600038a4505050565b6000806105fd6107a7565b905063e2c79281600052602060006004601c845afa601f3d1116610628573d60006040513e3d604051fd5b505060005190565b600061063a6107a7565b90508360601b60601c93508260601b60601c925060405163e5eb36c881528460208201528360408201528260608201523360808201526020816084601c840134865af1600182511416610690573d6000823e3d81fd5b508183857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600038a450505050565b6106ca838383610630565b813b156106ec576106ec8383836040518060200160405280600081525061098f565b505050565b6000806106fc6107a7565b9050636352211e60005282602052602060006024601c845afa601f3d111661055f573d60006040513e3d604051fd5b6000806107366107a7565b90508260601b60601c60205263f5b100ea600052602060006024601c845afa601f3d111661076b573d60006040513e3d604051fd5b5050600051919050565b606060006107816107a7565b905060405191506395d89b416000526000806004601c845afa6104fd573d6000833e3d82fd5b683602298b8c10b01230546001600160a01b0316806107f2576040517f5b2a47ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90565b60006107ff6107a7565b90508260601b60601c925060405163813500fc6000528360205282151560405233606052602060006064601c34865af160016000511416610843573d6000823e3d81fd5b83337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160206040a36040525050600060605250565b610883858585610630565b833b156108cc576108cc85858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061098f92505050565b5050505050565b606060006108df6107a7565b905060405191508260205263c87b56dd6000526000806024601c845afa610909573d6000833e3d82fd5b60206000803e6020600051833e8151602060005101602084013e8151602083010160405250919050565b60008061093e6107a7565b9050604051836040528460601b602c526fe985e9c5000000000000000000000000600c52602060006044601c855afa601f3d111661097f573d6000823e3d81fd5b6040525050600051151592915050565b60405163150b7a028082523360208301528560601b60601c604083015283606083015260808083015282518060a084015280156109d6578060c08401826020870160045afa505b60208360a48301601c860160008a5af16109f9573d156109f9573d6000843e3d83fd5b508060e01b825114610a135763d1a57ed66000526004601cfd5b505050505050565b600060208284031215610a2d57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a5d57600080fd5b9392505050565b60006020808352835180602085015260005b81811015610a9257858101830151858201604001528201610a76565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215610ac557600080fd5b5035919050565b80356001600160a01b0381168114610ae357600080fd5b919050565b60008060408385031215610afb57600080fd5b610b0483610acc565b946020939093013593505050565b600080600060608486031215610b2757600080fd5b610b3084610acc565b9250610b3e60208501610acc565b9150604084013590509250925092565b600060208284031215610b6057600080fd5b610a5d82610acc565b60008060408385031215610b7c57600080fd5b610b8583610acc565b915060208301358015158114610b9a57600080fd5b809150509250929050565b600080600080600060808688031215610bbd57600080fd5b610bc686610acc565b9450610bd460208701610acc565b935060408601359250606086013567ffffffffffffffff80821115610bf857600080fd5b818801915088601f830112610c0c57600080fd5b813581811115610c1b57600080fd5b896020828501011115610c2d57600080fd5b9699959850939650602001949392505050565b60008060408385031215610c5357600080fd5b610c5c83610acc565b9150610c6a60208401610acc565b9050925092905056fea2646970667358221220a83e4e77099b969a4e7ed1255be25c95e2133a4bb30b7ca382f26bfb4c4d86e164736f6c63430008180033

Deployed Bytecode Sourcemap

86:85:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3798:20:1;16997:25;19684:20;17101:3;17078:26;17170:10;17156:24;;;17152:1306;;17214:11;;-1:-1:-1;;;;;17214:11:1;17200:10;:25;17196:53;;17234:15;;;;;;;;;;;;;;17196:53;17484:4;17468:14;17465:24;17447:16;17441:4;17426:64;17539:4;17526:18;17520:4;17516:29;17643:1;17627:14;17624:21;17606:16;17600:4;17585:61;17708:4;17705:1;17701:12;17688:26;17685:1;17681:34;17678:1;17674:42;17791:3;17775:14;17772:23;17754:16;17748:4;17733:63;17814:550;17834:3;17831:1;17828:10;17814:550;;17906:1;17893:15;17975:1;17971:2;17967:10;18030:1;18027;18023:9;18321:1;18316:3;18312:11;18307:3;18303:21;18274:1;18267:9;18264:1;18260:17;18232:1;18229;18225:9;18174:25;18144:4;18108:10;18078:268;;;;17857:1;17851:4;17847:12;17842:17;;17814:550;;;17818:2;;18394:4;18388;18381:18;18429:4;18423;18416:18;17152:1306;18513:10;18527;18513:24;18509:499;;18557:10;;;;-1:-1:-1;;;;;18557:10:1;:24;18553:186;;18646:10;;;;-1:-1:-1;;;;;18646:10:1;18635:4;19684:20;-1:-1:-1;;;;;18605:51:1;;18601:124;;18687:19;;;;;;;;;;;;;;18601:124;18756:11;;-1:-1:-1;;;;;18756:11:1;:25;18752:53;;18790:15;;;;;;;;;;;;;;18752:53;18819:24;;;;18833:10;18819:24;;;;:11;18931:18;;;18979:4;;18966:18;18509:499;16987:2038;15981:380;;;;;;;;;;-1:-1:-1;15981:380:1;;;;;:::i;:::-;16294:10;16159:3;16155:21;;;;16288:17;;;16313:10;16307:17;;16285:40;16333:10;16327:17;;;16282:63;;15981:380;;;;516:14:2;;509:22;491:41;;479:2;464:18;15981:380:1;;;;;;;;4715:713;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10775:601::-;;;;;;;;;;-1:-1:-1;10775:601:1;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1445:55:2;;;1427:74;;1415:2;1400:18;10775:601:1;1281:226:2;9593:1012:1;;;;;;;;;;-1:-1:-1;9593:1012:1;;;;;:::i;:::-;;:::i;7186:549::-;;;;;;;;;;;;;:::i;:::-;;;2118:25:2;;;2106:2;2091:18;7186:549:1;1972:177:2;13844:921:1;;;;;;;;;;-1:-1:-1;13844:921:1;;;;;:::i;:::-;;:::i;14836:199::-;;;;;;:::i;:::-;;:::i;8671:593::-;;;;;;;;;;-1:-1:-1;8671:593:1;;;;;:::i;:::-;;:::i;7912:615::-;;;;;;;;;;-1:-1:-1;7912:615:1;;;;;:::i;:::-;;:::i;5513:717::-;;;;;;;;;;;;;:::i;16696:171::-;;;;;;;;;;;;;:::i;11551:982::-;;;;;;;;;;-1:-1:-1;11551:982:1;;;;;:::i;:::-;;:::i;15538:234::-;;;;;;;;;;-1:-1:-1;15538:234:1;;;;;:::i;:::-;;:::i;6348:760::-;;;;;;;;;;-1:-1:-1;6348:760:1;;;;;:::i;:::-;;:::i;12661:828::-;;;;;;;;;;-1:-1:-1;12661:828:1;;;;;:::i;:::-;;:::i;4715:713::-;4760:20;4792:12;4807:11;:9;:11::i;:::-;4792:26;;4910:4;4904:11;4894:21;;4941:10;4935:4;4928:24;5030:4;5024;5018;5012;5006;4999:5;4988:47;4978:186;;5084:16;5078:4;5070:6;5055:46;5133:16;5125:6;5118:32;4978:186;5204:4;5198;5192;5177:32;5258:4;5251;5245:11;5237:6;5222:41;5340:6;5334:13;5327:4;5320;5314:11;5310:22;5303:4;5295:6;5291:17;5276:72;5403:6;5397:13;5390:4;5382:6;5378:17;5374:37;5368:4;5361:51;4880:542;4715:713;:::o;10775:601::-;10837:14;10863:12;10878:11;:9;:11::i;:::-;10863:26;;10978:10;10972:4;10965:24;11042:2;11036:4;11029:16;11159:4;11153;11147;11141;11135;11128:5;11117:47;11110:4;11092:16;11089:26;11085:80;11058:259;;11232:16;11226:4;11219;11213:11;11198:51;11286:16;11279:4;11273:11;11266:37;11058:259;-1:-1:-1;;11354:4:1;11348:11;11344:2;11340:20;;10775:601;-1:-1:-1;10775:601:1:o;9593:1012::-;9664:12;9679:11;:9;:11::i;:::-;9664:26;;9793:7;9789:2;9785:16;9781:2;9777:25;9766:36;;9830:4;9824:11;9861:10;9855:4;9848:24;9940:7;9934:4;9927:21;9974:2;9968:4;9961:16;10003:8;9997:4;9990:22;10174:4;10168;10162;10156;10143:11;10137:4;10130:5;10125:54;10098:4;10080:16;10077:26;10052:145;10025:304;;10254:16;10248:4;10245:1;10230:41;10298:16;10295:1;10288:27;10025:304;10355:1;10349:4;10342:15;;10419:1;10413:4;10406:15;10586:2;10577:7;10569:4;10563:11;10559:2;10555:20;10528:25;10522:4;10510:10;10505:84;9752:847;9593:1012;;:::o;7186:549::-;7238:14;7264:12;7279:11;:9;:11::i;:::-;7264:26;;7379:10;7373:4;7366:24;7527:4;7521;7515;7509;7503;7496:5;7485:47;7478:4;7460:16;7457:26;7453:80;7426:259;;7600:16;7594:4;7587;7581:11;7566:51;7654:16;7647:4;7641:11;7634:37;7426:259;-1:-1:-1;;7714:4:1;7708:11;;7186:549::o;13844:921::-;13929:12;13944:11;:9;:11::i;:::-;13929:26;;14055:4;14051:2;14047:13;14043:2;14039:22;14031:30;;14096:2;14092;14088:11;14084:2;14080:20;14074:26;;14128:4;14122:11;14156:10;14153:1;14146:21;14256:4;14249;14246:1;14242:12;14235:26;14295:2;14288:4;14285:1;14281:12;14274:24;14332:2;14325:4;14322:1;14318:12;14311:24;14369:8;14362:4;14359:1;14355:12;14348:30;14493:4;14490:1;14484:4;14477;14474:1;14470:12;14457:11;14451:4;14444:5;14439:59;14435:1;14431;14425:8;14422:15;14418:81;14391:240;;14556:16;14550:4;14547:1;14532:41;14600:16;14597:1;14590:27;14391:240;;14746:2;14742;14736:4;14709:25;14703:4;14691:10;14686:63;14017:742;13844:921;;;:::o;14836:199::-;14933:26;14946:4;14952:2;14956;14933:12;:26::i;:::-;19937:14;;14970:58;;;14988:40;15011:4;15017:2;15021;14988:40;;;;;;;;;;;;:22;:40::i;:::-;14836:199;;;:::o;8671:593::-;8729:14;8755:12;8770:11;:9;:11::i;:::-;8755:26;;8870:10;8864:4;8857:24;8930:2;8924:4;8917:16;9047:4;9041;9035;9029;9023;9016:5;9005:47;8998:4;8980:16;8977:26;8973:80;8946:259;;9120:16;9114:4;9107;9101:11;9086:51;9174:16;9167:4;9161:11;9154:37;7912:615;7975:14;8001:12;8016:11;:9;:11::i;:::-;8001:26;;8132:5;8128:2;8124:14;8120:2;8116:23;8110:4;8103:37;8166:10;8160:4;8153:24;8319:4;8313;8307;8301;8295;8288:5;8277:47;8270:4;8252:16;8249:26;8245:80;8218:259;;8392:16;8386:4;8379;8373:11;8358:51;8446:16;8439:4;8433:11;8426:37;8218:259;-1:-1:-1;;8506:4:1;8500:11;;7912:615;-1:-1:-1;7912:615:1:o;5513:717::-;5560:20;5592:12;5607:11;:9;:11::i;:::-;5592:26;;5710:4;5704:11;5694:21;;5741:10;5735:4;5728:24;5832:4;5826;5820;5814;5808;5801:5;5790:47;5780:186;;5886:16;5880:4;5872:6;5857:46;5935:16;5927:6;5920:32;16696:171;3798:20;16777:31;-1:-1:-1;;;;;16777:31:1;;16818:42;;16849:11;;;;;;;;;;;;;;16818:42;16696:171;:::o;11551:982::-;11636:12;11651:11;:9;:11::i;:::-;11636:26;;11766:8;11762:2;11758:17;11754:2;11750:26;11738:38;;11804:4;11798:11;11835:10;11829:4;11822:24;11918:8;11912:4;11905:22;11967:8;11960:16;11953:24;11947:4;11940:38;12004:8;11998:4;11991:22;12126:4;12120;12114;12108;12095:11;12089:4;12082:5;12077:54;12073:1;12066:4;12060:11;12057:18;12053:79;12026:238;;12189:16;12183:4;12180:1;12165:41;12233:16;12230:1;12223:27;12026:238;12387:8;12377;12342:33;12336:4;12330;12325:71;12416:4;12409:15;-1:-1:-1;;12486:1:1;12480:4;12473:15;-1:-1:-1;11551:982:1:o;15538:234::-;15668:26;15681:4;15687:2;15691;15668:12;:26::i;:::-;19937:14;;15705:60;;;15723:42;15746:4;15752:2;15756;15760:4;;15723:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15723:22:1;;-1:-1:-1;;;15723:42:1:i;:::-;15538:234;;;;;:::o;6348:760::-;6407:20;6439:12;6454:11;:9;:11::i;:::-;6439:26;;6557:4;6551:11;6541:21;;6588:2;6582:4;6575:16;6617:10;6611:4;6604:24;6710:4;6704;6698;6692;6686;6679:5;6668:47;6658:186;;6764:16;6758:4;6750:6;6735:46;6813:16;6805:6;6798:32;6658:186;6884:4;6878;6872;6857:32;6938:4;6931;6925:11;6917:6;6902:41;7020:6;7014:13;7007:4;7000;6994:11;6990:22;6983:4;6975:6;6971:17;6956:72;7083:6;7077:13;7070:4;7062:6;7058:17;7054:37;7048:4;7041:51;6527:575;6348:760;;;:::o;12661:828::-;12781:11;12808:12;12823:11;:9;:11::i;:::-;12808:26;;12925:4;12919:11;12956:8;12950:4;12943:22;12999:5;12995:2;12991:14;12985:4;12978:28;13032:34;13026:4;13019:48;13221:4;13215;13209;13203;13197;13190:5;13179:47;13172:4;13154:16;13151:26;13147:80;13120:239;;13284:16;13278:4;13275:1;13260:41;13328:16;13325:1;13318:27;13120:239;13379:4;13372:15;-1:-1:-1;;13466:4:1;13460:11;13453:19;13446:27;;12661:828;-1:-1:-1;;12661:828:1:o;20158:1370::-;20395:4;20389:11;20445:10;20478:24;20475:1;20468:35;20537:8;20530:4;20527:1;20523:12;20516:30;20645:4;20641:2;20637:13;20633:2;20629:22;20622:4;20619:1;20615:12;20608:44;20686:2;20679:4;20676:1;20672:12;20665:24;20723:4;20716;20713:1;20709:12;20702:26;20756:4;20750:11;20795:1;20788:4;20785:1;20781:12;20774:23;20813:1;20810:71;;;20876:1;20869:4;20866:1;20862:12;20859:1;20852:4;20846;20842:15;20839:1;20832:5;20821:57;20817:62;20810:71;20997:4;20994:1;20987:4;20984:1;20980:12;20973:4;20970:1;20966:12;20963:1;20959:2;20952:5;20947:55;20937:313;;21025:16;21022:214;;;21153:16;21147:4;21144:1;21129:41;21201:16;21198:1;21191:27;21022:214;20937:313;21346:24;21341:3;21337:34;21333:1;21327:8;21324:48;21314:198;;21405:10;21399:4;21392:24;21493:4;21487;21480:18;21314:198;;;20158:1370;;;;:::o;14:332:2:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;199:117;335:5;14:332;-1:-1:-1;;;14:332:2:o;543:548::-;655:4;684:2;713;702:9;695:21;745:6;739:13;788:6;783:2;772:9;768:18;761:34;813:1;823:140;837:6;834:1;831:13;823:140;;;932:14;;;928:23;;922:30;898:17;;;917:2;894:26;887:66;852:10;;823:140;;;827:3;1012:1;1007:2;998:6;987:9;983:22;979:31;972:42;1082:2;1075;1071:7;1066:2;1058:6;1054:15;1050:29;1039:9;1035:45;1031:54;1023:62;;;;543:548;;;;:::o;1096:180::-;1155:6;1208:2;1196:9;1187:7;1183:23;1179:32;1176:52;;;1224:1;1221;1214:12;1176:52;-1:-1:-1;1247:23:2;;1096:180;-1:-1:-1;1096:180:2:o;1512:196::-;1580:20;;-1:-1:-1;;;;;1629:54:2;;1619:65;;1609:93;;1698:1;1695;1688:12;1609:93;1512:196;;;:::o;1713:254::-;1781:6;1789;1842:2;1830:9;1821:7;1817:23;1813:32;1810:52;;;1858:1;1855;1848:12;1810:52;1881:29;1900:9;1881:29;:::i;:::-;1871:39;1957:2;1942:18;;;;1929:32;;-1:-1:-1;;;1713:254:2:o;2154:328::-;2231:6;2239;2247;2300:2;2288:9;2279:7;2275:23;2271:32;2268:52;;;2316:1;2313;2306:12;2268:52;2339:29;2358:9;2339:29;:::i;:::-;2329:39;;2387:38;2421:2;2410:9;2406:18;2387:38;:::i;:::-;2377:48;;2472:2;2461:9;2457:18;2444:32;2434:42;;2154:328;;;;;:::o;2487:186::-;2546:6;2599:2;2587:9;2578:7;2574:23;2570:32;2567:52;;;2615:1;2612;2605:12;2567:52;2638:29;2657:9;2638:29;:::i;2678:347::-;2743:6;2751;2804:2;2792:9;2783:7;2779:23;2775:32;2772:52;;;2820:1;2817;2810:12;2772:52;2843:29;2862:9;2843:29;:::i;:::-;2833:39;;2922:2;2911:9;2907:18;2894:32;2969:5;2962:13;2955:21;2948:5;2945:32;2935:60;;2991:1;2988;2981:12;2935:60;3014:5;3004:15;;;2678:347;;;;;:::o;3030:808::-;3127:6;3135;3143;3151;3159;3212:3;3200:9;3191:7;3187:23;3183:33;3180:53;;;3229:1;3226;3219:12;3180:53;3252:29;3271:9;3252:29;:::i;:::-;3242:39;;3300:38;3334:2;3323:9;3319:18;3300:38;:::i;:::-;3290:48;;3385:2;3374:9;3370:18;3357:32;3347:42;;3440:2;3429:9;3425:18;3412:32;3463:18;3504:2;3496:6;3493:14;3490:34;;;3520:1;3517;3510:12;3490:34;3558:6;3547:9;3543:22;3533:32;;3603:7;3596:4;3592:2;3588:13;3584:27;3574:55;;3625:1;3622;3615:12;3574:55;3665:2;3652:16;3691:2;3683:6;3680:14;3677:34;;;3707:1;3704;3697:12;3677:34;3752:7;3747:2;3738:6;3734:2;3730:15;3726:24;3723:37;3720:57;;;3773:1;3770;3763:12;3720:57;3030:808;;;;-1:-1:-1;3030:808:2;;-1:-1:-1;3804:2:2;3796:11;;3826:6;3030:808;-1:-1:-1;;;3030:808:2:o;3843:260::-;3911:6;3919;3972:2;3960:9;3951:7;3947:23;3943:32;3940:52;;;3988:1;3985;3978:12;3940:52;4011:29;4030:9;4011:29;:::i;:::-;4001:39;;4059:38;4093:2;4082:9;4078:18;4059:38;:::i;:::-;4049:48;;3843:260;;;;;:::o

Swarm Source

ipfs://a83e4e77099b969a4e7ed1255be25c95e2133a4bb30b7ca382f26bfb4c4d86e1
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.