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

difftreelog

feat add enum for AccessMode

Trubnikov Sergey2023-01-17parent: #214592d.patch.diff
in: master

12 files changed

modifiedpallets/common/src/erc.rsdiffbeforeafterboth
--- a/pallets/common/src/erc.rs
+++ b/pallets/common/src/erc.rs
@@ -503,18 +503,12 @@
 	}
 	/// Set the collection access method.
 	/// @param mode Access mode
-	/// 	0 for Normal
-	/// 	1 for AllowList
-	fn set_collection_access(&mut self, caller: caller, mode: u8) -> Result<()> {
+	fn set_collection_access(&mut self, caller: caller, mode: eth::AccessMode) -> Result<()> {
 		self.consume_store_reads_and_writes(1, 1)?;
 
 		let caller = T::CrossAccountId::from_eth(caller);
 		let permissions = CollectionPermissions {
-			access: Some(match mode {
-				0 => AccessMode::Normal,
-				1 => AccessMode::AllowList,
-				_ => return Err("not supported access mode".into()),
-			}),
+			access: Some(mode.into()),
 			..Default::default()
 		};
 		<Pallet<T>>::update_permissions(&caller, self, permissions).map_err(dispatch_to_evm::<T>)
modifiedpallets/common/src/eth.rsdiffbeforeafterboth
--- a/pallets/common/src/eth.rs
+++ b/pallets/common/src/eth.rs
@@ -413,3 +413,32 @@
 		Self { field, value }
 	}
 }
+
+/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]).
+#[derive(AbiCoder, Copy, Clone, Default, Debug)]
+#[repr(u8)]
+pub enum AccessMode {
+	/// Access grant for owner and admins. Used as default.
+	#[default]
+	Normal,
+	/// Like a [`Normal`](AccessMode::Normal) but also users in allow list.
+	AllowList,
+}
+
+impl From<up_data_structs::AccessMode> for AccessMode {
+	fn from(value: up_data_structs::AccessMode) -> Self {
+		match value {
+			up_data_structs::AccessMode::Normal => AccessMode::Normal,
+			up_data_structs::AccessMode::AllowList => AccessMode::AllowList,
+		}
+	}
+}
+
+impl Into<up_data_structs::AccessMode> for AccessMode {
+	fn into(self) -> up_data_structs::AccessMode {
+		match self {
+			AccessMode::Normal => up_data_structs::AccessMode::Normal,
+			AccessMode::AllowList => up_data_structs::AccessMode::AllowList,
+		}
+	}
+}
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
@@ -274,11 +274,9 @@
 
 	/// Set the collection access method.
 	/// @param mode Access mode
-	/// 	0 for Normal
-	/// 	1 for AllowList
 	/// @dev EVM selector for this function is: 0x41835d4c,
 	///  or in textual repr: setCollectionAccess(uint8)
-	function setCollectionAccess(uint8 mode) public {
+	function setCollectionAccess(AccessMode mode) public {
 		require(false, stub_error);
 		mode;
 		dummy = 0;
@@ -443,6 +441,14 @@
 	uint256 sub;
 }
 
+/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]).
+enum AccessMode {
+	/// Access grant for owner and admins. Used as default.
+	Normal,
+	/// Like a [`Normal`](AccessMode::Normal) but also users in allow list.
+	AllowList
+}
+
 /// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) field.
 struct CollectionNestingPermission {
 	CollectionPermissionField field;
modifiedpallets/nonfungible/src/stubs/UniqueNFT.soldiffbeforeafterboth
--- a/pallets/nonfungible/src/stubs/UniqueNFT.sol
+++ b/pallets/nonfungible/src/stubs/UniqueNFT.sol
@@ -416,11 +416,9 @@
 
 	/// Set the collection access method.
 	/// @param mode Access mode
-	/// 	0 for Normal
-	/// 	1 for AllowList
 	/// @dev EVM selector for this function is: 0x41835d4c,
 	///  or in textual repr: setCollectionAccess(uint8)
-	function setCollectionAccess(uint8 mode) public {
+	function setCollectionAccess(AccessMode mode) public {
 		require(false, stub_error);
 		mode;
 		dummy = 0;
@@ -585,6 +583,14 @@
 	uint256 sub;
 }
 
+/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]).
+enum AccessMode {
+	/// Access grant for owner and admins. Used as default.
+	Normal,
+	/// Like a [`Normal`](AccessMode::Normal) but also users in allow list.
+	AllowList
+}
+
 /// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) field.
 struct CollectionNestingPermission {
 	CollectionPermissionField field;
modifiedpallets/refungible/src/stubs/UniqueRefungible.soldiffbeforeafterboth
--- a/pallets/refungible/src/stubs/UniqueRefungible.sol
+++ b/pallets/refungible/src/stubs/UniqueRefungible.sol
@@ -416,11 +416,9 @@
 
 	/// Set the collection access method.
 	/// @param mode Access mode
-	/// 	0 for Normal
-	/// 	1 for AllowList
 	/// @dev EVM selector for this function is: 0x41835d4c,
 	///  or in textual repr: setCollectionAccess(uint8)
-	function setCollectionAccess(uint8 mode) public {
+	function setCollectionAccess(AccessMode mode) public {
 		require(false, stub_error);
 		mode;
 		dummy = 0;
@@ -585,6 +583,14 @@
 	uint256 sub;
 }
 
+/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]).
+enum AccessMode {
+	/// Access grant for owner and admins. Used as default.
+	Normal,
+	/// Like a [`Normal`](AccessMode::Normal) but also users in allow list.
+	AllowList
+}
+
 /// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) field.
 struct CollectionNestingPermission {
 	CollectionPermissionField field;
modifiedtests/src/eth/abi/fungible.jsondiffbeforeafterboth
--- a/tests/src/eth/abi/fungible.json
+++ b/tests/src/eth/abi/fungible.json
@@ -488,7 +488,9 @@
     "type": "function"
   },
   {
-    "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],
+    "inputs": [
+      { "internalType": "enum AccessMode", "name": "mode", "type": "uint8" }
+    ],
     "name": "setCollectionAccess",
     "outputs": [],
     "stateMutability": "nonpayable",
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 CrossAddress",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 CrossAddress",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 CrossAddress",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 CrossAddress",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 CrossAddress",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 CrossAddress",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 CrossAddress[]",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": "collectionLimits",242    "outputs": [243      {244        "components": [245          {246            "internalType": "enum CollectionLimitField",247            "name": "field",248            "type": "uint8"249          },250          {251            "components": [252              { "internalType": "bool", "name": "status", "type": "bool" },253              { "internalType": "uint256", "name": "value", "type": "uint256" }254            ],255            "internalType": "struct OptionUint256",256            "name": "value",257            "type": "tuple"258          }259        ],260        "internalType": "struct CollectionLimit[]",261        "name": "",262        "type": "tuple[]"263      }264    ],265    "stateMutability": "view",266    "type": "function"267  },268  {269    "inputs": [],270    "name": "collectionNestingPermissions",271    "outputs": [272      {273        "components": [274          {275            "internalType": "enum CollectionPermissionField",276            "name": "field",277            "type": "uint8"278          },279          { "internalType": "bool", "name": "value", "type": "bool" }280        ],281        "internalType": "struct CollectionNestingPermission[]",282        "name": "",283        "type": "tuple[]"284      }285    ],286    "stateMutability": "view",287    "type": "function"288  },289  {290    "inputs": [],291    "name": "collectionNestingRestrictedCollectionIds",292    "outputs": [293      {294        "components": [295          { "internalType": "bool", "name": "token_owner", "type": "bool" },296          { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }297        ],298        "internalType": "struct CollectionNesting",299        "name": "",300        "type": "tuple"301      }302    ],303    "stateMutability": "view",304    "type": "function"305  },306  {307    "inputs": [],308    "name": "collectionOwner",309    "outputs": [310      {311        "components": [312          { "internalType": "address", "name": "eth", "type": "address" },313          { "internalType": "uint256", "name": "sub", "type": "uint256" }314        ],315        "internalType": "struct CrossAddress",316        "name": "",317        "type": "tuple"318      }319    ],320    "stateMutability": "view",321    "type": "function"322  },323  {324    "inputs": [325      { "internalType": "string[]", "name": "keys", "type": "string[]" }326    ],327    "name": "collectionProperties",328    "outputs": [329      {330        "components": [331          { "internalType": "string", "name": "key", "type": "string" },332          { "internalType": "bytes", "name": "value", "type": "bytes" }333        ],334        "internalType": "struct Property[]",335        "name": "",336        "type": "tuple[]"337      }338    ],339    "stateMutability": "view",340    "type": "function"341  },342  {343    "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],344    "name": "collectionProperty",345    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],346    "stateMutability": "view",347    "type": "function"348  },349  {350    "inputs": [],351    "name": "collectionSponsor",352    "outputs": [353      {354        "components": [355          { "internalType": "address", "name": "eth", "type": "address" },356          { "internalType": "uint256", "name": "sub", "type": "uint256" }357        ],358        "internalType": "struct CrossAddress",359        "name": "",360        "type": "tuple"361      }362    ],363    "stateMutability": "view",364    "type": "function"365  },366  {367    "inputs": [],368    "name": "confirmCollectionSponsorship",369    "outputs": [],370    "stateMutability": "nonpayable",371    "type": "function"372  },373  {374    "inputs": [],375    "name": "contractAddress",376    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],377    "stateMutability": "view",378    "type": "function"379  },380  {381    "inputs": [382      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }383    ],384    "name": "crossOwnerOf",385    "outputs": [386      {387        "components": [388          { "internalType": "address", "name": "eth", "type": "address" },389          { "internalType": "uint256", "name": "sub", "type": "uint256" }390        ],391        "internalType": "struct CrossAddress",392        "name": "",393        "type": "tuple"394      }395    ],396    "stateMutability": "view",397    "type": "function"398  },399  {400    "inputs": [401      { "internalType": "string[]", "name": "keys", "type": "string[]" }402    ],403    "name": "deleteCollectionProperties",404    "outputs": [],405    "stateMutability": "nonpayable",406    "type": "function"407  },408  {409    "inputs": [410      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },411      { "internalType": "string[]", "name": "keys", "type": "string[]" }412    ],413    "name": "deleteProperties",414    "outputs": [],415    "stateMutability": "nonpayable",416    "type": "function"417  },418  {419    "inputs": [],420    "name": "description",421    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],422    "stateMutability": "view",423    "type": "function"424  },425  {426    "inputs": [],427    "name": "finishMinting",428    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],429    "stateMutability": "nonpayable",430    "type": "function"431  },432  {433    "inputs": [434      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }435    ],436    "name": "getApproved",437    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],438    "stateMutability": "view",439    "type": "function"440  },441  {442    "inputs": [],443    "name": "hasCollectionPendingSponsor",444    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],445    "stateMutability": "view",446    "type": "function"447  },448  {449    "inputs": [450      { "internalType": "address", "name": "owner", "type": "address" },451      { "internalType": "address", "name": "operator", "type": "address" }452    ],453    "name": "isApprovedForAll",454    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],455    "stateMutability": "view",456    "type": "function"457  },458  {459    "inputs": [460      {461        "components": [462          { "internalType": "address", "name": "eth", "type": "address" },463          { "internalType": "uint256", "name": "sub", "type": "uint256" }464        ],465        "internalType": "struct CrossAddress",466        "name": "user",467        "type": "tuple"468      }469    ],470    "name": "isOwnerOrAdminCross",471    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],472    "stateMutability": "view",473    "type": "function"474  },475  {476    "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],477    "name": "mint",478    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],479    "stateMutability": "nonpayable",480    "type": "function"481  },482  {483    "inputs": [484      {485        "components": [486          { "internalType": "address", "name": "eth", "type": "address" },487          { "internalType": "uint256", "name": "sub", "type": "uint256" }488        ],489        "internalType": "struct CrossAddress",490        "name": "to",491        "type": "tuple"492      },493      {494        "components": [495          { "internalType": "string", "name": "key", "type": "string" },496          { "internalType": "bytes", "name": "value", "type": "bytes" }497        ],498        "internalType": "struct Property[]",499        "name": "properties",500        "type": "tuple[]"501      }502    ],503    "name": "mintCross",504    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],505    "stateMutability": "nonpayable",506    "type": "function"507  },508  {509    "inputs": [510      { "internalType": "address", "name": "to", "type": "address" },511      { "internalType": "string", "name": "tokenUri", "type": "string" }512    ],513    "name": "mintWithTokenURI",514    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],515    "stateMutability": "nonpayable",516    "type": "function"517  },518  {519    "inputs": [],520    "name": "mintingFinished",521    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],522    "stateMutability": "view",523    "type": "function"524  },525  {526    "inputs": [],527    "name": "name",528    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],529    "stateMutability": "view",530    "type": "function"531  },532  {533    "inputs": [],534    "name": "nextTokenId",535    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],536    "stateMutability": "view",537    "type": "function"538  },539  {540    "inputs": [541      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }542    ],543    "name": "ownerOf",544    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],545    "stateMutability": "view",546    "type": "function"547  },548  {549    "inputs": [550      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },551      { "internalType": "string[]", "name": "keys", "type": "string[]" }552    ],553    "name": "properties",554    "outputs": [555      {556        "components": [557          { "internalType": "string", "name": "key", "type": "string" },558          { "internalType": "bytes", "name": "value", "type": "bytes" }559        ],560        "internalType": "struct Property[]",561        "name": "",562        "type": "tuple[]"563      }564    ],565    "stateMutability": "view",566    "type": "function"567  },568  {569    "inputs": [570      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },571      { "internalType": "string", "name": "key", "type": "string" }572    ],573    "name": "property",574    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],575    "stateMutability": "view",576    "type": "function"577  },578  {579    "inputs": [580      {581        "components": [582          { "internalType": "address", "name": "eth", "type": "address" },583          { "internalType": "uint256", "name": "sub", "type": "uint256" }584        ],585        "internalType": "struct CrossAddress",586        "name": "admin",587        "type": "tuple"588      }589    ],590    "name": "removeCollectionAdminCross",591    "outputs": [],592    "stateMutability": "nonpayable",593    "type": "function"594  },595  {596    "inputs": [],597    "name": "removeCollectionSponsor",598    "outputs": [],599    "stateMutability": "nonpayable",600    "type": "function"601  },602  {603    "inputs": [604      {605        "components": [606          { "internalType": "address", "name": "eth", "type": "address" },607          { "internalType": "uint256", "name": "sub", "type": "uint256" }608        ],609        "internalType": "struct CrossAddress",610        "name": "user",611        "type": "tuple"612      }613    ],614    "name": "removeFromCollectionAllowListCross",615    "outputs": [],616    "stateMutability": "nonpayable",617    "type": "function"618  },619  {620    "inputs": [621      { "internalType": "address", "name": "from", "type": "address" },622      { "internalType": "address", "name": "to", "type": "address" },623      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }624    ],625    "name": "safeTransferFrom",626    "outputs": [],627    "stateMutability": "nonpayable",628    "type": "function"629  },630  {631    "inputs": [632      { "internalType": "address", "name": "from", "type": "address" },633      { "internalType": "address", "name": "to", "type": "address" },634      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },635      { "internalType": "bytes", "name": "data", "type": "bytes" }636    ],637    "name": "safeTransferFrom",638    "outputs": [],639    "stateMutability": "nonpayable",640    "type": "function"641  },642  {643    "inputs": [644      { "internalType": "address", "name": "operator", "type": "address" },645      { "internalType": "bool", "name": "approved", "type": "bool" }646    ],647    "name": "setApprovalForAll",648    "outputs": [],649    "stateMutability": "nonpayable",650    "type": "function"651  },652  {653    "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],654    "name": "setCollectionAccess",655    "outputs": [],656    "stateMutability": "nonpayable",657    "type": "function"658  },659  {660    "inputs": [661      {662        "components": [663          {664            "internalType": "enum CollectionLimitField",665            "name": "field",666            "type": "uint8"667          },668          {669            "components": [670              { "internalType": "bool", "name": "status", "type": "bool" },671              { "internalType": "uint256", "name": "value", "type": "uint256" }672            ],673            "internalType": "struct OptionUint256",674            "name": "value",675            "type": "tuple"676          }677        ],678        "internalType": "struct CollectionLimit",679        "name": "limit",680        "type": "tuple"681      }682    ],683    "name": "setCollectionLimit",684    "outputs": [],685    "stateMutability": "nonpayable",686    "type": "function"687  },688  {689    "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],690    "name": "setCollectionMintMode",691    "outputs": [],692    "stateMutability": "nonpayable",693    "type": "function"694  },695  {696    "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],697    "name": "setCollectionNesting",698    "outputs": [],699    "stateMutability": "nonpayable",700    "type": "function"701  },702  {703    "inputs": [704      { "internalType": "bool", "name": "enable", "type": "bool" },705      {706        "internalType": "address[]",707        "name": "collections",708        "type": "address[]"709      }710    ],711    "name": "setCollectionNesting",712    "outputs": [],713    "stateMutability": "nonpayable",714    "type": "function"715  },716  {717    "inputs": [718      {719        "components": [720          { "internalType": "string", "name": "key", "type": "string" },721          { "internalType": "bytes", "name": "value", "type": "bytes" }722        ],723        "internalType": "struct Property[]",724        "name": "properties",725        "type": "tuple[]"726      }727    ],728    "name": "setCollectionProperties",729    "outputs": [],730    "stateMutability": "nonpayable",731    "type": "function"732  },733  {734    "inputs": [735      {736        "components": [737          { "internalType": "address", "name": "eth", "type": "address" },738          { "internalType": "uint256", "name": "sub", "type": "uint256" }739        ],740        "internalType": "struct CrossAddress",741        "name": "sponsor",742        "type": "tuple"743      }744    ],745    "name": "setCollectionSponsorCross",746    "outputs": [],747    "stateMutability": "nonpayable",748    "type": "function"749  },750  {751    "inputs": [752      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },753      {754        "components": [755          { "internalType": "string", "name": "key", "type": "string" },756          { "internalType": "bytes", "name": "value", "type": "bytes" }757        ],758        "internalType": "struct Property[]",759        "name": "properties",760        "type": "tuple[]"761      }762    ],763    "name": "setProperties",764    "outputs": [],765    "stateMutability": "nonpayable",766    "type": "function"767  },768  {769    "inputs": [770      {771        "components": [772          { "internalType": "string", "name": "key", "type": "string" },773          {774            "components": [775              {776                "internalType": "enum TokenPermissionField",777                "name": "code",778                "type": "uint8"779              },780              { "internalType": "bool", "name": "value", "type": "bool" }781            ],782            "internalType": "struct PropertyPermission[]",783            "name": "permissions",784            "type": "tuple[]"785          }786        ],787        "internalType": "struct TokenPropertyPermission[]",788        "name": "permissions",789        "type": "tuple[]"790      }791    ],792    "name": "setTokenPropertyPermissions",793    "outputs": [],794    "stateMutability": "nonpayable",795    "type": "function"796  },797  {798    "inputs": [799      { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }800    ],801    "name": "supportsInterface",802    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],803    "stateMutability": "view",804    "type": "function"805  },806  {807    "inputs": [],808    "name": "symbol",809    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],810    "stateMutability": "view",811    "type": "function"812  },813  {814    "inputs": [815      { "internalType": "uint256", "name": "index", "type": "uint256" }816    ],817    "name": "tokenByIndex",818    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],819    "stateMutability": "view",820    "type": "function"821  },822  {823    "inputs": [824      { "internalType": "address", "name": "owner", "type": "address" },825      { "internalType": "uint256", "name": "index", "type": "uint256" }826    ],827    "name": "tokenOfOwnerByIndex",828    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],829    "stateMutability": "view",830    "type": "function"831  },832  {833    "inputs": [],834    "name": "tokenPropertyPermissions",835    "outputs": [836      {837        "components": [838          { "internalType": "string", "name": "key", "type": "string" },839          {840            "components": [841              {842                "internalType": "enum TokenPermissionField",843                "name": "code",844                "type": "uint8"845              },846              { "internalType": "bool", "name": "value", "type": "bool" }847            ],848            "internalType": "struct PropertyPermission[]",849            "name": "permissions",850            "type": "tuple[]"851          }852        ],853        "internalType": "struct TokenPropertyPermission[]",854        "name": "",855        "type": "tuple[]"856      }857    ],858    "stateMutability": "view",859    "type": "function"860  },861  {862    "inputs": [863      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }864    ],865    "name": "tokenURI",866    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],867    "stateMutability": "view",868    "type": "function"869  },870  {871    "inputs": [],872    "name": "totalSupply",873    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],874    "stateMutability": "view",875    "type": "function"876  },877  {878    "inputs": [879      { "internalType": "address", "name": "to", "type": "address" },880      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }881    ],882    "name": "transfer",883    "outputs": [],884    "stateMutability": "nonpayable",885    "type": "function"886  },887  {888    "inputs": [889      {890        "components": [891          { "internalType": "address", "name": "eth", "type": "address" },892          { "internalType": "uint256", "name": "sub", "type": "uint256" }893        ],894        "internalType": "struct CrossAddress",895        "name": "to",896        "type": "tuple"897      },898      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }899    ],900    "name": "transferCross",901    "outputs": [],902    "stateMutability": "nonpayable",903    "type": "function"904  },905  {906    "inputs": [907      { "internalType": "address", "name": "from", "type": "address" },908      { "internalType": "address", "name": "to", "type": "address" },909      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }910    ],911    "name": "transferFrom",912    "outputs": [],913    "stateMutability": "nonpayable",914    "type": "function"915  },916  {917    "inputs": [918      {919        "components": [920          { "internalType": "address", "name": "eth", "type": "address" },921          { "internalType": "uint256", "name": "sub", "type": "uint256" }922        ],923        "internalType": "struct CrossAddress",924        "name": "from",925        "type": "tuple"926      },927      {928        "components": [929          { "internalType": "address", "name": "eth", "type": "address" },930          { "internalType": "uint256", "name": "sub", "type": "uint256" }931        ],932        "internalType": "struct CrossAddress",933        "name": "to",934        "type": "tuple"935      },936      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }937    ],938    "name": "transferFromCross",939    "outputs": [],940    "stateMutability": "nonpayable",941    "type": "function"942  },943  {944    "inputs": [],945    "name": "uniqueCollectionType",946    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],947    "stateMutability": "view",948    "type": "function"949  }950]
after · 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 CrossAddress",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 CrossAddress",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 CrossAddress",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 CrossAddress",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 CrossAddress",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 CrossAddress",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 CrossAddress[]",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": "collectionLimits",242    "outputs": [243      {244        "components": [245          {246            "internalType": "enum CollectionLimitField",247            "name": "field",248            "type": "uint8"249          },250          {251            "components": [252              { "internalType": "bool", "name": "status", "type": "bool" },253              { "internalType": "uint256", "name": "value", "type": "uint256" }254            ],255            "internalType": "struct OptionUint256",256            "name": "value",257            "type": "tuple"258          }259        ],260        "internalType": "struct CollectionLimit[]",261        "name": "",262        "type": "tuple[]"263      }264    ],265    "stateMutability": "view",266    "type": "function"267  },268  {269    "inputs": [],270    "name": "collectionNestingPermissions",271    "outputs": [272      {273        "components": [274          {275            "internalType": "enum CollectionPermissionField",276            "name": "field",277            "type": "uint8"278          },279          { "internalType": "bool", "name": "value", "type": "bool" }280        ],281        "internalType": "struct CollectionNestingPermission[]",282        "name": "",283        "type": "tuple[]"284      }285    ],286    "stateMutability": "view",287    "type": "function"288  },289  {290    "inputs": [],291    "name": "collectionNestingRestrictedCollectionIds",292    "outputs": [293      {294        "components": [295          { "internalType": "bool", "name": "token_owner", "type": "bool" },296          { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }297        ],298        "internalType": "struct CollectionNesting",299        "name": "",300        "type": "tuple"301      }302    ],303    "stateMutability": "view",304    "type": "function"305  },306  {307    "inputs": [],308    "name": "collectionOwner",309    "outputs": [310      {311        "components": [312          { "internalType": "address", "name": "eth", "type": "address" },313          { "internalType": "uint256", "name": "sub", "type": "uint256" }314        ],315        "internalType": "struct CrossAddress",316        "name": "",317        "type": "tuple"318      }319    ],320    "stateMutability": "view",321    "type": "function"322  },323  {324    "inputs": [325      { "internalType": "string[]", "name": "keys", "type": "string[]" }326    ],327    "name": "collectionProperties",328    "outputs": [329      {330        "components": [331          { "internalType": "string", "name": "key", "type": "string" },332          { "internalType": "bytes", "name": "value", "type": "bytes" }333        ],334        "internalType": "struct Property[]",335        "name": "",336        "type": "tuple[]"337      }338    ],339    "stateMutability": "view",340    "type": "function"341  },342  {343    "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],344    "name": "collectionProperty",345    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],346    "stateMutability": "view",347    "type": "function"348  },349  {350    "inputs": [],351    "name": "collectionSponsor",352    "outputs": [353      {354        "components": [355          { "internalType": "address", "name": "eth", "type": "address" },356          { "internalType": "uint256", "name": "sub", "type": "uint256" }357        ],358        "internalType": "struct CrossAddress",359        "name": "",360        "type": "tuple"361      }362    ],363    "stateMutability": "view",364    "type": "function"365  },366  {367    "inputs": [],368    "name": "confirmCollectionSponsorship",369    "outputs": [],370    "stateMutability": "nonpayable",371    "type": "function"372  },373  {374    "inputs": [],375    "name": "contractAddress",376    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],377    "stateMutability": "view",378    "type": "function"379  },380  {381    "inputs": [382      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }383    ],384    "name": "crossOwnerOf",385    "outputs": [386      {387        "components": [388          { "internalType": "address", "name": "eth", "type": "address" },389          { "internalType": "uint256", "name": "sub", "type": "uint256" }390        ],391        "internalType": "struct CrossAddress",392        "name": "",393        "type": "tuple"394      }395    ],396    "stateMutability": "view",397    "type": "function"398  },399  {400    "inputs": [401      { "internalType": "string[]", "name": "keys", "type": "string[]" }402    ],403    "name": "deleteCollectionProperties",404    "outputs": [],405    "stateMutability": "nonpayable",406    "type": "function"407  },408  {409    "inputs": [410      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },411      { "internalType": "string[]", "name": "keys", "type": "string[]" }412    ],413    "name": "deleteProperties",414    "outputs": [],415    "stateMutability": "nonpayable",416    "type": "function"417  },418  {419    "inputs": [],420    "name": "description",421    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],422    "stateMutability": "view",423    "type": "function"424  },425  {426    "inputs": [],427    "name": "finishMinting",428    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],429    "stateMutability": "nonpayable",430    "type": "function"431  },432  {433    "inputs": [434      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }435    ],436    "name": "getApproved",437    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],438    "stateMutability": "view",439    "type": "function"440  },441  {442    "inputs": [],443    "name": "hasCollectionPendingSponsor",444    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],445    "stateMutability": "view",446    "type": "function"447  },448  {449    "inputs": [450      { "internalType": "address", "name": "owner", "type": "address" },451      { "internalType": "address", "name": "operator", "type": "address" }452    ],453    "name": "isApprovedForAll",454    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],455    "stateMutability": "view",456    "type": "function"457  },458  {459    "inputs": [460      {461        "components": [462          { "internalType": "address", "name": "eth", "type": "address" },463          { "internalType": "uint256", "name": "sub", "type": "uint256" }464        ],465        "internalType": "struct CrossAddress",466        "name": "user",467        "type": "tuple"468      }469    ],470    "name": "isOwnerOrAdminCross",471    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],472    "stateMutability": "view",473    "type": "function"474  },475  {476    "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],477    "name": "mint",478    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],479    "stateMutability": "nonpayable",480    "type": "function"481  },482  {483    "inputs": [484      {485        "components": [486          { "internalType": "address", "name": "eth", "type": "address" },487          { "internalType": "uint256", "name": "sub", "type": "uint256" }488        ],489        "internalType": "struct CrossAddress",490        "name": "to",491        "type": "tuple"492      },493      {494        "components": [495          { "internalType": "string", "name": "key", "type": "string" },496          { "internalType": "bytes", "name": "value", "type": "bytes" }497        ],498        "internalType": "struct Property[]",499        "name": "properties",500        "type": "tuple[]"501      }502    ],503    "name": "mintCross",504    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],505    "stateMutability": "nonpayable",506    "type": "function"507  },508  {509    "inputs": [510      { "internalType": "address", "name": "to", "type": "address" },511      { "internalType": "string", "name": "tokenUri", "type": "string" }512    ],513    "name": "mintWithTokenURI",514    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],515    "stateMutability": "nonpayable",516    "type": "function"517  },518  {519    "inputs": [],520    "name": "mintingFinished",521    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],522    "stateMutability": "view",523    "type": "function"524  },525  {526    "inputs": [],527    "name": "name",528    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],529    "stateMutability": "view",530    "type": "function"531  },532  {533    "inputs": [],534    "name": "nextTokenId",535    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],536    "stateMutability": "view",537    "type": "function"538  },539  {540    "inputs": [541      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }542    ],543    "name": "ownerOf",544    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],545    "stateMutability": "view",546    "type": "function"547  },548  {549    "inputs": [550      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },551      { "internalType": "string[]", "name": "keys", "type": "string[]" }552    ],553    "name": "properties",554    "outputs": [555      {556        "components": [557          { "internalType": "string", "name": "key", "type": "string" },558          { "internalType": "bytes", "name": "value", "type": "bytes" }559        ],560        "internalType": "struct Property[]",561        "name": "",562        "type": "tuple[]"563      }564    ],565    "stateMutability": "view",566    "type": "function"567  },568  {569    "inputs": [570      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },571      { "internalType": "string", "name": "key", "type": "string" }572    ],573    "name": "property",574    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],575    "stateMutability": "view",576    "type": "function"577  },578  {579    "inputs": [580      {581        "components": [582          { "internalType": "address", "name": "eth", "type": "address" },583          { "internalType": "uint256", "name": "sub", "type": "uint256" }584        ],585        "internalType": "struct CrossAddress",586        "name": "admin",587        "type": "tuple"588      }589    ],590    "name": "removeCollectionAdminCross",591    "outputs": [],592    "stateMutability": "nonpayable",593    "type": "function"594  },595  {596    "inputs": [],597    "name": "removeCollectionSponsor",598    "outputs": [],599    "stateMutability": "nonpayable",600    "type": "function"601  },602  {603    "inputs": [604      {605        "components": [606          { "internalType": "address", "name": "eth", "type": "address" },607          { "internalType": "uint256", "name": "sub", "type": "uint256" }608        ],609        "internalType": "struct CrossAddress",610        "name": "user",611        "type": "tuple"612      }613    ],614    "name": "removeFromCollectionAllowListCross",615    "outputs": [],616    "stateMutability": "nonpayable",617    "type": "function"618  },619  {620    "inputs": [621      { "internalType": "address", "name": "from", "type": "address" },622      { "internalType": "address", "name": "to", "type": "address" },623      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }624    ],625    "name": "safeTransferFrom",626    "outputs": [],627    "stateMutability": "nonpayable",628    "type": "function"629  },630  {631    "inputs": [632      { "internalType": "address", "name": "from", "type": "address" },633      { "internalType": "address", "name": "to", "type": "address" },634      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },635      { "internalType": "bytes", "name": "data", "type": "bytes" }636    ],637    "name": "safeTransferFrom",638    "outputs": [],639    "stateMutability": "nonpayable",640    "type": "function"641  },642  {643    "inputs": [644      { "internalType": "address", "name": "operator", "type": "address" },645      { "internalType": "bool", "name": "approved", "type": "bool" }646    ],647    "name": "setApprovalForAll",648    "outputs": [],649    "stateMutability": "nonpayable",650    "type": "function"651  },652  {653    "inputs": [654      { "internalType": "enum AccessMode", "name": "mode", "type": "uint8" }655    ],656    "name": "setCollectionAccess",657    "outputs": [],658    "stateMutability": "nonpayable",659    "type": "function"660  },661  {662    "inputs": [663      {664        "components": [665          {666            "internalType": "enum CollectionLimitField",667            "name": "field",668            "type": "uint8"669          },670          {671            "components": [672              { "internalType": "bool", "name": "status", "type": "bool" },673              { "internalType": "uint256", "name": "value", "type": "uint256" }674            ],675            "internalType": "struct OptionUint256",676            "name": "value",677            "type": "tuple"678          }679        ],680        "internalType": "struct CollectionLimit",681        "name": "limit",682        "type": "tuple"683      }684    ],685    "name": "setCollectionLimit",686    "outputs": [],687    "stateMutability": "nonpayable",688    "type": "function"689  },690  {691    "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],692    "name": "setCollectionMintMode",693    "outputs": [],694    "stateMutability": "nonpayable",695    "type": "function"696  },697  {698    "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],699    "name": "setCollectionNesting",700    "outputs": [],701    "stateMutability": "nonpayable",702    "type": "function"703  },704  {705    "inputs": [706      { "internalType": "bool", "name": "enable", "type": "bool" },707      {708        "internalType": "address[]",709        "name": "collections",710        "type": "address[]"711      }712    ],713    "name": "setCollectionNesting",714    "outputs": [],715    "stateMutability": "nonpayable",716    "type": "function"717  },718  {719    "inputs": [720      {721        "components": [722          { "internalType": "string", "name": "key", "type": "string" },723          { "internalType": "bytes", "name": "value", "type": "bytes" }724        ],725        "internalType": "struct Property[]",726        "name": "properties",727        "type": "tuple[]"728      }729    ],730    "name": "setCollectionProperties",731    "outputs": [],732    "stateMutability": "nonpayable",733    "type": "function"734  },735  {736    "inputs": [737      {738        "components": [739          { "internalType": "address", "name": "eth", "type": "address" },740          { "internalType": "uint256", "name": "sub", "type": "uint256" }741        ],742        "internalType": "struct CrossAddress",743        "name": "sponsor",744        "type": "tuple"745      }746    ],747    "name": "setCollectionSponsorCross",748    "outputs": [],749    "stateMutability": "nonpayable",750    "type": "function"751  },752  {753    "inputs": [754      { "internalType": "uint256", "name": "tokenId", "type": "uint256" },755      {756        "components": [757          { "internalType": "string", "name": "key", "type": "string" },758          { "internalType": "bytes", "name": "value", "type": "bytes" }759        ],760        "internalType": "struct Property[]",761        "name": "properties",762        "type": "tuple[]"763      }764    ],765    "name": "setProperties",766    "outputs": [],767    "stateMutability": "nonpayable",768    "type": "function"769  },770  {771    "inputs": [772      {773        "components": [774          { "internalType": "string", "name": "key", "type": "string" },775          {776            "components": [777              {778                "internalType": "enum TokenPermissionField",779                "name": "code",780                "type": "uint8"781              },782              { "internalType": "bool", "name": "value", "type": "bool" }783            ],784            "internalType": "struct PropertyPermission[]",785            "name": "permissions",786            "type": "tuple[]"787          }788        ],789        "internalType": "struct TokenPropertyPermission[]",790        "name": "permissions",791        "type": "tuple[]"792      }793    ],794    "name": "setTokenPropertyPermissions",795    "outputs": [],796    "stateMutability": "nonpayable",797    "type": "function"798  },799  {800    "inputs": [801      { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }802    ],803    "name": "supportsInterface",804    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],805    "stateMutability": "view",806    "type": "function"807  },808  {809    "inputs": [],810    "name": "symbol",811    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],812    "stateMutability": "view",813    "type": "function"814  },815  {816    "inputs": [817      { "internalType": "uint256", "name": "index", "type": "uint256" }818    ],819    "name": "tokenByIndex",820    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],821    "stateMutability": "view",822    "type": "function"823  },824  {825    "inputs": [826      { "internalType": "address", "name": "owner", "type": "address" },827      { "internalType": "uint256", "name": "index", "type": "uint256" }828    ],829    "name": "tokenOfOwnerByIndex",830    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],831    "stateMutability": "view",832    "type": "function"833  },834  {835    "inputs": [],836    "name": "tokenPropertyPermissions",837    "outputs": [838      {839        "components": [840          { "internalType": "string", "name": "key", "type": "string" },841          {842            "components": [843              {844                "internalType": "enum TokenPermissionField",845                "name": "code",846                "type": "uint8"847              },848              { "internalType": "bool", "name": "value", "type": "bool" }849            ],850            "internalType": "struct PropertyPermission[]",851            "name": "permissions",852            "type": "tuple[]"853          }854        ],855        "internalType": "struct TokenPropertyPermission[]",856        "name": "",857        "type": "tuple[]"858      }859    ],860    "stateMutability": "view",861    "type": "function"862  },863  {864    "inputs": [865      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }866    ],867    "name": "tokenURI",868    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],869    "stateMutability": "view",870    "type": "function"871  },872  {873    "inputs": [],874    "name": "totalSupply",875    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],876    "stateMutability": "view",877    "type": "function"878  },879  {880    "inputs": [881      { "internalType": "address", "name": "to", "type": "address" },882      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }883    ],884    "name": "transfer",885    "outputs": [],886    "stateMutability": "nonpayable",887    "type": "function"888  },889  {890    "inputs": [891      {892        "components": [893          { "internalType": "address", "name": "eth", "type": "address" },894          { "internalType": "uint256", "name": "sub", "type": "uint256" }895        ],896        "internalType": "struct CrossAddress",897        "name": "to",898        "type": "tuple"899      },900      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }901    ],902    "name": "transferCross",903    "outputs": [],904    "stateMutability": "nonpayable",905    "type": "function"906  },907  {908    "inputs": [909      { "internalType": "address", "name": "from", "type": "address" },910      { "internalType": "address", "name": "to", "type": "address" },911      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }912    ],913    "name": "transferFrom",914    "outputs": [],915    "stateMutability": "nonpayable",916    "type": "function"917  },918  {919    "inputs": [920      {921        "components": [922          { "internalType": "address", "name": "eth", "type": "address" },923          { "internalType": "uint256", "name": "sub", "type": "uint256" }924        ],925        "internalType": "struct CrossAddress",926        "name": "from",927        "type": "tuple"928      },929      {930        "components": [931          { "internalType": "address", "name": "eth", "type": "address" },932          { "internalType": "uint256", "name": "sub", "type": "uint256" }933        ],934        "internalType": "struct CrossAddress",935        "name": "to",936        "type": "tuple"937      },938      { "internalType": "uint256", "name": "tokenId", "type": "uint256" }939    ],940    "name": "transferFromCross",941    "outputs": [],942    "stateMutability": "nonpayable",943    "type": "function"944  },945  {946    "inputs": [],947    "name": "uniqueCollectionType",948    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],949    "stateMutability": "view",950    "type": "function"951  }952]
modifiedtests/src/eth/abi/reFungible.jsondiffbeforeafterboth
--- a/tests/src/eth/abi/reFungible.json
+++ b/tests/src/eth/abi/reFungible.json
@@ -632,7 +632,9 @@
     "type": "function"
   },
   {
-    "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],
+    "inputs": [
+      { "internalType": "enum AccessMode", "name": "mode", "type": "uint8" }
+    ],
     "name": "setCollectionAccess",
     "outputs": [],
     "stateMutability": "nonpayable",
modifiedtests/src/eth/api/UniqueFungible.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueFungible.sol
+++ b/tests/src/eth/api/UniqueFungible.sol
@@ -175,11 +175,9 @@
 
 	/// Set the collection access method.
 	/// @param mode Access mode
-	/// 	0 for Normal
-	/// 	1 for AllowList
 	/// @dev EVM selector for this function is: 0x41835d4c,
 	///  or in textual repr: setCollectionAccess(uint8)
-	function setCollectionAccess(uint8 mode) external;
+	function setCollectionAccess(AccessMode mode) external;
 
 	/// Checks that user allowed to operate with collection.
 	///
@@ -285,6 +283,14 @@
 	uint256 sub;
 }
 
+/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]).
+enum AccessMode {
+	/// Access grant for owner and admins. Used as default.
+	Normal,
+	/// Like a [`Normal`](AccessMode::Normal) but also users in allow list.
+	AllowList
+}
+
 /// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) field.
 struct CollectionNestingPermission {
 	CollectionPermissionField field;
modifiedtests/src/eth/api/UniqueNFT.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueNFT.sol
+++ b/tests/src/eth/api/UniqueNFT.sol
@@ -275,11 +275,9 @@
 
 	/// Set the collection access method.
 	/// @param mode Access mode
-	/// 	0 for Normal
-	/// 	1 for AllowList
 	/// @dev EVM selector for this function is: 0x41835d4c,
 	///  or in textual repr: setCollectionAccess(uint8)
-	function setCollectionAccess(uint8 mode) external;
+	function setCollectionAccess(AccessMode mode) external;
 
 	/// Checks that user allowed to operate with collection.
 	///
@@ -385,6 +383,14 @@
 	uint256 sub;
 }
 
+/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]).
+enum AccessMode {
+	/// Access grant for owner and admins. Used as default.
+	Normal,
+	/// Like a [`Normal`](AccessMode::Normal) but also users in allow list.
+	AllowList
+}
+
 /// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) field.
 struct CollectionNestingPermission {
 	CollectionPermissionField field;
modifiedtests/src/eth/api/UniqueRefungible.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueRefungible.sol
+++ b/tests/src/eth/api/UniqueRefungible.sol
@@ -275,11 +275,9 @@
 
 	/// Set the collection access method.
 	/// @param mode Access mode
-	/// 	0 for Normal
-	/// 	1 for AllowList
 	/// @dev EVM selector for this function is: 0x41835d4c,
 	///  or in textual repr: setCollectionAccess(uint8)
-	function setCollectionAccess(uint8 mode) external;
+	function setCollectionAccess(AccessMode mode) external;
 
 	/// Checks that user allowed to operate with collection.
 	///
@@ -385,6 +383,14 @@
 	uint256 sub;
 }
 
+/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]).
+enum AccessMode {
+	/// Access grant for owner and admins. Used as default.
+	Normal,
+	/// Like a [`Normal`](AccessMode::Normal) but also users in allow list.
+	AllowList
+}
+
 /// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) field.
 struct CollectionNestingPermission {
 	CollectionPermissionField field;