1// SPDX-License-Identifier: OTHER2// This code is automatically generated34pragma solidity >=0.8.0 <0.9.0;56/// @dev common stubs holder7contract Dummy {8 uint8 dummy;9 string stub_error = "this contract is implemented in native";10}1112contract ERC165 is Dummy {13 function supportsInterface(bytes4 interfaceID) external view returns (bool) {14 require(false, stub_error);15 interfaceID;16 return true;17 }18}1920/// @dev inlined interface21contract CollectionHelpersEvents {22 event CollectionCreated(address indexed owner, address indexed collectionId);23 event CollectionDestroyed(address indexed collectionId);24 event CollectionChanged(address indexed collectionId);25}2627/// @title Contract, which allows users to operate with collections28/// @dev the ERC-165 identifier for this interface is 0x94e5af0d29contract CollectionHelpers is Dummy, ERC165, CollectionHelpersEvents {30 /// Create a collection31 /// @return address Address of the newly created collection32 /// @dev EVM selector for this function is: 0x72b5bea7,33 /// or in textual repr: createCollection((string,string,string,uint8,uint8,(string,bytes)[],(string,(uint8,bool)[])[],(address,uint256)[],(bool,bool,address[]),(uint8,uint256)[],(address,uint256),uint8))34 function createCollection(CreateCollectionData memory data) public payable returns (address) {35 require(false, stub_error);36 data;37 dummy = 0;38 return 0x0000000000000000000000000000000000000000;39 }4041 /// Create an NFT collection42 /// @param name Name of the collection43 /// @param description Informative description of the collection44 /// @param tokenPrefix Token prefix to represent the collection tokens in UI and user applications45 /// @return address Address of the newly created collection46 /// @dev EVM selector for this function is: 0x844af658,47 /// or in textual repr: createNFTCollection(string,string,string)48 function createNFTCollection(49 string memory name,50 string memory description,51 string memory tokenPrefix52 ) public payable returns (address) {53 require(false, stub_error);54 name;55 description;56 tokenPrefix;57 dummy = 0;58 return 0x0000000000000000000000000000000000000000;59 }6061 // /// Create an NFT collection62 // /// @param name Name of the collection63 // /// @param description Informative description of the collection64 // /// @param tokenPrefix Token prefix to represent the collection tokens in UI and user applications65 // /// @return address Address of the newly created collection66 // /// @dev EVM selector for this function is: 0xe34a6844,67 // /// or in textual repr: createNonfungibleCollection(string,string,string)68 // function createNonfungibleCollection(string memory name, string memory description, string memory tokenPrefix) public payable returns (address) {69 // require(false, stub_error);70 // name;71 // description;72 // tokenPrefix;73 // dummy = 0;74 // return 0x0000000000000000000000000000000000000000;75 // }7677 /// @dev EVM selector for this function is: 0xab173450,78 /// or in textual repr: createRFTCollection(string,string,string)79 function createRFTCollection(80 string memory name,81 string memory description,82 string memory tokenPrefix83 ) public payable returns (address) {84 require(false, stub_error);85 name;86 description;87 tokenPrefix;88 dummy = 0;89 return 0x0000000000000000000000000000000000000000;90 }9192 /// @dev EVM selector for this function is: 0x7335b79f,93 /// or in textual repr: createFTCollection(string,uint8,string,string)94 function createFTCollection(95 string memory name,96 uint8 decimals,97 string memory description,98 string memory tokenPrefix99 ) public payable returns (address) {100 require(false, stub_error);101 name;102 decimals;103 description;104 tokenPrefix;105 dummy = 0;106 return 0x0000000000000000000000000000000000000000;107 }108109 /// @dev EVM selector for this function is: 0x85624258,110 /// or in textual repr: makeCollectionERC721MetadataCompatible(address,string)111 function makeCollectionERC721MetadataCompatible(address collection, string memory baseUri) public {112 require(false, stub_error);113 collection;114 baseUri;115 dummy = 0;116 }117118 /// @dev EVM selector for this function is: 0x564e321f,119 /// or in textual repr: destroyCollection(address)120 function destroyCollection(address collectionAddress) public {121 require(false, stub_error);122 collectionAddress;123 dummy = 0;124 }125126 /// Check if a collection exists127 /// @param collectionAddress Address of the collection in question128 /// @return bool Does the collection exist?129 /// @dev EVM selector for this function is: 0xc3de1494,130 /// or in textual repr: isCollectionExist(address)131 function isCollectionExist(address collectionAddress) public view returns (bool) {132 require(false, stub_error);133 collectionAddress;134 dummy;135 return false;136 }137138 /// @dev EVM selector for this function is: 0xd23a7ab1,139 /// or in textual repr: collectionCreationFee()140 function collectionCreationFee() public view returns (uint256) {141 require(false, stub_error);142 dummy;143 return 0;144 }145146 /// Returns address of a collection.147 /// @param collectionId - CollectionId of the collection148 /// @return eth mirror address of the collection149 /// @dev EVM selector for this function is: 0x2e716683,150 /// or in textual repr: collectionAddress(uint32)151 function collectionAddress(uint32 collectionId) public view returns (address) {152 require(false, stub_error);153 collectionId;154 dummy;155 return 0x0000000000000000000000000000000000000000;156 }157158 /// Returns collectionId of a collection.159 /// @param collectionAddress - Eth address of the collection160 /// @return collectionId of the collection161 /// @dev EVM selector for this function is: 0xb5cb7498,162 /// or in textual repr: collectionId(address)163 function collectionId(address collectionAddress) public view returns (uint32) {164 require(false, stub_error);165 collectionAddress;166 dummy;167 return 0;168 }169}170171/// Collection properties172struct CreateCollectionData {173 /// Collection name174 string name;175 /// Collection description176 string description;177 /// Token prefix178 string token_prefix;179 /// Token type (NFT, FT or RFT)180 CollectionMode mode;181 /// Fungible token precision182 uint8 decimals;183 /// Custom Properties184 Property[] properties;185 /// Permissions for token properties186 TokenPropertyPermission[] token_property_permissions;187 /// Collection admins188 CrossAddress[] admin_list;189 /// Nesting settings190 CollectionNestingAndPermission nesting_settings;191 /// Collection limits192 CollectionLimitValue[] limits;193 /// Collection sponsor194 CrossAddress pending_sponsor;195 /// Extra collection flags196 CollectionFlags flags;197}198199type CollectionFlags is uint8;200201library CollectionFlagsLib {202 /// Tokens in foreign collections can be transferred, but not burnt203 CollectionFlags constant foreignField = CollectionFlags.wrap(128);204 /// Supports ERC721Metadata205 CollectionFlags constant erc721metadataField = CollectionFlags.wrap(64);206 /// External collections can't be managed using `unique` api207 CollectionFlags constant externalField = CollectionFlags.wrap(1);208209 /// Reserved flags210 function reservedField(uint8 value) public pure returns (CollectionFlags) {211 require(value < 1 << 5, "out of bound value");212 return CollectionFlags.wrap(value << 1);213 }214}215216/// Cross account struct217struct CrossAddress {218 address eth;219 uint256 sub;220}221222/// [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM.223struct CollectionLimitValue {224 CollectionLimitField field;225 uint256 value;226}227228/// [`CollectionLimits`](up_data_structs::CollectionLimits) fields representation for EVM.229enum CollectionLimitField {230 /// How many tokens can a user have on one account.231 AccountTokenOwnership,232 /// How many bytes of data are available for sponsorship.233 SponsoredDataSize,234 /// In any case, chain default: [`SponsoringRateLimit::SponsoringDisabled`]235 SponsoredDataRateLimit,236 /// How many tokens can be mined into this collection.237 TokenLimit,238 /// Timeouts for transfer sponsoring.239 SponsorTransferTimeout,240 /// Timeout for sponsoring an approval in passed blocks.241 SponsorApproveTimeout,242 /// Whether the collection owner of the collection can send tokens (which belong to other users).243 OwnerCanTransfer,244 /// Can the collection owner burn other people's tokens.245 OwnerCanDestroy,246 /// Is it possible to send tokens from this collection between users.247 TransferEnabled248}249250/// Nested collections and permissions251struct CollectionNestingAndPermission {252 /// Owner of token can nest tokens under it.253 bool token_owner;254 /// Admin of token collection can nest tokens under token.255 bool collection_admin;256 /// If set - only tokens from specified collections can be nested.257 address[] restricted;258}259260/// Ethereum representation of Token Property Permissions.261struct TokenPropertyPermission {262 /// Token property key.263 string key;264 /// Token property permissions.265 PropertyPermission[] permissions;266}267268/// Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) as an key and value.269struct PropertyPermission {270 /// TokenPermission field.271 TokenPermissionField code;272 /// TokenPermission value.273 bool value;274}275276/// Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) fields as an enumeration.277enum TokenPermissionField {278 /// Permission to change the property and property permission. See [`up_data_structs::PropertyPermission::mutable`]279 Mutable,280 /// Change permission for the collection administrator. See [`up_data_structs::PropertyPermission::token_owner`]281 TokenOwner,282 /// Permission to change the property for the owner of the token. See [`up_data_structs::PropertyPermission::collection_admin`]283 CollectionAdmin284}285286/// Ethereum representation of collection [`PropertyKey`](up_data_structs::PropertyKey) and [`PropertyValue`](up_data_structs::PropertyValue).287struct Property {288 string key;289 bytes value;290}291292/// Type of tokens in collection293enum CollectionMode {294 /// Nonfungible295 Nonfungible,296 /// Fungible297 Fungible,298 /// Refungible299 Refungible300}