git.delta.rocks / unique-network / refs/commits / 133c3f17cae5

difftreelog

change function name `tokenProperties` to `properties`

PraetorP2022-11-25parent: #e5a8b87.patch.diff
in: master

12 files changed

modifiedpallets/nonfungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/erc.rs
+++ b/pallets/nonfungible/src/erc.rs
@@ -721,11 +721,7 @@
 	/// @param tokenId Id for the token.
 	/// @param keys Properties keys. Empty keys for all propertyes.
 	/// @return Vector of properties key/value pairs.
-	fn token_properties(
-		&self,
-		token_id: uint256,
-		keys: Vec<string>,
-	) -> Result<Vec<PropertyStruct>> {
+	fn properties(&self, token_id: uint256, keys: Vec<string>) -> Result<Vec<PropertyStruct>> {
 		let keys = keys
 			.into_iter()
 			.map(|key| {
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
@@ -676,7 +676,7 @@
 }
 
 /// @title Unique extensions for ERC721.
-/// @dev the ERC-165 identifier for this interface is 0xb8f094a0
+/// @dev the ERC-165 identifier for this interface is 0xb74c26b7
 contract ERC721UniqueExtensions is Dummy, ERC165 {
 	/// @notice A descriptive name for a collection of NFTs in this contract
 	/// @dev EVM selector for this function is: 0x06fdde03,
@@ -722,9 +722,9 @@
 	/// @param tokenId Id for the token.
 	/// @param keys Properties keys. Empty keys for all propertyes.
 	/// @return Vector of properties key/value pairs.
-	/// @dev EVM selector for this function is: 0xefc26c69,
-	///  or in textual repr: tokenProperties(uint256,string[])
-	function tokenProperties(uint256 tokenId, string[] memory keys) public view returns (Property[] memory) {
+	/// @dev EVM selector for this function is: 0xe07ede7e,
+	///  or in textual repr: properties(uint256,string[])
+	function properties(uint256 tokenId, string[] memory keys) public view returns (Property[] memory) {
 		require(false, stub_error);
 		tokenId;
 		keys;
modifiedpallets/refungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/refungible/src/erc.rs
+++ b/pallets/refungible/src/erc.rs
@@ -749,11 +749,7 @@
 	/// @param tokenId Id for the token.
 	/// @param keys Properties keys. Empty keys for all propertyes.
 	/// @return Vector of properties key/value pairs.
-	fn token_properties(
-		&self,
-		token_id: uint256,
-		keys: Vec<string>,
-	) -> Result<Vec<PropertyStruct>> {
+	fn properties(&self, token_id: uint256, keys: Vec<string>) -> Result<Vec<PropertyStruct>> {
 		let keys = keys
 			.into_iter()
 			.map(|key| {
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
@@ -674,7 +674,7 @@
 }
 
 /// @title Unique extensions for ERC721.
-/// @dev the ERC-165 identifier for this interface is 0x1d4b64d6
+/// @dev the ERC-165 identifier for this interface is 0x12f7d6c1
 contract ERC721UniqueExtensions is Dummy, ERC165 {
 	/// @notice A descriptive name for a collection of NFTs in this contract
 	/// @dev EVM selector for this function is: 0x06fdde03,
@@ -720,9 +720,9 @@
 	/// @param tokenId Id for the token.
 	/// @param keys Properties keys. Empty keys for all propertyes.
 	/// @return Vector of properties key/value pairs.
-	/// @dev EVM selector for this function is: 0xefc26c69,
-	///  or in textual repr: tokenProperties(uint256,string[])
-	function tokenProperties(uint256 tokenId, string[] memory keys) public view returns (Property[] memory) {
+	/// @dev EVM selector for this function is: 0xe07ede7e,
+	///  or in textual repr: properties(uint256,string[])
+	function properties(uint256 tokenId, string[] memory keys) public view returns (Property[] memory) {
 		require(false, stub_error);
 		tokenId;
 		keys;
modifiedtests/src/eth/abi/nonFungible.jsondiffbeforeafterboth
--- a/tests/src/eth/abi/nonFungible.json
+++ b/tests/src/eth/abi/nonFungible.json
@@ -448,6 +448,26 @@
   {
     "inputs": [
       { "internalType": "uint256", "name": "tokenId", "type": "uint256" },
+      { "internalType": "string[]", "name": "keys", "type": "string[]" }
+    ],
+    "name": "properties",
+    "outputs": [
+      {
+        "components": [
+          { "internalType": "string", "name": "key", "type": "string" },
+          { "internalType": "bytes", "name": "value", "type": "bytes" }
+        ],
+        "internalType": "struct Property[]",
+        "name": "",
+        "type": "tuple[]"
+      }
+    ],
+    "stateMutability": "view",
+    "type": "function"
+  },
+  {
+    "inputs": [
+      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },
       { "internalType": "string", "name": "key", "type": "string" }
     ],
     "name": "property",
@@ -670,26 +690,6 @@
     ],
     "name": "tokenOfOwnerByIndex",
     "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
-    "stateMutability": "view",
-    "type": "function"
-  },
-  {
-    "inputs": [
-      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },
-      { "internalType": "string[]", "name": "keys", "type": "string[]" }
-    ],
-    "name": "tokenProperties",
-    "outputs": [
-      {
-        "components": [
-          { "internalType": "string", "name": "key", "type": "string" },
-          { "internalType": "bytes", "name": "value", "type": "bytes" }
-        ],
-        "internalType": "struct Property[]",
-        "name": "",
-        "type": "tuple[]"
-      }
-    ],
     "stateMutability": "view",
     "type": "function"
   },
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": "collectionOwner",217    "outputs": [218      {219        "components": [220          { "internalType": "address", "name": "eth", "type": "address" },221          { "internalType": "uint256", "name": "sub", "type": "uint256" }222        ],223        "internalType": "struct EthCrossAccount",224        "name": "",225        "type": "tuple"226      }227    ],228    "stateMutability": "view",229    "type": "function"230  },231  {232    "inputs": [233      { "internalType": "string[]", "name": "keys", "type": "string[]" }234    ],235    "name": "collectionProperties",236    "outputs": [237      {238        "components": [239          { "internalType": "string", "name": "key", "type": "string" },240          { "internalType": "bytes", "name": "value", "type": "bytes" }241        ],242        "internalType": "struct Property[]",243        "name": "",244        "type": "tuple[]"245      }246    ],247    "stateMutability": "view",248    "type": "function"249  },250  {251    "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],252    "name": "collectionProperty",253    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],254    "stateMutability": "view",255    "type": "function"256  },257  {258    "inputs": [],259    "name": "collectionSponsor",260    "outputs": [261      {262        "components": [263          { "internalType": "address", "name": "field_0", "type": "address" },264          { "internalType": "uint256", "name": "field_1", "type": "uint256" }265        ],266        "internalType": "struct Tuple29",267        "name": "",268        "type": "tuple"269      }270    ],271    "stateMutability": "view",272    "type": "function"273  },274  {275    "inputs": [],276    "name": "confirmCollectionSponsorship",277    "outputs": [],278    "stateMutability": "nonpayable",279    "type": "function"280  },281  {282    "inputs": [],283    "name": "contractAddress",284    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],285    "stateMutability": "view",286    "type": "function"287  },288  {289    "inputs": [290      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }291    ],292    "name": "crossOwnerOf",293    "outputs": [294      {295        "components": [296          { "internalType": "address", "name": "eth", "type": "address" },297          { "internalType": "uint256", "name": "sub", "type": "uint256" }298        ],299        "internalType": "struct EthCrossAccount",300        "name": "",301        "type": "tuple"302      }303    ],304    "stateMutability": "view",305    "type": "function"306  },307  {308    "inputs": [309      { "internalType": "string[]", "name": "keys", "type": "string[]" }310    ],311    "name": "deleteCollectionProperties",312    "outputs": [],313    "stateMutability": "nonpayable",314    "type": "function"315  },316  {317    "inputs": [318      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },319      { "internalType": "string[]", "name": "keys", "type": "string[]" }320    ],321    "name": "deleteProperties",322    "outputs": [],323    "stateMutability": "nonpayable",324    "type": "function"325  },326  {327    "inputs": [],328    "name": "description",329    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],330    "stateMutability": "view",331    "type": "function"332  },333  {334    "inputs": [],335    "name": "finishMinting",336    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],337    "stateMutability": "nonpayable",338    "type": "function"339  },340  {341    "inputs": [342      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }343    ],344    "name": "getApproved",345    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],346    "stateMutability": "view",347    "type": "function"348  },349  {350    "inputs": [],351    "name": "hasCollectionPendingSponsor",352    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],353    "stateMutability": "view",354    "type": "function"355  },356  {357    "inputs": [358      { "internalType": "address", "name": "owner", "type": "address" },359      { "internalType": "address", "name": "operator", "type": "address" }360    ],361    "name": "isApprovedForAll",362    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],363    "stateMutability": "view",364    "type": "function"365  },366  {367    "inputs": [368      {369        "components": [370          { "internalType": "address", "name": "eth", "type": "address" },371          { "internalType": "uint256", "name": "sub", "type": "uint256" }372        ],373        "internalType": "struct EthCrossAccount",374        "name": "user",375        "type": "tuple"376      }377    ],378    "name": "isOwnerOrAdminCross",379    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],380    "stateMutability": "view",381    "type": "function"382  },383  {384    "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],385    "name": "mint",386    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],387    "stateMutability": "nonpayable",388    "type": "function"389  },390  {391    "inputs": [392      { "internalType": "address", "name": "to", "type": "address" },393      { "internalType": "string", "name": "tokenUri", "type": "string" }394    ],395    "name": "mintWithTokenURI",396    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],397    "stateMutability": "nonpayable",398    "type": "function"399  },400  {401    "inputs": [],402    "name": "mintingFinished",403    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],404    "stateMutability": "view",405    "type": "function"406  },407  {408    "inputs": [],409    "name": "name",410    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],411    "stateMutability": "view",412    "type": "function"413  },414  {415    "inputs": [],416    "name": "nextTokenId",417    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],418    "stateMutability": "view",419    "type": "function"420  },421  {422    "inputs": [423      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }424    ],425    "name": "ownerOf",426    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],427    "stateMutability": "view",428    "type": "function"429  },430  {431    "inputs": [432      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },433      { "internalType": "string", "name": "key", "type": "string" }434    ],435    "name": "property",436    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],437    "stateMutability": "view",438    "type": "function"439  },440  {441    "inputs": [442      {443        "components": [444          { "internalType": "address", "name": "eth", "type": "address" },445          { "internalType": "uint256", "name": "sub", "type": "uint256" }446        ],447        "internalType": "struct EthCrossAccount",448        "name": "admin",449        "type": "tuple"450      }451    ],452    "name": "removeCollectionAdminCross",453    "outputs": [],454    "stateMutability": "nonpayable",455    "type": "function"456  },457  {458    "inputs": [],459    "name": "removeCollectionSponsor",460    "outputs": [],461    "stateMutability": "nonpayable",462    "type": "function"463  },464  {465    "inputs": [466      {467        "components": [468          { "internalType": "address", "name": "eth", "type": "address" },469          { "internalType": "uint256", "name": "sub", "type": "uint256" }470        ],471        "internalType": "struct EthCrossAccount",472        "name": "user",473        "type": "tuple"474      }475    ],476    "name": "removeFromCollectionAllowListCross",477    "outputs": [],478    "stateMutability": "nonpayable",479    "type": "function"480  },481  {482    "inputs": [483      { "internalType": "address", "name": "from", "type": "address" },484      { "internalType": "address", "name": "to", "type": "address" },485      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }486    ],487    "name": "safeTransferFrom",488    "outputs": [],489    "stateMutability": "nonpayable",490    "type": "function"491  },492  {493    "inputs": [494      { "internalType": "address", "name": "from", "type": "address" },495      { "internalType": "address", "name": "to", "type": "address" },496      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },497      { "internalType": "bytes", "name": "data", "type": "bytes" }498    ],499    "name": "safeTransferFromWithData",500    "outputs": [],501    "stateMutability": "nonpayable",502    "type": "function"503  },504  {505    "inputs": [506      { "internalType": "address", "name": "operator", "type": "address" },507      { "internalType": "bool", "name": "approved", "type": "bool" }508    ],509    "name": "setApprovalForAll",510    "outputs": [],511    "stateMutability": "nonpayable",512    "type": "function"513  },514  {515    "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],516    "name": "setCollectionAccess",517    "outputs": [],518    "stateMutability": "nonpayable",519    "type": "function"520  },521  {522    "inputs": [523      { "internalType": "string", "name": "limit", "type": "string" },524      { "internalType": "uint256", "name": "value", "type": "uint256" }525    ],526    "name": "setCollectionLimit",527    "outputs": [],528    "stateMutability": "nonpayable",529    "type": "function"530  },531  {532    "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],533    "name": "setCollectionMintMode",534    "outputs": [],535    "stateMutability": "nonpayable",536    "type": "function"537  },538  {539    "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],540    "name": "setCollectionNesting",541    "outputs": [],542    "stateMutability": "nonpayable",543    "type": "function"544  },545  {546    "inputs": [547      { "internalType": "bool", "name": "enable", "type": "bool" },548      {549        "internalType": "address[]",550        "name": "collections",551        "type": "address[]"552      }553    ],554    "name": "setCollectionNesting",555    "outputs": [],556    "stateMutability": "nonpayable",557    "type": "function"558  },559  {560    "inputs": [561      {562        "components": [563          { "internalType": "string", "name": "key", "type": "string" },564          { "internalType": "bytes", "name": "value", "type": "bytes" }565        ],566        "internalType": "struct Property[]",567        "name": "properties",568        "type": "tuple[]"569      }570    ],571    "name": "setCollectionProperties",572    "outputs": [],573    "stateMutability": "nonpayable",574    "type": "function"575  },576  {577    "inputs": [578      {579        "components": [580          { "internalType": "address", "name": "eth", "type": "address" },581          { "internalType": "uint256", "name": "sub", "type": "uint256" }582        ],583        "internalType": "struct EthCrossAccount",584        "name": "sponsor",585        "type": "tuple"586      }587    ],588    "name": "setCollectionSponsorCross",589    "outputs": [],590    "stateMutability": "nonpayable",591    "type": "function"592  },593  {594    "inputs": [595      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },596      {597        "components": [598          { "internalType": "string", "name": "key", "type": "string" },599          { "internalType": "bytes", "name": "value", "type": "bytes" }600        ],601        "internalType": "struct Property[]",602        "name": "properties",603        "type": "tuple[]"604      }605    ],606    "name": "setProperties",607    "outputs": [],608    "stateMutability": "nonpayable",609    "type": "function"610  },611  {612    "inputs": [613      { "internalType": "string", "name": "key", "type": "string" },614      { "internalType": "bool", "name": "isMutable", "type": "bool" },615      { "internalType": "bool", "name": "collectionAdmin", "type": "bool" },616      { "internalType": "bool", "name": "tokenOwner", "type": "bool" }617    ],618    "name": "setTokenPropertyPermission",619    "outputs": [],620    "stateMutability": "nonpayable",621    "type": "function"622  },623  {624    "inputs": [625      { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }626    ],627    "name": "supportsInterface",628    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],629    "stateMutability": "view",630    "type": "function"631  },632  {633    "inputs": [],634    "name": "symbol",635    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],636    "stateMutability": "view",637    "type": "function"638  },639  {640    "inputs": [641      { "internalType": "uint256", "name": "index", "type": "uint256" }642    ],643    "name": "tokenByIndex",644    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],645    "stateMutability": "view",646    "type": "function"647  },648  {649    "inputs": [650      { "internalType": "uint256", "name": "token", "type": "uint256" }651    ],652    "name": "tokenContractAddress",653    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],654    "stateMutability": "view",655    "type": "function"656  },657  {658    "inputs": [659      { "internalType": "address", "name": "owner", "type": "address" },660      { "internalType": "uint256", "name": "index", "type": "uint256" }661    ],662    "name": "tokenOfOwnerByIndex",663    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],664    "stateMutability": "view",665    "type": "function"666  },667  {668    "inputs": [669      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },670      { "internalType": "string[]", "name": "keys", "type": "string[]" }671    ],672    "name": "tokenProperties",673    "outputs": [674      {675        "components": [676          { "internalType": "string", "name": "key", "type": "string" },677          { "internalType": "bytes", "name": "value", "type": "bytes" }678        ],679        "internalType": "struct Property[]",680        "name": "",681        "type": "tuple[]"682      }683    ],684    "stateMutability": "view",685    "type": "function"686  },687  {688    "inputs": [689      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }690    ],691    "name": "tokenURI",692    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],693    "stateMutability": "view",694    "type": "function"695  },696  {697    "inputs": [],698    "name": "totalSupply",699    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],700    "stateMutability": "view",701    "type": "function"702  },703  {704    "inputs": [705      { "internalType": "address", "name": "to", "type": "address" },706      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }707    ],708    "name": "transfer",709    "outputs": [],710    "stateMutability": "nonpayable",711    "type": "function"712  },713  {714    "inputs": [715      {716        "components": [717          { "internalType": "address", "name": "eth", "type": "address" },718          { "internalType": "uint256", "name": "sub", "type": "uint256" }719        ],720        "internalType": "struct EthCrossAccount",721        "name": "to",722        "type": "tuple"723      },724      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }725    ],726    "name": "transferCross",727    "outputs": [],728    "stateMutability": "nonpayable",729    "type": "function"730  },731  {732    "inputs": [733      { "internalType": "address", "name": "from", "type": "address" },734      { "internalType": "address", "name": "to", "type": "address" },735      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }736    ],737    "name": "transferFrom",738    "outputs": [],739    "stateMutability": "nonpayable",740    "type": "function"741  },742  {743    "inputs": [744      {745        "components": [746          { "internalType": "address", "name": "eth", "type": "address" },747          { "internalType": "uint256", "name": "sub", "type": "uint256" }748        ],749        "internalType": "struct EthCrossAccount",750        "name": "from",751        "type": "tuple"752      },753      {754        "components": [755          { "internalType": "address", "name": "eth", "type": "address" },756          { "internalType": "uint256", "name": "sub", "type": "uint256" }757        ],758        "internalType": "struct EthCrossAccount",759        "name": "to",760        "type": "tuple"761      },762      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }763    ],764    "name": "transferFromCross",765    "outputs": [],766    "stateMutability": "nonpayable",767    "type": "function"768  },769  {770    "inputs": [],771    "name": "uniqueCollectionType",772    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],773    "stateMutability": "view",774    "type": "function"775  }776]
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": "collectionOwner",217    "outputs": [218      {219        "components": [220          { "internalType": "address", "name": "eth", "type": "address" },221          { "internalType": "uint256", "name": "sub", "type": "uint256" }222        ],223        "internalType": "struct EthCrossAccount",224        "name": "",225        "type": "tuple"226      }227    ],228    "stateMutability": "view",229    "type": "function"230  },231  {232    "inputs": [233      { "internalType": "string[]", "name": "keys", "type": "string[]" }234    ],235    "name": "collectionProperties",236    "outputs": [237      {238        "components": [239          { "internalType": "string", "name": "key", "type": "string" },240          { "internalType": "bytes", "name": "value", "type": "bytes" }241        ],242        "internalType": "struct Property[]",243        "name": "",244        "type": "tuple[]"245      }246    ],247    "stateMutability": "view",248    "type": "function"249  },250  {251    "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],252    "name": "collectionProperty",253    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],254    "stateMutability": "view",255    "type": "function"256  },257  {258    "inputs": [],259    "name": "collectionSponsor",260    "outputs": [261      {262        "components": [263          { "internalType": "address", "name": "field_0", "type": "address" },264          { "internalType": "uint256", "name": "field_1", "type": "uint256" }265        ],266        "internalType": "struct Tuple29",267        "name": "",268        "type": "tuple"269      }270    ],271    "stateMutability": "view",272    "type": "function"273  },274  {275    "inputs": [],276    "name": "confirmCollectionSponsorship",277    "outputs": [],278    "stateMutability": "nonpayable",279    "type": "function"280  },281  {282    "inputs": [],283    "name": "contractAddress",284    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],285    "stateMutability": "view",286    "type": "function"287  },288  {289    "inputs": [290      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }291    ],292    "name": "crossOwnerOf",293    "outputs": [294      {295        "components": [296          { "internalType": "address", "name": "eth", "type": "address" },297          { "internalType": "uint256", "name": "sub", "type": "uint256" }298        ],299        "internalType": "struct EthCrossAccount",300        "name": "",301        "type": "tuple"302      }303    ],304    "stateMutability": "view",305    "type": "function"306  },307  {308    "inputs": [309      { "internalType": "string[]", "name": "keys", "type": "string[]" }310    ],311    "name": "deleteCollectionProperties",312    "outputs": [],313    "stateMutability": "nonpayable",314    "type": "function"315  },316  {317    "inputs": [318      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },319      { "internalType": "string[]", "name": "keys", "type": "string[]" }320    ],321    "name": "deleteProperties",322    "outputs": [],323    "stateMutability": "nonpayable",324    "type": "function"325  },326  {327    "inputs": [],328    "name": "description",329    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],330    "stateMutability": "view",331    "type": "function"332  },333  {334    "inputs": [],335    "name": "finishMinting",336    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],337    "stateMutability": "nonpayable",338    "type": "function"339  },340  {341    "inputs": [342      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }343    ],344    "name": "getApproved",345    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],346    "stateMutability": "view",347    "type": "function"348  },349  {350    "inputs": [],351    "name": "hasCollectionPendingSponsor",352    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],353    "stateMutability": "view",354    "type": "function"355  },356  {357    "inputs": [358      { "internalType": "address", "name": "owner", "type": "address" },359      { "internalType": "address", "name": "operator", "type": "address" }360    ],361    "name": "isApprovedForAll",362    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],363    "stateMutability": "view",364    "type": "function"365  },366  {367    "inputs": [368      {369        "components": [370          { "internalType": "address", "name": "eth", "type": "address" },371          { "internalType": "uint256", "name": "sub", "type": "uint256" }372        ],373        "internalType": "struct EthCrossAccount",374        "name": "user",375        "type": "tuple"376      }377    ],378    "name": "isOwnerOrAdminCross",379    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],380    "stateMutability": "view",381    "type": "function"382  },383  {384    "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],385    "name": "mint",386    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],387    "stateMutability": "nonpayable",388    "type": "function"389  },390  {391    "inputs": [392      { "internalType": "address", "name": "to", "type": "address" },393      { "internalType": "string", "name": "tokenUri", "type": "string" }394    ],395    "name": "mintWithTokenURI",396    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],397    "stateMutability": "nonpayable",398    "type": "function"399  },400  {401    "inputs": [],402    "name": "mintingFinished",403    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],404    "stateMutability": "view",405    "type": "function"406  },407  {408    "inputs": [],409    "name": "name",410    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],411    "stateMutability": "view",412    "type": "function"413  },414  {415    "inputs": [],416    "name": "nextTokenId",417    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],418    "stateMutability": "view",419    "type": "function"420  },421  {422    "inputs": [423      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }424    ],425    "name": "ownerOf",426    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],427    "stateMutability": "view",428    "type": "function"429  },430  {431    "inputs": [432      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },433      { "internalType": "string[]", "name": "keys", "type": "string[]" }434    ],435    "name": "properties",436    "outputs": [437      {438        "components": [439          { "internalType": "string", "name": "key", "type": "string" },440          { "internalType": "bytes", "name": "value", "type": "bytes" }441        ],442        "internalType": "struct Property[]",443        "name": "",444        "type": "tuple[]"445      }446    ],447    "stateMutability": "view",448    "type": "function"449  },450  {451    "inputs": [452      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },453      { "internalType": "string", "name": "key", "type": "string" }454    ],455    "name": "property",456    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],457    "stateMutability": "view",458    "type": "function"459  },460  {461    "inputs": [462      {463        "components": [464          { "internalType": "address", "name": "eth", "type": "address" },465          { "internalType": "uint256", "name": "sub", "type": "uint256" }466        ],467        "internalType": "struct EthCrossAccount",468        "name": "admin",469        "type": "tuple"470      }471    ],472    "name": "removeCollectionAdminCross",473    "outputs": [],474    "stateMutability": "nonpayable",475    "type": "function"476  },477  {478    "inputs": [],479    "name": "removeCollectionSponsor",480    "outputs": [],481    "stateMutability": "nonpayable",482    "type": "function"483  },484  {485    "inputs": [486      {487        "components": [488          { "internalType": "address", "name": "eth", "type": "address" },489          { "internalType": "uint256", "name": "sub", "type": "uint256" }490        ],491        "internalType": "struct EthCrossAccount",492        "name": "user",493        "type": "tuple"494      }495    ],496    "name": "removeFromCollectionAllowListCross",497    "outputs": [],498    "stateMutability": "nonpayable",499    "type": "function"500  },501  {502    "inputs": [503      { "internalType": "address", "name": "from", "type": "address" },504      { "internalType": "address", "name": "to", "type": "address" },505      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }506    ],507    "name": "safeTransferFrom",508    "outputs": [],509    "stateMutability": "nonpayable",510    "type": "function"511  },512  {513    "inputs": [514      { "internalType": "address", "name": "from", "type": "address" },515      { "internalType": "address", "name": "to", "type": "address" },516      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },517      { "internalType": "bytes", "name": "data", "type": "bytes" }518    ],519    "name": "safeTransferFromWithData",520    "outputs": [],521    "stateMutability": "nonpayable",522    "type": "function"523  },524  {525    "inputs": [526      { "internalType": "address", "name": "operator", "type": "address" },527      { "internalType": "bool", "name": "approved", "type": "bool" }528    ],529    "name": "setApprovalForAll",530    "outputs": [],531    "stateMutability": "nonpayable",532    "type": "function"533  },534  {535    "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],536    "name": "setCollectionAccess",537    "outputs": [],538    "stateMutability": "nonpayable",539    "type": "function"540  },541  {542    "inputs": [543      { "internalType": "string", "name": "limit", "type": "string" },544      { "internalType": "uint256", "name": "value", "type": "uint256" }545    ],546    "name": "setCollectionLimit",547    "outputs": [],548    "stateMutability": "nonpayable",549    "type": "function"550  },551  {552    "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],553    "name": "setCollectionMintMode",554    "outputs": [],555    "stateMutability": "nonpayable",556    "type": "function"557  },558  {559    "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],560    "name": "setCollectionNesting",561    "outputs": [],562    "stateMutability": "nonpayable",563    "type": "function"564  },565  {566    "inputs": [567      { "internalType": "bool", "name": "enable", "type": "bool" },568      {569        "internalType": "address[]",570        "name": "collections",571        "type": "address[]"572      }573    ],574    "name": "setCollectionNesting",575    "outputs": [],576    "stateMutability": "nonpayable",577    "type": "function"578  },579  {580    "inputs": [581      {582        "components": [583          { "internalType": "string", "name": "key", "type": "string" },584          { "internalType": "bytes", "name": "value", "type": "bytes" }585        ],586        "internalType": "struct Property[]",587        "name": "properties",588        "type": "tuple[]"589      }590    ],591    "name": "setCollectionProperties",592    "outputs": [],593    "stateMutability": "nonpayable",594    "type": "function"595  },596  {597    "inputs": [598      {599        "components": [600          { "internalType": "address", "name": "eth", "type": "address" },601          { "internalType": "uint256", "name": "sub", "type": "uint256" }602        ],603        "internalType": "struct EthCrossAccount",604        "name": "sponsor",605        "type": "tuple"606      }607    ],608    "name": "setCollectionSponsorCross",609    "outputs": [],610    "stateMutability": "nonpayable",611    "type": "function"612  },613  {614    "inputs": [615      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },616      {617        "components": [618          { "internalType": "string", "name": "key", "type": "string" },619          { "internalType": "bytes", "name": "value", "type": "bytes" }620        ],621        "internalType": "struct Property[]",622        "name": "properties",623        "type": "tuple[]"624      }625    ],626    "name": "setProperties",627    "outputs": [],628    "stateMutability": "nonpayable",629    "type": "function"630  },631  {632    "inputs": [633      { "internalType": "string", "name": "key", "type": "string" },634      { "internalType": "bool", "name": "isMutable", "type": "bool" },635      { "internalType": "bool", "name": "collectionAdmin", "type": "bool" },636      { "internalType": "bool", "name": "tokenOwner", "type": "bool" }637    ],638    "name": "setTokenPropertyPermission",639    "outputs": [],640    "stateMutability": "nonpayable",641    "type": "function"642  },643  {644    "inputs": [645      { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }646    ],647    "name": "supportsInterface",648    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],649    "stateMutability": "view",650    "type": "function"651  },652  {653    "inputs": [],654    "name": "symbol",655    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],656    "stateMutability": "view",657    "type": "function"658  },659  {660    "inputs": [661      { "internalType": "uint256", "name": "index", "type": "uint256" }662    ],663    "name": "tokenByIndex",664    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],665    "stateMutability": "view",666    "type": "function"667  },668  {669    "inputs": [670      { "internalType": "uint256", "name": "token", "type": "uint256" }671    ],672    "name": "tokenContractAddress",673    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],674    "stateMutability": "view",675    "type": "function"676  },677  {678    "inputs": [679      { "internalType": "address", "name": "owner", "type": "address" },680      { "internalType": "uint256", "name": "index", "type": "uint256" }681    ],682    "name": "tokenOfOwnerByIndex",683    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],684    "stateMutability": "view",685    "type": "function"686  },687  {688    "inputs": [689      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }690    ],691    "name": "tokenURI",692    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],693    "stateMutability": "view",694    "type": "function"695  },696  {697    "inputs": [],698    "name": "totalSupply",699    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],700    "stateMutability": "view",701    "type": "function"702  },703  {704    "inputs": [705      { "internalType": "address", "name": "to", "type": "address" },706      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }707    ],708    "name": "transfer",709    "outputs": [],710    "stateMutability": "nonpayable",711    "type": "function"712  },713  {714    "inputs": [715      {716        "components": [717          { "internalType": "address", "name": "eth", "type": "address" },718          { "internalType": "uint256", "name": "sub", "type": "uint256" }719        ],720        "internalType": "struct EthCrossAccount",721        "name": "to",722        "type": "tuple"723      },724      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }725    ],726    "name": "transferCross",727    "outputs": [],728    "stateMutability": "nonpayable",729    "type": "function"730  },731  {732    "inputs": [733      { "internalType": "address", "name": "from", "type": "address" },734      { "internalType": "address", "name": "to", "type": "address" },735      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }736    ],737    "name": "transferFrom",738    "outputs": [],739    "stateMutability": "nonpayable",740    "type": "function"741  },742  {743    "inputs": [744      {745        "components": [746          { "internalType": "address", "name": "eth", "type": "address" },747          { "internalType": "uint256", "name": "sub", "type": "uint256" }748        ],749        "internalType": "struct EthCrossAccount",750        "name": "from",751        "type": "tuple"752      },753      {754        "components": [755          { "internalType": "address", "name": "eth", "type": "address" },756          { "internalType": "uint256", "name": "sub", "type": "uint256" }757        ],758        "internalType": "struct EthCrossAccount",759        "name": "to",760        "type": "tuple"761      },762      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }763    ],764    "name": "transferFromCross",765    "outputs": [],766    "stateMutability": "nonpayable",767    "type": "function"768  },769  {770    "inputs": [],771    "name": "uniqueCollectionType",772    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],773    "stateMutability": "view",774    "type": "function"775  }776]
modifiedtests/src/eth/api/UniqueNFT.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueNFT.sol
+++ b/tests/src/eth/api/UniqueNFT.sol
@@ -446,7 +446,7 @@
 }
 
 /// @title Unique extensions for ERC721.
-/// @dev the ERC-165 identifier for this interface is 0xb8f094a0
+/// @dev the ERC-165 identifier for this interface is 0xb74c26b7
 interface ERC721UniqueExtensions is Dummy, ERC165 {
 	/// @notice A descriptive name for a collection of NFTs in this contract
 	/// @dev EVM selector for this function is: 0x06fdde03,
@@ -475,9 +475,9 @@
 	/// @param tokenId Id for the token.
 	/// @param keys Properties keys. Empty keys for all propertyes.
 	/// @return Vector of properties key/value pairs.
-	/// @dev EVM selector for this function is: 0xefc26c69,
-	///  or in textual repr: tokenProperties(uint256,string[])
-	function tokenProperties(uint256 tokenId, string[] memory keys) external view returns (Property[] memory);
+	/// @dev EVM selector for this function is: 0xe07ede7e,
+	///  or in textual repr: properties(uint256,string[])
+	function properties(uint256 tokenId, string[] memory keys) external view returns (Property[] memory);
 
 	/// @notice Set or reaffirm the approved address for an NFT
 	/// @dev The zero address indicates there is no approved address.
modifiedtests/src/eth/api/UniqueRefungible.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueRefungible.sol
+++ b/tests/src/eth/api/UniqueRefungible.sol
@@ -444,7 +444,7 @@
 }
 
 /// @title Unique extensions for ERC721.
-/// @dev the ERC-165 identifier for this interface is 0x1d4b64d6
+/// @dev the ERC-165 identifier for this interface is 0x12f7d6c1
 interface ERC721UniqueExtensions is Dummy, ERC165 {
 	/// @notice A descriptive name for a collection of NFTs in this contract
 	/// @dev EVM selector for this function is: 0x06fdde03,
@@ -473,9 +473,9 @@
 	/// @param tokenId Id for the token.
 	/// @param keys Properties keys. Empty keys for all propertyes.
 	/// @return Vector of properties key/value pairs.
-	/// @dev EVM selector for this function is: 0xefc26c69,
-	///  or in textual repr: tokenProperties(uint256,string[])
-	function tokenProperties(uint256 tokenId, string[] memory keys) external view returns (Property[] memory);
+	/// @dev EVM selector for this function is: 0xe07ede7e,
+	///  or in textual repr: properties(uint256,string[])
+	function properties(uint256 tokenId, string[] memory keys) external view returns (Property[] memory);
 
 	/// @notice Transfer ownership of an RFT
 	/// @dev Throws unless `msg.sender` is the current owner. Throws if `to`
modifiedtests/src/eth/base.test.tsdiffbeforeafterboth
--- a/tests/src/eth/base.test.ts
+++ b/tests/src/eth/base.test.ts
@@ -117,7 +117,7 @@
   });
 
   itEth('ERC721UniqueExtensions support', async ({helper}) => {
-    await checkInterface(helper, '0xb8f094a0', true, true);
+    await checkInterface(helper, '0xb74c26b7', true, true);
   });
 
   itEth('ERC721Burnable - 0x42966c68 - support', async ({helper}) => {
modifiedtests/src/eth/tokenProperties.test.tsdiffbeforeafterboth
--- a/tests/src/eth/tokenProperties.test.ts
+++ b/tests/src/eth/tokenProperties.test.ts
@@ -120,17 +120,17 @@
     const address = helper.ethAddress.fromCollectionId(collection.collectionId);
     const contract = helper.ethNativeContract.collection(address, mode, caller);
     
-    expect(await contract.methods.tokenProperties(token.tokenId, []).call()).to.be.deep.equal([]);
+    expect(await contract.methods.properties(token.tokenId, []).call()).to.be.deep.equal([]);
 
     await contract.methods.setProperties(token.tokenId, properties).send({from: caller});
 
     const values = await token.getProperties(properties.map(p => p.key));
     expect(values).to.be.deep.equal(properties.map(p => { return {key: p.key, value: p.value.toString()}; }));
     
-    expect(await contract.methods.tokenProperties(token.tokenId, []).call()).to.be.like(properties
+    expect(await contract.methods.properties(token.tokenId, []).call()).to.be.like(properties
       .map(p => { return helper.ethProperty.property(p.key, p.value.toString()); }));
     
-    expect(await contract.methods.tokenProperties(token.tokenId, [properties[0].key]).call())
+    expect(await contract.methods.properties(token.tokenId, [properties[0].key]).call())
       .to.be.like([helper.ethProperty.property(properties[0].key, properties[0].value.toString())]);
   }