EthereumEthereum
0x06...8885
Drawing with Code by Yazid

Drawing with Code by Yazid

GRAILS4

Collection
Floor Price
0.1 ETH
$2,345.34
Size
102
Collectibles
Owners
98
96% Unique Owners
This contract's source code is verified!
Contract Metadata
Compiler
0.8.17+commit.8df45f5f
Language
Solidity
Contract Source Code
File 1 of 51: ABProjectPoolSellable.sol
Contract Source Code
File 2 of 51: AccessControl.sol
Contract Source Code
File 3 of 51: AccessControlEnumerable.sol
Contract Source Code
File 4 of 51: AccessControlPausable.sol
Contract Source Code
File 5 of 51: Address.sol
Contract Source Code
File 6 of 51: BaseSellable.sol
Contract Source Code
File 7 of 51: BaseTokenURI.sol
Contract Source Code
File 8 of 51: BytecodeStorage.sol
Contract Source Code
File 9 of 51: Bytes32Strings.sol
Contract Source Code
File 10 of 51: Constants.sol
Contract Source Code
File 11 of 51: Context.sol
Contract Source Code
File 12 of 51: DefaultOperatorFilterer.sol
Contract Source Code
File 13 of 51: ERC165.sol
Contract Source Code
File 14 of 51: ERC2981.sol
Contract Source Code
File 15 of 51: ERC4906.sol
Contract Source Code
File 16 of 51: ERC721A.sol
Contract Source Code
File 17 of 51: ERC721ACommon.sol
Contract Source Code
File 18 of 51: ERC721_PackedHashSeed.sol
Contract Source Code
File 19 of 51: EnumerableSet.sol
Contract Source Code
File 20 of 51: GenArt721CoreV3_Engine_Flex_PROOF.sol
Contract Source Code
File 21 of 51: Grails4.sol
// SPDX-License-Identifier: MIT
// Copyright 2023 PROOF Holdings Inc
pragma solidity ^0.8.15;

import {GenArt721CoreV3_Engine_Flex_PROOF} from "artblocks-contracts/GenArt721CoreV3_Engine_Flex_PROOF.sol";
import {Address} from "openzeppelin-contracts/utils/Address.sol";

import {IGenArt721CoreContractV3_Mintable} from "proof/artblocks/IGenArt721CoreContractV3_Mintable.sol";
import {ABProjectPoolSellable, ProjectPoolSellable} from "proof/presets/pool/ABProjectPoolSellable.sol";

/**
 * @notice Grails IV
 * @author David Huber (@cxkoda)
 * @custom:reviewer Arran Schlosberg (@divergencearran)
 * @custom:reviewer Josh Laird (@jbmlaird)
 */
contract Grails4 is ABProjectPoolSellable {
    using Address for address payable;

    // =================================================================================================================
    //                          Storage
    // =================================================================================================================

    address payable public primaryReceiver;

    // =================================================================================================================
    //                          Construction
    // =================================================================================================================

    constructor(
        ProjectPoolSellable.Init memory init,
        GenArt721CoreV3_Engine_Flex_PROOF flex_,
        IGenArt721CoreContractV3_Mintable flexMintGateway_,
        address payable primaryReceiver_
    ) ABProjectPoolSellable(init, flex_, flexMintGateway_) {
        primaryReceiver = primaryReceiver_;
    }

    /**
     * @inheritdoc ABProjectPoolSellable
     */
    function _isLongformProject(uint128 projectId) internal view virtual override returns (bool) {
        return projectId == 0 || projectId == 5 || projectId == 9;
    }

    function isLongformProject(uint128 projectId) external view returns (bool) {
        return _isLongformProject(projectId);
    }

    /**
     * @inheritdoc ABProjectPoolSellable
     * @dev This function is tightly coupled to the implementation of `_isLongformProject`. Any changes there MUST be
     * reflected here.
     */
    function _artblocksProjectId(uint128 projectId) internal view virtual override returns (uint256) {
        assert(_isLongformProject(projectId));
        
        if (projectId == 0) {
            return 3;
        }
        if (projectId == 5) {
            return 1;
        }
        if (projectId == 9) {
            return 2;
        }

        // We can't get here because of the earlier assert, but the compiler
        // otherwise gives a warning about not returning a value. The
        // alternative of simply returning 2 above, without checking project ID,
        // is less explicit.
        assert(false);
        return 0;
    }

    function artblocksProjectId(uint128 projectId) external view returns (uint256) {
        return _artblocksProjectId(projectId);
    }

    /**
     * @inheritdoc ProjectPoolSellable
     */
    function _numProjects() internal view virtual override returns (uint128) {
        return 20;
    }

    /**
     * @notice Returns the number of projects.
     */

    function numProjects() external view returns (uint128) {
        return _numProjects();
    }

    /**
     * @inheritdoc ProjectPoolSellable
     */
    function _maxNumPerProject(uint128 projectId) internal view virtual override returns (uint64) {
        return [150, 50, 50, 50, 50, 150, 50, 50, 50, 150, 50, 150, 150, 50, 50, 50, 50, 50, 25, 50][projectId];
    }

    /**
     * @notice Returns the max number of tokens per project.
     */
    function maxNumPerProject(uint128 projectId) external view returns (uint64) {
        return _maxNumPerProject(projectId);
    }

    function _handleSale(address to, uint64 num, bytes calldata data) internal virtual override {
        super._handleSale(to, num, data);
        primaryReceiver.sendValue(msg.value);
    }

    /**
     * @notice Allows a holder to burn their token
     */
    function burn(uint256 tokenId) public {
        _burn(tokenId, true);
    }

    /**
     * @notice Set the primary receiver of funds
     */
    function setPrimaryReceiver(address payable newPrimaryReceiver) public onlyRole(DEFAULT_STEERING_ROLE) {
        primaryReceiver = newPrimaryReceiver;
    }
}
Contract Source Code
File 22 of 51: IAccessControl.sol
Contract Source Code
File 23 of 51: IAccessControlEnumerable.sol
Contract Source Code
File 24 of 51: IAdminACLV0.sol
Contract Source Code
File 25 of 51: IDependencyRegistryCompatibleV0.sol
Contract Source Code
File 26 of 51: IERC165.sol
Contract Source Code
File 27 of 51: IERC2981.sol
Contract Source Code
File 28 of 51: IERC721.sol
Contract Source Code
File 29 of 51: IERC721A.sol
Contract Source Code
File 30 of 51: IERC721Metadata.sol
Contract Source Code
File 31 of 51: IERC721Receiver.sol
Contract Source Code
File 32 of 51: IEngineRegistryV0.sol
Contract Source Code
File 33 of 51: IGenArt721CoreContractV3_Base.sol
Contract Source Code
File 34 of 51: IGenArt721CoreContractV3_Engine.sol
Contract Source Code
File 35 of 51: IGenArt721CoreContractV3_Engine_Flex.sol
Contract Source Code
File 36 of 51: IGenArt721CoreContractV3_Mintable.sol
Contract Source Code
File 37 of 51: IManifold.sol
Contract Source Code
File 38 of 51: IOperatorFilterRegistry.sol
Contract Source Code
File 39 of 51: IRandomizerV2.sol
Contract Source Code
File 40 of 51: ISellable.sol
Contract Source Code
File 41 of 51: Math.sol
Contract Source Code
File 42 of 51: OperatorFilterOS.sol
Contract Source Code
File 43 of 51: OperatorFilterer.sol
Contract Source Code
File 44 of 51: Ownable.sol
Contract Source Code
File 45 of 51: Pausable.sol
Contract Source Code
File 46 of 51: ProjectPoolSellable.sol
Contract Source Code
File 47 of 51: ReentrancyGuard.sol
Contract Source Code
File 48 of 51: SellableERC721ACommon.sol
Contract Source Code
File 49 of 51: SellableERC721ACommonByProjectID.sol
Contract Source Code
File 50 of 51: Strings.sol
Contract Source Code
File 51 of 51: TokenIDMapping.sol
Settings
{
  "compilationTarget": {
    "src/Grails4.sol": "Grails4"
  },
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": true,
    "runs": 9999
  },
  "remappings": [
    ":@divergencetech/ethier/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ethier_0-55-0/",
    ":@openzeppelin-4-7-0/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/",
    ":@openzeppelin-4.7/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/",
    ":@openzeppelin/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/",
    ":ERC721A/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ERC721A_4-2-3/contracts/",
    ":ERC721A_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ERC721A_4-2-3/",
    ":artblocks-contracts/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/artblocks-contracts_fa1dc466/contracts/",
    ":artblocks-contracts_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/artblocks-contracts_fa1dc466/",
    ":delegation-registry/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/delegation-registry_2d1a158b/src/",
    ":delegation-registry_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/delegation-registry_2d1a158b/",
    ":ds-test/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ds-test_013e6c64/src/",
    ":ds-test_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ds-test_013e6c64/",
    ":erc721a/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ERC721A_4-2-3/",
    ":ethier/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ethier_0-55-0/contracts/",
    ":ethier_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ethier_0-55-0/",
    ":forge-std/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/forge-std_1-5-6/src/",
    ":openzeppelin-contracts-4-7-0/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/contracts/",
    ":openzeppelin-contracts/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/contracts/",
    ":openzeppelin-contracts/contracts/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/contracts/",
    ":openzeppelin-contracts_root-4-7-0/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/",
    ":openzeppelin-contracts_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/",
    ":operator-filter-registry/src/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/operator-filter-registry_1-4-1/src/",
    ":operator-filter-registry_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/operator-filter-registry_1-4-1/",
    ":proof/artblocks/=/home/dave/proof/proof-seller/contracts/artblocks/src/",
    ":proof/constants/=/home/dave/proof/proof-seller/contracts/constants/src/",
    ":proof/presets/=/home/dave/proof/proof-seller/contracts/presets/src/",
    ":proof/redemption/=/home/dave/proof/proof-seller/contracts/redemption/src/",
    ":proof/sellers/=/home/dave/proof/proof-seller/contracts/sellers/src/"
  ]
}
ABI
[{"inputs":[{"components":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"address","name":"steerer","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"address payable","name":"royaltyReciever","type":"address"},{"internalType":"uint96","name":"royaltyBasisPoints","type":"uint96"}],"internalType":"struct ProjectPoolSellable.Init","name":"init","type":"tuple"},{"internalType":"contract GenArt721CoreV3_Engine_Flex_PROOF","name":"flex_","type":"address"},{"internalType":"contract IGenArt721CoreContractV3_Mintable","name":"flexMintGateway_","type":"address"},{"internalType":"address payable","name":"primaryReceiver_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[{"internalType":"uint128","name":"projectId","type":"uint128"}],"name":"InvalidProject","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[{"internalType":"uint128","name":"projectId","type":"uint128"}],"name":"ProjectExhausted","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":false,"internalType":"uint256","name":"_fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_toTokenId","type":"uint256"}],"name":"BatchMetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"MetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"AUTHORISED_SELLER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_STEERING_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint128","name":"projectId","type":"uint128"}],"name":"artblocksProjectId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"cdata","type":"bytes"}],"name":"callOperatorFilterRegistry","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitMetadataUpdateForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flex","outputs":[{"internalType":"contract GenArt721CoreV3_Engine_Flex_PROOF","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flexMintGateway","outputs":[{"internalType":"contract IGenArt721CoreContractV3_Mintable","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":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint64","name":"num","type":"uint64"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"handleSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint128","name":"projectId","type":"uint128"}],"name":"isLongformProject","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockSellers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"projectId","type":"uint128"}],"name":"maxNumPerProject","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numProjects","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"projectId","type":"uint128"}],"name":"numPurchasedPerProject","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numPurchasedPerProject","outputs":[{"internalType":"uint64[]","name":"","type":"uint64[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"primaryReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"safeTransferFrom","outputs":[],"stateMutability":"payable","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":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseTokenURI_","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"basisPoints","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newPrimaryReceiver","type":"address"}],"name":"setPrimaryReceiver","outputs":[],"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":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"projectId","type":"uint128"}],"name":"tokenIdsByProjectId","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenInfo","outputs":[{"components":[{"internalType":"uint128","name":"projectId","type":"uint128"},{"internalType":"uint64","name":"edition","type":"uint64"},{"internalType":"bytes8","name":"extra","type":"bytes8"}],"internalType":"struct TokenInfoManager.TokenInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"tokenInfos","outputs":[{"components":[{"internalType":"uint128","name":"projectId","type":"uint128"},{"internalType":"uint64","name":"edition","type":"uint64"},{"internalType":"bytes8","name":"extra","type":"bytes8"}],"internalType":"struct TokenInfoManager.TokenInfo[]","name":"","type":"tuple[]"}],"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":"payable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]