1// SPDX-License-Identifier: OTHER2// This code is automatically generated34pragma solidity >=0.8.0 <0.9.0;56/// @dev common stubs holder7interface Dummy {89}1011interface ERC165 is Dummy {12 function supportsInterface(bytes4 interfaceID) external view returns (bool);13}1415/// @title A contract that allows to set and delete token properties and change token property permissions.16/// @dev the ERC-165 identifier for this interface is 0x4136937717interface TokenProperties is Dummy, ERC165 {18 /// @notice Set permissions for token property.19 /// @dev Throws error if `msg.sender` is not admin or owner of the collection.20 /// @param key Property key.21 /// @param isMutable Permission to mutate property.22 /// @param collectionAdmin Permission to mutate property by collection admin if property is mutable.23 /// @param tokenOwner Permission to mutate property by token owner if property is mutable.24 /// @dev EVM selector for this function is: 0x222d97fa,25 /// or in textual repr: setTokenPropertyPermission(string,bool,bool,bool)26 function setTokenPropertyPermission(27 string memory key,28 bool isMutable,29 bool collectionAdmin,30 bool tokenOwner31 ) external;3233 /// @notice Set token property value.34 /// @dev Throws error if `msg.sender` has no permission to edit the property.35 /// @param tokenId ID of the token.36 /// @param key Property key.37 /// @param value Property value.38 /// @dev EVM selector for this function is: 0x1752d67b,39 /// or in textual repr: setProperty(uint256,string,bytes)40 function setProperty(41 uint256 tokenId,42 string memory key,43 bytes memory value44 ) external;4546 /// @notice Delete token property value.47 /// @dev Throws error if `msg.sender` has no permission to edit the property.48 /// @param tokenId ID of the token.49 /// @param key Property key.50 /// @dev EVM selector for this function is: 0x066111d1,51 /// or in textual repr: deleteProperty(uint256,string)52 function deleteProperty(uint256 tokenId, string memory key) external;5354 /// @notice Get token property value.55 /// @dev Throws error if key not found56 /// @param tokenId ID of the token.57 /// @param key Property key.58 /// @return Property value bytes59 /// @dev EVM selector for this function is: 0x7228c327,60 /// or in textual repr: property(uint256,string)61 function property(uint256 tokenId, string memory key)62 external63 view64 returns (bytes memory);65}6667/// @title A contract that allows you to work with collections.68/// @dev the ERC-165 identifier for this interface is 0xffe4da2369interface Collection is Dummy, ERC165 {70 /// Set collection property.71 ///72 /// @param key Property key.73 /// @param value Propery value.74 /// @dev EVM selector for this function is: 0x2f073f66,75 /// or in textual repr: setCollectionProperty(string,bytes)76 function setCollectionProperty(string memory key, bytes memory value)77 external;7879 /// Delete collection property.80 ///81 /// @param key Property key.82 /// @dev EVM selector for this function is: 0x7b7debce,83 /// or in textual repr: deleteCollectionProperty(string)84 function deleteCollectionProperty(string memory key) external;8586 /// Get collection property.87 ///88 /// @dev Throws error if key not found.89 ///90 /// @param key Property key.91 /// @return bytes The property corresponding to the key.92 /// @dev EVM selector for this function is: 0xcf24fd6d,93 /// or in textual repr: collectionProperty(string)94 function collectionProperty(string memory key)95 external96 view97 returns (bytes memory);9899 /// Set the sponsor of the collection.100 ///101 /// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor.102 ///103 /// @param sponsor Address of the sponsor from whose account funds will be debited for operations with the contract.104 /// @dev EVM selector for this function is: 0x7623402e,105 /// or in textual repr: setCollectionSponsor(address)106 function setCollectionSponsor(address sponsor) external;107108 /// Collection sponsorship confirmation.109 ///110 /// @dev After setting the sponsor for the collection, it must be confirmed with this function.111 /// @dev EVM selector for this function is: 0x3c50e97a,112 /// or in textual repr: confirmCollectionSponsorship()113 function confirmCollectionSponsorship() external;114115 /// Set limits for the collection.116 /// @dev Throws error if limit not found.117 /// @param limit Name of the limit. Valid names:118 /// "accountTokenOwnershipLimit",119 /// "sponsoredDataSize",120 /// "sponsoredDataRateLimit",121 /// "tokenLimit",122 /// "sponsorTransferTimeout",123 /// "sponsorApproveTimeout"124 /// @param value Value of the limit.125 /// @dev EVM selector for this function is: 0x6a3841db,126 /// or in textual repr: setCollectionLimit(string,uint32)127 function setCollectionLimit(string memory limit, uint32 value) external;128129 /// Set limits for the collection.130 /// @dev Throws error if limit not found.131 /// @param limit Name of the limit. Valid names:132 /// "ownerCanTransfer",133 /// "ownerCanDestroy",134 /// "transfersEnabled"135 /// @param value Value of the limit.136 /// @dev EVM selector for this function is: 0x993b7fba,137 /// or in textual repr: setCollectionLimit(string,bool)138 function setCollectionLimit(string memory limit, bool value) external;139140 /// Get contract address.141 /// @dev EVM selector for this function is: 0xf6b4dfb4,142 /// or in textual repr: contractAddress()143 function contractAddress() external view returns (address);144145 /// Add collection admin by substrate address.146 /// @param newAdmin Substrate administrator address.147 /// @dev EVM selector for this function is: 0x5730062b,148 /// or in textual repr: addCollectionAdminSubstrate(uint256)149 function addCollectionAdminSubstrate(uint256 newAdmin) external;150151 /// Remove collection admin by substrate address.152 /// @param admin Substrate administrator address.153 /// @dev EVM selector for this function is: 0x4048fcf9,154 /// or in textual repr: removeCollectionAdminSubstrate(uint256)155 function removeCollectionAdminSubstrate(uint256 admin) external;156157 /// Add collection admin.158 /// @param newAdmin Address of the added administrator.159 /// @dev EVM selector for this function is: 0x92e462c7,160 /// or in textual repr: addCollectionAdmin(address)161 function addCollectionAdmin(address newAdmin) external;162163 /// Remove collection admin.164 ///165 /// @param admin Address of the removed administrator.166 /// @dev EVM selector for this function is: 0xfafd7b42,167 /// or in textual repr: removeCollectionAdmin(address)168 function removeCollectionAdmin(address admin) external;169170 /// Toggle accessibility of collection nesting.171 ///172 /// @param enable If "true" degenerates to nesting: 'Owner' else to nesting: 'Disabled'173 /// @dev EVM selector for this function is: 0x112d4586,174 /// or in textual repr: setCollectionNesting(bool)175 function setCollectionNesting(bool enable) external;176177 /// Toggle accessibility of collection nesting.178 ///179 /// @param enable If "true" degenerates to nesting: {OwnerRestricted: [1, 2, 3]} else to nesting: 'Disabled'180 /// @param collections Addresses of collections that will be available for nesting.181 /// @dev EVM selector for this function is: 0x64872396,182 /// or in textual repr: setCollectionNesting(bool,address[])183 function setCollectionNesting(bool enable, address[] memory collections)184 external;185186 /// Set the collection access method.187 /// @param mode Access mode188 /// 0 for Normal189 /// 1 for AllowList190 /// @dev EVM selector for this function is: 0x41835d4c,191 /// or in textual repr: setCollectionAccess(uint8)192 function setCollectionAccess(uint8 mode) external;193194 /// Add the user to the allowed list.195 ///196 /// @param user Address of a trusted user.197 /// @dev EVM selector for this function is: 0x67844fe6,198 /// or in textual repr: addToCollectionAllowList(address)199 function addToCollectionAllowList(address user) external;200201 /// Remove the user from the allowed list.202 ///203 /// @param user Address of a removed user.204 /// @dev EVM selector for this function is: 0x85c51acb,205 /// or in textual repr: removeFromCollectionAllowList(address)206 function removeFromCollectionAllowList(address user) external;207208 /// Switch permission for minting.209 ///210 /// @param mode Enable if "true".211 /// @dev EVM selector for this function is: 0x00018e84,212 /// or in textual repr: setCollectionMintMode(bool)213 function setCollectionMintMode(bool mode) external;214215 /// Check that account is the owner or admin of the collection216 ///217 /// @param user account to verify218 /// @return "true" if account is the owner or admin219 /// @dev EVM selector for this function is: 0x9811b0c7,220 /// or in textual repr: isOwnerOrAdmin(address)221 function isOwnerOrAdmin(address user) external view returns (bool);222223 /// Check that substrate account is the owner or admin of the collection224 ///225 /// @param user account to verify226 /// @return "true" if account is the owner or admin227 /// @dev EVM selector for this function is: 0x68910e00,228 /// or in textual repr: isOwnerOrAdminSubstrate(uint256)229 function isOwnerOrAdminSubstrate(uint256 user) external view returns (bool);230231 /// Returns collection type232 ///233 /// @return `Fungible` or `NFT` or `ReFungible`234 /// @dev EVM selector for this function is: 0xd34b55b8,235 /// or in textual repr: uniqueCollectionType()236 function uniqueCollectionType() external returns (string memory);237238 /// Changes collection owner to another account239 ///240 /// @dev Owner can be changed only by current owner241 /// @param newOwner new owner account242 /// @dev EVM selector for this function is: 0x13af4035,243 /// or in textual repr: setOwner(address)244 function setOwner(address newOwner) external;245246 /// Changes collection owner to another substrate account247 ///248 /// @dev Owner can be changed only by current owner249 /// @param newOwner new owner substrate account250 /// @dev EVM selector for this function is: 0xb212138f,251 /// or in textual repr: setOwnerSubstrate(uint256)252 function setOwnerSubstrate(uint256 newOwner) external;253}254255/// @title ERC721 Token that can be irreversibly burned (destroyed).256/// @dev the ERC-165 identifier for this interface is 0x42966c68257interface ERC721Burnable is Dummy, ERC165 {258 /// @notice Burns a specific ERC721 token.259 /// @dev Throws unless `msg.sender` is the current RFT owner, or an authorized260 /// operator of the current owner.261 /// @param tokenId The RFT to approve262 /// @dev EVM selector for this function is: 0x42966c68,263 /// or in textual repr: burn(uint256)264 function burn(uint256 tokenId) external;265}266267/// @dev inlined interface268interface ERC721MintableEvents {269 event MintingFinished();270}271272/// @title ERC721 minting logic.273/// @dev the ERC-165 identifier for this interface is 0x68ccfe89274interface ERC721Mintable is Dummy, ERC165, ERC721MintableEvents {275 /// @dev EVM selector for this function is: 0x05d2035b,276 /// or in textual repr: mintingFinished()277 function mintingFinished() external view returns (bool);278279 /// @notice Function to mint token.280 /// @dev `tokenId` should be obtained with `nextTokenId` method,281 /// unlike standard, you can't specify it manually282 /// @param to The new owner283 /// @param tokenId ID of the minted RFT284 /// @dev EVM selector for this function is: 0x40c10f19,285 /// or in textual repr: mint(address,uint256)286 function mint(address to, uint256 tokenId) external returns (bool);287288 /// @notice Function to mint token with the given tokenUri.289 /// @dev `tokenId` should be obtained with `nextTokenId` method,290 /// unlike standard, you can't specify it manually291 /// @param to The new owner292 /// @param tokenId ID of the minted RFT293 /// @param tokenUri Token URI that would be stored in the RFT properties294 /// @dev EVM selector for this function is: 0x50bb4e7f,295 /// or in textual repr: mintWithTokenURI(address,uint256,string)296 function mintWithTokenURI(297 address to,298 uint256 tokenId,299 string memory tokenUri300 ) external returns (bool);301302 /// @dev Not implemented303 /// @dev EVM selector for this function is: 0x7d64bcb4,304 /// or in textual repr: finishMinting()305 function finishMinting() external returns (bool);306}307308/// @title Unique extensions for ERC721.309/// @dev the ERC-165 identifier for this interface is 0x7c3bef89310interface ERC721UniqueExtensions is Dummy, ERC165 {311 /// @notice Transfer ownership of an RFT312 /// @dev Throws unless `msg.sender` is the current owner. Throws if `to`313 /// is the zero address. Throws if `tokenId` is not a valid RFT.314 /// Throws if RFT pieces have multiple owners.315 /// @param to The new owner316 /// @param tokenId The RFT to transfer317 /// @dev EVM selector for this function is: 0xa9059cbb,318 /// or in textual repr: transfer(address,uint256)319 function transfer(address to, uint256 tokenId) external;320321 /// @notice Burns a specific ERC721 token.322 /// @dev Throws unless `msg.sender` is the current owner or an authorized323 /// operator for this RFT. Throws if `from` is not the current owner. Throws324 /// if `to` is the zero address. Throws if `tokenId` is not a valid RFT.325 /// Throws if RFT pieces have multiple owners.326 /// @param from The current owner of the RFT327 /// @param tokenId The RFT to transfer328 /// @dev EVM selector for this function is: 0x79cc6790,329 /// or in textual repr: burnFrom(address,uint256)330 function burnFrom(address from, uint256 tokenId) external;331332 /// @notice Returns next free RFT ID.333 /// @dev EVM selector for this function is: 0x75794a3c,334 /// or in textual repr: nextTokenId()335 function nextTokenId() external view returns (uint256);336337 /// @notice Function to mint multiple tokens.338 /// @dev `tokenIds` should be an array of consecutive numbers and first number339 /// should be obtained with `nextTokenId` method340 /// @param to The new owner341 /// @param tokenIds IDs of the minted RFTs342 /// @dev EVM selector for this function is: 0x44a9945e,343 /// or in textual repr: mintBulk(address,uint256[])344 function mintBulk(address to, uint256[] memory tokenIds)345 external346 returns (bool);347348 /// @notice Function to mint multiple tokens with the given tokenUris.349 /// @dev `tokenIds` is array of pairs of token ID and token URI. Token IDs should be consecutive350 /// numbers and first number should be obtained with `nextTokenId` method351 /// @param to The new owner352 /// @param tokens array of pairs of token ID and token URI for minted tokens353 /// @dev EVM selector for this function is: 0x36543006,354 /// or in textual repr: mintBulkWithTokenURI(address,(uint256,string)[])355 function mintBulkWithTokenURI(address to, Tuple8[] memory tokens)356 external357 returns (bool);358359 /// Returns EVM address for refungible token360 ///361 /// @param token ID of the token362 /// @dev EVM selector for this function is: 0xab76fac6,363 /// or in textual repr: tokenContractAddress(uint256)364 function tokenContractAddress(uint256 token)365 external366 view367 returns (address);368}369370/// @dev anonymous struct371struct Tuple8 {372 uint256 field_0;373 string field_1;374}375376/// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension377/// @dev See https://eips.ethereum.org/EIPS/eip-721378/// @dev the ERC-165 identifier for this interface is 0x780e9d63379interface ERC721Enumerable is Dummy, ERC165 {380 /// @notice Enumerate valid RFTs381 /// @param index A counter less than `totalSupply()`382 /// @return The token identifier for the `index`th NFT,383 /// (sort order not specified)384 /// @dev EVM selector for this function is: 0x4f6ccce7,385 /// or in textual repr: tokenByIndex(uint256)386 function tokenByIndex(uint256 index) external view returns (uint256);387388 /// Not implemented389 /// @dev EVM selector for this function is: 0x2f745c59,390 /// or in textual repr: tokenOfOwnerByIndex(address,uint256)391 function tokenOfOwnerByIndex(address owner, uint256 index)392 external393 view394 returns (uint256);395396 /// @notice Count RFTs tracked by this contract397 /// @return A count of valid RFTs tracked by this contract, where each one of398 /// them has an assigned and queryable owner not equal to the zero address399 /// @dev EVM selector for this function is: 0x18160ddd,400 /// or in textual repr: totalSupply()401 function totalSupply() external view returns (uint256);402}403404/// @dev the ERC-165 identifier for this interface is 0x5b5e139f405interface ERC721Metadata is Dummy, ERC165 {406 /// @notice A descriptive name for a collection of RFTs in this contract407 /// @dev EVM selector for this function is: 0x06fdde03,408 /// or in textual repr: name()409 function name() external view returns (string memory);410411 /// @notice An abbreviated name for RFTs in this contract412 /// @dev EVM selector for this function is: 0x95d89b41,413 /// or in textual repr: symbol()414 function symbol() external view returns (string memory);415416 /// @notice A distinct Uniform Resource Identifier (URI) for a given asset.417 ///418 /// @dev If the token has a `url` property and it is not empty, it is returned.419 /// Else If the collection does not have a property with key `schemaName` or its value is not equal to `ERC721Metadata`, it return an error `tokenURI not set`.420 /// If the collection property `baseURI` is empty or absent, return "" (empty string)421 /// otherwise, if token property `suffix` present and is non-empty, return concatenation of baseURI and suffix422 /// otherwise, return concatenation of `baseURI` and stringified token id (decimal stringifying, without paddings).423 ///424 /// @return token's const_metadata425 /// @dev EVM selector for this function is: 0xc87b56dd,426 /// or in textual repr: tokenURI(uint256)427 function tokenURI(uint256 tokenId) external view returns (string memory);428}429430/// @dev inlined interface431interface ERC721Events {432 event Transfer(433 address indexed from,434 address indexed to,435 uint256 indexed tokenId436 );437 event Approval(438 address indexed owner,439 address indexed approved,440 uint256 indexed tokenId441 );442 event ApprovalForAll(443 address indexed owner,444 address indexed operator,445 bool approved446 );447}448449/// @title ERC-721 Non-Fungible Token Standard450/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md451/// @dev the ERC-165 identifier for this interface is 0x58800161452interface ERC721 is Dummy, ERC165, ERC721Events {453 /// @notice Count all RFTs assigned to an owner454 /// @dev RFTs assigned to the zero address are considered invalid, and this455 /// function throws for queries about the zero address.456 /// @param owner An address for whom to query the balance457 /// @return The number of RFTs owned by `owner`, possibly zero458 /// @dev EVM selector for this function is: 0x70a08231,459 /// or in textual repr: balanceOf(address)460 function balanceOf(address owner) external view returns (uint256);461462 /// @notice Find the owner of an RFT463 /// @dev RFTs assigned to zero address are considered invalid, and queries464 /// about them do throw.465 /// Returns special 0xffffffffffffffffffffffffffffffffffffffff address for466 /// the tokens that are partially owned.467 /// @param tokenId The identifier for an RFT468 /// @return The address of the owner of the RFT469 /// @dev EVM selector for this function is: 0x6352211e,470 /// or in textual repr: ownerOf(uint256)471 function ownerOf(uint256 tokenId) external view returns (address);472473 /// @dev Not implemented474 /// @dev EVM selector for this function is: 0x60a11672,475 /// or in textual repr: safeTransferFromWithData(address,address,uint256,bytes)476 function safeTransferFromWithData(477 address from,478 address to,479 uint256 tokenId,480 bytes memory data481 ) external;482483 /// @dev Not implemented484 /// @dev EVM selector for this function is: 0x42842e0e,485 /// or in textual repr: safeTransferFrom(address,address,uint256)486 function safeTransferFrom(487 address from,488 address to,489 uint256 tokenId490 ) external;491492 /// @notice Transfer ownership of an RFT -- THE CALLER IS RESPONSIBLE493 /// TO CONFIRM THAT `to` IS CAPABLE OF RECEIVING NFTS OR ELSE494 /// THEY MAY BE PERMANENTLY LOST495 /// @dev Throws unless `msg.sender` is the current owner or an authorized496 /// operator for this RFT. Throws if `from` is not the current owner. Throws497 /// if `to` is the zero address. Throws if `tokenId` is not a valid RFT.498 /// Throws if RFT pieces have multiple owners.499 /// @param from The current owner of the NFT500 /// @param to The new owner501 /// @param tokenId The NFT to transfer502 /// @dev EVM selector for this function is: 0x23b872dd,503 /// or in textual repr: transferFrom(address,address,uint256)504 function transferFrom(505 address from,506 address to,507 uint256 tokenId508 ) external;509510 /// @dev Not implemented511 /// @dev EVM selector for this function is: 0x095ea7b3,512 /// or in textual repr: approve(address,uint256)513 function approve(address approved, uint256 tokenId) external;514515 /// @dev Not implemented516 /// @dev EVM selector for this function is: 0xa22cb465,517 /// or in textual repr: setApprovalForAll(address,bool)518 function setApprovalForAll(address operator, bool approved) external;519520 /// @dev Not implemented521 /// @dev EVM selector for this function is: 0x081812fc,522 /// or in textual repr: getApproved(uint256)523 function getApproved(uint256 tokenId) external view returns (address);524525 /// @dev Not implemented526 /// @dev EVM selector for this function is: 0xe985e9c5,527 /// or in textual repr: isApprovedForAll(address,address)528 function isApprovedForAll(address owner, address operator)529 external530 view531 returns (address);532}533534interface UniqueRefungible is535 Dummy,536 ERC165,537 ERC721,538 ERC721Metadata,539 ERC721Enumerable,540 ERC721UniqueExtensions,541 ERC721Mintable,542 ERC721Burnable,543 Collection,544 TokenProperties545{}