git.delta.rocks / unique-network / refs/commits / 5223dbed88c4

difftreelog

added `collectionNestingRestrictedCollectionIds()` function in `Collection` interface.

PraetorP2022-12-02parent: #46e50c0.patch.diff
in: master

14 files changed

modifiedpallets/common/src/erc.rsdiffbeforeafterboth
--- a/pallets/common/src/erc.rs
+++ b/pallets/common/src/erc.rs
@@ -493,6 +493,21 @@
 		<Pallet<T>>::update_permissions(&caller, self, permissions).map_err(dispatch_to_evm::<T>)
 	}
 
+	/// Returns nesting for a collection
+	#[solidity(rename_selector = "collectionNestingRestrictedCollectionIds")]
+	fn collection_nesting_restricted_ids(&self) -> Result<(bool, Vec<uint256>)> {
+		let nesting = self.collection.permissions.nesting();
+
+		Ok((
+			nesting.token_owner,
+			nesting
+				.restricted
+				.clone()
+				.map(|b| b.0.into_inner().iter().map(|id| id.0.into()).collect())
+				.unwrap_or_default(),
+		))
+	}
+
 	/// Set the collection access method.
 	/// @param mode Access mode
 	/// 	0 for Normal
modifiedpallets/evm-contract-helpers/src/stubs/ContractHelpers.rawdiffbeforeafterboth

binary blob — no preview

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
@@ -18,7 +18,7 @@
 }
 
 /// @title A contract that allows you to work with collections.
-/// @dev the ERC-165 identifier for this interface is 0xcc1d80ca
+/// @dev the ERC-165 identifier for this interface is 0xeecfdb34
 contract Collection is Dummy, ERC165 {
 	// /// Set collection property.
 	// ///
@@ -254,6 +254,15 @@
 		dummy = 0;
 	}
 
+	/// Returns nesting for a collection
+	/// @dev EVM selector for this function is: 0x22d25bfe,
+	///  or in textual repr: collectionNestingRestrictedCollectionIds()
+	function collectionNestingRestrictedCollectionIds() public view returns (Tuple21 memory) {
+		require(false, stub_error);
+		dummy;
+		return Tuple21(false, new uint256[](0));
+	}
+
 	/// Set the collection access method.
 	/// @param mode Access mode
 	/// 	0 for Normal
@@ -425,6 +434,12 @@
 	uint256 sub;
 }
 
+/// @dev anonymous struct
+struct Tuple21 {
+	bool field_0;
+	uint256[] field_1;
+}
+
 /// @dev Property struct
 struct Property {
 	string key;
modifiedpallets/nonfungible/src/stubs/UniqueNFT.soldiffbeforeafterboth
--- a/pallets/nonfungible/src/stubs/UniqueNFT.sol
+++ b/pallets/nonfungible/src/stubs/UniqueNFT.sol
@@ -119,7 +119,7 @@
 }
 
 /// @title A contract that allows you to work with collections.
-/// @dev the ERC-165 identifier for this interface is 0xcc1d80ca
+/// @dev the ERC-165 identifier for this interface is 0xeecfdb34
 contract Collection is Dummy, ERC165 {
 	// /// Set collection property.
 	// ///
@@ -355,6 +355,15 @@
 		dummy = 0;
 	}
 
+	/// Returns nesting for a collection
+	/// @dev EVM selector for this function is: 0x22d25bfe,
+	///  or in textual repr: collectionNestingRestrictedCollectionIds()
+	function collectionNestingRestrictedCollectionIds() public view returns (Tuple34 memory) {
+		require(false, stub_error);
+		dummy;
+		return Tuple34(false, new uint256[](0));
+	}
+
 	/// Set the collection access method.
 	/// @param mode Access mode
 	/// 	0 for Normal
@@ -527,6 +536,12 @@
 }
 
 /// @dev anonymous struct
+struct Tuple34 {
+	bool field_0;
+	uint256[] field_1;
+}
+
+/// @dev anonymous struct
 struct Tuple30 {
 	address field_0;
 	uint256 field_1;
modifiedpallets/refungible/src/stubs/UniqueRefungible.soldiffbeforeafterboth
--- a/pallets/refungible/src/stubs/UniqueRefungible.sol
+++ b/pallets/refungible/src/stubs/UniqueRefungible.sol
@@ -119,7 +119,7 @@
 }
 
 /// @title A contract that allows you to work with collections.
-/// @dev the ERC-165 identifier for this interface is 0xcc1d80ca
+/// @dev the ERC-165 identifier for this interface is 0xeecfdb34
 contract Collection is Dummy, ERC165 {
 	// /// Set collection property.
 	// ///
@@ -355,6 +355,15 @@
 		dummy = 0;
 	}
 
+	/// Returns nesting for a collection
+	/// @dev EVM selector for this function is: 0x22d25bfe,
+	///  or in textual repr: collectionNestingRestrictedCollectionIds()
+	function collectionNestingRestrictedCollectionIds() public view returns (Tuple33 memory) {
+		require(false, stub_error);
+		dummy;
+		return Tuple33(false, new uint256[](0));
+	}
+
 	/// Set the collection access method.
 	/// @param mode Access mode
 	/// 	0 for Normal
@@ -527,6 +536,12 @@
 }
 
 /// @dev anonymous struct
+struct Tuple33 {
+	bool field_0;
+	uint256[] field_1;
+}
+
+/// @dev anonymous struct
 struct Tuple29 {
 	address field_0;
 	uint256 field_1;
modifiedpallets/refungible/src/stubs/UniqueRefungibleToken.rawdiffbeforeafterboth

binary blob — no preview

modifiedtests/src/eth/abi/fungible.jsondiffbeforeafterboth
--- a/tests/src/eth/abi/fungible.json
+++ b/tests/src/eth/abi/fungible.json
@@ -208,6 +208,27 @@
   },
   {
     "inputs": [],
+    "name": "collectionNestingRestrictedCollectionIds",
+    "outputs": [
+      {
+        "components": [
+          { "internalType": "bool", "name": "field_0", "type": "bool" },
+          {
+            "internalType": "uint256[]",
+            "name": "field_1",
+            "type": "uint256[]"
+          }
+        ],
+        "internalType": "struct Tuple21",
+        "name": "",
+        "type": "tuple"
+      }
+    ],
+    "stateMutability": "view",
+    "type": "function"
+  },
+  {
+    "inputs": [],
     "name": "collectionOwner",
     "outputs": [
       {
modifiedtests/src/eth/abi/nonFungible.jsondiffbeforeafterboth
before · tests/src/eth/abi/nonFungible.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      {147        "components": [148          { "internalType": "address", "name": "eth", "type": "address" },149          { "internalType": "uint256", "name": "sub", "type": "uint256" }150        ],151        "internalType": "struct EthCrossAccount",152        "name": "approved",153        "type": "tuple"154      },155      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }156    ],157    "name": "approveCross",158    "outputs": [],159    "stateMutability": "nonpayable",160    "type": "function"161  },162  {163    "inputs": [164      { "internalType": "address", "name": "owner", "type": "address" }165    ],166    "name": "balanceOf",167    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],168    "stateMutability": "view",169    "type": "function"170  },171  {172    "inputs": [173      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }174    ],175    "name": "burn",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": "from",189        "type": "tuple"190      },191      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }192    ],193    "name": "burnFromCross",194    "outputs": [],195    "stateMutability": "nonpayable",196    "type": "function"197  },198  {199    "inputs": [200      {201        "components": [202          { "internalType": "address", "name": "eth", "type": "address" },203          { "internalType": "uint256", "name": "sub", "type": "uint256" }204        ],205        "internalType": "struct EthCrossAccount",206        "name": "newOwner",207        "type": "tuple"208      }209    ],210    "name": "changeCollectionOwnerCross",211    "outputs": [],212    "stateMutability": "nonpayable",213    "type": "function"214  },215  {216    "inputs": [],217    "name": "collectionAdmins",218    "outputs": [219      {220        "components": [221          { "internalType": "address", "name": "eth", "type": "address" },222          { "internalType": "uint256", "name": "sub", "type": "uint256" }223        ],224        "internalType": "struct EthCrossAccount[]",225        "name": "",226        "type": "tuple[]"227      }228    ],229    "stateMutability": "view",230    "type": "function"231  },232  {233    "inputs": [],234    "name": "collectionHelperAddress",235    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],236    "stateMutability": "view",237    "type": "function"238  },239  {240    "inputs": [],241    "name": "collectionOwner",242    "outputs": [243      {244        "components": [245          { "internalType": "address", "name": "eth", "type": "address" },246          { "internalType": "uint256", "name": "sub", "type": "uint256" }247        ],248        "internalType": "struct EthCrossAccount",249        "name": "",250        "type": "tuple"251      }252    ],253    "stateMutability": "view",254    "type": "function"255  },256  {257    "inputs": [258      { "internalType": "string[]", "name": "keys", "type": "string[]" }259    ],260    "name": "collectionProperties",261    "outputs": [262      {263        "components": [264          { "internalType": "string", "name": "key", "type": "string" },265          { "internalType": "bytes", "name": "value", "type": "bytes" }266        ],267        "internalType": "struct Property[]",268        "name": "",269        "type": "tuple[]"270      }271    ],272    "stateMutability": "view",273    "type": "function"274  },275  {276    "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],277    "name": "collectionProperty",278    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],279    "stateMutability": "view",280    "type": "function"281  },282  {283    "inputs": [],284    "name": "collectionSponsor",285    "outputs": [286      {287        "components": [288          { "internalType": "address", "name": "field_0", "type": "address" },289          { "internalType": "uint256", "name": "field_1", "type": "uint256" }290        ],291        "internalType": "struct Tuple30",292        "name": "",293        "type": "tuple"294      }295    ],296    "stateMutability": "view",297    "type": "function"298  },299  {300    "inputs": [],301    "name": "confirmCollectionSponsorship",302    "outputs": [],303    "stateMutability": "nonpayable",304    "type": "function"305  },306  {307    "inputs": [],308    "name": "contractAddress",309    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],310    "stateMutability": "view",311    "type": "function"312  },313  {314    "inputs": [315      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }316    ],317    "name": "crossOwnerOf",318    "outputs": [319      {320        "components": [321          { "internalType": "address", "name": "eth", "type": "address" },322          { "internalType": "uint256", "name": "sub", "type": "uint256" }323        ],324        "internalType": "struct EthCrossAccount",325        "name": "",326        "type": "tuple"327      }328    ],329    "stateMutability": "view",330    "type": "function"331  },332  {333    "inputs": [334      { "internalType": "string[]", "name": "keys", "type": "string[]" }335    ],336    "name": "deleteCollectionProperties",337    "outputs": [],338    "stateMutability": "nonpayable",339    "type": "function"340  },341  {342    "inputs": [343      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },344      { "internalType": "string[]", "name": "keys", "type": "string[]" }345    ],346    "name": "deleteProperties",347    "outputs": [],348    "stateMutability": "nonpayable",349    "type": "function"350  },351  {352    "inputs": [],353    "name": "description",354    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],355    "stateMutability": "view",356    "type": "function"357  },358  {359    "inputs": [],360    "name": "finishMinting",361    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],362    "stateMutability": "nonpayable",363    "type": "function"364  },365  {366    "inputs": [367      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }368    ],369    "name": "getApproved",370    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],371    "stateMutability": "view",372    "type": "function"373  },374  {375    "inputs": [],376    "name": "hasCollectionPendingSponsor",377    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],378    "stateMutability": "view",379    "type": "function"380  },381  {382    "inputs": [383      { "internalType": "address", "name": "owner", "type": "address" },384      { "internalType": "address", "name": "operator", "type": "address" }385    ],386    "name": "isApprovedForAll",387    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],388    "stateMutability": "view",389    "type": "function"390  },391  {392    "inputs": [393      {394        "components": [395          { "internalType": "address", "name": "eth", "type": "address" },396          { "internalType": "uint256", "name": "sub", "type": "uint256" }397        ],398        "internalType": "struct EthCrossAccount",399        "name": "user",400        "type": "tuple"401      }402    ],403    "name": "isOwnerOrAdminCross",404    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],405    "stateMutability": "view",406    "type": "function"407  },408  {409    "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],410    "name": "mint",411    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],412    "stateMutability": "nonpayable",413    "type": "function"414  },415  {416    "inputs": [417      { "internalType": "address", "name": "to", "type": "address" },418      { "internalType": "string", "name": "tokenUri", "type": "string" }419    ],420    "name": "mintWithTokenURI",421    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],422    "stateMutability": "nonpayable",423    "type": "function"424  },425  {426    "inputs": [],427    "name": "mintingFinished",428    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],429    "stateMutability": "view",430    "type": "function"431  },432  {433    "inputs": [],434    "name": "name",435    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],436    "stateMutability": "view",437    "type": "function"438  },439  {440    "inputs": [],441    "name": "nextTokenId",442    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],443    "stateMutability": "view",444    "type": "function"445  },446  {447    "inputs": [448      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }449    ],450    "name": "ownerOf",451    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],452    "stateMutability": "view",453    "type": "function"454  },455  {456    "inputs": [457      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },458      { "internalType": "string[]", "name": "keys", "type": "string[]" }459    ],460    "name": "properties",461    "outputs": [462      {463        "components": [464          { "internalType": "string", "name": "key", "type": "string" },465          { "internalType": "bytes", "name": "value", "type": "bytes" }466        ],467        "internalType": "struct Property[]",468        "name": "",469        "type": "tuple[]"470      }471    ],472    "stateMutability": "view",473    "type": "function"474  },475  {476    "inputs": [477      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },478      { "internalType": "string", "name": "key", "type": "string" }479    ],480    "name": "property",481    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],482    "stateMutability": "view",483    "type": "function"484  },485  {486    "inputs": [487      {488        "components": [489          { "internalType": "address", "name": "eth", "type": "address" },490          { "internalType": "uint256", "name": "sub", "type": "uint256" }491        ],492        "internalType": "struct EthCrossAccount",493        "name": "admin",494        "type": "tuple"495      }496    ],497    "name": "removeCollectionAdminCross",498    "outputs": [],499    "stateMutability": "nonpayable",500    "type": "function"501  },502  {503    "inputs": [],504    "name": "removeCollectionSponsor",505    "outputs": [],506    "stateMutability": "nonpayable",507    "type": "function"508  },509  {510    "inputs": [511      {512        "components": [513          { "internalType": "address", "name": "eth", "type": "address" },514          { "internalType": "uint256", "name": "sub", "type": "uint256" }515        ],516        "internalType": "struct EthCrossAccount",517        "name": "user",518        "type": "tuple"519      }520    ],521    "name": "removeFromCollectionAllowListCross",522    "outputs": [],523    "stateMutability": "nonpayable",524    "type": "function"525  },526  {527    "inputs": [528      { "internalType": "address", "name": "from", "type": "address" },529      { "internalType": "address", "name": "to", "type": "address" },530      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }531    ],532    "name": "safeTransferFrom",533    "outputs": [],534    "stateMutability": "nonpayable",535    "type": "function"536  },537  {538    "inputs": [539      { "internalType": "address", "name": "from", "type": "address" },540      { "internalType": "address", "name": "to", "type": "address" },541      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },542      { "internalType": "bytes", "name": "data", "type": "bytes" }543    ],544    "name": "safeTransferFrom",545    "outputs": [],546    "stateMutability": "nonpayable",547    "type": "function"548  },549  {550    "inputs": [551      { "internalType": "address", "name": "operator", "type": "address" },552      { "internalType": "bool", "name": "approved", "type": "bool" }553    ],554    "name": "setApprovalForAll",555    "outputs": [],556    "stateMutability": "nonpayable",557    "type": "function"558  },559  {560    "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],561    "name": "setCollectionAccess",562    "outputs": [],563    "stateMutability": "nonpayable",564    "type": "function"565  },566  {567    "inputs": [568      { "internalType": "string", "name": "limit", "type": "string" },569      { "internalType": "uint256", "name": "value", "type": "uint256" }570    ],571    "name": "setCollectionLimit",572    "outputs": [],573    "stateMutability": "nonpayable",574    "type": "function"575  },576  {577    "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],578    "name": "setCollectionMintMode",579    "outputs": [],580    "stateMutability": "nonpayable",581    "type": "function"582  },583  {584    "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],585    "name": "setCollectionNesting",586    "outputs": [],587    "stateMutability": "nonpayable",588    "type": "function"589  },590  {591    "inputs": [592      { "internalType": "bool", "name": "enable", "type": "bool" },593      {594        "internalType": "address[]",595        "name": "collections",596        "type": "address[]"597      }598    ],599    "name": "setCollectionNesting",600    "outputs": [],601    "stateMutability": "nonpayable",602    "type": "function"603  },604  {605    "inputs": [606      {607        "components": [608          { "internalType": "string", "name": "key", "type": "string" },609          { "internalType": "bytes", "name": "value", "type": "bytes" }610        ],611        "internalType": "struct Property[]",612        "name": "properties",613        "type": "tuple[]"614      }615    ],616    "name": "setCollectionProperties",617    "outputs": [],618    "stateMutability": "nonpayable",619    "type": "function"620  },621  {622    "inputs": [623      {624        "components": [625          { "internalType": "address", "name": "eth", "type": "address" },626          { "internalType": "uint256", "name": "sub", "type": "uint256" }627        ],628        "internalType": "struct EthCrossAccount",629        "name": "sponsor",630        "type": "tuple"631      }632    ],633    "name": "setCollectionSponsorCross",634    "outputs": [],635    "stateMutability": "nonpayable",636    "type": "function"637  },638  {639    "inputs": [640      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },641      {642        "components": [643          { "internalType": "string", "name": "key", "type": "string" },644          { "internalType": "bytes", "name": "value", "type": "bytes" }645        ],646        "internalType": "struct Property[]",647        "name": "properties",648        "type": "tuple[]"649      }650    ],651    "name": "setProperties",652    "outputs": [],653    "stateMutability": "nonpayable",654    "type": "function"655  },656  {657    "inputs": [658      { "internalType": "string", "name": "key", "type": "string" },659      { "internalType": "bool", "name": "isMutable", "type": "bool" },660      { "internalType": "bool", "name": "collectionAdmin", "type": "bool" },661      { "internalType": "bool", "name": "tokenOwner", "type": "bool" }662    ],663    "name": "setTokenPropertyPermission",664    "outputs": [],665    "stateMutability": "nonpayable",666    "type": "function"667  },668  {669    "inputs": [670      { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }671    ],672    "name": "supportsInterface",673    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],674    "stateMutability": "view",675    "type": "function"676  },677  {678    "inputs": [],679    "name": "symbol",680    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],681    "stateMutability": "view",682    "type": "function"683  },684  {685    "inputs": [686      { "internalType": "uint256", "name": "index", "type": "uint256" }687    ],688    "name": "tokenByIndex",689    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],690    "stateMutability": "view",691    "type": "function"692  },693  {694    "inputs": [695      { "internalType": "address", "name": "owner", "type": "address" },696      { "internalType": "uint256", "name": "index", "type": "uint256" }697    ],698    "name": "tokenOfOwnerByIndex",699    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],700    "stateMutability": "view",701    "type": "function"702  },703  {704    "inputs": [705      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }706    ],707    "name": "tokenURI",708    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],709    "stateMutability": "view",710    "type": "function"711  },712  {713    "inputs": [],714    "name": "totalSupply",715    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],716    "stateMutability": "view",717    "type": "function"718  },719  {720    "inputs": [721      { "internalType": "address", "name": "to", "type": "address" },722      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }723    ],724    "name": "transfer",725    "outputs": [],726    "stateMutability": "nonpayable",727    "type": "function"728  },729  {730    "inputs": [731      {732        "components": [733          { "internalType": "address", "name": "eth", "type": "address" },734          { "internalType": "uint256", "name": "sub", "type": "uint256" }735        ],736        "internalType": "struct EthCrossAccount",737        "name": "to",738        "type": "tuple"739      },740      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }741    ],742    "name": "transferCross",743    "outputs": [],744    "stateMutability": "nonpayable",745    "type": "function"746  },747  {748    "inputs": [749      { "internalType": "address", "name": "from", "type": "address" },750      { "internalType": "address", "name": "to", "type": "address" },751      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }752    ],753    "name": "transferFrom",754    "outputs": [],755    "stateMutability": "nonpayable",756    "type": "function"757  },758  {759    "inputs": [760      {761        "components": [762          { "internalType": "address", "name": "eth", "type": "address" },763          { "internalType": "uint256", "name": "sub", "type": "uint256" }764        ],765        "internalType": "struct EthCrossAccount",766        "name": "from",767        "type": "tuple"768      },769      {770        "components": [771          { "internalType": "address", "name": "eth", "type": "address" },772          { "internalType": "uint256", "name": "sub", "type": "uint256" }773        ],774        "internalType": "struct EthCrossAccount",775        "name": "to",776        "type": "tuple"777      },778      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }779    ],780    "name": "transferFromCross",781    "outputs": [],782    "stateMutability": "nonpayable",783    "type": "function"784  },785  {786    "inputs": [],787    "name": "uniqueCollectionType",788    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],789    "stateMutability": "view",790    "type": "function"791  }792]
modifiedtests/src/eth/abi/reFungible.jsondiffbeforeafterboth
--- a/tests/src/eth/abi/reFungible.json
+++ b/tests/src/eth/abi/reFungible.json
@@ -220,6 +220,27 @@
   },
   {
     "inputs": [],
+    "name": "collectionNestingRestrictedCollectionIds",
+    "outputs": [
+      {
+        "components": [
+          { "internalType": "bool", "name": "field_0", "type": "bool" },
+          {
+            "internalType": "uint256[]",
+            "name": "field_1",
+            "type": "uint256[]"
+          }
+        ],
+        "internalType": "struct Tuple33",
+        "name": "",
+        "type": "tuple"
+      }
+    ],
+    "stateMutability": "view",
+    "type": "function"
+  },
+  {
+    "inputs": [],
     "name": "collectionOwner",
     "outputs": [
       {
modifiedtests/src/eth/api/UniqueFungible.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueFungible.sol
+++ b/tests/src/eth/api/UniqueFungible.sol
@@ -13,7 +13,7 @@
 }
 
 /// @title A contract that allows you to work with collections.
-/// @dev the ERC-165 identifier for this interface is 0xcc1d80ca
+/// @dev the ERC-165 identifier for this interface is 0xeecfdb34
 interface Collection is Dummy, ERC165 {
 	// /// Set collection property.
 	// ///
@@ -166,6 +166,11 @@
 	///  or in textual repr: setCollectionNesting(bool,address[])
 	function setCollectionNesting(bool enable, address[] memory collections) external;
 
+	/// Returns nesting for a collection
+	/// @dev EVM selector for this function is: 0x22d25bfe,
+	///  or in textual repr: collectionNestingRestrictedCollectionIds()
+	function collectionNestingRestrictedCollectionIds() external view returns (Tuple20 memory);
+
 	/// Set the collection access method.
 	/// @param mode Access mode
 	/// 	0 for Normal
@@ -278,6 +283,12 @@
 	uint256 sub;
 }
 
+/// @dev anonymous struct
+struct Tuple20 {
+	bool field_0;
+	uint256[] field_1;
+}
+
 /// @dev Property struct
 struct Property {
 	string key;
modifiedtests/src/eth/api/UniqueNFT.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueNFT.sol
+++ b/tests/src/eth/api/UniqueNFT.sol
@@ -80,7 +80,7 @@
 }
 
 /// @title A contract that allows you to work with collections.
-/// @dev the ERC-165 identifier for this interface is 0xcc1d80ca
+/// @dev the ERC-165 identifier for this interface is 0xeecfdb34
 interface Collection is Dummy, ERC165 {
 	// /// Set collection property.
 	// ///
@@ -233,6 +233,11 @@
 	///  or in textual repr: setCollectionNesting(bool,address[])
 	function setCollectionNesting(bool enable, address[] memory collections) external;
 
+	/// Returns nesting for a collection
+	/// @dev EVM selector for this function is: 0x22d25bfe,
+	///  or in textual repr: collectionNestingRestrictedCollectionIds()
+	function collectionNestingRestrictedCollectionIds() external view returns (Tuple31 memory);
+
 	/// Set the collection access method.
 	/// @param mode Access mode
 	/// 	0 for Normal
@@ -346,6 +351,12 @@
 }
 
 /// @dev anonymous struct
+struct Tuple31 {
+	bool field_0;
+	uint256[] field_1;
+}
+
+/// @dev anonymous struct
 struct Tuple27 {
 	address field_0;
 	uint256 field_1;
modifiedtests/src/eth/api/UniqueRefungible.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueRefungible.sol
+++ b/tests/src/eth/api/UniqueRefungible.sol
@@ -80,7 +80,7 @@
 }
 
 /// @title A contract that allows you to work with collections.
-/// @dev the ERC-165 identifier for this interface is 0xcc1d80ca
+/// @dev the ERC-165 identifier for this interface is 0xeecfdb34
 interface Collection is Dummy, ERC165 {
 	// /// Set collection property.
 	// ///
@@ -233,6 +233,11 @@
 	///  or in textual repr: setCollectionNesting(bool,address[])
 	function setCollectionNesting(bool enable, address[] memory collections) external;
 
+	/// Returns nesting for a collection
+	/// @dev EVM selector for this function is: 0x22d25bfe,
+	///  or in textual repr: collectionNestingRestrictedCollectionIds()
+	function collectionNestingRestrictedCollectionIds() external view returns (Tuple30 memory);
+
 	/// Set the collection access method.
 	/// @param mode Access mode
 	/// 	0 for Normal
@@ -346,6 +351,12 @@
 }
 
 /// @dev anonymous struct
+struct Tuple30 {
+	bool field_0;
+	uint256[] field_1;
+}
+
+/// @dev anonymous struct
 struct Tuple26 {
 	address field_0;
 	uint256 field_1;
modifiedtests/src/eth/nesting/nest.test.tsdiffbeforeafterboth
--- a/tests/src/eth/nesting/nest.test.ts
+++ b/tests/src/eth/nesting/nest.test.ts
@@ -51,7 +51,20 @@
       await contract.methods.transferFrom(targetNftTokenAddress, owner, secondTokenId).send({from: owner});
       expect(await contract.methods.ownerOf(secondTokenId).call()).to.be.equal(owner);
     });
-
+    
+    itEth('NFT: collectionNestingRestrictedCollectionIds()', async ({helper}) => {
+      const owner = await helper.eth.createAccountWithBalance(donor);
+      const {collectionId: unnestedCollsectionId, collectionAddress: unnsetedCollectionAddress} = await helper.eth.createNFTCollection(owner, 'A', 'B', 'C');
+      const unnestedContract = helper.ethNativeContract.collection(unnsetedCollectionAddress, 'nft', owner);
+      expect(await unnestedContract.methods.collectionNestingRestrictedCollectionIds().call({from: owner})).to.be.like([false, []]);
+      
+      const {contract} = await createNestingCollection(helper, owner);
+      expect(await contract.methods.collectionNestingRestrictedCollectionIds().call({from: owner})).to.be.like([true, []]);
+      await contract.methods.setCollectionNesting(true, [unnsetedCollectionAddress]).send({from: owner});
+      expect(await contract.methods.collectionNestingRestrictedCollectionIds().call({from: owner})).to.be.like([true, [unnestedCollsectionId.toString()]]);
+      
+    });
+    
     itEth('NFT: allows an Owner to nest/unnest their token (Restricted nesting)', async ({helper}) => {
       const owner = await helper.eth.createAccountWithBalance(donor);