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

difftreelog

chore fix code review

Grigoriy Simonov2022-08-23parent: #cfc56ee.patch.diff
in: master

20 files changed

modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -12473,7 +12473,7 @@
 
 [[package]]
 name = "up-common"
-version = "0.9.25"
+version = "0.9.27"
 dependencies = [
  "fp-rpc",
  "frame-support",
modifiedpallets/common/CHANGELOG.mddiffbeforeafterboth
--- a/pallets/common/CHANGELOG.md
+++ b/pallets/common/CHANGELOG.md
@@ -5,7 +5,7 @@
 ## [0.1.6] - 2022-08-16
 
 ### Added
--   New Ethereum API methods: changeOwner, changeOwnerSubstrate and verifyOwnerOrAdminSubstrate.
+-   New Ethereum API methods: changeOwner, changeOwner(Substrate) and verifyOwnerOrAdmin(Substrate).
 
 <!-- bureaucrate goes here -->
 ## [v0.1.5] 2022-08-16
modifiedpallets/common/src/erc.rsdiffbeforeafterboth
--- a/pallets/common/src/erc.rs
+++ b/pallets/common/src/erc.rs
@@ -420,6 +420,7 @@
 	///
 	/// @param user account to verify
 	/// @return "true" if account is the owner or admin
+	#[solidity(rename_selector = "verifyOwnerOrAdmin")]
 	fn verify_owner_or_admin_substrate(&self, user: uint256) -> Result<bool> {
 		let user = convert_substrate_address_to_cross_account_id::<T>(user);
 		Ok(self
@@ -455,6 +456,7 @@
 	///
 	/// @dev Owner can be changed only by current owner
 	/// @param newOwner new owner substrate account
+	#[solidity(rename_selector = "changeOwner")]
 	fn change_owner_substrate(&mut self, caller: caller, new_owner: uint256) -> Result<void> {
 		let caller = T::CrossAccountId::from_eth(caller);
 		let new_owner = convert_substrate_address_to_cross_account_id::<T>(new_owner);
modifiedpallets/common/src/lib.rsdiffbeforeafterboth
--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -204,7 +204,7 @@
 
 	/// Save collection to storage.
 	pub fn save(&self) -> DispatchResult {
-		<CollectionById<T>>::insert(self.id, self.collection.clone());
+		<CollectionById<T>>::insert(self.id, &self.collection);
 		Ok(())
 	}
 
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
@@ -31,7 +31,103 @@
 	);
 }
 
-// Selector: 07f76b0c
+// Selector: 79cc6790
+contract ERC20UniqueExtensions is Dummy, ERC165 {
+	// Selector: burnFrom(address,uint256) 79cc6790
+	function burnFrom(address from, uint256 amount) public returns (bool) {
+		require(false, stub_error);
+		from;
+		amount;
+		dummy = 0;
+		return false;
+	}
+}
+
+// Selector: 942e8b22
+contract ERC20 is Dummy, ERC165, ERC20Events {
+	// Selector: name() 06fdde03
+	function name() public view returns (string memory) {
+		require(false, stub_error);
+		dummy;
+		return "";
+	}
+
+	// Selector: symbol() 95d89b41
+	function symbol() public view returns (string memory) {
+		require(false, stub_error);
+		dummy;
+		return "";
+	}
+
+	// Selector: totalSupply() 18160ddd
+	function totalSupply() public view returns (uint256) {
+		require(false, stub_error);
+		dummy;
+		return 0;
+	}
+
+	// Selector: decimals() 313ce567
+	function decimals() public view returns (uint8) {
+		require(false, stub_error);
+		dummy;
+		return 0;
+	}
+
+	// Selector: balanceOf(address) 70a08231
+	function balanceOf(address owner) public view returns (uint256) {
+		require(false, stub_error);
+		owner;
+		dummy;
+		return 0;
+	}
+
+	// Selector: transfer(address,uint256) a9059cbb
+	function transfer(address to, uint256 amount) public returns (bool) {
+		require(false, stub_error);
+		to;
+		amount;
+		dummy = 0;
+		return false;
+	}
+
+	// Selector: transferFrom(address,address,uint256) 23b872dd
+	function transferFrom(
+		address from,
+		address to,
+		uint256 amount
+	) public returns (bool) {
+		require(false, stub_error);
+		from;
+		to;
+		amount;
+		dummy = 0;
+		return false;
+	}
+
+	// Selector: approve(address,uint256) 095ea7b3
+	function approve(address spender, uint256 amount) public returns (bool) {
+		require(false, stub_error);
+		spender;
+		amount;
+		dummy = 0;
+		return false;
+	}
+
+	// Selector: allowance(address,address) dd62ed3e
+	function allowance(address owner, address spender)
+		public
+		view
+		returns (uint256)
+	{
+		require(false, stub_error);
+		owner;
+		spender;
+		dummy;
+		return 0;
+	}
+}
+
+// Selector: f077f83e
 contract Collection is Dummy, ERC165 {
 	// Set collection property.
 	//
@@ -275,12 +371,8 @@
 	// @param user account to verify
 	// @return "true" if account is the owner or admin
 	//
-	// Selector: verifyOwnerOrAdminSubstrate(uint256) fe818e40
-	function verifyOwnerOrAdminSubstrate(uint256 user)
-		public
-		view
-		returns (bool)
-	{
+	// Selector: verifyOwnerOrAdmin(uint256) a83328e5
+	function verifyOwnerOrAdmin(uint256 user) public view returns (bool) {
 		require(false, stub_error);
 		user;
 		dummy;
@@ -315,107 +407,11 @@
 	// @dev Owner can be changed only by current owner
 	// @param newOwner new owner substrate account
 	//
-	// Selector: changeOwnerSubstrate(uint256) 337e2c60
-	function changeOwnerSubstrate(uint256 newOwner) public {
+	// Selector: changeOwner(uint256) 924c19f7
+	function changeOwner(uint256 newOwner) public {
 		require(false, stub_error);
 		newOwner;
-		dummy = 0;
-	}
-}
-
-// Selector: 79cc6790
-contract ERC20UniqueExtensions is Dummy, ERC165 {
-	// Selector: burnFrom(address,uint256) 79cc6790
-	function burnFrom(address from, uint256 amount) public returns (bool) {
-		require(false, stub_error);
-		from;
-		amount;
 		dummy = 0;
-		return false;
-	}
-}
-
-// Selector: 942e8b22
-contract ERC20 is Dummy, ERC165, ERC20Events {
-	// Selector: name() 06fdde03
-	function name() public view returns (string memory) {
-		require(false, stub_error);
-		dummy;
-		return "";
-	}
-
-	// Selector: symbol() 95d89b41
-	function symbol() public view returns (string memory) {
-		require(false, stub_error);
-		dummy;
-		return "";
-	}
-
-	// Selector: totalSupply() 18160ddd
-	function totalSupply() public view returns (uint256) {
-		require(false, stub_error);
-		dummy;
-		return 0;
-	}
-
-	// Selector: decimals() 313ce567
-	function decimals() public view returns (uint8) {
-		require(false, stub_error);
-		dummy;
-		return 0;
-	}
-
-	// Selector: balanceOf(address) 70a08231
-	function balanceOf(address owner) public view returns (uint256) {
-		require(false, stub_error);
-		owner;
-		dummy;
-		return 0;
-	}
-
-	// Selector: transfer(address,uint256) a9059cbb
-	function transfer(address to, uint256 amount) public returns (bool) {
-		require(false, stub_error);
-		to;
-		amount;
-		dummy = 0;
-		return false;
-	}
-
-	// Selector: transferFrom(address,address,uint256) 23b872dd
-	function transferFrom(
-		address from,
-		address to,
-		uint256 amount
-	) public returns (bool) {
-		require(false, stub_error);
-		from;
-		to;
-		amount;
-		dummy = 0;
-		return false;
-	}
-
-	// Selector: approve(address,uint256) 095ea7b3
-	function approve(address spender, uint256 amount) public returns (bool) {
-		require(false, stub_error);
-		spender;
-		amount;
-		dummy = 0;
-		return false;
-	}
-
-	// Selector: allowance(address,address) dd62ed3e
-	function allowance(address owner, address spender)
-		public
-		view
-		returns (uint256)
-	{
-		require(false, stub_error);
-		owner;
-		spender;
-		dummy;
-		return 0;
 	}
 }
 
modifiedpallets/nonfungible/src/stubs/UniqueNFT.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/nonfungible/src/stubs/UniqueNFT.soldiffbeforeafterboth
before · pallets/nonfungible/src/stubs/UniqueNFT.sol
1// SPDX-License-Identifier: OTHER2// This code is automatically generated34pragma solidity >=0.8.0 <0.9.0;56// Anonymous struct7struct Tuple0 {8	uint256 field_0;9	string field_1;10}1112// Common stubs holder13contract Dummy {14	uint8 dummy;15	string stub_error = "this contract is implemented in native";16}1718contract ERC165 is Dummy {19	function supportsInterface(bytes4 interfaceID)20		external21		view22		returns (bool)23	{24		require(false, stub_error);25		interfaceID;26		return true;27	}28}2930// Inline31contract ERC721Events {32	event Transfer(33		address indexed from,34		address indexed to,35		uint256 indexed tokenId36	);37	event Approval(38		address indexed owner,39		address indexed approved,40		uint256 indexed tokenId41	);42	event ApprovalForAll(43		address indexed owner,44		address indexed operator,45		bool approved46	);47}4849// Inline50contract ERC721MintableEvents {51	event MintingFinished();52}5354// Selector: 07f76b0c55contract Collection is Dummy, ERC165 {56	// Set collection property.57	//58	// @param key Property key.59	// @param value Propery value.60	//61	// Selector: setCollectionProperty(string,bytes) 2f073f6662	function setCollectionProperty(string memory key, bytes memory value)63		public64	{65		require(false, stub_error);66		key;67		value;68		dummy = 0;69	}7071	// Delete collection property.72	//73	// @param key Property key.74	//75	// Selector: deleteCollectionProperty(string) 7b7debce76	function deleteCollectionProperty(string memory key) public {77		require(false, stub_error);78		key;79		dummy = 0;80	}8182	// Get collection property.83	//84	// @dev Throws error if key not found.85	//86	// @param key Property key.87	// @return bytes The property corresponding to the key.88	//89	// Selector: collectionProperty(string) cf24fd6d90	function collectionProperty(string memory key)91		public92		view93		returns (bytes memory)94	{95		require(false, stub_error);96		key;97		dummy;98		return hex"";99	}100101	// Set the sponsor of the collection.102	//103	// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor.104	//105	// @param sponsor Address of the sponsor from whose account funds will be debited for operations with the contract.106	//107	// Selector: setCollectionSponsor(address) 7623402e108	function setCollectionSponsor(address sponsor) public {109		require(false, stub_error);110		sponsor;111		dummy = 0;112	}113114	// Collection sponsorship confirmation.115	//116	// @dev After setting the sponsor for the collection, it must be confirmed with this function.117	//118	// Selector: confirmCollectionSponsorship() 3c50e97a119	function confirmCollectionSponsorship() public {120		require(false, stub_error);121		dummy = 0;122	}123124	// Set limits for the collection.125	// @dev Throws error if limit not found.126	// @param limit Name of the limit. Valid names:127	// 	"accountTokenOwnershipLimit",128	// 	"sponsoredDataSize",129	// 	"sponsoredDataRateLimit",130	// 	"tokenLimit",131	// 	"sponsorTransferTimeout",132	// 	"sponsorApproveTimeout"133	// @param value Value of the limit.134	//135	// Selector: setCollectionLimit(string,uint32) 6a3841db136	function setCollectionLimit(string memory limit, uint32 value) public {137		require(false, stub_error);138		limit;139		value;140		dummy = 0;141	}142143	// Set limits for the collection.144	// @dev Throws error if limit not found.145	// @param limit Name of the limit. Valid names:146	// 	"ownerCanTransfer",147	// 	"ownerCanDestroy",148	// 	"transfersEnabled"149	// @param value Value of the limit.150	//151	// Selector: setCollectionLimit(string,bool) 993b7fba152	function setCollectionLimit(string memory limit, bool value) public {153		require(false, stub_error);154		limit;155		value;156		dummy = 0;157	}158159	// Get contract address.160	//161	// Selector: contractAddress() f6b4dfb4162	function contractAddress() public view returns (address) {163		require(false, stub_error);164		dummy;165		return 0x0000000000000000000000000000000000000000;166	}167168	// Add collection admin by substrate address.169	// @param new_admin Substrate administrator address.170	//171	// Selector: addCollectionAdminSubstrate(uint256) 5730062b172	function addCollectionAdminSubstrate(uint256 newAdmin) public {173		require(false, stub_error);174		newAdmin;175		dummy = 0;176	}177178	// Remove collection admin by substrate address.179	// @param admin Substrate administrator address.180	//181	// Selector: removeCollectionAdminSubstrate(uint256) 4048fcf9182	function removeCollectionAdminSubstrate(uint256 admin) public {183		require(false, stub_error);184		admin;185		dummy = 0;186	}187188	// Add collection admin.189	// @param new_admin Address of the added administrator.190	//191	// Selector: addCollectionAdmin(address) 92e462c7192	function addCollectionAdmin(address newAdmin) public {193		require(false, stub_error);194		newAdmin;195		dummy = 0;196	}197198	// Remove collection admin.199	//200	// @param new_admin Address of the removed administrator.201	//202	// Selector: removeCollectionAdmin(address) fafd7b42203	function removeCollectionAdmin(address admin) public {204		require(false, stub_error);205		admin;206		dummy = 0;207	}208209	// Toggle accessibility of collection nesting.210	//211	// @param enable If "true" degenerates to nesting: 'Owner' else to nesting: 'Disabled'212	//213	// Selector: setCollectionNesting(bool) 112d4586214	function setCollectionNesting(bool enable) public {215		require(false, stub_error);216		enable;217		dummy = 0;218	}219220	// Toggle accessibility of collection nesting.221	//222	// @param enable If "true" degenerates to nesting: {OwnerRestricted: [1, 2, 3]} else to nesting: 'Disabled'223	// @param collections Addresses of collections that will be available for nesting.224	//225	// Selector: setCollectionNesting(bool,address[]) 64872396226	function setCollectionNesting(bool enable, address[] memory collections)227		public228	{229		require(false, stub_error);230		enable;231		collections;232		dummy = 0;233	}234235	// Set the collection access method.236	// @param mode Access mode237	// 	0 for Normal238	// 	1 for AllowList239	//240	// Selector: setCollectionAccess(uint8) 41835d4c241	function setCollectionAccess(uint8 mode) public {242		require(false, stub_error);243		mode;244		dummy = 0;245	}246247	// Add the user to the allowed list.248	//249	// @param user Address of a trusted user.250	//251	// Selector: addToCollectionAllowList(address) 67844fe6252	function addToCollectionAllowList(address user) public {253		require(false, stub_error);254		user;255		dummy = 0;256	}257258	// Remove the user from the allowed list.259	//260	// @param user Address of a removed user.261	//262	// Selector: removeFromCollectionAllowList(address) 85c51acb263	function removeFromCollectionAllowList(address user) public {264		require(false, stub_error);265		user;266		dummy = 0;267	}268269	// Switch permission for minting.270	//271	// @param mode Enable if "true".272	//273	// Selector: setCollectionMintMode(bool) 00018e84274	function setCollectionMintMode(bool mode) public {275		require(false, stub_error);276		mode;277		dummy = 0;278	}279280	// Check that account is the owner or admin of the collection281	//282	// @param user account to verify283	// @return "true" if account is the owner or admin284	//285	// Selector: verifyOwnerOrAdmin(address) c2282493286	function verifyOwnerOrAdmin(address user) public view returns (bool) {287		require(false, stub_error);288		user;289		dummy;290		return false;291	}292293	// Check that substrate account is the owner or admin of the collection294	//295	// @param user account to verify296	// @return "true" if account is the owner or admin297	//298	// Selector: verifyOwnerOrAdminSubstrate(uint256) fe818e40299	function verifyOwnerOrAdminSubstrate(uint256 user)300		public301		view302		returns (bool)303	{304		require(false, stub_error);305		user;306		dummy;307		return false;308	}309310	// Returns collection type311	//312	// @return `Fungible` or `NFT` or `ReFungible`313	//314	// Selector: uniqueCollectionType() d34b55b8315	function uniqueCollectionType() public returns (string memory) {316		require(false, stub_error);317		dummy = 0;318		return "";319	}320321	// Changes collection owner to another account322	//323	// @dev Owner can be changed only by current owner324	// @param newOwner new owner account325	//326	// Selector: changeOwner(address) a6f9dae1327	function changeOwner(address newOwner) public {328		require(false, stub_error);329		newOwner;330		dummy = 0;331	}332333	// Changes collection owner to another substrate account334	//335	// @dev Owner can be changed only by current owner336	// @param newOwner new owner substrate account337	//338	// Selector: changeOwnerSubstrate(uint256) 337e2c60339	function changeOwnerSubstrate(uint256 newOwner) public {340		require(false, stub_error);341		newOwner;342		dummy = 0;343	}344}345346// Selector: 41369377347contract TokenProperties is Dummy, ERC165 {348	// @notice Set permissions for token property.349	// @dev Throws error if `msg.sender` is not admin or owner of the collection.350	// @param key Property key.351	// @param is_mutable Permission to mutate property.352	// @param collection_admin Permission to mutate property by collection admin if property is mutable.353	// @param token_owner Permission to mutate property by token owner if property is mutable.354	//355	// Selector: setTokenPropertyPermission(string,bool,bool,bool) 222d97fa356	function setTokenPropertyPermission(357		string memory key,358		bool isMutable,359		bool collectionAdmin,360		bool tokenOwner361	) public {362		require(false, stub_error);363		key;364		isMutable;365		collectionAdmin;366		tokenOwner;367		dummy = 0;368	}369370	// @notice Set token property value.371	// @dev Throws error if `msg.sender` has no permission to edit the property.372	// @param tokenId ID of the token.373	// @param key Property key.374	// @param value Property value.375	//376	// Selector: setProperty(uint256,string,bytes) 1752d67b377	function setProperty(378		uint256 tokenId,379		string memory key,380		bytes memory value381	) public {382		require(false, stub_error);383		tokenId;384		key;385		value;386		dummy = 0;387	}388389	// @notice Delete token property value.390	// @dev Throws error if `msg.sender` has no permission to edit the property.391	// @param tokenId ID of the token.392	// @param key Property key.393	//394	// Selector: deleteProperty(uint256,string) 066111d1395	function deleteProperty(uint256 tokenId, string memory key) public {396		require(false, stub_error);397		tokenId;398		key;399		dummy = 0;400	}401402	// @notice Get token property value.403	// @dev Throws error if key not found404	// @param tokenId ID of the token.405	// @param key Property key.406	// @return Property value bytes407	//408	// Selector: property(uint256,string) 7228c327409	function property(uint256 tokenId, string memory key)410		public411		view412		returns (bytes memory)413	{414		require(false, stub_error);415		tokenId;416		key;417		dummy;418		return hex"";419	}420}421422// Selector: 42966c68423contract ERC721Burnable is Dummy, ERC165 {424	// @notice Burns a specific ERC721 token.425	// @dev Throws unless `msg.sender` is the current NFT owner, or an authorized426	//  operator of the current owner.427	// @param tokenId The NFT to approve428	//429	// Selector: burn(uint256) 42966c68430	function burn(uint256 tokenId) public {431		require(false, stub_error);432		tokenId;433		dummy = 0;434	}435}436437// Selector: 58800161438contract ERC721 is Dummy, ERC165, ERC721Events {439	// @notice Count all NFTs assigned to an owner440	// @dev NFTs assigned to the zero address are considered invalid, and this441	//  function throws for queries about the zero address.442	// @param owner An address for whom to query the balance443	// @return The number of NFTs owned by `owner`, possibly zero444	//445	// Selector: balanceOf(address) 70a08231446	function balanceOf(address owner) public view returns (uint256) {447		require(false, stub_error);448		owner;449		dummy;450		return 0;451	}452453	// @notice Find the owner of an NFT454	// @dev NFTs assigned to zero address are considered invalid, and queries455	//  about them do throw.456	// @param tokenId The identifier for an NFT457	// @return The address of the owner of the NFT458	//459	// Selector: ownerOf(uint256) 6352211e460	function ownerOf(uint256 tokenId) public view returns (address) {461		require(false, stub_error);462		tokenId;463		dummy;464		return 0x0000000000000000000000000000000000000000;465	}466467	// @dev Not implemented468	//469	// Selector: safeTransferFromWithData(address,address,uint256,bytes) 60a11672470	function safeTransferFromWithData(471		address from,472		address to,473		uint256 tokenId,474		bytes memory data475	) public {476		require(false, stub_error);477		from;478		to;479		tokenId;480		data;481		dummy = 0;482	}483484	// @dev Not implemented485	//486	// Selector: safeTransferFrom(address,address,uint256) 42842e0e487	function safeTransferFrom(488		address from,489		address to,490		uint256 tokenId491	) public {492		require(false, stub_error);493		from;494		to;495		tokenId;496		dummy = 0;497	}498499	// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE500	//  TO CONFIRM THAT `to` IS CAPABLE OF RECEIVING NFTS OR ELSE501	//  THEY MAY BE PERMANENTLY LOST502	// @dev Throws unless `msg.sender` is the current owner or an authorized503	//  operator for this NFT. Throws if `from` is not the current owner. Throws504	//  if `to` is the zero address. Throws if `tokenId` is not a valid NFT.505	// @param from The current owner of the NFT506	// @param to The new owner507	// @param tokenId The NFT to transfer508	// @param _value Not used for an NFT509	//510	// Selector: transferFrom(address,address,uint256) 23b872dd511	function transferFrom(512		address from,513		address to,514		uint256 tokenId515	) public {516		require(false, stub_error);517		from;518		to;519		tokenId;520		dummy = 0;521	}522523	// @notice Set or reaffirm the approved address for an NFT524	// @dev The zero address indicates there is no approved address.525	// @dev Throws unless `msg.sender` is the current NFT owner, or an authorized526	//  operator of the current owner.527	// @param approved The new approved NFT controller528	// @param tokenId The NFT to approve529	//530	// Selector: approve(address,uint256) 095ea7b3531	function approve(address approved, uint256 tokenId) public {532		require(false, stub_error);533		approved;534		tokenId;535		dummy = 0;536	}537538	// @dev Not implemented539	//540	// Selector: setApprovalForAll(address,bool) a22cb465541	function setApprovalForAll(address operator, bool approved) public {542		require(false, stub_error);543		operator;544		approved;545		dummy = 0;546	}547548	// @dev Not implemented549	//550	// Selector: getApproved(uint256) 081812fc551	function getApproved(uint256 tokenId) public view returns (address) {552		require(false, stub_error);553		tokenId;554		dummy;555		return 0x0000000000000000000000000000000000000000;556	}557558	// @dev Not implemented559	//560	// Selector: isApprovedForAll(address,address) e985e9c5561	function isApprovedForAll(address owner, address operator)562		public563		view564		returns (address)565	{566		require(false, stub_error);567		owner;568		operator;569		dummy;570		return 0x0000000000000000000000000000000000000000;571	}572}573574// Selector: 5b5e139f575contract ERC721Metadata is Dummy, ERC165 {576	// @notice A descriptive name for a collection of NFTs in this contract577	//578	// Selector: name() 06fdde03579	function name() public view returns (string memory) {580		require(false, stub_error);581		dummy;582		return "";583	}584585	// @notice An abbreviated name for NFTs in this contract586	//587	// Selector: symbol() 95d89b41588	function symbol() public view returns (string memory) {589		require(false, stub_error);590		dummy;591		return "";592	}593594	// @notice A distinct Uniform Resource Identifier (URI) for a given asset.595	//596	// @dev If the token has a `url` property and it is not empty, it is returned.597	//  Else If the collection does not have a property with key `schemaName` or its value is not equal to `ERC721Metadata`, it return an error `tokenURI not set`.598	//  If the collection property `baseURI` is empty or absent, return "" (empty string)599	//  otherwise, if token property `suffix` present and is non-empty, return concatenation of baseURI and suffix600	//  otherwise, return concatenation of `baseURI` and stringified token id (decimal stringifying, without paddings).601	//602	// @return token's const_metadata603	//604	// Selector: tokenURI(uint256) c87b56dd605	function tokenURI(uint256 tokenId) public view returns (string memory) {606		require(false, stub_error);607		tokenId;608		dummy;609		return "";610	}611}612613// Selector: 68ccfe89614contract ERC721Mintable is Dummy, ERC165, ERC721MintableEvents {615	// Selector: mintingFinished() 05d2035b616	function mintingFinished() public view returns (bool) {617		require(false, stub_error);618		dummy;619		return false;620	}621622	// @notice Function to mint token.623	// @dev `tokenId` should be obtained with `nextTokenId` method,624	//  unlike standard, you can't specify it manually625	// @param to The new owner626	// @param tokenId ID of the minted NFT627	//628	// Selector: mint(address,uint256) 40c10f19629	function mint(address to, uint256 tokenId) public returns (bool) {630		require(false, stub_error);631		to;632		tokenId;633		dummy = 0;634		return false;635	}636637	// @notice Function to mint token with the given tokenUri.638	// @dev `tokenId` should be obtained with `nextTokenId` method,639	//  unlike standard, you can't specify it manually640	// @param to The new owner641	// @param tokenId ID of the minted NFT642	// @param tokenUri Token URI that would be stored in the NFT properties643	//644	// Selector: mintWithTokenURI(address,uint256,string) 50bb4e7f645	function mintWithTokenURI(646		address to,647		uint256 tokenId,648		string memory tokenUri649	) public returns (bool) {650		require(false, stub_error);651		to;652		tokenId;653		tokenUri;654		dummy = 0;655		return false;656	}657658	// @dev Not implemented659	//660	// Selector: finishMinting() 7d64bcb4661	function finishMinting() public returns (bool) {662		require(false, stub_error);663		dummy = 0;664		return false;665	}666}667668// Selector: 780e9d63669contract ERC721Enumerable is Dummy, ERC165 {670	// @notice Enumerate valid NFTs671	// @param index A counter less than `totalSupply()`672	// @return The token identifier for the `index`th NFT,673	//  (sort order not specified)674	//675	// Selector: tokenByIndex(uint256) 4f6ccce7676	function tokenByIndex(uint256 index) public view returns (uint256) {677		require(false, stub_error);678		index;679		dummy;680		return 0;681	}682683	// @dev Not implemented684	//685	// Selector: tokenOfOwnerByIndex(address,uint256) 2f745c59686	function tokenOfOwnerByIndex(address owner, uint256 index)687		public688		view689		returns (uint256)690	{691		require(false, stub_error);692		owner;693		index;694		dummy;695		return 0;696	}697698	// @notice Count NFTs tracked by this contract699	// @return A count of valid NFTs tracked by this contract, where each one of700	//  them has an assigned and queryable owner not equal to the zero address701	//702	// Selector: totalSupply() 18160ddd703	function totalSupply() public view returns (uint256) {704		require(false, stub_error);705		dummy;706		return 0;707	}708}709710// Selector: d74d154f711contract ERC721UniqueExtensions is Dummy, ERC165 {712	// @notice Transfer ownership of an NFT713	// @dev Throws unless `msg.sender` is the current owner. Throws if `to`714	//  is the zero address. Throws if `tokenId` is not a valid NFT.715	// @param to The new owner716	// @param tokenId The NFT to transfer717	// @param _value Not used for an NFT718	//719	// Selector: transfer(address,uint256) a9059cbb720	function transfer(address to, uint256 tokenId) public {721		require(false, stub_error);722		to;723		tokenId;724		dummy = 0;725	}726727	// @notice Burns a specific ERC721 token.728	// @dev Throws unless `msg.sender` is the current owner or an authorized729	//  operator for this NFT. Throws if `from` is not the current owner. Throws730	//  if `to` is the zero address. Throws if `tokenId` is not a valid NFT.731	// @param from The current owner of the NFT732	// @param tokenId The NFT to transfer733	// @param _value Not used for an NFT734	//735	// Selector: burnFrom(address,uint256) 79cc6790736	function burnFrom(address from, uint256 tokenId) public {737		require(false, stub_error);738		from;739		tokenId;740		dummy = 0;741	}742743	// @notice Returns next free NFT ID.744	//745	// Selector: nextTokenId() 75794a3c746	function nextTokenId() public view returns (uint256) {747		require(false, stub_error);748		dummy;749		return 0;750	}751752	// @notice Function to mint multiple tokens.753	// @dev `tokenIds` should be an array of consecutive numbers and first number754	//  should be obtained with `nextTokenId` method755	// @param to The new owner756	// @param tokenIds IDs of the minted NFTs757	//758	// Selector: mintBulk(address,uint256[]) 44a9945e759	function mintBulk(address to, uint256[] memory tokenIds)760		public761		returns (bool)762	{763		require(false, stub_error);764		to;765		tokenIds;766		dummy = 0;767		return false;768	}769770	// @notice Function to mint multiple tokens with the given tokenUris.771	// @dev `tokenIds` is array of pairs of token ID and token URI. Token IDs should be consecutive772	//  numbers and first number should be obtained with `nextTokenId` method773	// @param to The new owner774	// @param tokens array of pairs of token ID and token URI for minted tokens775	//776	// Selector: mintBulkWithTokenURI(address,(uint256,string)[]) 36543006777	function mintBulkWithTokenURI(address to, Tuple0[] memory tokens)778		public779		returns (bool)780	{781		require(false, stub_error);782		to;783		tokens;784		dummy = 0;785		return false;786	}787}788789contract UniqueNFT is790	Dummy,791	ERC165,792	ERC721,793	ERC721Metadata,794	ERC721Enumerable,795	ERC721UniqueExtensions,796	ERC721Mintable,797	ERC721Burnable,798	Collection,799	TokenProperties800{}
after · pallets/nonfungible/src/stubs/UniqueNFT.sol
1// SPDX-License-Identifier: OTHER2// This code is automatically generated34pragma solidity >=0.8.0 <0.9.0;56// Anonymous struct7struct Tuple0 {8	uint256 field_0;9	string field_1;10}1112// Common stubs holder13contract Dummy {14	uint8 dummy;15	string stub_error = "this contract is implemented in native";16}1718contract ERC165 is Dummy {19	function supportsInterface(bytes4 interfaceID)20		external21		view22		returns (bool)23	{24		require(false, stub_error);25		interfaceID;26		return true;27	}28}2930// Inline31contract ERC721Events {32	event Transfer(33		address indexed from,34		address indexed to,35		uint256 indexed tokenId36	);37	event Approval(38		address indexed owner,39		address indexed approved,40		uint256 indexed tokenId41	);42	event ApprovalForAll(43		address indexed owner,44		address indexed operator,45		bool approved46	);47}4849// Inline50contract ERC721MintableEvents {51	event MintingFinished();52}5354// Selector: 4136937755contract TokenProperties is Dummy, ERC165 {56	// @notice Set permissions for token property.57	// @dev Throws error if `msg.sender` is not admin or owner of the collection.58	// @param key Property key.59	// @param is_mutable Permission to mutate property.60	// @param collection_admin Permission to mutate property by collection admin if property is mutable.61	// @param token_owner Permission to mutate property by token owner if property is mutable.62	//63	// Selector: setTokenPropertyPermission(string,bool,bool,bool) 222d97fa64	function setTokenPropertyPermission(65		string memory key,66		bool isMutable,67		bool collectionAdmin,68		bool tokenOwner69	) public {70		require(false, stub_error);71		key;72		isMutable;73		collectionAdmin;74		tokenOwner;75		dummy = 0;76	}7778	// @notice Set token property value.79	// @dev Throws error if `msg.sender` has no permission to edit the property.80	// @param tokenId ID of the token.81	// @param key Property key.82	// @param value Property value.83	//84	// Selector: setProperty(uint256,string,bytes) 1752d67b85	function setProperty(86		uint256 tokenId,87		string memory key,88		bytes memory value89	) public {90		require(false, stub_error);91		tokenId;92		key;93		value;94		dummy = 0;95	}9697	// @notice Delete token property value.98	// @dev Throws error if `msg.sender` has no permission to edit the property.99	// @param tokenId ID of the token.100	// @param key Property key.101	//102	// Selector: deleteProperty(uint256,string) 066111d1103	function deleteProperty(uint256 tokenId, string memory key) public {104		require(false, stub_error);105		tokenId;106		key;107		dummy = 0;108	}109110	// @notice Get token property value.111	// @dev Throws error if key not found112	// @param tokenId ID of the token.113	// @param key Property key.114	// @return Property value bytes115	//116	// Selector: property(uint256,string) 7228c327117	function property(uint256 tokenId, string memory key)118		public119		view120		returns (bytes memory)121	{122		require(false, stub_error);123		tokenId;124		key;125		dummy;126		return hex"";127	}128}129130// Selector: 42966c68131contract ERC721Burnable is Dummy, ERC165 {132	// @notice Burns a specific ERC721 token.133	// @dev Throws unless `msg.sender` is the current NFT owner, or an authorized134	//  operator of the current owner.135	// @param tokenId The NFT to approve136	//137	// Selector: burn(uint256) 42966c68138	function burn(uint256 tokenId) public {139		require(false, stub_error);140		tokenId;141		dummy = 0;142	}143}144145// Selector: 58800161146contract ERC721 is Dummy, ERC165, ERC721Events {147	// @notice Count all NFTs assigned to an owner148	// @dev NFTs assigned to the zero address are considered invalid, and this149	//  function throws for queries about the zero address.150	// @param owner An address for whom to query the balance151	// @return The number of NFTs owned by `owner`, possibly zero152	//153	// Selector: balanceOf(address) 70a08231154	function balanceOf(address owner) public view returns (uint256) {155		require(false, stub_error);156		owner;157		dummy;158		return 0;159	}160161	// @notice Find the owner of an NFT162	// @dev NFTs assigned to zero address are considered invalid, and queries163	//  about them do throw.164	// @param tokenId The identifier for an NFT165	// @return The address of the owner of the NFT166	//167	// Selector: ownerOf(uint256) 6352211e168	function ownerOf(uint256 tokenId) public view returns (address) {169		require(false, stub_error);170		tokenId;171		dummy;172		return 0x0000000000000000000000000000000000000000;173	}174175	// @dev Not implemented176	//177	// Selector: safeTransferFromWithData(address,address,uint256,bytes) 60a11672178	function safeTransferFromWithData(179		address from,180		address to,181		uint256 tokenId,182		bytes memory data183	) public {184		require(false, stub_error);185		from;186		to;187		tokenId;188		data;189		dummy = 0;190	}191192	// @dev Not implemented193	//194	// Selector: safeTransferFrom(address,address,uint256) 42842e0e195	function safeTransferFrom(196		address from,197		address to,198		uint256 tokenId199	) public {200		require(false, stub_error);201		from;202		to;203		tokenId;204		dummy = 0;205	}206207	// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE208	//  TO CONFIRM THAT `to` IS CAPABLE OF RECEIVING NFTS OR ELSE209	//  THEY MAY BE PERMANENTLY LOST210	// @dev Throws unless `msg.sender` is the current owner or an authorized211	//  operator for this NFT. Throws if `from` is not the current owner. Throws212	//  if `to` is the zero address. Throws if `tokenId` is not a valid NFT.213	// @param from The current owner of the NFT214	// @param to The new owner215	// @param tokenId The NFT to transfer216	// @param _value Not used for an NFT217	//218	// Selector: transferFrom(address,address,uint256) 23b872dd219	function transferFrom(220		address from,221		address to,222		uint256 tokenId223	) public {224		require(false, stub_error);225		from;226		to;227		tokenId;228		dummy = 0;229	}230231	// @notice Set or reaffirm the approved address for an NFT232	// @dev The zero address indicates there is no approved address.233	// @dev Throws unless `msg.sender` is the current NFT owner, or an authorized234	//  operator of the current owner.235	// @param approved The new approved NFT controller236	// @param tokenId The NFT to approve237	//238	// Selector: approve(address,uint256) 095ea7b3239	function approve(address approved, uint256 tokenId) public {240		require(false, stub_error);241		approved;242		tokenId;243		dummy = 0;244	}245246	// @dev Not implemented247	//248	// Selector: setApprovalForAll(address,bool) a22cb465249	function setApprovalForAll(address operator, bool approved) public {250		require(false, stub_error);251		operator;252		approved;253		dummy = 0;254	}255256	// @dev Not implemented257	//258	// Selector: getApproved(uint256) 081812fc259	function getApproved(uint256 tokenId) public view returns (address) {260		require(false, stub_error);261		tokenId;262		dummy;263		return 0x0000000000000000000000000000000000000000;264	}265266	// @dev Not implemented267	//268	// Selector: isApprovedForAll(address,address) e985e9c5269	function isApprovedForAll(address owner, address operator)270		public271		view272		returns (address)273	{274		require(false, stub_error);275		owner;276		operator;277		dummy;278		return 0x0000000000000000000000000000000000000000;279	}280}281282// Selector: 5b5e139f283contract ERC721Metadata is Dummy, ERC165 {284	// @notice A descriptive name for a collection of NFTs in this contract285	//286	// Selector: name() 06fdde03287	function name() public view returns (string memory) {288		require(false, stub_error);289		dummy;290		return "";291	}292293	// @notice An abbreviated name for NFTs in this contract294	//295	// Selector: symbol() 95d89b41296	function symbol() public view returns (string memory) {297		require(false, stub_error);298		dummy;299		return "";300	}301302	// @notice A distinct Uniform Resource Identifier (URI) for a given asset.303	//304	// @dev If the token has a `url` property and it is not empty, it is returned.305	//  Else If the collection does not have a property with key `schemaName` or its value is not equal to `ERC721Metadata`, it return an error `tokenURI not set`.306	//  If the collection property `baseURI` is empty or absent, return "" (empty string)307	//  otherwise, if token property `suffix` present and is non-empty, return concatenation of baseURI and suffix308	//  otherwise, return concatenation of `baseURI` and stringified token id (decimal stringifying, without paddings).309	//310	// @return token's const_metadata311	//312	// Selector: tokenURI(uint256) c87b56dd313	function tokenURI(uint256 tokenId) public view returns (string memory) {314		require(false, stub_error);315		tokenId;316		dummy;317		return "";318	}319}320321// Selector: 68ccfe89322contract ERC721Mintable is Dummy, ERC165, ERC721MintableEvents {323	// Selector: mintingFinished() 05d2035b324	function mintingFinished() public view returns (bool) {325		require(false, stub_error);326		dummy;327		return false;328	}329330	// @notice Function to mint token.331	// @dev `tokenId` should be obtained with `nextTokenId` method,332	//  unlike standard, you can't specify it manually333	// @param to The new owner334	// @param tokenId ID of the minted NFT335	//336	// Selector: mint(address,uint256) 40c10f19337	function mint(address to, uint256 tokenId) public returns (bool) {338		require(false, stub_error);339		to;340		tokenId;341		dummy = 0;342		return false;343	}344345	// @notice Function to mint token with the given tokenUri.346	// @dev `tokenId` should be obtained with `nextTokenId` method,347	//  unlike standard, you can't specify it manually348	// @param to The new owner349	// @param tokenId ID of the minted NFT350	// @param tokenUri Token URI that would be stored in the NFT properties351	//352	// Selector: mintWithTokenURI(address,uint256,string) 50bb4e7f353	function mintWithTokenURI(354		address to,355		uint256 tokenId,356		string memory tokenUri357	) public returns (bool) {358		require(false, stub_error);359		to;360		tokenId;361		tokenUri;362		dummy = 0;363		return false;364	}365366	// @dev Not implemented367	//368	// Selector: finishMinting() 7d64bcb4369	function finishMinting() public returns (bool) {370		require(false, stub_error);371		dummy = 0;372		return false;373	}374}375376// Selector: 780e9d63377contract ERC721Enumerable is Dummy, ERC165 {378	// @notice Enumerate valid NFTs379	// @param index A counter less than `totalSupply()`380	// @return The token identifier for the `index`th NFT,381	//  (sort order not specified)382	//383	// Selector: tokenByIndex(uint256) 4f6ccce7384	function tokenByIndex(uint256 index) public view returns (uint256) {385		require(false, stub_error);386		index;387		dummy;388		return 0;389	}390391	// @dev Not implemented392	//393	// Selector: tokenOfOwnerByIndex(address,uint256) 2f745c59394	function tokenOfOwnerByIndex(address owner, uint256 index)395		public396		view397		returns (uint256)398	{399		require(false, stub_error);400		owner;401		index;402		dummy;403		return 0;404	}405406	// @notice Count NFTs tracked by this contract407	// @return A count of valid NFTs tracked by this contract, where each one of408	//  them has an assigned and queryable owner not equal to the zero address409	//410	// Selector: totalSupply() 18160ddd411	function totalSupply() public view returns (uint256) {412		require(false, stub_error);413		dummy;414		return 0;415	}416}417418// Selector: d74d154f419contract ERC721UniqueExtensions is Dummy, ERC165 {420	// @notice Transfer ownership of an NFT421	// @dev Throws unless `msg.sender` is the current owner. Throws if `to`422	//  is the zero address. Throws if `tokenId` is not a valid NFT.423	// @param to The new owner424	// @param tokenId The NFT to transfer425	// @param _value Not used for an NFT426	//427	// Selector: transfer(address,uint256) a9059cbb428	function transfer(address to, uint256 tokenId) public {429		require(false, stub_error);430		to;431		tokenId;432		dummy = 0;433	}434435	// @notice Burns a specific ERC721 token.436	// @dev Throws unless `msg.sender` is the current owner or an authorized437	//  operator for this NFT. Throws if `from` is not the current owner. Throws438	//  if `to` is the zero address. Throws if `tokenId` is not a valid NFT.439	// @param from The current owner of the NFT440	// @param tokenId The NFT to transfer441	// @param _value Not used for an NFT442	//443	// Selector: burnFrom(address,uint256) 79cc6790444	function burnFrom(address from, uint256 tokenId) public {445		require(false, stub_error);446		from;447		tokenId;448		dummy = 0;449	}450451	// @notice Returns next free NFT ID.452	//453	// Selector: nextTokenId() 75794a3c454	function nextTokenId() public view returns (uint256) {455		require(false, stub_error);456		dummy;457		return 0;458	}459460	// @notice Function to mint multiple tokens.461	// @dev `tokenIds` should be an array of consecutive numbers and first number462	//  should be obtained with `nextTokenId` method463	// @param to The new owner464	// @param tokenIds IDs of the minted NFTs465	//466	// Selector: mintBulk(address,uint256[]) 44a9945e467	function mintBulk(address to, uint256[] memory tokenIds)468		public469		returns (bool)470	{471		require(false, stub_error);472		to;473		tokenIds;474		dummy = 0;475		return false;476	}477478	// @notice Function to mint multiple tokens with the given tokenUris.479	// @dev `tokenIds` is array of pairs of token ID and token URI. Token IDs should be consecutive480	//  numbers and first number should be obtained with `nextTokenId` method481	// @param to The new owner482	// @param tokens array of pairs of token ID and token URI for minted tokens483	//484	// Selector: mintBulkWithTokenURI(address,(uint256,string)[]) 36543006485	function mintBulkWithTokenURI(address to, Tuple0[] memory tokens)486		public487		returns (bool)488	{489		require(false, stub_error);490		to;491		tokens;492		dummy = 0;493		return false;494	}495}496497// Selector: f077f83e498contract Collection is Dummy, ERC165 {499	// Set collection property.500	//501	// @param key Property key.502	// @param value Propery value.503	//504	// Selector: setCollectionProperty(string,bytes) 2f073f66505	function setCollectionProperty(string memory key, bytes memory value)506		public507	{508		require(false, stub_error);509		key;510		value;511		dummy = 0;512	}513514	// Delete collection property.515	//516	// @param key Property key.517	//518	// Selector: deleteCollectionProperty(string) 7b7debce519	function deleteCollectionProperty(string memory key) public {520		require(false, stub_error);521		key;522		dummy = 0;523	}524525	// Get collection property.526	//527	// @dev Throws error if key not found.528	//529	// @param key Property key.530	// @return bytes The property corresponding to the key.531	//532	// Selector: collectionProperty(string) cf24fd6d533	function collectionProperty(string memory key)534		public535		view536		returns (bytes memory)537	{538		require(false, stub_error);539		key;540		dummy;541		return hex"";542	}543544	// Set the sponsor of the collection.545	//546	// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor.547	//548	// @param sponsor Address of the sponsor from whose account funds will be debited for operations with the contract.549	//550	// Selector: setCollectionSponsor(address) 7623402e551	function setCollectionSponsor(address sponsor) public {552		require(false, stub_error);553		sponsor;554		dummy = 0;555	}556557	// Collection sponsorship confirmation.558	//559	// @dev After setting the sponsor for the collection, it must be confirmed with this function.560	//561	// Selector: confirmCollectionSponsorship() 3c50e97a562	function confirmCollectionSponsorship() public {563		require(false, stub_error);564		dummy = 0;565	}566567	// Set limits for the collection.568	// @dev Throws error if limit not found.569	// @param limit Name of the limit. Valid names:570	// 	"accountTokenOwnershipLimit",571	// 	"sponsoredDataSize",572	// 	"sponsoredDataRateLimit",573	// 	"tokenLimit",574	// 	"sponsorTransferTimeout",575	// 	"sponsorApproveTimeout"576	// @param value Value of the limit.577	//578	// Selector: setCollectionLimit(string,uint32) 6a3841db579	function setCollectionLimit(string memory limit, uint32 value) public {580		require(false, stub_error);581		limit;582		value;583		dummy = 0;584	}585586	// Set limits for the collection.587	// @dev Throws error if limit not found.588	// @param limit Name of the limit. Valid names:589	// 	"ownerCanTransfer",590	// 	"ownerCanDestroy",591	// 	"transfersEnabled"592	// @param value Value of the limit.593	//594	// Selector: setCollectionLimit(string,bool) 993b7fba595	function setCollectionLimit(string memory limit, bool value) public {596		require(false, stub_error);597		limit;598		value;599		dummy = 0;600	}601602	// Get contract address.603	//604	// Selector: contractAddress() f6b4dfb4605	function contractAddress() public view returns (address) {606		require(false, stub_error);607		dummy;608		return 0x0000000000000000000000000000000000000000;609	}610611	// Add collection admin by substrate address.612	// @param new_admin Substrate administrator address.613	//614	// Selector: addCollectionAdminSubstrate(uint256) 5730062b615	function addCollectionAdminSubstrate(uint256 newAdmin) public {616		require(false, stub_error);617		newAdmin;618		dummy = 0;619	}620621	// Remove collection admin by substrate address.622	// @param admin Substrate administrator address.623	//624	// Selector: removeCollectionAdminSubstrate(uint256) 4048fcf9625	function removeCollectionAdminSubstrate(uint256 admin) public {626		require(false, stub_error);627		admin;628		dummy = 0;629	}630631	// Add collection admin.632	// @param new_admin Address of the added administrator.633	//634	// Selector: addCollectionAdmin(address) 92e462c7635	function addCollectionAdmin(address newAdmin) public {636		require(false, stub_error);637		newAdmin;638		dummy = 0;639	}640641	// Remove collection admin.642	//643	// @param new_admin Address of the removed administrator.644	//645	// Selector: removeCollectionAdmin(address) fafd7b42646	function removeCollectionAdmin(address admin) public {647		require(false, stub_error);648		admin;649		dummy = 0;650	}651652	// Toggle accessibility of collection nesting.653	//654	// @param enable If "true" degenerates to nesting: 'Owner' else to nesting: 'Disabled'655	//656	// Selector: setCollectionNesting(bool) 112d4586657	function setCollectionNesting(bool enable) public {658		require(false, stub_error);659		enable;660		dummy = 0;661	}662663	// Toggle accessibility of collection nesting.664	//665	// @param enable If "true" degenerates to nesting: {OwnerRestricted: [1, 2, 3]} else to nesting: 'Disabled'666	// @param collections Addresses of collections that will be available for nesting.667	//668	// Selector: setCollectionNesting(bool,address[]) 64872396669	function setCollectionNesting(bool enable, address[] memory collections)670		public671	{672		require(false, stub_error);673		enable;674		collections;675		dummy = 0;676	}677678	// Set the collection access method.679	// @param mode Access mode680	// 	0 for Normal681	// 	1 for AllowList682	//683	// Selector: setCollectionAccess(uint8) 41835d4c684	function setCollectionAccess(uint8 mode) public {685		require(false, stub_error);686		mode;687		dummy = 0;688	}689690	// Add the user to the allowed list.691	//692	// @param user Address of a trusted user.693	//694	// Selector: addToCollectionAllowList(address) 67844fe6695	function addToCollectionAllowList(address user) public {696		require(false, stub_error);697		user;698		dummy = 0;699	}700701	// Remove the user from the allowed list.702	//703	// @param user Address of a removed user.704	//705	// Selector: removeFromCollectionAllowList(address) 85c51acb706	function removeFromCollectionAllowList(address user) public {707		require(false, stub_error);708		user;709		dummy = 0;710	}711712	// Switch permission for minting.713	//714	// @param mode Enable if "true".715	//716	// Selector: setCollectionMintMode(bool) 00018e84717	function setCollectionMintMode(bool mode) public {718		require(false, stub_error);719		mode;720		dummy = 0;721	}722723	// Check that account is the owner or admin of the collection724	//725	// @param user account to verify726	// @return "true" if account is the owner or admin727	//728	// Selector: verifyOwnerOrAdmin(address) c2282493729	function verifyOwnerOrAdmin(address user) public view returns (bool) {730		require(false, stub_error);731		user;732		dummy;733		return false;734	}735736	// Check that substrate account is the owner or admin of the collection737	//738	// @param user account to verify739	// @return "true" if account is the owner or admin740	//741	// Selector: verifyOwnerOrAdmin(uint256) a83328e5742	function verifyOwnerOrAdmin(uint256 user) public view returns (bool) {743		require(false, stub_error);744		user;745		dummy;746		return false;747	}748749	// Returns collection type750	//751	// @return `Fungible` or `NFT` or `ReFungible`752	//753	// Selector: uniqueCollectionType() d34b55b8754	function uniqueCollectionType() public returns (string memory) {755		require(false, stub_error);756		dummy = 0;757		return "";758	}759760	// Changes collection owner to another account761	//762	// @dev Owner can be changed only by current owner763	// @param newOwner new owner account764	//765	// Selector: changeOwner(address) a6f9dae1766	function changeOwner(address newOwner) public {767		require(false, stub_error);768		newOwner;769		dummy = 0;770	}771772	// Changes collection owner to another substrate account773	//774	// @dev Owner can be changed only by current owner775	// @param newOwner new owner substrate account776	//777	// Selector: changeOwner(uint256) 924c19f7778	function changeOwner(uint256 newOwner) public {779		require(false, stub_error);780		newOwner;781		dummy = 0;782	}783}784785contract UniqueNFT is786	Dummy,787	ERC165,788	ERC721,789	ERC721Metadata,790	ERC721Enumerable,791	ERC721UniqueExtensions,792	ERC721Mintable,793	ERC721Burnable,794	Collection,795	TokenProperties796{}
modifiedpallets/refungible/src/stubs/UniqueRefungible.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/refungible/src/stubs/UniqueRefungible.soldiffbeforeafterboth
--- a/pallets/refungible/src/stubs/UniqueRefungible.sol
+++ b/pallets/refungible/src/stubs/UniqueRefungible.sol
@@ -51,298 +51,6 @@
 	event MintingFinished();
 }
 
-// Selector: 07f76b0c
-contract Collection is Dummy, ERC165 {
-	// Set collection property.
-	//
-	// @param key Property key.
-	// @param value Propery value.
-	//
-	// Selector: setCollectionProperty(string,bytes) 2f073f66
-	function setCollectionProperty(string memory key, bytes memory value)
-		public
-	{
-		require(false, stub_error);
-		key;
-		value;
-		dummy = 0;
-	}
-
-	// Delete collection property.
-	//
-	// @param key Property key.
-	//
-	// Selector: deleteCollectionProperty(string) 7b7debce
-	function deleteCollectionProperty(string memory key) public {
-		require(false, stub_error);
-		key;
-		dummy = 0;
-	}
-
-	// Get collection property.
-	//
-	// @dev Throws error if key not found.
-	//
-	// @param key Property key.
-	// @return bytes The property corresponding to the key.
-	//
-	// Selector: collectionProperty(string) cf24fd6d
-	function collectionProperty(string memory key)
-		public
-		view
-		returns (bytes memory)
-	{
-		require(false, stub_error);
-		key;
-		dummy;
-		return hex"";
-	}
-
-	// Set the sponsor of the collection.
-	//
-	// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor.
-	//
-	// @param sponsor Address of the sponsor from whose account funds will be debited for operations with the contract.
-	//
-	// Selector: setCollectionSponsor(address) 7623402e
-	function setCollectionSponsor(address sponsor) public {
-		require(false, stub_error);
-		sponsor;
-		dummy = 0;
-	}
-
-	// Collection sponsorship confirmation.
-	//
-	// @dev After setting the sponsor for the collection, it must be confirmed with this function.
-	//
-	// Selector: confirmCollectionSponsorship() 3c50e97a
-	function confirmCollectionSponsorship() public {
-		require(false, stub_error);
-		dummy = 0;
-	}
-
-	// Set limits for the collection.
-	// @dev Throws error if limit not found.
-	// @param limit Name of the limit. Valid names:
-	// 	"accountTokenOwnershipLimit",
-	// 	"sponsoredDataSize",
-	// 	"sponsoredDataRateLimit",
-	// 	"tokenLimit",
-	// 	"sponsorTransferTimeout",
-	// 	"sponsorApproveTimeout"
-	// @param value Value of the limit.
-	//
-	// Selector: setCollectionLimit(string,uint32) 6a3841db
-	function setCollectionLimit(string memory limit, uint32 value) public {
-		require(false, stub_error);
-		limit;
-		value;
-		dummy = 0;
-	}
-
-	// Set limits for the collection.
-	// @dev Throws error if limit not found.
-	// @param limit Name of the limit. Valid names:
-	// 	"ownerCanTransfer",
-	// 	"ownerCanDestroy",
-	// 	"transfersEnabled"
-	// @param value Value of the limit.
-	//
-	// Selector: setCollectionLimit(string,bool) 993b7fba
-	function setCollectionLimit(string memory limit, bool value) public {
-		require(false, stub_error);
-		limit;
-		value;
-		dummy = 0;
-	}
-
-	// Get contract address.
-	//
-	// Selector: contractAddress() f6b4dfb4
-	function contractAddress() public view returns (address) {
-		require(false, stub_error);
-		dummy;
-		return 0x0000000000000000000000000000000000000000;
-	}
-
-	// Add collection admin by substrate address.
-	// @param new_admin Substrate administrator address.
-	//
-	// Selector: addCollectionAdminSubstrate(uint256) 5730062b
-	function addCollectionAdminSubstrate(uint256 newAdmin) public {
-		require(false, stub_error);
-		newAdmin;
-		dummy = 0;
-	}
-
-	// Remove collection admin by substrate address.
-	// @param admin Substrate administrator address.
-	//
-	// Selector: removeCollectionAdminSubstrate(uint256) 4048fcf9
-	function removeCollectionAdminSubstrate(uint256 admin) public {
-		require(false, stub_error);
-		admin;
-		dummy = 0;
-	}
-
-	// Add collection admin.
-	// @param new_admin Address of the added administrator.
-	//
-	// Selector: addCollectionAdmin(address) 92e462c7
-	function addCollectionAdmin(address newAdmin) public {
-		require(false, stub_error);
-		newAdmin;
-		dummy = 0;
-	}
-
-	// Remove collection admin.
-	//
-	// @param new_admin Address of the removed administrator.
-	//
-	// Selector: removeCollectionAdmin(address) fafd7b42
-	function removeCollectionAdmin(address admin) public {
-		require(false, stub_error);
-		admin;
-		dummy = 0;
-	}
-
-	// Toggle accessibility of collection nesting.
-	//
-	// @param enable If "true" degenerates to nesting: 'Owner' else to nesting: 'Disabled'
-	//
-	// Selector: setCollectionNesting(bool) 112d4586
-	function setCollectionNesting(bool enable) public {
-		require(false, stub_error);
-		enable;
-		dummy = 0;
-	}
-
-	// Toggle accessibility of collection nesting.
-	//
-	// @param enable If "true" degenerates to nesting: {OwnerRestricted: [1, 2, 3]} else to nesting: 'Disabled'
-	// @param collections Addresses of collections that will be available for nesting.
-	//
-	// Selector: setCollectionNesting(bool,address[]) 64872396
-	function setCollectionNesting(bool enable, address[] memory collections)
-		public
-	{
-		require(false, stub_error);
-		enable;
-		collections;
-		dummy = 0;
-	}
-
-	// Set the collection access method.
-	// @param mode Access mode
-	// 	0 for Normal
-	// 	1 for AllowList
-	//
-	// Selector: setCollectionAccess(uint8) 41835d4c
-	function setCollectionAccess(uint8 mode) public {
-		require(false, stub_error);
-		mode;
-		dummy = 0;
-	}
-
-	// Add the user to the allowed list.
-	//
-	// @param user Address of a trusted user.
-	//
-	// Selector: addToCollectionAllowList(address) 67844fe6
-	function addToCollectionAllowList(address user) public {
-		require(false, stub_error);
-		user;
-		dummy = 0;
-	}
-
-	// Remove the user from the allowed list.
-	//
-	// @param user Address of a removed user.
-	//
-	// Selector: removeFromCollectionAllowList(address) 85c51acb
-	function removeFromCollectionAllowList(address user) public {
-		require(false, stub_error);
-		user;
-		dummy = 0;
-	}
-
-	// Switch permission for minting.
-	//
-	// @param mode Enable if "true".
-	//
-	// Selector: setCollectionMintMode(bool) 00018e84
-	function setCollectionMintMode(bool mode) public {
-		require(false, stub_error);
-		mode;
-		dummy = 0;
-	}
-
-	// Check that account is the owner or admin of the collection
-	//
-	// @param user account to verify
-	// @return "true" if account is the owner or admin
-	//
-	// Selector: verifyOwnerOrAdmin(address) c2282493
-	function verifyOwnerOrAdmin(address user) public view returns (bool) {
-		require(false, stub_error);
-		user;
-		dummy;
-		return false;
-	}
-
-	// Check that substrate account is the owner or admin of the collection
-	//
-	// @param user account to verify
-	// @return "true" if account is the owner or admin
-	//
-	// Selector: verifyOwnerOrAdminSubstrate(uint256) fe818e40
-	function verifyOwnerOrAdminSubstrate(uint256 user)
-		public
-		view
-		returns (bool)
-	{
-		require(false, stub_error);
-		user;
-		dummy;
-		return false;
-	}
-
-	// Returns collection type
-	//
-	// @return `Fungible` or `NFT` or `ReFungible`
-	//
-	// Selector: uniqueCollectionType() d34b55b8
-	function uniqueCollectionType() public returns (string memory) {
-		require(false, stub_error);
-		dummy = 0;
-		return "";
-	}
-
-	// Changes collection owner to another account
-	//
-	// @dev Owner can be changed only by current owner
-	// @param newOwner new owner account
-	//
-	// Selector: changeOwner(address) a6f9dae1
-	function changeOwner(address newOwner) public {
-		require(false, stub_error);
-		newOwner;
-		dummy = 0;
-	}
-
-	// Changes collection owner to another substrate account
-	//
-	// @dev Owner can be changed only by current owner
-	// @param newOwner new owner substrate account
-	//
-	// Selector: changeOwnerSubstrate(uint256) 337e2c60
-	function changeOwnerSubstrate(uint256 newOwner) public {
-		require(false, stub_error);
-		newOwner;
-		dummy = 0;
-	}
-}
-
 // Selector: 41369377
 contract TokenProperties is Dummy, ERC165 {
 	// @notice Set permissions for token property.
@@ -798,6 +506,294 @@
 	}
 }
 
+// Selector: f077f83e
+contract Collection is Dummy, ERC165 {
+	// Set collection property.
+	//
+	// @param key Property key.
+	// @param value Propery value.
+	//
+	// Selector: setCollectionProperty(string,bytes) 2f073f66
+	function setCollectionProperty(string memory key, bytes memory value)
+		public
+	{
+		require(false, stub_error);
+		key;
+		value;
+		dummy = 0;
+	}
+
+	// Delete collection property.
+	//
+	// @param key Property key.
+	//
+	// Selector: deleteCollectionProperty(string) 7b7debce
+	function deleteCollectionProperty(string memory key) public {
+		require(false, stub_error);
+		key;
+		dummy = 0;
+	}
+
+	// Get collection property.
+	//
+	// @dev Throws error if key not found.
+	//
+	// @param key Property key.
+	// @return bytes The property corresponding to the key.
+	//
+	// Selector: collectionProperty(string) cf24fd6d
+	function collectionProperty(string memory key)
+		public
+		view
+		returns (bytes memory)
+	{
+		require(false, stub_error);
+		key;
+		dummy;
+		return hex"";
+	}
+
+	// Set the sponsor of the collection.
+	//
+	// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor.
+	//
+	// @param sponsor Address of the sponsor from whose account funds will be debited for operations with the contract.
+	//
+	// Selector: setCollectionSponsor(address) 7623402e
+	function setCollectionSponsor(address sponsor) public {
+		require(false, stub_error);
+		sponsor;
+		dummy = 0;
+	}
+
+	// Collection sponsorship confirmation.
+	//
+	// @dev After setting the sponsor for the collection, it must be confirmed with this function.
+	//
+	// Selector: confirmCollectionSponsorship() 3c50e97a
+	function confirmCollectionSponsorship() public {
+		require(false, stub_error);
+		dummy = 0;
+	}
+
+	// Set limits for the collection.
+	// @dev Throws error if limit not found.
+	// @param limit Name of the limit. Valid names:
+	// 	"accountTokenOwnershipLimit",
+	// 	"sponsoredDataSize",
+	// 	"sponsoredDataRateLimit",
+	// 	"tokenLimit",
+	// 	"sponsorTransferTimeout",
+	// 	"sponsorApproveTimeout"
+	// @param value Value of the limit.
+	//
+	// Selector: setCollectionLimit(string,uint32) 6a3841db
+	function setCollectionLimit(string memory limit, uint32 value) public {
+		require(false, stub_error);
+		limit;
+		value;
+		dummy = 0;
+	}
+
+	// Set limits for the collection.
+	// @dev Throws error if limit not found.
+	// @param limit Name of the limit. Valid names:
+	// 	"ownerCanTransfer",
+	// 	"ownerCanDestroy",
+	// 	"transfersEnabled"
+	// @param value Value of the limit.
+	//
+	// Selector: setCollectionLimit(string,bool) 993b7fba
+	function setCollectionLimit(string memory limit, bool value) public {
+		require(false, stub_error);
+		limit;
+		value;
+		dummy = 0;
+	}
+
+	// Get contract address.
+	//
+	// Selector: contractAddress() f6b4dfb4
+	function contractAddress() public view returns (address) {
+		require(false, stub_error);
+		dummy;
+		return 0x0000000000000000000000000000000000000000;
+	}
+
+	// Add collection admin by substrate address.
+	// @param new_admin Substrate administrator address.
+	//
+	// Selector: addCollectionAdminSubstrate(uint256) 5730062b
+	function addCollectionAdminSubstrate(uint256 newAdmin) public {
+		require(false, stub_error);
+		newAdmin;
+		dummy = 0;
+	}
+
+	// Remove collection admin by substrate address.
+	// @param admin Substrate administrator address.
+	//
+	// Selector: removeCollectionAdminSubstrate(uint256) 4048fcf9
+	function removeCollectionAdminSubstrate(uint256 admin) public {
+		require(false, stub_error);
+		admin;
+		dummy = 0;
+	}
+
+	// Add collection admin.
+	// @param new_admin Address of the added administrator.
+	//
+	// Selector: addCollectionAdmin(address) 92e462c7
+	function addCollectionAdmin(address newAdmin) public {
+		require(false, stub_error);
+		newAdmin;
+		dummy = 0;
+	}
+
+	// Remove collection admin.
+	//
+	// @param new_admin Address of the removed administrator.
+	//
+	// Selector: removeCollectionAdmin(address) fafd7b42
+	function removeCollectionAdmin(address admin) public {
+		require(false, stub_error);
+		admin;
+		dummy = 0;
+	}
+
+	// Toggle accessibility of collection nesting.
+	//
+	// @param enable If "true" degenerates to nesting: 'Owner' else to nesting: 'Disabled'
+	//
+	// Selector: setCollectionNesting(bool) 112d4586
+	function setCollectionNesting(bool enable) public {
+		require(false, stub_error);
+		enable;
+		dummy = 0;
+	}
+
+	// Toggle accessibility of collection nesting.
+	//
+	// @param enable If "true" degenerates to nesting: {OwnerRestricted: [1, 2, 3]} else to nesting: 'Disabled'
+	// @param collections Addresses of collections that will be available for nesting.
+	//
+	// Selector: setCollectionNesting(bool,address[]) 64872396
+	function setCollectionNesting(bool enable, address[] memory collections)
+		public
+	{
+		require(false, stub_error);
+		enable;
+		collections;
+		dummy = 0;
+	}
+
+	// Set the collection access method.
+	// @param mode Access mode
+	// 	0 for Normal
+	// 	1 for AllowList
+	//
+	// Selector: setCollectionAccess(uint8) 41835d4c
+	function setCollectionAccess(uint8 mode) public {
+		require(false, stub_error);
+		mode;
+		dummy = 0;
+	}
+
+	// Add the user to the allowed list.
+	//
+	// @param user Address of a trusted user.
+	//
+	// Selector: addToCollectionAllowList(address) 67844fe6
+	function addToCollectionAllowList(address user) public {
+		require(false, stub_error);
+		user;
+		dummy = 0;
+	}
+
+	// Remove the user from the allowed list.
+	//
+	// @param user Address of a removed user.
+	//
+	// Selector: removeFromCollectionAllowList(address) 85c51acb
+	function removeFromCollectionAllowList(address user) public {
+		require(false, stub_error);
+		user;
+		dummy = 0;
+	}
+
+	// Switch permission for minting.
+	//
+	// @param mode Enable if "true".
+	//
+	// Selector: setCollectionMintMode(bool) 00018e84
+	function setCollectionMintMode(bool mode) public {
+		require(false, stub_error);
+		mode;
+		dummy = 0;
+	}
+
+	// Check that account is the owner or admin of the collection
+	//
+	// @param user account to verify
+	// @return "true" if account is the owner or admin
+	//
+	// Selector: verifyOwnerOrAdmin(address) c2282493
+	function verifyOwnerOrAdmin(address user) public view returns (bool) {
+		require(false, stub_error);
+		user;
+		dummy;
+		return false;
+	}
+
+	// Check that substrate account is the owner or admin of the collection
+	//
+	// @param user account to verify
+	// @return "true" if account is the owner or admin
+	//
+	// Selector: verifyOwnerOrAdmin(uint256) a83328e5
+	function verifyOwnerOrAdmin(uint256 user) public view returns (bool) {
+		require(false, stub_error);
+		user;
+		dummy;
+		return false;
+	}
+
+	// Returns collection type
+	//
+	// @return `Fungible` or `NFT` or `ReFungible`
+	//
+	// Selector: uniqueCollectionType() d34b55b8
+	function uniqueCollectionType() public returns (string memory) {
+		require(false, stub_error);
+		dummy = 0;
+		return "";
+	}
+
+	// Changes collection owner to another account
+	//
+	// @dev Owner can be changed only by current owner
+	// @param newOwner new owner account
+	//
+	// Selector: changeOwner(address) a6f9dae1
+	function changeOwner(address newOwner) public {
+		require(false, stub_error);
+		newOwner;
+		dummy = 0;
+	}
+
+	// Changes collection owner to another substrate account
+	//
+	// @dev Owner can be changed only by current owner
+	// @param newOwner new owner substrate account
+	//
+	// Selector: changeOwner(uint256) 924c19f7
+	function changeOwner(uint256 newOwner) public {
+		require(false, stub_error);
+		newOwner;
+		dummy = 0;
+	}
+}
+
 contract UniqueRefungible is
 	Dummy,
 	ERC165,
modifiedpallets/refungible/src/stubs/UniqueRefungibleToken.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/unique/src/eth/stubs/CollectionHelpers.rawdiffbeforeafterboth

binary blob — no preview

modifiedtests/src/eth/api/UniqueFungible.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueFungible.sol
+++ b/tests/src/eth/api/UniqueFungible.sol
@@ -22,7 +22,50 @@
 	);
 }
 
-// Selector: 07f76b0c
+// Selector: 79cc6790
+interface ERC20UniqueExtensions is Dummy, ERC165 {
+	// Selector: burnFrom(address,uint256) 79cc6790
+	function burnFrom(address from, uint256 amount) external returns (bool);
+}
+
+// Selector: 942e8b22
+interface ERC20 is Dummy, ERC165, ERC20Events {
+	// Selector: name() 06fdde03
+	function name() external view returns (string memory);
+
+	// Selector: symbol() 95d89b41
+	function symbol() external view returns (string memory);
+
+	// Selector: totalSupply() 18160ddd
+	function totalSupply() external view returns (uint256);
+
+	// Selector: decimals() 313ce567
+	function decimals() external view returns (uint8);
+
+	// Selector: balanceOf(address) 70a08231
+	function balanceOf(address owner) external view returns (uint256);
+
+	// Selector: transfer(address,uint256) a9059cbb
+	function transfer(address to, uint256 amount) external returns (bool);
+
+	// Selector: transferFrom(address,address,uint256) 23b872dd
+	function transferFrom(
+		address from,
+		address to,
+		uint256 amount
+	) external returns (bool);
+
+	// Selector: approve(address,uint256) 095ea7b3
+	function approve(address spender, uint256 amount) external returns (bool);
+
+	// Selector: allowance(address,address) dd62ed3e
+	function allowance(address owner, address spender)
+		external
+		view
+		returns (uint256);
+}
+
+// Selector: f077f83e
 interface Collection is Dummy, ERC165 {
 	// Set collection property.
 	//
@@ -182,11 +225,8 @@
 	// @param user account to verify
 	// @return "true" if account is the owner or admin
 	//
-	// Selector: verifyOwnerOrAdminSubstrate(uint256) fe818e40
-	function verifyOwnerOrAdminSubstrate(uint256 user)
-		external
-		view
-		returns (bool);
+	// Selector: verifyOwnerOrAdmin(uint256) a83328e5
+	function verifyOwnerOrAdmin(uint256 user) external view returns (bool);
 
 	// Returns collection type
 	//
@@ -208,51 +248,8 @@
 	// @dev Owner can be changed only by current owner
 	// @param newOwner new owner substrate account
 	//
-	// Selector: changeOwnerSubstrate(uint256) 337e2c60
-	function changeOwnerSubstrate(uint256 newOwner) external;
-}
-
-// Selector: 79cc6790
-interface ERC20UniqueExtensions is Dummy, ERC165 {
-	// Selector: burnFrom(address,uint256) 79cc6790
-	function burnFrom(address from, uint256 amount) external returns (bool);
-}
-
-// Selector: 942e8b22
-interface ERC20 is Dummy, ERC165, ERC20Events {
-	// Selector: name() 06fdde03
-	function name() external view returns (string memory);
-
-	// Selector: symbol() 95d89b41
-	function symbol() external view returns (string memory);
-
-	// Selector: totalSupply() 18160ddd
-	function totalSupply() external view returns (uint256);
-
-	// Selector: decimals() 313ce567
-	function decimals() external view returns (uint8);
-
-	// Selector: balanceOf(address) 70a08231
-	function balanceOf(address owner) external view returns (uint256);
-
-	// Selector: transfer(address,uint256) a9059cbb
-	function transfer(address to, uint256 amount) external returns (bool);
-
-	// Selector: transferFrom(address,address,uint256) 23b872dd
-	function transferFrom(
-		address from,
-		address to,
-		uint256 amount
-	) external returns (bool);
-
-	// Selector: approve(address,uint256) 095ea7b3
-	function approve(address spender, uint256 amount) external returns (bool);
-
-	// Selector: allowance(address,address) dd62ed3e
-	function allowance(address owner, address spender)
-		external
-		view
-		returns (uint256);
+	// Selector: changeOwner(uint256) 924c19f7
+	function changeOwner(uint256 newOwner) external;
 }
 
 interface UniqueFungible is
modifiedtests/src/eth/api/UniqueNFT.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueNFT.sol
+++ b/tests/src/eth/api/UniqueNFT.sol
@@ -42,196 +42,6 @@
 	event MintingFinished();
 }
 
-// Selector: 07f76b0c
-interface Collection is Dummy, ERC165 {
-	// Set collection property.
-	//
-	// @param key Property key.
-	// @param value Propery value.
-	//
-	// Selector: setCollectionProperty(string,bytes) 2f073f66
-	function setCollectionProperty(string memory key, bytes memory value)
-		external;
-
-	// Delete collection property.
-	//
-	// @param key Property key.
-	//
-	// Selector: deleteCollectionProperty(string) 7b7debce
-	function deleteCollectionProperty(string memory key) external;
-
-	// Get collection property.
-	//
-	// @dev Throws error if key not found.
-	//
-	// @param key Property key.
-	// @return bytes The property corresponding to the key.
-	//
-	// Selector: collectionProperty(string) cf24fd6d
-	function collectionProperty(string memory key)
-		external
-		view
-		returns (bytes memory);
-
-	// Set the sponsor of the collection.
-	//
-	// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor.
-	//
-	// @param sponsor Address of the sponsor from whose account funds will be debited for operations with the contract.
-	//
-	// Selector: setCollectionSponsor(address) 7623402e
-	function setCollectionSponsor(address sponsor) external;
-
-	// Collection sponsorship confirmation.
-	//
-	// @dev After setting the sponsor for the collection, it must be confirmed with this function.
-	//
-	// Selector: confirmCollectionSponsorship() 3c50e97a
-	function confirmCollectionSponsorship() external;
-
-	// Set limits for the collection.
-	// @dev Throws error if limit not found.
-	// @param limit Name of the limit. Valid names:
-	// 	"accountTokenOwnershipLimit",
-	// 	"sponsoredDataSize",
-	// 	"sponsoredDataRateLimit",
-	// 	"tokenLimit",
-	// 	"sponsorTransferTimeout",
-	// 	"sponsorApproveTimeout"
-	// @param value Value of the limit.
-	//
-	// Selector: setCollectionLimit(string,uint32) 6a3841db
-	function setCollectionLimit(string memory limit, uint32 value) external;
-
-	// Set limits for the collection.
-	// @dev Throws error if limit not found.
-	// @param limit Name of the limit. Valid names:
-	// 	"ownerCanTransfer",
-	// 	"ownerCanDestroy",
-	// 	"transfersEnabled"
-	// @param value Value of the limit.
-	//
-	// Selector: setCollectionLimit(string,bool) 993b7fba
-	function setCollectionLimit(string memory limit, bool value) external;
-
-	// Get contract address.
-	//
-	// Selector: contractAddress() f6b4dfb4
-	function contractAddress() external view returns (address);
-
-	// Add collection admin by substrate address.
-	// @param new_admin Substrate administrator address.
-	//
-	// Selector: addCollectionAdminSubstrate(uint256) 5730062b
-	function addCollectionAdminSubstrate(uint256 newAdmin) external;
-
-	// Remove collection admin by substrate address.
-	// @param admin Substrate administrator address.
-	//
-	// Selector: removeCollectionAdminSubstrate(uint256) 4048fcf9
-	function removeCollectionAdminSubstrate(uint256 admin) external;
-
-	// Add collection admin.
-	// @param new_admin Address of the added administrator.
-	//
-	// Selector: addCollectionAdmin(address) 92e462c7
-	function addCollectionAdmin(address newAdmin) external;
-
-	// Remove collection admin.
-	//
-	// @param new_admin Address of the removed administrator.
-	//
-	// Selector: removeCollectionAdmin(address) fafd7b42
-	function removeCollectionAdmin(address admin) external;
-
-	// Toggle accessibility of collection nesting.
-	//
-	// @param enable If "true" degenerates to nesting: 'Owner' else to nesting: 'Disabled'
-	//
-	// Selector: setCollectionNesting(bool) 112d4586
-	function setCollectionNesting(bool enable) external;
-
-	// Toggle accessibility of collection nesting.
-	//
-	// @param enable If "true" degenerates to nesting: {OwnerRestricted: [1, 2, 3]} else to nesting: 'Disabled'
-	// @param collections Addresses of collections that will be available for nesting.
-	//
-	// Selector: setCollectionNesting(bool,address[]) 64872396
-	function setCollectionNesting(bool enable, address[] memory collections)
-		external;
-
-	// Set the collection access method.
-	// @param mode Access mode
-	// 	0 for Normal
-	// 	1 for AllowList
-	//
-	// Selector: setCollectionAccess(uint8) 41835d4c
-	function setCollectionAccess(uint8 mode) external;
-
-	// Add the user to the allowed list.
-	//
-	// @param user Address of a trusted user.
-	//
-	// Selector: addToCollectionAllowList(address) 67844fe6
-	function addToCollectionAllowList(address user) external;
-
-	// Remove the user from the allowed list.
-	//
-	// @param user Address of a removed user.
-	//
-	// Selector: removeFromCollectionAllowList(address) 85c51acb
-	function removeFromCollectionAllowList(address user) external;
-
-	// Switch permission for minting.
-	//
-	// @param mode Enable if "true".
-	//
-	// Selector: setCollectionMintMode(bool) 00018e84
-	function setCollectionMintMode(bool mode) external;
-
-	// Check that account is the owner or admin of the collection
-	//
-	// @param user account to verify
-	// @return "true" if account is the owner or admin
-	//
-	// Selector: verifyOwnerOrAdmin(address) c2282493
-	function verifyOwnerOrAdmin(address user) external view returns (bool);
-
-	// Check that substrate account is the owner or admin of the collection
-	//
-	// @param user account to verify
-	// @return "true" if account is the owner or admin
-	//
-	// Selector: verifyOwnerOrAdminSubstrate(uint256) fe818e40
-	function verifyOwnerOrAdminSubstrate(uint256 user)
-		external
-		view
-		returns (bool);
-
-	// Returns collection type
-	//
-	// @return `Fungible` or `NFT` or `ReFungible`
-	//
-	// Selector: uniqueCollectionType() d34b55b8
-	function uniqueCollectionType() external returns (string memory);
-
-	// Changes collection owner to another account
-	//
-	// @dev Owner can be changed only by current owner
-	// @param newOwner new owner account
-	//
-	// Selector: changeOwner(address) a6f9dae1
-	function changeOwner(address newOwner) external;
-
-	// Changes collection owner to another substrate account
-	//
-	// @dev Owner can be changed only by current owner
-	// @param newOwner new owner substrate account
-	//
-	// Selector: changeOwnerSubstrate(uint256) 337e2c60
-	function changeOwnerSubstrate(uint256 newOwner) external;
-}
-
 // Selector: 41369377
 interface TokenProperties is Dummy, ERC165 {
 	// @notice Set permissions for token property.
@@ -517,6 +327,193 @@
 		returns (bool);
 }
 
+// Selector: f077f83e
+interface Collection is Dummy, ERC165 {
+	// Set collection property.
+	//
+	// @param key Property key.
+	// @param value Propery value.
+	//
+	// Selector: setCollectionProperty(string,bytes) 2f073f66
+	function setCollectionProperty(string memory key, bytes memory value)
+		external;
+
+	// Delete collection property.
+	//
+	// @param key Property key.
+	//
+	// Selector: deleteCollectionProperty(string) 7b7debce
+	function deleteCollectionProperty(string memory key) external;
+
+	// Get collection property.
+	//
+	// @dev Throws error if key not found.
+	//
+	// @param key Property key.
+	// @return bytes The property corresponding to the key.
+	//
+	// Selector: collectionProperty(string) cf24fd6d
+	function collectionProperty(string memory key)
+		external
+		view
+		returns (bytes memory);
+
+	// Set the sponsor of the collection.
+	//
+	// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor.
+	//
+	// @param sponsor Address of the sponsor from whose account funds will be debited for operations with the contract.
+	//
+	// Selector: setCollectionSponsor(address) 7623402e
+	function setCollectionSponsor(address sponsor) external;
+
+	// Collection sponsorship confirmation.
+	//
+	// @dev After setting the sponsor for the collection, it must be confirmed with this function.
+	//
+	// Selector: confirmCollectionSponsorship() 3c50e97a
+	function confirmCollectionSponsorship() external;
+
+	// Set limits for the collection.
+	// @dev Throws error if limit not found.
+	// @param limit Name of the limit. Valid names:
+	// 	"accountTokenOwnershipLimit",
+	// 	"sponsoredDataSize",
+	// 	"sponsoredDataRateLimit",
+	// 	"tokenLimit",
+	// 	"sponsorTransferTimeout",
+	// 	"sponsorApproveTimeout"
+	// @param value Value of the limit.
+	//
+	// Selector: setCollectionLimit(string,uint32) 6a3841db
+	function setCollectionLimit(string memory limit, uint32 value) external;
+
+	// Set limits for the collection.
+	// @dev Throws error if limit not found.
+	// @param limit Name of the limit. Valid names:
+	// 	"ownerCanTransfer",
+	// 	"ownerCanDestroy",
+	// 	"transfersEnabled"
+	// @param value Value of the limit.
+	//
+	// Selector: setCollectionLimit(string,bool) 993b7fba
+	function setCollectionLimit(string memory limit, bool value) external;
+
+	// Get contract address.
+	//
+	// Selector: contractAddress() f6b4dfb4
+	function contractAddress() external view returns (address);
+
+	// Add collection admin by substrate address.
+	// @param new_admin Substrate administrator address.
+	//
+	// Selector: addCollectionAdminSubstrate(uint256) 5730062b
+	function addCollectionAdminSubstrate(uint256 newAdmin) external;
+
+	// Remove collection admin by substrate address.
+	// @param admin Substrate administrator address.
+	//
+	// Selector: removeCollectionAdminSubstrate(uint256) 4048fcf9
+	function removeCollectionAdminSubstrate(uint256 admin) external;
+
+	// Add collection admin.
+	// @param new_admin Address of the added administrator.
+	//
+	// Selector: addCollectionAdmin(address) 92e462c7
+	function addCollectionAdmin(address newAdmin) external;
+
+	// Remove collection admin.
+	//
+	// @param new_admin Address of the removed administrator.
+	//
+	// Selector: removeCollectionAdmin(address) fafd7b42
+	function removeCollectionAdmin(address admin) external;
+
+	// Toggle accessibility of collection nesting.
+	//
+	// @param enable If "true" degenerates to nesting: 'Owner' else to nesting: 'Disabled'
+	//
+	// Selector: setCollectionNesting(bool) 112d4586
+	function setCollectionNesting(bool enable) external;
+
+	// Toggle accessibility of collection nesting.
+	//
+	// @param enable If "true" degenerates to nesting: {OwnerRestricted: [1, 2, 3]} else to nesting: 'Disabled'
+	// @param collections Addresses of collections that will be available for nesting.
+	//
+	// Selector: setCollectionNesting(bool,address[]) 64872396
+	function setCollectionNesting(bool enable, address[] memory collections)
+		external;
+
+	// Set the collection access method.
+	// @param mode Access mode
+	// 	0 for Normal
+	// 	1 for AllowList
+	//
+	// Selector: setCollectionAccess(uint8) 41835d4c
+	function setCollectionAccess(uint8 mode) external;
+
+	// Add the user to the allowed list.
+	//
+	// @param user Address of a trusted user.
+	//
+	// Selector: addToCollectionAllowList(address) 67844fe6
+	function addToCollectionAllowList(address user) external;
+
+	// Remove the user from the allowed list.
+	//
+	// @param user Address of a removed user.
+	//
+	// Selector: removeFromCollectionAllowList(address) 85c51acb
+	function removeFromCollectionAllowList(address user) external;
+
+	// Switch permission for minting.
+	//
+	// @param mode Enable if "true".
+	//
+	// Selector: setCollectionMintMode(bool) 00018e84
+	function setCollectionMintMode(bool mode) external;
+
+	// Check that account is the owner or admin of the collection
+	//
+	// @param user account to verify
+	// @return "true" if account is the owner or admin
+	//
+	// Selector: verifyOwnerOrAdmin(address) c2282493
+	function verifyOwnerOrAdmin(address user) external view returns (bool);
+
+	// Check that substrate account is the owner or admin of the collection
+	//
+	// @param user account to verify
+	// @return "true" if account is the owner or admin
+	//
+	// Selector: verifyOwnerOrAdmin(uint256) a83328e5
+	function verifyOwnerOrAdmin(uint256 user) external view returns (bool);
+
+	// Returns collection type
+	//
+	// @return `Fungible` or `NFT` or `ReFungible`
+	//
+	// Selector: uniqueCollectionType() d34b55b8
+	function uniqueCollectionType() external returns (string memory);
+
+	// Changes collection owner to another account
+	//
+	// @dev Owner can be changed only by current owner
+	// @param newOwner new owner account
+	//
+	// Selector: changeOwner(address) a6f9dae1
+	function changeOwner(address newOwner) external;
+
+	// Changes collection owner to another substrate account
+	//
+	// @dev Owner can be changed only by current owner
+	// @param newOwner new owner substrate account
+	//
+	// Selector: changeOwner(uint256) 924c19f7
+	function changeOwner(uint256 newOwner) external;
+}
+
 interface UniqueNFT is
 	Dummy,
 	ERC165,
modifiedtests/src/eth/api/UniqueRefungible.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueRefungible.sol
+++ b/tests/src/eth/api/UniqueRefungible.sol
@@ -42,196 +42,6 @@
 	event MintingFinished();
 }
 
-// Selector: 07f76b0c
-interface Collection is Dummy, ERC165 {
-	// Set collection property.
-	//
-	// @param key Property key.
-	// @param value Propery value.
-	//
-	// Selector: setCollectionProperty(string,bytes) 2f073f66
-	function setCollectionProperty(string memory key, bytes memory value)
-		external;
-
-	// Delete collection property.
-	//
-	// @param key Property key.
-	//
-	// Selector: deleteCollectionProperty(string) 7b7debce
-	function deleteCollectionProperty(string memory key) external;
-
-	// Get collection property.
-	//
-	// @dev Throws error if key not found.
-	//
-	// @param key Property key.
-	// @return bytes The property corresponding to the key.
-	//
-	// Selector: collectionProperty(string) cf24fd6d
-	function collectionProperty(string memory key)
-		external
-		view
-		returns (bytes memory);
-
-	// Set the sponsor of the collection.
-	//
-	// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor.
-	//
-	// @param sponsor Address of the sponsor from whose account funds will be debited for operations with the contract.
-	//
-	// Selector: setCollectionSponsor(address) 7623402e
-	function setCollectionSponsor(address sponsor) external;
-
-	// Collection sponsorship confirmation.
-	//
-	// @dev After setting the sponsor for the collection, it must be confirmed with this function.
-	//
-	// Selector: confirmCollectionSponsorship() 3c50e97a
-	function confirmCollectionSponsorship() external;
-
-	// Set limits for the collection.
-	// @dev Throws error if limit not found.
-	// @param limit Name of the limit. Valid names:
-	// 	"accountTokenOwnershipLimit",
-	// 	"sponsoredDataSize",
-	// 	"sponsoredDataRateLimit",
-	// 	"tokenLimit",
-	// 	"sponsorTransferTimeout",
-	// 	"sponsorApproveTimeout"
-	// @param value Value of the limit.
-	//
-	// Selector: setCollectionLimit(string,uint32) 6a3841db
-	function setCollectionLimit(string memory limit, uint32 value) external;
-
-	// Set limits for the collection.
-	// @dev Throws error if limit not found.
-	// @param limit Name of the limit. Valid names:
-	// 	"ownerCanTransfer",
-	// 	"ownerCanDestroy",
-	// 	"transfersEnabled"
-	// @param value Value of the limit.
-	//
-	// Selector: setCollectionLimit(string,bool) 993b7fba
-	function setCollectionLimit(string memory limit, bool value) external;
-
-	// Get contract address.
-	//
-	// Selector: contractAddress() f6b4dfb4
-	function contractAddress() external view returns (address);
-
-	// Add collection admin by substrate address.
-	// @param new_admin Substrate administrator address.
-	//
-	// Selector: addCollectionAdminSubstrate(uint256) 5730062b
-	function addCollectionAdminSubstrate(uint256 newAdmin) external;
-
-	// Remove collection admin by substrate address.
-	// @param admin Substrate administrator address.
-	//
-	// Selector: removeCollectionAdminSubstrate(uint256) 4048fcf9
-	function removeCollectionAdminSubstrate(uint256 admin) external;
-
-	// Add collection admin.
-	// @param new_admin Address of the added administrator.
-	//
-	// Selector: addCollectionAdmin(address) 92e462c7
-	function addCollectionAdmin(address newAdmin) external;
-
-	// Remove collection admin.
-	//
-	// @param new_admin Address of the removed administrator.
-	//
-	// Selector: removeCollectionAdmin(address) fafd7b42
-	function removeCollectionAdmin(address admin) external;
-
-	// Toggle accessibility of collection nesting.
-	//
-	// @param enable If "true" degenerates to nesting: 'Owner' else to nesting: 'Disabled'
-	//
-	// Selector: setCollectionNesting(bool) 112d4586
-	function setCollectionNesting(bool enable) external;
-
-	// Toggle accessibility of collection nesting.
-	//
-	// @param enable If "true" degenerates to nesting: {OwnerRestricted: [1, 2, 3]} else to nesting: 'Disabled'
-	// @param collections Addresses of collections that will be available for nesting.
-	//
-	// Selector: setCollectionNesting(bool,address[]) 64872396
-	function setCollectionNesting(bool enable, address[] memory collections)
-		external;
-
-	// Set the collection access method.
-	// @param mode Access mode
-	// 	0 for Normal
-	// 	1 for AllowList
-	//
-	// Selector: setCollectionAccess(uint8) 41835d4c
-	function setCollectionAccess(uint8 mode) external;
-
-	// Add the user to the allowed list.
-	//
-	// @param user Address of a trusted user.
-	//
-	// Selector: addToCollectionAllowList(address) 67844fe6
-	function addToCollectionAllowList(address user) external;
-
-	// Remove the user from the allowed list.
-	//
-	// @param user Address of a removed user.
-	//
-	// Selector: removeFromCollectionAllowList(address) 85c51acb
-	function removeFromCollectionAllowList(address user) external;
-
-	// Switch permission for minting.
-	//
-	// @param mode Enable if "true".
-	//
-	// Selector: setCollectionMintMode(bool) 00018e84
-	function setCollectionMintMode(bool mode) external;
-
-	// Check that account is the owner or admin of the collection
-	//
-	// @param user account to verify
-	// @return "true" if account is the owner or admin
-	//
-	// Selector: verifyOwnerOrAdmin(address) c2282493
-	function verifyOwnerOrAdmin(address user) external view returns (bool);
-
-	// Check that substrate account is the owner or admin of the collection
-	//
-	// @param user account to verify
-	// @return "true" if account is the owner or admin
-	//
-	// Selector: verifyOwnerOrAdminSubstrate(uint256) fe818e40
-	function verifyOwnerOrAdminSubstrate(uint256 user)
-		external
-		view
-		returns (bool);
-
-	// Returns collection type
-	//
-	// @return `Fungible` or `NFT` or `ReFungible`
-	//
-	// Selector: uniqueCollectionType() d34b55b8
-	function uniqueCollectionType() external returns (string memory);
-
-	// Changes collection owner to another account
-	//
-	// @dev Owner can be changed only by current owner
-	// @param newOwner new owner account
-	//
-	// Selector: changeOwner(address) a6f9dae1
-	function changeOwner(address newOwner) external;
-
-	// Changes collection owner to another substrate account
-	//
-	// @dev Owner can be changed only by current owner
-	// @param newOwner new owner substrate account
-	//
-	// Selector: changeOwnerSubstrate(uint256) 337e2c60
-	function changeOwnerSubstrate(uint256 newOwner) external;
-}
-
 // Selector: 41369377
 interface TokenProperties is Dummy, ERC165 {
 	// @notice Set permissions for token property.
@@ -527,6 +337,193 @@
 		returns (address);
 }
 
+// Selector: f077f83e
+interface Collection is Dummy, ERC165 {
+	// Set collection property.
+	//
+	// @param key Property key.
+	// @param value Propery value.
+	//
+	// Selector: setCollectionProperty(string,bytes) 2f073f66
+	function setCollectionProperty(string memory key, bytes memory value)
+		external;
+
+	// Delete collection property.
+	//
+	// @param key Property key.
+	//
+	// Selector: deleteCollectionProperty(string) 7b7debce
+	function deleteCollectionProperty(string memory key) external;
+
+	// Get collection property.
+	//
+	// @dev Throws error if key not found.
+	//
+	// @param key Property key.
+	// @return bytes The property corresponding to the key.
+	//
+	// Selector: collectionProperty(string) cf24fd6d
+	function collectionProperty(string memory key)
+		external
+		view
+		returns (bytes memory);
+
+	// Set the sponsor of the collection.
+	//
+	// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor.
+	//
+	// @param sponsor Address of the sponsor from whose account funds will be debited for operations with the contract.
+	//
+	// Selector: setCollectionSponsor(address) 7623402e
+	function setCollectionSponsor(address sponsor) external;
+
+	// Collection sponsorship confirmation.
+	//
+	// @dev After setting the sponsor for the collection, it must be confirmed with this function.
+	//
+	// Selector: confirmCollectionSponsorship() 3c50e97a
+	function confirmCollectionSponsorship() external;
+
+	// Set limits for the collection.
+	// @dev Throws error if limit not found.
+	// @param limit Name of the limit. Valid names:
+	// 	"accountTokenOwnershipLimit",
+	// 	"sponsoredDataSize",
+	// 	"sponsoredDataRateLimit",
+	// 	"tokenLimit",
+	// 	"sponsorTransferTimeout",
+	// 	"sponsorApproveTimeout"
+	// @param value Value of the limit.
+	//
+	// Selector: setCollectionLimit(string,uint32) 6a3841db
+	function setCollectionLimit(string memory limit, uint32 value) external;
+
+	// Set limits for the collection.
+	// @dev Throws error if limit not found.
+	// @param limit Name of the limit. Valid names:
+	// 	"ownerCanTransfer",
+	// 	"ownerCanDestroy",
+	// 	"transfersEnabled"
+	// @param value Value of the limit.
+	//
+	// Selector: setCollectionLimit(string,bool) 993b7fba
+	function setCollectionLimit(string memory limit, bool value) external;
+
+	// Get contract address.
+	//
+	// Selector: contractAddress() f6b4dfb4
+	function contractAddress() external view returns (address);
+
+	// Add collection admin by substrate address.
+	// @param new_admin Substrate administrator address.
+	//
+	// Selector: addCollectionAdminSubstrate(uint256) 5730062b
+	function addCollectionAdminSubstrate(uint256 newAdmin) external;
+
+	// Remove collection admin by substrate address.
+	// @param admin Substrate administrator address.
+	//
+	// Selector: removeCollectionAdminSubstrate(uint256) 4048fcf9
+	function removeCollectionAdminSubstrate(uint256 admin) external;
+
+	// Add collection admin.
+	// @param new_admin Address of the added administrator.
+	//
+	// Selector: addCollectionAdmin(address) 92e462c7
+	function addCollectionAdmin(address newAdmin) external;
+
+	// Remove collection admin.
+	//
+	// @param new_admin Address of the removed administrator.
+	//
+	// Selector: removeCollectionAdmin(address) fafd7b42
+	function removeCollectionAdmin(address admin) external;
+
+	// Toggle accessibility of collection nesting.
+	//
+	// @param enable If "true" degenerates to nesting: 'Owner' else to nesting: 'Disabled'
+	//
+	// Selector: setCollectionNesting(bool) 112d4586
+	function setCollectionNesting(bool enable) external;
+
+	// Toggle accessibility of collection nesting.
+	//
+	// @param enable If "true" degenerates to nesting: {OwnerRestricted: [1, 2, 3]} else to nesting: 'Disabled'
+	// @param collections Addresses of collections that will be available for nesting.
+	//
+	// Selector: setCollectionNesting(bool,address[]) 64872396
+	function setCollectionNesting(bool enable, address[] memory collections)
+		external;
+
+	// Set the collection access method.
+	// @param mode Access mode
+	// 	0 for Normal
+	// 	1 for AllowList
+	//
+	// Selector: setCollectionAccess(uint8) 41835d4c
+	function setCollectionAccess(uint8 mode) external;
+
+	// Add the user to the allowed list.
+	//
+	// @param user Address of a trusted user.
+	//
+	// Selector: addToCollectionAllowList(address) 67844fe6
+	function addToCollectionAllowList(address user) external;
+
+	// Remove the user from the allowed list.
+	//
+	// @param user Address of a removed user.
+	//
+	// Selector: removeFromCollectionAllowList(address) 85c51acb
+	function removeFromCollectionAllowList(address user) external;
+
+	// Switch permission for minting.
+	//
+	// @param mode Enable if "true".
+	//
+	// Selector: setCollectionMintMode(bool) 00018e84
+	function setCollectionMintMode(bool mode) external;
+
+	// Check that account is the owner or admin of the collection
+	//
+	// @param user account to verify
+	// @return "true" if account is the owner or admin
+	//
+	// Selector: verifyOwnerOrAdmin(address) c2282493
+	function verifyOwnerOrAdmin(address user) external view returns (bool);
+
+	// Check that substrate account is the owner or admin of the collection
+	//
+	// @param user account to verify
+	// @return "true" if account is the owner or admin
+	//
+	// Selector: verifyOwnerOrAdmin(uint256) a83328e5
+	function verifyOwnerOrAdmin(uint256 user) external view returns (bool);
+
+	// Returns collection type
+	//
+	// @return `Fungible` or `NFT` or `ReFungible`
+	//
+	// Selector: uniqueCollectionType() d34b55b8
+	function uniqueCollectionType() external returns (string memory);
+
+	// Changes collection owner to another account
+	//
+	// @dev Owner can be changed only by current owner
+	// @param newOwner new owner account
+	//
+	// Selector: changeOwner(address) a6f9dae1
+	function changeOwner(address newOwner) external;
+
+	// Changes collection owner to another substrate account
+	//
+	// @dev Owner can be changed only by current owner
+	// @param newOwner new owner substrate account
+	//
+	// Selector: changeOwner(uint256) 924c19f7
+	function changeOwner(uint256 newOwner) external;
+}
+
 interface UniqueRefungible is
 	Dummy,
 	ERC165,
modifiedtests/src/eth/collectionAdmin.test.tsdiffbeforeafterboth
--- a/tests/src/eth/collectionAdmin.test.ts
+++ b/tests/src/eth/collectionAdmin.test.ts
@@ -373,11 +373,11 @@
     const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
   
     expect(await collectionEvm.methods.verifyOwnerOrAdmin(owner).call()).to.be.true;
-    expect(await collectionEvm.methods.verifyOwnerOrAdminSubstrate(newOwner.addressRaw).call()).to.be.false;
-    await collectionEvm.methods.changeOwnerSubstrate(newOwner.addressRaw).send();
+    expect(await collectionEvm.methods['verifyOwnerOrAdmin(uint256)'](newOwner.addressRaw).call()).to.be.false;
+    await collectionEvm.methods['changeOwner(uint256)'](newOwner.addressRaw).send();
   
     expect(await collectionEvm.methods.verifyOwnerOrAdmin(owner).call()).to.be.false;
-    expect(await collectionEvm.methods.verifyOwnerOrAdminSubstrate(newOwner.addressRaw).call()).to.be.true;
+    expect(await collectionEvm.methods['verifyOwnerOrAdmin(uint256)'](newOwner.addressRaw).call()).to.be.true;
   });
 
   itWeb3('change owner call fee', async ({web3, api, privateKeyWrapper}) => {
@@ -390,7 +390,7 @@
     const {collectionIdAddress} = await getCollectionAddressFromResult(api, result);
     const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
 
-    const cost = await recordEthFee(api, owner, () => collectionEvm.methods.changeOwnerSubstrate(newOwner.addressRaw).send());
+    const cost = await recordEthFee(api, owner, () => collectionEvm.methods['changeOwner(uint256)'](newOwner.addressRaw).send());
     expect(cost < BigInt(0.2 * Number(UNIQUE)));
     expect(cost > 0);
   });
@@ -406,7 +406,7 @@
     const {collectionIdAddress} = await getCollectionAddressFromResult(api, result);
     const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
   
-    await expect(collectionEvm.methods.changeOwnerSubstrate(newOwner.addressRaw).send({from: otherReceiver})).to.be.rejected;
-    expect(await collectionEvm.methods.verifyOwnerOrAdminSubstrate(newOwner.addressRaw).call()).to.be.false;
+    await expect(collectionEvm.methods['changeOwner(uint256)'](newOwner.addressRaw).send({from: otherReceiver})).to.be.rejected;
+    expect(await collectionEvm.methods['verifyOwnerOrAdmin(uint256)'](newOwner.addressRaw).call()).to.be.false;
   });
 });
\ No newline at end of file
modifiedtests/src/eth/fungibleAbi.jsondiffbeforeafterboth
--- a/tests/src/eth/fungibleAbi.json
+++ b/tests/src/eth/fungibleAbi.json
@@ -117,7 +117,7 @@
   },
   {
     "inputs": [
-      { "internalType": "address", "name": "newOwner", "type": "address" }
+      { "internalType": "uint256", "name": "newOwner", "type": "uint256" }
     ],
     "name": "changeOwner",
     "outputs": [],
@@ -126,9 +126,9 @@
   },
   {
     "inputs": [
-      { "internalType": "uint256", "name": "newOwner", "type": "uint256" }
+      { "internalType": "address", "name": "newOwner", "type": "address" }
     ],
-    "name": "changeOwnerSubstrate",
+    "name": "changeOwner",
     "outputs": [],
     "stateMutability": "nonpayable",
     "type": "function"
@@ -329,7 +329,7 @@
   },
   {
     "inputs": [
-      { "internalType": "address", "name": "user", "type": "address" }
+      { "internalType": "uint256", "name": "user", "type": "uint256" }
     ],
     "name": "verifyOwnerOrAdmin",
     "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
@@ -338,9 +338,9 @@
   },
   {
     "inputs": [
-      { "internalType": "uint256", "name": "user", "type": "uint256" }
+      { "internalType": "address", "name": "user", "type": "address" }
     ],
-    "name": "verifyOwnerOrAdminSubstrate",
+    "name": "verifyOwnerOrAdmin",
     "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
     "stateMutability": "view",
     "type": "function"
modifiedtests/src/eth/nonFungibleAbi.jsondiffbeforeafterboth
--- a/tests/src/eth/nonFungibleAbi.json
+++ b/tests/src/eth/nonFungibleAbi.json
@@ -147,7 +147,7 @@
   },
   {
     "inputs": [
-      { "internalType": "address", "name": "newOwner", "type": "address" }
+      { "internalType": "uint256", "name": "newOwner", "type": "uint256" }
     ],
     "name": "changeOwner",
     "outputs": [],
@@ -156,9 +156,9 @@
   },
   {
     "inputs": [
-      { "internalType": "uint256", "name": "newOwner", "type": "uint256" }
+      { "internalType": "address", "name": "newOwner", "type": "address" }
     ],
-    "name": "changeOwnerSubstrate",
+    "name": "changeOwner",
     "outputs": [],
     "stateMutability": "nonpayable",
     "type": "function"
@@ -554,7 +554,7 @@
   },
   {
     "inputs": [
-      { "internalType": "address", "name": "user", "type": "address" }
+      { "internalType": "uint256", "name": "user", "type": "uint256" }
     ],
     "name": "verifyOwnerOrAdmin",
     "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
@@ -563,9 +563,9 @@
   },
   {
     "inputs": [
-      { "internalType": "uint256", "name": "user", "type": "uint256" }
+      { "internalType": "address", "name": "user", "type": "address" }
     ],
-    "name": "verifyOwnerOrAdminSubstrate",
+    "name": "verifyOwnerOrAdmin",
     "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
     "stateMutability": "view",
     "type": "function"
modifiedtests/src/eth/reFungibleAbi.jsondiffbeforeafterboth
--- a/tests/src/eth/reFungibleAbi.json
+++ b/tests/src/eth/reFungibleAbi.json
@@ -147,7 +147,7 @@
   },
   {
     "inputs": [
-      { "internalType": "address", "name": "newOwner", "type": "address" }
+      { "internalType": "uint256", "name": "newOwner", "type": "uint256" }
     ],
     "name": "changeOwner",
     "outputs": [],
@@ -156,9 +156,9 @@
   },
   {
     "inputs": [
-      { "internalType": "uint256", "name": "newOwner", "type": "uint256" }
+      { "internalType": "address", "name": "newOwner", "type": "address" }
     ],
-    "name": "changeOwnerSubstrate",
+    "name": "changeOwner",
     "outputs": [],
     "stateMutability": "nonpayable",
     "type": "function"
@@ -563,7 +563,7 @@
   },
   {
     "inputs": [
-      { "internalType": "address", "name": "user", "type": "address" }
+      { "internalType": "uint256", "name": "user", "type": "uint256" }
     ],
     "name": "verifyOwnerOrAdmin",
     "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
@@ -572,9 +572,9 @@
   },
   {
     "inputs": [
-      { "internalType": "uint256", "name": "user", "type": "uint256" }
+      { "internalType": "address", "name": "user", "type": "address" }
     ],
-    "name": "verifyOwnerOrAdminSubstrate",
+    "name": "verifyOwnerOrAdmin",
     "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
     "stateMutability": "view",
     "type": "function"