git.delta.rocks / unique-network / refs/commits / f001d288aada

difftreelog

chore generate stubs

PraetorP2022-12-16parent: #3ef6188.patch.diff
in: master

11 files changed

modifiedpallets/fungible/src/stubs/UniqueFungible.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/fungible/src/stubs/UniqueFungible.soldiffbeforeafterboth
--- a/pallets/fungible/src/stubs/UniqueFungible.sol
+++ b/pallets/fungible/src/stubs/UniqueFungible.sol
@@ -487,15 +487,25 @@
 	uint256[] field_1;
 }
 
+/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM.
 enum CollectionLimits {
+	/// @dev How many tokens can a user have on one account.
 	AccountTokenOwnership,
+	/// @dev How many bytes of data are available for sponsorship.
 	SponsoredDataSize,
+	/// @dev In any case, chain default: [`SponsoringRateLimit::SponsoringDisabled`]
 	SponsoredDataRateLimit,
+	/// @dev How many tokens can be mined into this collection.
 	TokenLimit,
+	/// @dev Timeouts for transfer sponsoring.
 	SponsorTransferTimeout,
+	/// @dev Timeout for sponsoring an approval in passed blocks.
 	SponsorApproveTimeout,
+	/// @dev Whether the collection owner of the collection can send tokens (which belong to other users).
 	OwnerCanTransfer,
+	/// @dev Can the collection owner burn other people's tokens.
 	OwnerCanDestroy,
+	/// @dev Is it possible to send tokens from this collection between users.
 	TransferEnabled
 }
 
modifiedpallets/nonfungible/src/stubs/UniqueNFT.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/nonfungible/src/stubs/UniqueNFT.soldiffbeforeafterboth
--- a/pallets/nonfungible/src/stubs/UniqueNFT.sol
+++ b/pallets/nonfungible/src/stubs/UniqueNFT.sol
@@ -42,18 +42,19 @@
 	/// @param permissions Permissions for keys.
 	/// @dev EVM selector for this function is: 0xbd92983a,
 	///  or in textual repr: setTokenPropertyPermissions((string,(uint8,bool)[])[])
-	function setTokenPropertyPermissions(Tuple48[] memory permissions) public {
+	function setTokenPropertyPermissions(Tuple59[] memory permissions) public {
 		require(false, stub_error);
 		permissions;
 		dummy = 0;
 	}
 
+	/// @notice Get permissions for token properties.
 	/// @dev EVM selector for this function is: 0xf23d7790,
 	///  or in textual repr: tokenPropertyPermissions()
-	function tokenPropertyPermissions() public view returns (Tuple48[] memory) {
+	function tokenPropertyPermissions() public view returns (Tuple59[] memory) {
 		require(false, stub_error);
 		dummy;
-		return new Tuple48[](0);
+		return new Tuple59[](0);
 	}
 
 	// /// @notice Set token property value.
@@ -132,20 +133,24 @@
 	bytes value;
 }
 
+/// @dev Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) fields as an enumeration.
 enum EthTokenPermissions {
+	/// @dev Permission to change the property and property permission. See [`up_data_structs::PropertyPermission::mutable`]
 	Mutable,
+	/// @dev Change permission for the collection administrator. See [`up_data_structs::PropertyPermission::token_owner`]
 	TokenOwner,
+	/// @dev Permission to change the property for the owner of the token. See [`up_data_structs::PropertyPermission::collection_admin`]
 	CollectionAdmin
 }
 
 /// @dev anonymous struct
-struct Tuple48 {
+struct Tuple59 {
 	string field_0;
-	Tuple46[] field_1;
+	Tuple57[] field_1;
 }
 
 /// @dev anonymous struct
-struct Tuple46 {
+struct Tuple57 {
 	EthTokenPermissions field_0;
 	bool field_1;
 }
@@ -620,15 +625,25 @@
 	uint256[] field_1;
 }
 
+/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM.
 enum CollectionLimits {
+	/// @dev How many tokens can a user have on one account.
 	AccountTokenOwnership,
+	/// @dev How many bytes of data are available for sponsorship.
 	SponsoredDataSize,
+	/// @dev In any case, chain default: [`SponsoringRateLimit::SponsoringDisabled`]
 	SponsoredDataRateLimit,
+	/// @dev How many tokens can be mined into this collection.
 	TokenLimit,
+	/// @dev Timeouts for transfer sponsoring.
 	SponsorTransferTimeout,
+	/// @dev Timeout for sponsoring an approval in passed blocks.
 	SponsorApproveTimeout,
+	/// @dev Whether the collection owner of the collection can send tokens (which belong to other users).
 	OwnerCanTransfer,
+	/// @dev Can the collection owner burn other people's tokens.
 	OwnerCanDestroy,
+	/// @dev Is it possible to send tokens from this collection between users.
 	TransferEnabled
 }
 
modifiedpallets/refungible/src/stubs/UniqueRefungible.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/refungible/src/stubs/UniqueRefungible.soldiffbeforeafterboth
--- a/pallets/refungible/src/stubs/UniqueRefungible.sol
+++ b/pallets/refungible/src/stubs/UniqueRefungible.sol
@@ -42,7 +42,7 @@
 	/// @param permissions Permissions for keys.
 	/// @dev EVM selector for this function is: 0xbd92983a,
 	///  or in textual repr: setTokenPropertyPermissions((string,(uint8,bool)[])[])
-	function setTokenPropertyPermissions(Tuple53[] memory permissions) public {
+	function setTokenPropertyPermissions(Tuple58[] memory permissions) public {
 		require(false, stub_error);
 		permissions;
 		dummy = 0;
@@ -51,10 +51,10 @@
 	/// @notice Get permissions for token properties.
 	/// @dev EVM selector for this function is: 0xf23d7790,
 	///  or in textual repr: tokenPropertyPermissions()
-	function tokenPropertyPermissions() public view returns (Tuple53[] memory) {
+	function tokenPropertyPermissions() public view returns (Tuple58[] memory) {
 		require(false, stub_error);
 		dummy;
-		return new Tuple53[](0);
+		return new Tuple58[](0);
 	}
 
 	// /// @notice Set token property value.
@@ -133,20 +133,24 @@
 	bytes value;
 }
 
+/// @dev Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) fields as an enumeration.
 enum EthTokenPermissions {
+	/// @dev Permission to change the property and property permission. See [`up_data_structs::PropertyPermission::mutable`]
 	Mutable,
+	/// @dev Change permission for the collection administrator. See [`up_data_structs::PropertyPermission::token_owner`]
 	TokenOwner,
+	/// @dev Permission to change the property for the owner of the token. See [`up_data_structs::PropertyPermission::collection_admin`]
 	CollectionAdmin
 }
 
 /// @dev anonymous struct
-struct Tuple53 {
+struct Tuple58 {
 	string field_0;
-	Tuple51[] field_1;
+	Tuple56[] field_1;
 }
 
 /// @dev anonymous struct
-struct Tuple51 {
+struct Tuple56 {
 	EthTokenPermissions field_0;
 	bool field_1;
 }
@@ -621,15 +625,25 @@
 	uint256[] field_1;
 }
 
+/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM.
 enum CollectionLimits {
+	/// @dev How many tokens can a user have on one account.
 	AccountTokenOwnership,
+	/// @dev How many bytes of data are available for sponsorship.
 	SponsoredDataSize,
+	/// @dev In any case, chain default: [`SponsoringRateLimit::SponsoringDisabled`]
 	SponsoredDataRateLimit,
+	/// @dev How many tokens can be mined into this collection.
 	TokenLimit,
+	/// @dev Timeouts for transfer sponsoring.
 	SponsorTransferTimeout,
+	/// @dev Timeout for sponsoring an approval in passed blocks.
 	SponsorApproveTimeout,
+	/// @dev Whether the collection owner of the collection can send tokens (which belong to other users).
 	OwnerCanTransfer,
+	/// @dev Can the collection owner burn other people's tokens.
 	OwnerCanDestroy,
+	/// @dev Is it possible to send tokens from this collection between users.
 	TransferEnabled
 }
 
modifiedtests/src/eth/abi/nonFungible.jsondiffbeforeafterboth
--- a/tests/src/eth/abi/nonFungible.json
+++ b/tests/src/eth/abi/nonFungible.json
@@ -736,12 +736,12 @@
               },
               { "internalType": "bool", "name": "field_1", "type": "bool" }
             ],
-            "internalType": "struct Tuple46[]",
+            "internalType": "struct Tuple57[]",
             "name": "field_1",
             "type": "tuple[]"
           }
         ],
-        "internalType": "struct Tuple48[]",
+        "internalType": "struct Tuple59[]",
         "name": "permissions",
         "type": "tuple[]"
       }
@@ -802,12 +802,12 @@
               },
               { "internalType": "bool", "name": "field_1", "type": "bool" }
             ],
-            "internalType": "struct Tuple46[]",
+            "internalType": "struct Tuple57[]",
             "name": "field_1",
             "type": "tuple[]"
           }
         ],
-        "internalType": "struct Tuple48[]",
+        "internalType": "struct Tuple59[]",
         "name": "",
         "type": "tuple[]"
       }
modifiedtests/src/eth/abi/reFungible.jsondiffbeforeafterboth
before · tests/src/eth/abi/reFungible.json
1[2  {3    "anonymous": false,4    "inputs": [5      {6        "indexed": true,7        "internalType": "address",8        "name": "owner",9        "type": "address"10      },11      {12        "indexed": true,13        "internalType": "address",14        "name": "approved",15        "type": "address"16      },17      {18        "indexed": true,19        "internalType": "uint256",20        "name": "tokenId",21        "type": "uint256"22      }23    ],24    "name": "Approval",25    "type": "event"26  },27  {28    "anonymous": false,29    "inputs": [30      {31        "indexed": true,32        "internalType": "address",33        "name": "owner",34        "type": "address"35      },36      {37        "indexed": true,38        "internalType": "address",39        "name": "operator",40        "type": "address"41      },42      {43        "indexed": false,44        "internalType": "bool",45        "name": "approved",46        "type": "bool"47      }48    ],49    "name": "ApprovalForAll",50    "type": "event"51  },52  {53    "anonymous": false,54    "inputs": [],55    "name": "MintingFinished",56    "type": "event"57  },58  {59    "anonymous": false,60    "inputs": [61      {62        "indexed": true,63        "internalType": "address",64        "name": "from",65        "type": "address"66      },67      {68        "indexed": true,69        "internalType": "address",70        "name": "to",71        "type": "address"72      },73      {74        "indexed": true,75        "internalType": "uint256",76        "name": "tokenId",77        "type": "uint256"78      }79    ],80    "name": "Transfer",81    "type": "event"82  },83  {84    "inputs": [85      {86        "components": [87          { "internalType": "address", "name": "eth", "type": "address" },88          { "internalType": "uint256", "name": "sub", "type": "uint256" }89        ],90        "internalType": "struct EthCrossAccount",91        "name": "newAdmin",92        "type": "tuple"93      }94    ],95    "name": "addCollectionAdminCross",96    "outputs": [],97    "stateMutability": "nonpayable",98    "type": "function"99  },100  {101    "inputs": [102      {103        "components": [104          { "internalType": "address", "name": "eth", "type": "address" },105          { "internalType": "uint256", "name": "sub", "type": "uint256" }106        ],107        "internalType": "struct EthCrossAccount",108        "name": "user",109        "type": "tuple"110      }111    ],112    "name": "addToCollectionAllowListCross",113    "outputs": [],114    "stateMutability": "nonpayable",115    "type": "function"116  },117  {118    "inputs": [119      {120        "components": [121          { "internalType": "address", "name": "eth", "type": "address" },122          { "internalType": "uint256", "name": "sub", "type": "uint256" }123        ],124        "internalType": "struct EthCrossAccount",125        "name": "user",126        "type": "tuple"127      }128    ],129    "name": "allowlistedCross",130    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],131    "stateMutability": "view",132    "type": "function"133  },134  {135    "inputs": [136      { "internalType": "address", "name": "approved", "type": "address" },137      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }138    ],139    "name": "approve",140    "outputs": [],141    "stateMutability": "nonpayable",142    "type": "function"143  },144  {145    "inputs": [146      { "internalType": "address", "name": "owner", "type": "address" }147    ],148    "name": "balanceOf",149    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],150    "stateMutability": "view",151    "type": "function"152  },153  {154    "inputs": [155      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }156    ],157    "name": "burn",158    "outputs": [],159    "stateMutability": "nonpayable",160    "type": "function"161  },162  {163    "inputs": [164      {165        "components": [166          { "internalType": "address", "name": "eth", "type": "address" },167          { "internalType": "uint256", "name": "sub", "type": "uint256" }168        ],169        "internalType": "struct EthCrossAccount",170        "name": "from",171        "type": "tuple"172      },173      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }174    ],175    "name": "burnFromCross",176    "outputs": [],177    "stateMutability": "nonpayable",178    "type": "function"179  },180  {181    "inputs": [182      {183        "components": [184          { "internalType": "address", "name": "eth", "type": "address" },185          { "internalType": "uint256", "name": "sub", "type": "uint256" }186        ],187        "internalType": "struct EthCrossAccount",188        "name": "newOwner",189        "type": "tuple"190      }191    ],192    "name": "changeCollectionOwnerCross",193    "outputs": [],194    "stateMutability": "nonpayable",195    "type": "function"196  },197  {198    "inputs": [],199    "name": "collectionAdmins",200    "outputs": [201      {202        "components": [203          { "internalType": "address", "name": "eth", "type": "address" },204          { "internalType": "uint256", "name": "sub", "type": "uint256" }205        ],206        "internalType": "struct EthCrossAccount[]",207        "name": "",208        "type": "tuple[]"209      }210    ],211    "stateMutability": "view",212    "type": "function"213  },214  {215    "inputs": [],216    "name": "collectionHelperAddress",217    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],218    "stateMutability": "view",219    "type": "function"220  },221  {222    "inputs": [],223    "name": "collectionLimits",224    "outputs": [225      {226        "components": [227          {228            "internalType": "enum CollectionLimits",229            "name": "field_0",230            "type": "uint8"231          },232          { "internalType": "bool", "name": "field_1", "type": "bool" },233          { "internalType": "uint256", "name": "field_2", "type": "uint256" }234        ],235        "internalType": "struct Tuple32[]",236        "name": "",237        "type": "tuple[]"238      }239    ],240    "stateMutability": "view",241    "type": "function"242  },243  {244    "inputs": [],245    "name": "collectionNestingPermissions",246    "outputs": [247      {248        "components": [249          {250            "internalType": "enum CollectionPermissions",251            "name": "field_0",252            "type": "uint8"253          },254          { "internalType": "bool", "name": "field_1", "type": "bool" }255        ],256        "internalType": "struct Tuple41[]",257        "name": "",258        "type": "tuple[]"259      }260    ],261    "stateMutability": "view",262    "type": "function"263  },264  {265    "inputs": [],266    "name": "collectionNestingRestrictedCollectionIds",267    "outputs": [268      {269        "components": [270          { "internalType": "bool", "name": "field_0", "type": "bool" },271          {272            "internalType": "uint256[]",273            "name": "field_1",274            "type": "uint256[]"275          }276        ],277        "internalType": "struct Tuple38",278        "name": "",279        "type": "tuple"280      }281    ],282    "stateMutability": "view",283    "type": "function"284  },285  {286    "inputs": [],287    "name": "collectionOwner",288    "outputs": [289      {290        "components": [291          { "internalType": "address", "name": "eth", "type": "address" },292          { "internalType": "uint256", "name": "sub", "type": "uint256" }293        ],294        "internalType": "struct EthCrossAccount",295        "name": "",296        "type": "tuple"297      }298    ],299    "stateMutability": "view",300    "type": "function"301  },302  {303    "inputs": [304      { "internalType": "string[]", "name": "keys", "type": "string[]" }305    ],306    "name": "collectionProperties",307    "outputs": [308      {309        "components": [310          { "internalType": "string", "name": "key", "type": "string" },311          { "internalType": "bytes", "name": "value", "type": "bytes" }312        ],313        "internalType": "struct Property[]",314        "name": "",315        "type": "tuple[]"316      }317    ],318    "stateMutability": "view",319    "type": "function"320  },321  {322    "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],323    "name": "collectionProperty",324    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],325    "stateMutability": "view",326    "type": "function"327  },328  {329    "inputs": [],330    "name": "collectionSponsor",331    "outputs": [332      {333        "components": [334          { "internalType": "address", "name": "field_0", "type": "address" },335          { "internalType": "uint256", "name": "field_1", "type": "uint256" }336        ],337        "internalType": "struct Tuple29",338        "name": "",339        "type": "tuple"340      }341    ],342    "stateMutability": "view",343    "type": "function"344  },345  {346    "inputs": [],347    "name": "confirmCollectionSponsorship",348    "outputs": [],349    "stateMutability": "nonpayable",350    "type": "function"351  },352  {353    "inputs": [],354    "name": "contractAddress",355    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],356    "stateMutability": "view",357    "type": "function"358  },359  {360    "inputs": [361      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }362    ],363    "name": "crossOwnerOf",364    "outputs": [365      {366        "components": [367          { "internalType": "address", "name": "eth", "type": "address" },368          { "internalType": "uint256", "name": "sub", "type": "uint256" }369        ],370        "internalType": "struct EthCrossAccount",371        "name": "",372        "type": "tuple"373      }374    ],375    "stateMutability": "view",376    "type": "function"377  },378  {379    "inputs": [380      { "internalType": "string[]", "name": "keys", "type": "string[]" }381    ],382    "name": "deleteCollectionProperties",383    "outputs": [],384    "stateMutability": "nonpayable",385    "type": "function"386  },387  {388    "inputs": [389      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },390      { "internalType": "string[]", "name": "keys", "type": "string[]" }391    ],392    "name": "deleteProperties",393    "outputs": [],394    "stateMutability": "nonpayable",395    "type": "function"396  },397  {398    "inputs": [],399    "name": "description",400    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],401    "stateMutability": "view",402    "type": "function"403  },404  {405    "inputs": [],406    "name": "finishMinting",407    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],408    "stateMutability": "nonpayable",409    "type": "function"410  },411  {412    "inputs": [413      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }414    ],415    "name": "getApproved",416    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],417    "stateMutability": "view",418    "type": "function"419  },420  {421    "inputs": [],422    "name": "hasCollectionPendingSponsor",423    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],424    "stateMutability": "view",425    "type": "function"426  },427  {428    "inputs": [429      { "internalType": "address", "name": "owner", "type": "address" },430      { "internalType": "address", "name": "operator", "type": "address" }431    ],432    "name": "isApprovedForAll",433    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],434    "stateMutability": "view",435    "type": "function"436  },437  {438    "inputs": [439      {440        "components": [441          { "internalType": "address", "name": "eth", "type": "address" },442          { "internalType": "uint256", "name": "sub", "type": "uint256" }443        ],444        "internalType": "struct EthCrossAccount",445        "name": "user",446        "type": "tuple"447      }448    ],449    "name": "isOwnerOrAdminCross",450    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],451    "stateMutability": "view",452    "type": "function"453  },454  {455    "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],456    "name": "mint",457    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],458    "stateMutability": "nonpayable",459    "type": "function"460  },461  {462    "inputs": [463      { "internalType": "address", "name": "to", "type": "address" },464      { "internalType": "string", "name": "tokenUri", "type": "string" }465    ],466    "name": "mintWithTokenURI",467    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],468    "stateMutability": "nonpayable",469    "type": "function"470  },471  {472    "inputs": [],473    "name": "mintingFinished",474    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],475    "stateMutability": "view",476    "type": "function"477  },478  {479    "inputs": [],480    "name": "name",481    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],482    "stateMutability": "view",483    "type": "function"484  },485  {486    "inputs": [],487    "name": "nextTokenId",488    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],489    "stateMutability": "view",490    "type": "function"491  },492  {493    "inputs": [494      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }495    ],496    "name": "ownerOf",497    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],498    "stateMutability": "view",499    "type": "function"500  },501  {502    "inputs": [503      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },504      { "internalType": "string[]", "name": "keys", "type": "string[]" }505    ],506    "name": "properties",507    "outputs": [508      {509        "components": [510          { "internalType": "string", "name": "key", "type": "string" },511          { "internalType": "bytes", "name": "value", "type": "bytes" }512        ],513        "internalType": "struct Property[]",514        "name": "",515        "type": "tuple[]"516      }517    ],518    "stateMutability": "view",519    "type": "function"520  },521  {522    "inputs": [523      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },524      { "internalType": "string", "name": "key", "type": "string" }525    ],526    "name": "property",527    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],528    "stateMutability": "view",529    "type": "function"530  },531  {532    "inputs": [533      {534        "components": [535          { "internalType": "address", "name": "eth", "type": "address" },536          { "internalType": "uint256", "name": "sub", "type": "uint256" }537        ],538        "internalType": "struct EthCrossAccount",539        "name": "admin",540        "type": "tuple"541      }542    ],543    "name": "removeCollectionAdminCross",544    "outputs": [],545    "stateMutability": "nonpayable",546    "type": "function"547  },548  {549    "inputs": [],550    "name": "removeCollectionSponsor",551    "outputs": [],552    "stateMutability": "nonpayable",553    "type": "function"554  },555  {556    "inputs": [557      {558        "components": [559          { "internalType": "address", "name": "eth", "type": "address" },560          { "internalType": "uint256", "name": "sub", "type": "uint256" }561        ],562        "internalType": "struct EthCrossAccount",563        "name": "user",564        "type": "tuple"565      }566    ],567    "name": "removeFromCollectionAllowListCross",568    "outputs": [],569    "stateMutability": "nonpayable",570    "type": "function"571  },572  {573    "inputs": [574      { "internalType": "address", "name": "from", "type": "address" },575      { "internalType": "address", "name": "to", "type": "address" },576      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }577    ],578    "name": "safeTransferFrom",579    "outputs": [],580    "stateMutability": "nonpayable",581    "type": "function"582  },583  {584    "inputs": [585      { "internalType": "address", "name": "from", "type": "address" },586      { "internalType": "address", "name": "to", "type": "address" },587      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },588      { "internalType": "bytes", "name": "data", "type": "bytes" }589    ],590    "name": "safeTransferFromWithData",591    "outputs": [],592    "stateMutability": "nonpayable",593    "type": "function"594  },595  {596    "inputs": [597      { "internalType": "address", "name": "operator", "type": "address" },598      { "internalType": "bool", "name": "approved", "type": "bool" }599    ],600    "name": "setApprovalForAll",601    "outputs": [],602    "stateMutability": "nonpayable",603    "type": "function"604  },605  {606    "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],607    "name": "setCollectionAccess",608    "outputs": [],609    "stateMutability": "nonpayable",610    "type": "function"611  },612  {613    "inputs": [614      {615        "internalType": "enum CollectionLimits",616        "name": "limit",617        "type": "uint8"618      },619      { "internalType": "bool", "name": "status", "type": "bool" },620      { "internalType": "uint256", "name": "value", "type": "uint256" }621    ],622    "name": "setCollectionLimit",623    "outputs": [],624    "stateMutability": "nonpayable",625    "type": "function"626  },627  {628    "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],629    "name": "setCollectionMintMode",630    "outputs": [],631    "stateMutability": "nonpayable",632    "type": "function"633  },634  {635    "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],636    "name": "setCollectionNesting",637    "outputs": [],638    "stateMutability": "nonpayable",639    "type": "function"640  },641  {642    "inputs": [643      { "internalType": "bool", "name": "enable", "type": "bool" },644      {645        "internalType": "address[]",646        "name": "collections",647        "type": "address[]"648      }649    ],650    "name": "setCollectionNesting",651    "outputs": [],652    "stateMutability": "nonpayable",653    "type": "function"654  },655  {656    "inputs": [657      {658        "components": [659          { "internalType": "string", "name": "key", "type": "string" },660          { "internalType": "bytes", "name": "value", "type": "bytes" }661        ],662        "internalType": "struct Property[]",663        "name": "properties",664        "type": "tuple[]"665      }666    ],667    "name": "setCollectionProperties",668    "outputs": [],669    "stateMutability": "nonpayable",670    "type": "function"671  },672  {673    "inputs": [674      {675        "components": [676          { "internalType": "address", "name": "eth", "type": "address" },677          { "internalType": "uint256", "name": "sub", "type": "uint256" }678        ],679        "internalType": "struct EthCrossAccount",680        "name": "sponsor",681        "type": "tuple"682      }683    ],684    "name": "setCollectionSponsorCross",685    "outputs": [],686    "stateMutability": "nonpayable",687    "type": "function"688  },689  {690    "inputs": [691      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },692      {693        "components": [694          { "internalType": "string", "name": "key", "type": "string" },695          { "internalType": "bytes", "name": "value", "type": "bytes" }696        ],697        "internalType": "struct Property[]",698        "name": "properties",699        "type": "tuple[]"700      }701    ],702    "name": "setProperties",703    "outputs": [],704    "stateMutability": "nonpayable",705    "type": "function"706  },707  {708    "inputs": [709      {710        "components": [711          { "internalType": "string", "name": "field_0", "type": "string" },712          {713            "components": [714              {715                "internalType": "enum EthTokenPermissions",716                "name": "field_0",717                "type": "uint8"718              },719              { "internalType": "bool", "name": "field_1", "type": "bool" }720            ],721            "internalType": "struct Tuple51[]",722            "name": "field_1",723            "type": "tuple[]"724          }725        ],726        "internalType": "struct Tuple53[]",727        "name": "permissions",728        "type": "tuple[]"729      }730    ],731    "name": "setTokenPropertyPermissions",732    "outputs": [],733    "stateMutability": "nonpayable",734    "type": "function"735  },736  {737    "inputs": [738      { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }739    ],740    "name": "supportsInterface",741    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],742    "stateMutability": "view",743    "type": "function"744  },745  {746    "inputs": [],747    "name": "symbol",748    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],749    "stateMutability": "view",750    "type": "function"751  },752  {753    "inputs": [754      { "internalType": "uint256", "name": "index", "type": "uint256" }755    ],756    "name": "tokenByIndex",757    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],758    "stateMutability": "view",759    "type": "function"760  },761  {762    "inputs": [763      { "internalType": "uint256", "name": "token", "type": "uint256" }764    ],765    "name": "tokenContractAddress",766    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],767    "stateMutability": "view",768    "type": "function"769  },770  {771    "inputs": [772      { "internalType": "address", "name": "owner", "type": "address" },773      { "internalType": "uint256", "name": "index", "type": "uint256" }774    ],775    "name": "tokenOfOwnerByIndex",776    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],777    "stateMutability": "view",778    "type": "function"779  },780  {781    "inputs": [],782    "name": "tokenPropertyPermissions",783    "outputs": [784      {785        "components": [786          { "internalType": "string", "name": "field_0", "type": "string" },787          {788            "components": [789              {790                "internalType": "enum EthTokenPermissions",791                "name": "field_0",792                "type": "uint8"793              },794              { "internalType": "bool", "name": "field_1", "type": "bool" }795            ],796            "internalType": "struct Tuple51[]",797            "name": "field_1",798            "type": "tuple[]"799          }800        ],801        "internalType": "struct Tuple53[]",802        "name": "",803        "type": "tuple[]"804      }805    ],806    "stateMutability": "view",807    "type": "function"808  },809  {810    "inputs": [811      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }812    ],813    "name": "tokenURI",814    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],815    "stateMutability": "view",816    "type": "function"817  },818  {819    "inputs": [],820    "name": "totalSupply",821    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],822    "stateMutability": "view",823    "type": "function"824  },825  {826    "inputs": [827      { "internalType": "address", "name": "to", "type": "address" },828      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }829    ],830    "name": "transfer",831    "outputs": [],832    "stateMutability": "nonpayable",833    "type": "function"834  },835  {836    "inputs": [837      {838        "components": [839          { "internalType": "address", "name": "eth", "type": "address" },840          { "internalType": "uint256", "name": "sub", "type": "uint256" }841        ],842        "internalType": "struct EthCrossAccount",843        "name": "to",844        "type": "tuple"845      },846      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }847    ],848    "name": "transferCross",849    "outputs": [],850    "stateMutability": "nonpayable",851    "type": "function"852  },853  {854    "inputs": [855      { "internalType": "address", "name": "from", "type": "address" },856      { "internalType": "address", "name": "to", "type": "address" },857      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }858    ],859    "name": "transferFrom",860    "outputs": [],861    "stateMutability": "nonpayable",862    "type": "function"863  },864  {865    "inputs": [866      {867        "components": [868          { "internalType": "address", "name": "eth", "type": "address" },869          { "internalType": "uint256", "name": "sub", "type": "uint256" }870        ],871        "internalType": "struct EthCrossAccount",872        "name": "from",873        "type": "tuple"874      },875      {876        "components": [877          { "internalType": "address", "name": "eth", "type": "address" },878          { "internalType": "uint256", "name": "sub", "type": "uint256" }879        ],880        "internalType": "struct EthCrossAccount",881        "name": "to",882        "type": "tuple"883      },884      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }885    ],886    "name": "transferFromCross",887    "outputs": [],888    "stateMutability": "nonpayable",889    "type": "function"890  },891  {892    "inputs": [],893    "name": "uniqueCollectionType",894    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],895    "stateMutability": "view",896    "type": "function"897  }898]
after · tests/src/eth/abi/reFungible.json
1[2  {3    "anonymous": false,4    "inputs": [5      {6        "indexed": true,7        "internalType": "address",8        "name": "owner",9        "type": "address"10      },11      {12        "indexed": true,13        "internalType": "address",14        "name": "approved",15        "type": "address"16      },17      {18        "indexed": true,19        "internalType": "uint256",20        "name": "tokenId",21        "type": "uint256"22      }23    ],24    "name": "Approval",25    "type": "event"26  },27  {28    "anonymous": false,29    "inputs": [30      {31        "indexed": true,32        "internalType": "address",33        "name": "owner",34        "type": "address"35      },36      {37        "indexed": true,38        "internalType": "address",39        "name": "operator",40        "type": "address"41      },42      {43        "indexed": false,44        "internalType": "bool",45        "name": "approved",46        "type": "bool"47      }48    ],49    "name": "ApprovalForAll",50    "type": "event"51  },52  {53    "anonymous": false,54    "inputs": [],55    "name": "MintingFinished",56    "type": "event"57  },58  {59    "anonymous": false,60    "inputs": [61      {62        "indexed": true,63        "internalType": "address",64        "name": "from",65        "type": "address"66      },67      {68        "indexed": true,69        "internalType": "address",70        "name": "to",71        "type": "address"72      },73      {74        "indexed": true,75        "internalType": "uint256",76        "name": "tokenId",77        "type": "uint256"78      }79    ],80    "name": "Transfer",81    "type": "event"82  },83  {84    "inputs": [85      {86        "components": [87          { "internalType": "address", "name": "eth", "type": "address" },88          { "internalType": "uint256", "name": "sub", "type": "uint256" }89        ],90        "internalType": "struct EthCrossAccount",91        "name": "newAdmin",92        "type": "tuple"93      }94    ],95    "name": "addCollectionAdminCross",96    "outputs": [],97    "stateMutability": "nonpayable",98    "type": "function"99  },100  {101    "inputs": [102      {103        "components": [104          { "internalType": "address", "name": "eth", "type": "address" },105          { "internalType": "uint256", "name": "sub", "type": "uint256" }106        ],107        "internalType": "struct EthCrossAccount",108        "name": "user",109        "type": "tuple"110      }111    ],112    "name": "addToCollectionAllowListCross",113    "outputs": [],114    "stateMutability": "nonpayable",115    "type": "function"116  },117  {118    "inputs": [119      {120        "components": [121          { "internalType": "address", "name": "eth", "type": "address" },122          { "internalType": "uint256", "name": "sub", "type": "uint256" }123        ],124        "internalType": "struct EthCrossAccount",125        "name": "user",126        "type": "tuple"127      }128    ],129    "name": "allowlistedCross",130    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],131    "stateMutability": "view",132    "type": "function"133  },134  {135    "inputs": [136      { "internalType": "address", "name": "approved", "type": "address" },137      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }138    ],139    "name": "approve",140    "outputs": [],141    "stateMutability": "nonpayable",142    "type": "function"143  },144  {145    "inputs": [146      { "internalType": "address", "name": "owner", "type": "address" }147    ],148    "name": "balanceOf",149    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],150    "stateMutability": "view",151    "type": "function"152  },153  {154    "inputs": [155      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }156    ],157    "name": "burn",158    "outputs": [],159    "stateMutability": "nonpayable",160    "type": "function"161  },162  {163    "inputs": [164      {165        "components": [166          { "internalType": "address", "name": "eth", "type": "address" },167          { "internalType": "uint256", "name": "sub", "type": "uint256" }168        ],169        "internalType": "struct EthCrossAccount",170        "name": "from",171        "type": "tuple"172      },173      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }174    ],175    "name": "burnFromCross",176    "outputs": [],177    "stateMutability": "nonpayable",178    "type": "function"179  },180  {181    "inputs": [182      {183        "components": [184          { "internalType": "address", "name": "eth", "type": "address" },185          { "internalType": "uint256", "name": "sub", "type": "uint256" }186        ],187        "internalType": "struct EthCrossAccount",188        "name": "newOwner",189        "type": "tuple"190      }191    ],192    "name": "changeCollectionOwnerCross",193    "outputs": [],194    "stateMutability": "nonpayable",195    "type": "function"196  },197  {198    "inputs": [],199    "name": "collectionAdmins",200    "outputs": [201      {202        "components": [203          { "internalType": "address", "name": "eth", "type": "address" },204          { "internalType": "uint256", "name": "sub", "type": "uint256" }205        ],206        "internalType": "struct EthCrossAccount[]",207        "name": "",208        "type": "tuple[]"209      }210    ],211    "stateMutability": "view",212    "type": "function"213  },214  {215    "inputs": [],216    "name": "collectionHelperAddress",217    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],218    "stateMutability": "view",219    "type": "function"220  },221  {222    "inputs": [],223    "name": "collectionLimits",224    "outputs": [225      {226        "components": [227          {228            "internalType": "enum CollectionLimits",229            "name": "field_0",230            "type": "uint8"231          },232          { "internalType": "bool", "name": "field_1", "type": "bool" },233          { "internalType": "uint256", "name": "field_2", "type": "uint256" }234        ],235        "internalType": "struct Tuple32[]",236        "name": "",237        "type": "tuple[]"238      }239    ],240    "stateMutability": "view",241    "type": "function"242  },243  {244    "inputs": [],245    "name": "collectionNestingPermissions",246    "outputs": [247      {248        "components": [249          {250            "internalType": "enum CollectionPermissions",251            "name": "field_0",252            "type": "uint8"253          },254          { "internalType": "bool", "name": "field_1", "type": "bool" }255        ],256        "internalType": "struct Tuple41[]",257        "name": "",258        "type": "tuple[]"259      }260    ],261    "stateMutability": "view",262    "type": "function"263  },264  {265    "inputs": [],266    "name": "collectionNestingRestrictedCollectionIds",267    "outputs": [268      {269        "components": [270          { "internalType": "bool", "name": "field_0", "type": "bool" },271          {272            "internalType": "uint256[]",273            "name": "field_1",274            "type": "uint256[]"275          }276        ],277        "internalType": "struct Tuple38",278        "name": "",279        "type": "tuple"280      }281    ],282    "stateMutability": "view",283    "type": "function"284  },285  {286    "inputs": [],287    "name": "collectionOwner",288    "outputs": [289      {290        "components": [291          { "internalType": "address", "name": "eth", "type": "address" },292          { "internalType": "uint256", "name": "sub", "type": "uint256" }293        ],294        "internalType": "struct EthCrossAccount",295        "name": "",296        "type": "tuple"297      }298    ],299    "stateMutability": "view",300    "type": "function"301  },302  {303    "inputs": [304      { "internalType": "string[]", "name": "keys", "type": "string[]" }305    ],306    "name": "collectionProperties",307    "outputs": [308      {309        "components": [310          { "internalType": "string", "name": "key", "type": "string" },311          { "internalType": "bytes", "name": "value", "type": "bytes" }312        ],313        "internalType": "struct Property[]",314        "name": "",315        "type": "tuple[]"316      }317    ],318    "stateMutability": "view",319    "type": "function"320  },321  {322    "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],323    "name": "collectionProperty",324    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],325    "stateMutability": "view",326    "type": "function"327  },328  {329    "inputs": [],330    "name": "collectionSponsor",331    "outputs": [332      {333        "components": [334          { "internalType": "address", "name": "field_0", "type": "address" },335          { "internalType": "uint256", "name": "field_1", "type": "uint256" }336        ],337        "internalType": "struct Tuple29",338        "name": "",339        "type": "tuple"340      }341    ],342    "stateMutability": "view",343    "type": "function"344  },345  {346    "inputs": [],347    "name": "confirmCollectionSponsorship",348    "outputs": [],349    "stateMutability": "nonpayable",350    "type": "function"351  },352  {353    "inputs": [],354    "name": "contractAddress",355    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],356    "stateMutability": "view",357    "type": "function"358  },359  {360    "inputs": [361      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }362    ],363    "name": "crossOwnerOf",364    "outputs": [365      {366        "components": [367          { "internalType": "address", "name": "eth", "type": "address" },368          { "internalType": "uint256", "name": "sub", "type": "uint256" }369        ],370        "internalType": "struct EthCrossAccount",371        "name": "",372        "type": "tuple"373      }374    ],375    "stateMutability": "view",376    "type": "function"377  },378  {379    "inputs": [380      { "internalType": "string[]", "name": "keys", "type": "string[]" }381    ],382    "name": "deleteCollectionProperties",383    "outputs": [],384    "stateMutability": "nonpayable",385    "type": "function"386  },387  {388    "inputs": [389      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },390      { "internalType": "string[]", "name": "keys", "type": "string[]" }391    ],392    "name": "deleteProperties",393    "outputs": [],394    "stateMutability": "nonpayable",395    "type": "function"396  },397  {398    "inputs": [],399    "name": "description",400    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],401    "stateMutability": "view",402    "type": "function"403  },404  {405    "inputs": [],406    "name": "finishMinting",407    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],408    "stateMutability": "nonpayable",409    "type": "function"410  },411  {412    "inputs": [413      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }414    ],415    "name": "getApproved",416    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],417    "stateMutability": "view",418    "type": "function"419  },420  {421    "inputs": [],422    "name": "hasCollectionPendingSponsor",423    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],424    "stateMutability": "view",425    "type": "function"426  },427  {428    "inputs": [429      { "internalType": "address", "name": "owner", "type": "address" },430      { "internalType": "address", "name": "operator", "type": "address" }431    ],432    "name": "isApprovedForAll",433    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],434    "stateMutability": "view",435    "type": "function"436  },437  {438    "inputs": [439      {440        "components": [441          { "internalType": "address", "name": "eth", "type": "address" },442          { "internalType": "uint256", "name": "sub", "type": "uint256" }443        ],444        "internalType": "struct EthCrossAccount",445        "name": "user",446        "type": "tuple"447      }448    ],449    "name": "isOwnerOrAdminCross",450    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],451    "stateMutability": "view",452    "type": "function"453  },454  {455    "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],456    "name": "mint",457    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],458    "stateMutability": "nonpayable",459    "type": "function"460  },461  {462    "inputs": [463      { "internalType": "address", "name": "to", "type": "address" },464      { "internalType": "string", "name": "tokenUri", "type": "string" }465    ],466    "name": "mintWithTokenURI",467    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],468    "stateMutability": "nonpayable",469    "type": "function"470  },471  {472    "inputs": [],473    "name": "mintingFinished",474    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],475    "stateMutability": "view",476    "type": "function"477  },478  {479    "inputs": [],480    "name": "name",481    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],482    "stateMutability": "view",483    "type": "function"484  },485  {486    "inputs": [],487    "name": "nextTokenId",488    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],489    "stateMutability": "view",490    "type": "function"491  },492  {493    "inputs": [494      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }495    ],496    "name": "ownerOf",497    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],498    "stateMutability": "view",499    "type": "function"500  },501  {502    "inputs": [503      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },504      { "internalType": "string[]", "name": "keys", "type": "string[]" }505    ],506    "name": "properties",507    "outputs": [508      {509        "components": [510          { "internalType": "string", "name": "key", "type": "string" },511          { "internalType": "bytes", "name": "value", "type": "bytes" }512        ],513        "internalType": "struct Property[]",514        "name": "",515        "type": "tuple[]"516      }517    ],518    "stateMutability": "view",519    "type": "function"520  },521  {522    "inputs": [523      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },524      { "internalType": "string", "name": "key", "type": "string" }525    ],526    "name": "property",527    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],528    "stateMutability": "view",529    "type": "function"530  },531  {532    "inputs": [533      {534        "components": [535          { "internalType": "address", "name": "eth", "type": "address" },536          { "internalType": "uint256", "name": "sub", "type": "uint256" }537        ],538        "internalType": "struct EthCrossAccount",539        "name": "admin",540        "type": "tuple"541      }542    ],543    "name": "removeCollectionAdminCross",544    "outputs": [],545    "stateMutability": "nonpayable",546    "type": "function"547  },548  {549    "inputs": [],550    "name": "removeCollectionSponsor",551    "outputs": [],552    "stateMutability": "nonpayable",553    "type": "function"554  },555  {556    "inputs": [557      {558        "components": [559          { "internalType": "address", "name": "eth", "type": "address" },560          { "internalType": "uint256", "name": "sub", "type": "uint256" }561        ],562        "internalType": "struct EthCrossAccount",563        "name": "user",564        "type": "tuple"565      }566    ],567    "name": "removeFromCollectionAllowListCross",568    "outputs": [],569    "stateMutability": "nonpayable",570    "type": "function"571  },572  {573    "inputs": [574      { "internalType": "address", "name": "from", "type": "address" },575      { "internalType": "address", "name": "to", "type": "address" },576      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }577    ],578    "name": "safeTransferFrom",579    "outputs": [],580    "stateMutability": "nonpayable",581    "type": "function"582  },583  {584    "inputs": [585      { "internalType": "address", "name": "from", "type": "address" },586      { "internalType": "address", "name": "to", "type": "address" },587      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },588      { "internalType": "bytes", "name": "data", "type": "bytes" }589    ],590    "name": "safeTransferFromWithData",591    "outputs": [],592    "stateMutability": "nonpayable",593    "type": "function"594  },595  {596    "inputs": [597      { "internalType": "address", "name": "operator", "type": "address" },598      { "internalType": "bool", "name": "approved", "type": "bool" }599    ],600    "name": "setApprovalForAll",601    "outputs": [],602    "stateMutability": "nonpayable",603    "type": "function"604  },605  {606    "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],607    "name": "setCollectionAccess",608    "outputs": [],609    "stateMutability": "nonpayable",610    "type": "function"611  },612  {613    "inputs": [614      {615        "internalType": "enum CollectionLimits",616        "name": "limit",617        "type": "uint8"618      },619      { "internalType": "bool", "name": "status", "type": "bool" },620      { "internalType": "uint256", "name": "value", "type": "uint256" }621    ],622    "name": "setCollectionLimit",623    "outputs": [],624    "stateMutability": "nonpayable",625    "type": "function"626  },627  {628    "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],629    "name": "setCollectionMintMode",630    "outputs": [],631    "stateMutability": "nonpayable",632    "type": "function"633  },634  {635    "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],636    "name": "setCollectionNesting",637    "outputs": [],638    "stateMutability": "nonpayable",639    "type": "function"640  },641  {642    "inputs": [643      { "internalType": "bool", "name": "enable", "type": "bool" },644      {645        "internalType": "address[]",646        "name": "collections",647        "type": "address[]"648      }649    ],650    "name": "setCollectionNesting",651    "outputs": [],652    "stateMutability": "nonpayable",653    "type": "function"654  },655  {656    "inputs": [657      {658        "components": [659          { "internalType": "string", "name": "key", "type": "string" },660          { "internalType": "bytes", "name": "value", "type": "bytes" }661        ],662        "internalType": "struct Property[]",663        "name": "properties",664        "type": "tuple[]"665      }666    ],667    "name": "setCollectionProperties",668    "outputs": [],669    "stateMutability": "nonpayable",670    "type": "function"671  },672  {673    "inputs": [674      {675        "components": [676          { "internalType": "address", "name": "eth", "type": "address" },677          { "internalType": "uint256", "name": "sub", "type": "uint256" }678        ],679        "internalType": "struct EthCrossAccount",680        "name": "sponsor",681        "type": "tuple"682      }683    ],684    "name": "setCollectionSponsorCross",685    "outputs": [],686    "stateMutability": "nonpayable",687    "type": "function"688  },689  {690    "inputs": [691      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },692      {693        "components": [694          { "internalType": "string", "name": "key", "type": "string" },695          { "internalType": "bytes", "name": "value", "type": "bytes" }696        ],697        "internalType": "struct Property[]",698        "name": "properties",699        "type": "tuple[]"700      }701    ],702    "name": "setProperties",703    "outputs": [],704    "stateMutability": "nonpayable",705    "type": "function"706  },707  {708    "inputs": [709      {710        "components": [711          { "internalType": "string", "name": "field_0", "type": "string" },712          {713            "components": [714              {715                "internalType": "enum EthTokenPermissions",716                "name": "field_0",717                "type": "uint8"718              },719              { "internalType": "bool", "name": "field_1", "type": "bool" }720            ],721            "internalType": "struct Tuple56[]",722            "name": "field_1",723            "type": "tuple[]"724          }725        ],726        "internalType": "struct Tuple58[]",727        "name": "permissions",728        "type": "tuple[]"729      }730    ],731    "name": "setTokenPropertyPermissions",732    "outputs": [],733    "stateMutability": "nonpayable",734    "type": "function"735  },736  {737    "inputs": [738      { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }739    ],740    "name": "supportsInterface",741    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],742    "stateMutability": "view",743    "type": "function"744  },745  {746    "inputs": [],747    "name": "symbol",748    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],749    "stateMutability": "view",750    "type": "function"751  },752  {753    "inputs": [754      { "internalType": "uint256", "name": "index", "type": "uint256" }755    ],756    "name": "tokenByIndex",757    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],758    "stateMutability": "view",759    "type": "function"760  },761  {762    "inputs": [763      { "internalType": "uint256", "name": "token", "type": "uint256" }764    ],765    "name": "tokenContractAddress",766    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],767    "stateMutability": "view",768    "type": "function"769  },770  {771    "inputs": [772      { "internalType": "address", "name": "owner", "type": "address" },773      { "internalType": "uint256", "name": "index", "type": "uint256" }774    ],775    "name": "tokenOfOwnerByIndex",776    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],777    "stateMutability": "view",778    "type": "function"779  },780  {781    "inputs": [],782    "name": "tokenPropertyPermissions",783    "outputs": [784      {785        "components": [786          { "internalType": "string", "name": "field_0", "type": "string" },787          {788            "components": [789              {790                "internalType": "enum EthTokenPermissions",791                "name": "field_0",792                "type": "uint8"793              },794              { "internalType": "bool", "name": "field_1", "type": "bool" }795            ],796            "internalType": "struct Tuple56[]",797            "name": "field_1",798            "type": "tuple[]"799          }800        ],801        "internalType": "struct Tuple58[]",802        "name": "",803        "type": "tuple[]"804      }805    ],806    "stateMutability": "view",807    "type": "function"808  },809  {810    "inputs": [811      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }812    ],813    "name": "tokenURI",814    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],815    "stateMutability": "view",816    "type": "function"817  },818  {819    "inputs": [],820    "name": "totalSupply",821    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],822    "stateMutability": "view",823    "type": "function"824  },825  {826    "inputs": [827      { "internalType": "address", "name": "to", "type": "address" },828      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }829    ],830    "name": "transfer",831    "outputs": [],832    "stateMutability": "nonpayable",833    "type": "function"834  },835  {836    "inputs": [837      {838        "components": [839          { "internalType": "address", "name": "eth", "type": "address" },840          { "internalType": "uint256", "name": "sub", "type": "uint256" }841        ],842        "internalType": "struct EthCrossAccount",843        "name": "to",844        "type": "tuple"845      },846      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }847    ],848    "name": "transferCross",849    "outputs": [],850    "stateMutability": "nonpayable",851    "type": "function"852  },853  {854    "inputs": [855      { "internalType": "address", "name": "from", "type": "address" },856      { "internalType": "address", "name": "to", "type": "address" },857      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }858    ],859    "name": "transferFrom",860    "outputs": [],861    "stateMutability": "nonpayable",862    "type": "function"863  },864  {865    "inputs": [866      {867        "components": [868          { "internalType": "address", "name": "eth", "type": "address" },869          { "internalType": "uint256", "name": "sub", "type": "uint256" }870        ],871        "internalType": "struct EthCrossAccount",872        "name": "from",873        "type": "tuple"874      },875      {876        "components": [877          { "internalType": "address", "name": "eth", "type": "address" },878          { "internalType": "uint256", "name": "sub", "type": "uint256" }879        ],880        "internalType": "struct EthCrossAccount",881        "name": "to",882        "type": "tuple"883      },884      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }885    ],886    "name": "transferFromCross",887    "outputs": [],888    "stateMutability": "nonpayable",889    "type": "function"890  },891  {892    "inputs": [],893    "name": "uniqueCollectionType",894    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],895    "stateMutability": "view",896    "type": "function"897  }898]
modifiedtests/src/eth/api/UniqueFungible.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueFungible.sol
+++ b/tests/src/eth/api/UniqueFungible.sol
@@ -327,15 +327,25 @@
 	uint256[] field_1;
 }
 
+/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM.
 enum CollectionLimits {
+	/// @dev How many tokens can a user have on one account.
 	AccountTokenOwnership,
+	/// @dev How many bytes of data are available for sponsorship.
 	SponsoredDataSize,
+	/// @dev In any case, chain default: [`SponsoringRateLimit::SponsoringDisabled`]
 	SponsoredDataRateLimit,
+	/// @dev How many tokens can be mined into this collection.
 	TokenLimit,
+	/// @dev Timeouts for transfer sponsoring.
 	SponsorTransferTimeout,
+	/// @dev Timeout for sponsoring an approval in passed blocks.
 	SponsorApproveTimeout,
+	/// @dev Whether the collection owner of the collection can send tokens (which belong to other users).
 	OwnerCanTransfer,
+	/// @dev Can the collection owner burn other people's tokens.
 	OwnerCanDestroy,
+	/// @dev Is it possible to send tokens from this collection between users.
 	TransferEnabled
 }
 
modifiedtests/src/eth/api/UniqueNFT.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueNFT.sol
+++ b/tests/src/eth/api/UniqueNFT.sol
@@ -30,11 +30,12 @@
 	/// @param permissions Permissions for keys.
 	/// @dev EVM selector for this function is: 0xbd92983a,
 	///  or in textual repr: setTokenPropertyPermissions((string,(uint8,bool)[])[])
-	function setTokenPropertyPermissions(Tuple43[] memory permissions) external;
+	function setTokenPropertyPermissions(Tuple52[] memory permissions) external;
 
+	/// @notice Get permissions for token properties.
 	/// @dev EVM selector for this function is: 0xf23d7790,
 	///  or in textual repr: tokenPropertyPermissions()
-	function tokenPropertyPermissions() external view returns (Tuple43[] memory);
+	function tokenPropertyPermissions() external view returns (Tuple52[] memory);
 
 	// /// @notice Set token property value.
 	// /// @dev Throws error if `msg.sender` has no permission to edit the property.
@@ -85,20 +86,24 @@
 	bytes value;
 }
 
+/// @dev Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) fields as an enumeration.
 enum EthTokenPermissions {
+	/// @dev Permission to change the property and property permission. See [`up_data_structs::PropertyPermission::mutable`]
 	Mutable,
+	/// @dev Change permission for the collection administrator. See [`up_data_structs::PropertyPermission::token_owner`]
 	TokenOwner,
+	/// @dev Permission to change the property for the owner of the token. See [`up_data_structs::PropertyPermission::collection_admin`]
 	CollectionAdmin
 }
 
 /// @dev anonymous struct
-struct Tuple43 {
+struct Tuple52 {
 	string field_0;
-	Tuple41[] field_1;
+	Tuple50[] field_1;
 }
 
 /// @dev anonymous struct
-struct Tuple41 {
+struct Tuple50 {
 	EthTokenPermissions field_0;
 	bool field_1;
 }
@@ -418,15 +423,25 @@
 	uint256[] field_1;
 }
 
+/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM.
 enum CollectionLimits {
+	/// @dev How many tokens can a user have on one account.
 	AccountTokenOwnership,
+	/// @dev How many bytes of data are available for sponsorship.
 	SponsoredDataSize,
+	/// @dev In any case, chain default: [`SponsoringRateLimit::SponsoringDisabled`]
 	SponsoredDataRateLimit,
+	/// @dev How many tokens can be mined into this collection.
 	TokenLimit,
+	/// @dev Timeouts for transfer sponsoring.
 	SponsorTransferTimeout,
+	/// @dev Timeout for sponsoring an approval in passed blocks.
 	SponsorApproveTimeout,
+	/// @dev Whether the collection owner of the collection can send tokens (which belong to other users).
 	OwnerCanTransfer,
+	/// @dev Can the collection owner burn other people's tokens.
 	OwnerCanDestroy,
+	/// @dev Is it possible to send tokens from this collection between users.
 	TransferEnabled
 }
 
modifiedtests/src/eth/api/UniqueRefungible.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueRefungible.sol
+++ b/tests/src/eth/api/UniqueRefungible.sol
@@ -30,12 +30,12 @@
 	/// @param permissions Permissions for keys.
 	/// @dev EVM selector for this function is: 0xbd92983a,
 	///  or in textual repr: setTokenPropertyPermissions((string,(uint8,bool)[])[])
-	function setTokenPropertyPermissions(Tuple47[] memory permissions) external;
+	function setTokenPropertyPermissions(Tuple51[] memory permissions) external;
 
 	/// @notice Get permissions for token properties.
 	/// @dev EVM selector for this function is: 0xf23d7790,
 	///  or in textual repr: tokenPropertyPermissions()
-	function tokenPropertyPermissions() external view returns (Tuple47[] memory);
+	function tokenPropertyPermissions() external view returns (Tuple51[] memory);
 
 	// /// @notice Set token property value.
 	// /// @dev Throws error if `msg.sender` has no permission to edit the property.
@@ -86,20 +86,24 @@
 	bytes value;
 }
 
+/// @dev Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) fields as an enumeration.
 enum EthTokenPermissions {
+	/// @dev Permission to change the property and property permission. See [`up_data_structs::PropertyPermission::mutable`]
 	Mutable,
+	/// @dev Change permission for the collection administrator. See [`up_data_structs::PropertyPermission::token_owner`]
 	TokenOwner,
+	/// @dev Permission to change the property for the owner of the token. See [`up_data_structs::PropertyPermission::collection_admin`]
 	CollectionAdmin
 }
 
 /// @dev anonymous struct
-struct Tuple47 {
+struct Tuple51 {
 	string field_0;
-	Tuple45[] field_1;
+	Tuple49[] field_1;
 }
 
 /// @dev anonymous struct
-struct Tuple45 {
+struct Tuple49 {
 	EthTokenPermissions field_0;
 	bool field_1;
 }
@@ -419,15 +423,25 @@
 	uint256[] field_1;
 }
 
+/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM.
 enum CollectionLimits {
+	/// @dev How many tokens can a user have on one account.
 	AccountTokenOwnership,
+	/// @dev How many bytes of data are available for sponsorship.
 	SponsoredDataSize,
+	/// @dev In any case, chain default: [`SponsoringRateLimit::SponsoringDisabled`]
 	SponsoredDataRateLimit,
+	/// @dev How many tokens can be mined into this collection.
 	TokenLimit,
+	/// @dev Timeouts for transfer sponsoring.
 	SponsorTransferTimeout,
+	/// @dev Timeout for sponsoring an approval in passed blocks.
 	SponsorApproveTimeout,
+	/// @dev Whether the collection owner of the collection can send tokens (which belong to other users).
 	OwnerCanTransfer,
+	/// @dev Can the collection owner burn other people's tokens.
 	OwnerCanDestroy,
+	/// @dev Is it possible to send tokens from this collection between users.
 	TransferEnabled
 }