EthereumEthereum
0x92...49B8
Grails V

Grails V

GRAILS5

收藏品
底价
0.01831 ETH
$2,345.34
大小
785
收藏品
所有者
520
66% 独特的所有者
此合同的源代码已经过验证!
合同元数据
编译器
0.8.21+commit.d9974bed
语言
Solidity
合同源代码
文件 1 的 59:AccessControl.sol
合同源代码
文件 2 的 59:AccessControlEnumerable.sol
合同源代码
文件 3 的 59:AccessControlPausable.sol
合同源代码
文件 4 的 59:Address.sol
合同源代码
文件 5 的 59:ArtblocksProjectPoolSellable.sol
合同源代码
文件 6 的 59:BaseSellable.sol
合同源代码
文件 7 的 59:BaseTokenURI.sol
合同源代码
文件 8 的 59:BytecodeStorageV1.sol
合同源代码
文件 9 的 59:Bytes32Strings.sol
合同源代码
文件 10 的 59:Constants.sol
合同源代码
文件 11 的 59:Context.sol
合同源代码
文件 12 的 59:ERC165.sol
合同源代码
文件 13 的 59:ERC2981.sol
合同源代码
文件 14 的 59:ERC4906.sol
合同源代码
文件 15 的 59:ERC721A.sol
合同源代码
文件 16 的 59:ERC721ACommon.sol
合同源代码
文件 17 的 59:ERC721ACommonOperatorFilterOS.sol
合同源代码
文件 18 的 59:ERC721_PackedHashSeed.sol
合同源代码
文件 19 的 59:EnumerableMap.sol
合同源代码
文件 20 的 59:EnumerableSet.sol
合同源代码
文件 21 的 59:GenArt721CoreV3_Engine_Flex_PROOF.sol
合同源代码
文件 22 的 59:Grails5.sol
// SPDX-License-Identifier: MIT
// Copyright 2023 SolidifyLabs
pragma solidity ^0.8.15;

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

import {IGenArt721CoreContractV3_Mintable} from "solidifylabs/artblocks/IGenArt721CoreContractV3_Mintable.sol";
import {
    GenArt721CoreV3_Engine_Flex_PROOF,
    ArtblocksWithMinterFilterV2ProjectPoolSellable,
    ArtblocksProjectPoolSellable,
    MinterFilterV2,
    ProjectPoolSellable
} from "solidifylabs/presets/pool/ArtblocksProjectPoolSellable.sol";

/**
 * @notice Grails V
 * @author David Huber (@cxkoda)
 * @custom:reviewer Arran Schlosberg (@divergencearran)
 */
contract Grails5 is ArtblocksWithMinterFilterV2ProjectPoolSellable {
    using Address for address payable;

    // =================================================================================================================
    //                          Constants
    // =================================================================================================================

    uint256 internal immutable _project13ArtblocksProjectId;

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

    address payable public primaryReceiver;

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

    constructor(
        ProjectPoolSellable.Init memory init,
        GenArt721CoreV3_Engine_Flex_PROOF flex_,
        MinterFilterV2 filter_,
        address payable primaryReceiver_,
        uint256 project13ArtblocksProjectId
    ) ArtblocksWithMinterFilterV2ProjectPoolSellable(init, flex_, filter_) {
        primaryReceiver = primaryReceiver_;
        _project13ArtblocksProjectId = project13ArtblocksProjectId;
    }

    /**
     * @inheritdoc ArtblocksProjectPoolSellable
     */
    function _isLongformProject(uint128 projectId) internal view virtual override returns (bool) {
        return projectId == 13;
    }

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

    /**
     * @inheritdoc ArtblocksProjectPoolSellable
     * @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));

        // This is safe since we only have one ArtBlock project.
        return _project13ArtblocksProjectId;
    }

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

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

    /**
     * @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 [180, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 36, 150, 50, 50, 50, 150][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 Set the primary receiver of funds
     */
    function setPrimaryReceiver(address payable newPrimaryReceiver) public onlyRole(DEFAULT_STEERING_ROLE) {
        primaryReceiver = newPrimaryReceiver;
    }
}
合同源代码
文件 23 的 59:IAccessControl.sol
合同源代码
文件 24 的 59:IAccessControlEnumerable.sol
合同源代码
文件 25 的 59:IAdminACLV0.sol
合同源代码
文件 26 的 59:ICoreRegistryV1.sol
合同源代码
文件 27 的 59:IDependencyRegistryCompatibleV0.sol
合同源代码
文件 28 的 59:IERC165.sol
合同源代码
文件 29 的 59:IERC2981.sol
合同源代码
文件 30 的 59:IERC721.sol
合同源代码
文件 31 的 59:IERC721A.sol
合同源代码
文件 32 的 59:IERC721Metadata.sol
合同源代码
文件 33 的 59:IERC721Receiver.sol
合同源代码
文件 34 的 59:IEngineRegistryV0.sol
合同源代码
文件 35 的 59:IGenArt721CoreContractV3_Base.sol
合同源代码
文件 36 的 59:IGenArt721CoreContractV3_Engine.sol
合同源代码
文件 37 的 59:IGenArt721CoreContractV3_Engine_Flex.sol
合同源代码
文件 38 的 59:IGenArt721CoreContractV3_Mintable.sol
合同源代码
文件 39 的 59:IManifold.sol
合同源代码
文件 40 的 59:IMinterFilterV1.sol
合同源代码
文件 41 的 59:IOperatorFilterRegistry.sol
合同源代码
文件 42 的 59:IRandomizerV2.sol
合同源代码
文件 43 的 59:IRandomizer_V3CoreBase.sol
合同源代码
文件 44 的 59:ISellable.sol
合同源代码
文件 45 的 59:ISharedMinterRequired.sol
合同源代码
文件 46 的 59:ISharedMinterV0.sol
合同源代码
文件 47 的 59:Math.sol
合同源代码
文件 48 的 59:MinterFilterV2.sol
合同源代码
文件 49 的 59:OperatorFilterRegistry.sol
合同源代码
文件 50 的 59:OperatorFilterRegistryErrorsAndEvents.sol
合同源代码
文件 51 的 59:OperatorFilterer.sol
合同源代码
文件 52 的 59:Ownable.sol
合同源代码
文件 53 的 59:Pausable.sol
合同源代码
文件 54 的 59:ProjectPoolSellable.sol
合同源代码
文件 55 的 59:ReentrancyGuard.sol
合同源代码
文件 56 的 59:SellableERC721ACommon.sol
合同源代码
文件 57 的 59:SellableERC721ACommonByProjectID.sol
合同源代码
文件 58 的 59:Strings.sol
合同源代码
文件 59 的 59:TokenIDMapping.sol
设置
{
  "compilationTarget": {
    "src/Grails5.sol": "Grails5"
  },
  "evmVersion": "paris",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": true,
    "runs": 9999
  },
  "remappings": [
    ":@divergencetech/ethier/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/ethier_0-55-0/",
    ":@openzeppelin-4-7-0/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/openzeppelin-contracts_4-7-0_exact_remap/",
    ":@openzeppelin-4.7/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/openzeppelin-contracts_4-7-0_exact_remap/",
    ":@openzeppelin/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/openzeppelin-contracts_4-8-1/",
    ":ERC721A/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/ERC721A_4-2-3/contracts/",
    ":ERC721A_root/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/ERC721A_4-2-3/",
    ":artblocks-contracts/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/artblocks-contracts_7f0af677/packages/contracts/contracts/",
    ":artblocks-contracts_root/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/artblocks-contracts_7f0af677/",
    ":delegation-registry/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/delegation-registry_40d367d7/src/",
    ":delegation-registry_root/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/delegation-registry_40d367d7/",
    ":ds-test/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/ds-test_013e6c64/src/",
    ":ds-test_root/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/ds-test_013e6c64/",
    ":erc721a/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/ERC721A_4-2-3/",
    ":ethier/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/ethier_0-55-0/contracts/",
    ":ethier_root/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/ethier_0-55-0/",
    ":forge-std/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/forge-std_1-7-3/src/",
    ":openzeppelin-contracts-4-7-0/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/openzeppelin-contracts_4-7-0_exact_remap/contracts/",
    ":openzeppelin-contracts/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/openzeppelin-contracts_4-8-1/contracts/",
    ":openzeppelin-contracts_root-4-7-0/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/openzeppelin-contracts_4-7-0_exact_remap/",
    ":openzeppelin-contracts_root/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/openzeppelin-contracts_4-8-1/",
    ":operator-filter-registry/src/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/operator-filter-registry_1-4-1/src/",
    ":operator-filter-registry_root/=/home/dave/.cache/bazel/_bazel_dave/1a5ef124e5847560f6bb614f5401924c/external/operator-filter-registry_1-4-1/",
    ":solidifylabs/artblocks/=/home/dave/solidifylabs/solidifylabs/contracts/artblocks/src/",
    ":solidifylabs/artblocks_test/=/home/dave/solidifylabs/solidifylabs/contracts/artblocks/test/",
    ":solidifylabs/constants/=/home/dave/solidifylabs/solidifylabs/contracts/constants/src/",
    ":solidifylabs/ethier/=/home/dave/solidifylabs/solidifylabs/contracts/ethier/src/",
    ":solidifylabs/presets/=/home/dave/solidifylabs/solidifylabs/contracts/presets/src/",
    ":solidifylabs/redemption/=/home/dave/solidifylabs/solidifylabs/contracts/redemption/src/",
    ":solidifylabs/sellers/=/home/dave/solidifylabs/solidifylabs/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 MinterFilterV2","name":"filter_","type":"address"},{"internalType":"address payable","name":"primaryReceiver_","type":"address"},{"internalType":"uint256","name":"project13ArtblocksProjectId","type":"uint256"}],"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":"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":[{"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":"minterFilter","outputs":[{"internalType":"contract MinterFilterV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minterFilterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minterType","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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"}]