git.delta.rocks / unique-network / refs/commits / 9e7b960e54f6

difftreelog

chore generate stubs & fix docs

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

13 files changed

modifiedpallets/common/src/eth.rsdiffbeforeafterboth
--- a/pallets/common/src/eth.rs
+++ b/pallets/common/src/eth.rs
@@ -147,29 +147,41 @@
 	/// How many tokens can a user have on one account.
 	#[default]
 	AccountTokenOwnership,
+
 	/// How many bytes of data are available for sponsorship.
 	SponsoredDataSize,
+
 	/// In any case, chain default: [`SponsoringRateLimit::SponsoringDisabled`]
 	SponsoredDataRateLimit,
+
 	/// How many tokens can be mined into this collection.
 	TokenLimit,
+
 	/// Timeouts for transfer sponsoring.
 	SponsorTransferTimeout,
+
 	/// Timeout for sponsoring an approval in passed blocks.
 	SponsorApproveTimeout,
+
 	/// Whether the collection owner of the collection can send tokens (which belong to other users).
 	OwnerCanTransfer,
+
 	/// Can the collection owner burn other people's tokens.
 	OwnerCanDestroy,
+
 	/// Is it possible to send tokens from this collection between users.
 	TransferEnabled,
 }
+/// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) fields as an enumeration.
 #[derive(Default, Debug, Clone, Copy, AbiCoder)]
 #[repr(u8)]
 pub enum CollectionPermissions {
+	/// Owner of token can nest tokens under it.
 	#[default]
-	CollectionAdmin,
 	TokenOwner,
+
+	/// Admin of token collection can nest tokens under token.
+	CollectionAdmin,
 }
 
 /// Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) fields as an enumeration.
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
@@ -173,10 +173,10 @@
 	/// Return `false` if a limit not set.
 	/// @dev EVM selector for this function is: 0xf63bc572,
 	///  or in textual repr: collectionLimits()
-	function collectionLimits() public view returns (Tuple20[] memory) {
+	function collectionLimits() public view returns (Tuple23[] memory) {
 		require(false, stub_error);
 		dummy;
-		return new Tuple20[](0);
+		return new Tuple23[](0);
 	}
 
 	/// Set limits for the collection.
@@ -284,33 +284,19 @@
 	/// Returns nesting for a collection
 	/// @dev EVM selector for this function is: 0x22d25bfe,
 	///  or in textual repr: collectionNestingRestrictedCollectionIds()
-<<<<<<< HEAD
-	function collectionNestingRestrictedCollectionIds() public view returns (Tuple26 memory) {
+	function collectionNestingRestrictedCollectionIds() public view returns (Tuple29 memory) {
 		require(false, stub_error);
 		dummy;
-		return Tuple26(false, new uint256[](0));
-=======
-	function collectionNestingRestrictedCollectionIds() public view returns (Tuple24 memory) {
-		require(false, stub_error);
-		dummy;
-		return Tuple24(false, new uint256[](0));
->>>>>>> 09f69700... chore: generate stubs
+		return Tuple29(false, new uint256[](0));
 	}
 
 	/// Returns permissions for a collection
 	/// @dev EVM selector for this function is: 0x5b2eaf4b,
 	///  or in textual repr: collectionNestingPermissions()
-<<<<<<< HEAD
-	function collectionNestingPermissions() public view returns (Tuple29[] memory) {
+	function collectionNestingPermissions() public view returns (Tuple32[] memory) {
 		require(false, stub_error);
 		dummy;
-		return new Tuple29[](0);
-=======
-	function collectionNestingPermissions() public view returns (Tuple27[] memory) {
-		require(false, stub_error);
-		dummy;
-		return new Tuple27[](0);
->>>>>>> 09f69700... chore: generate stubs
+		return new Tuple32[](0);
 	}
 
 	/// Set the collection access method.
@@ -490,21 +476,13 @@
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple29 {
-=======
-struct Tuple27 {
->>>>>>> 09f69700... chore: generate stubs
+struct Tuple32 {
 	CollectionPermissions field_0;
 	bool field_1;
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple26 {
-=======
-struct Tuple24 {
->>>>>>> 09f69700... chore: generate stubs
+struct Tuple29 {
 	bool field_0;
 	uint256[] field_1;
 }
@@ -532,7 +510,7 @@
 }
 
 /// @dev anonymous struct
-struct Tuple20 {
+struct Tuple23 {
 	CollectionLimits field_0;
 	bool field_1;
 	uint256 field_2;
modifiedpallets/nonfungible/src/stubs/UniqueNFT.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/nonfungible/src/stubs/UniqueNFT.soldiffbeforeafterboth
--- a/pallets/nonfungible/src/stubs/UniqueNFT.sol
+++ b/pallets/nonfungible/src/stubs/UniqueNFT.sol
@@ -42,11 +42,7 @@
 	/// @param permissions Permissions for keys.
 	/// @dev EVM selector for this function is: 0xbd92983a,
 	///  or in textual repr: setTokenPropertyPermissions((string,(uint8,bool)[])[])
-<<<<<<< HEAD
-	function setTokenPropertyPermissions(Tuple59[] memory permissions) public {
-=======
-	function setTokenPropertyPermissions(Tuple56[] memory permissions) public {
->>>>>>> 9e929f90... chore: generate stubs & types
+	function setTokenPropertyPermissions(Tuple61[] memory permissions) public {
 		require(false, stub_error);
 		permissions;
 		dummy = 0;
@@ -55,17 +51,10 @@
 	/// @notice Get permissions for token properties.
 	/// @dev EVM selector for this function is: 0xf23d7790,
 	///  or in textual repr: tokenPropertyPermissions()
-<<<<<<< HEAD
-	function tokenPropertyPermissions() public view returns (Tuple59[] memory) {
-		require(false, stub_error);
-		dummy;
-		return new Tuple59[](0);
-=======
-	function tokenPropertyPermissions() public view returns (Tuple56[] memory) {
+	function tokenPropertyPermissions() public view returns (Tuple61[] memory) {
 		require(false, stub_error);
 		dummy;
-		return new Tuple56[](0);
->>>>>>> 9e929f90... chore: generate stubs & types
+		return new Tuple61[](0);
 	}
 
 	// /// @notice Set token property value.
@@ -155,23 +144,13 @@
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple59 {
+struct Tuple61 {
 	string field_0;
-	Tuple57[] field_1;
+	Tuple59[] field_1;
 }
 
 /// @dev anonymous struct
-struct Tuple57 {
-=======
-struct Tuple56 {
-	string field_0;
-	Tuple54[] field_1;
-}
-
-/// @dev anonymous struct
-struct Tuple54 {
->>>>>>> 9e929f90... chore: generate stubs & types
+struct Tuple59 {
 	EthTokenPermissions field_0;
 	bool field_1;
 }
@@ -332,10 +311,10 @@
 	/// Return `false` if a limit not set.
 	/// @dev EVM selector for this function is: 0xf63bc572,
 	///  or in textual repr: collectionLimits()
-	function collectionLimits() public view returns (Tuple33[] memory) {
+	function collectionLimits() public view returns (Tuple35[] memory) {
 		require(false, stub_error);
 		dummy;
-		return new Tuple33[](0);
+		return new Tuple35[](0);
 	}
 
 	/// Set limits for the collection.
@@ -443,33 +422,19 @@
 	/// Returns nesting for a collection
 	/// @dev EVM selector for this function is: 0x22d25bfe,
 	///  or in textual repr: collectionNestingRestrictedCollectionIds()
-<<<<<<< HEAD
-	function collectionNestingRestrictedCollectionIds() public view returns (Tuple39 memory) {
+	function collectionNestingRestrictedCollectionIds() public view returns (Tuple41 memory) {
 		require(false, stub_error);
 		dummy;
-		return Tuple39(false, new uint256[](0));
-=======
-	function collectionNestingRestrictedCollectionIds() public view returns (Tuple36 memory) {
-		require(false, stub_error);
-		dummy;
-		return Tuple36(false, new uint256[](0));
->>>>>>> 09f69700... chore: generate stubs
+		return Tuple41(false, new uint256[](0));
 	}
 
 	/// Returns permissions for a collection
 	/// @dev EVM selector for this function is: 0x5b2eaf4b,
 	///  or in textual repr: collectionNestingPermissions()
-<<<<<<< HEAD
-	function collectionNestingPermissions() public view returns (Tuple42[] memory) {
-		require(false, stub_error);
-		dummy;
-		return new Tuple42[](0);
-=======
-	function collectionNestingPermissions() public view returns (Tuple39[] memory) {
+	function collectionNestingPermissions() public view returns (Tuple44[] memory) {
 		require(false, stub_error);
 		dummy;
-		return new Tuple39[](0);
->>>>>>> 09f69700... chore: generate stubs
+		return new Tuple44[](0);
 	}
 
 	/// Set the collection access method.
@@ -649,26 +614,17 @@
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple42 {
-=======
-struct Tuple39 {
->>>>>>> 09f69700... chore: generate stubs
+struct Tuple44 {
 	CollectionPermissions field_0;
 	bool field_1;
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple39 {
-=======
-struct Tuple36 {
->>>>>>> 09f69700... chore: generate stubs
+struct Tuple41 {
 	bool field_0;
 	uint256[] field_1;
 }
 
-<<<<<<< HEAD
 /// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM.
 enum CollectionLimits {
 	/// @dev How many tokens can a user have on one account.
@@ -692,22 +648,12 @@
 }
 
 /// @dev anonymous struct
-struct Tuple33 {
+struct Tuple35 {
 	CollectionLimits field_0;
 	bool field_1;
 	uint256 field_2;
 }
 
-/// @dev anonymous struct
-struct Tuple32 {
-	address field_0;
-	uint256 field_1;
-}
-
-=======
->>>>>>> 0bf15e6f... fixed tests&tuple instead of struct, refactored `refungible` pallet
-=======
->>>>>>> 09f69700... chore: generate stubs
 /// @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 /// @dev See https://eips.ethereum.org/EIPS/eip-721
 /// @dev the ERC-165 identifier for this interface is 0x5b5e139f
modifiedpallets/refungible/src/stubs/UniqueRefungible.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/refungible/src/stubs/UniqueRefungible.soldiffbeforeafterboth
--- a/pallets/refungible/src/stubs/UniqueRefungible.sol
+++ b/pallets/refungible/src/stubs/UniqueRefungible.sol
@@ -42,11 +42,7 @@
 	/// @param permissions Permissions for keys.
 	/// @dev EVM selector for this function is: 0xbd92983a,
 	///  or in textual repr: setTokenPropertyPermissions((string,(uint8,bool)[])[])
-<<<<<<< HEAD
-	function setTokenPropertyPermissions(Tuple58[] memory permissions) public {
-=======
-	function setTokenPropertyPermissions(Tuple55[] memory permissions) public {
->>>>>>> 9e929f90... chore: generate stubs & types
+	function setTokenPropertyPermissions(Tuple60[] memory permissions) public {
 		require(false, stub_error);
 		permissions;
 		dummy = 0;
@@ -55,17 +51,10 @@
 	/// @notice Get permissions for token properties.
 	/// @dev EVM selector for this function is: 0xf23d7790,
 	///  or in textual repr: tokenPropertyPermissions()
-<<<<<<< HEAD
-	function tokenPropertyPermissions() public view returns (Tuple58[] memory) {
-		require(false, stub_error);
-		dummy;
-		return new Tuple58[](0);
-=======
-	function tokenPropertyPermissions() public view returns (Tuple55[] memory) {
+	function tokenPropertyPermissions() public view returns (Tuple60[] memory) {
 		require(false, stub_error);
 		dummy;
-		return new Tuple55[](0);
->>>>>>> 9e929f90... chore: generate stubs & types
+		return new Tuple60[](0);
 	}
 
 	// /// @notice Set token property value.
@@ -155,23 +144,13 @@
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple58 {
-	string field_0;
-	Tuple56[] field_1;
-}
-
-/// @dev anonymous struct
-struct Tuple56 {
-=======
-struct Tuple55 {
+struct Tuple60 {
 	string field_0;
-	Tuple53[] field_1;
+	Tuple58[] field_1;
 }
 
 /// @dev anonymous struct
-struct Tuple53 {
->>>>>>> 9e929f90... chore: generate stubs & types
+struct Tuple58 {
 	EthTokenPermissions field_0;
 	bool field_1;
 }
@@ -332,10 +311,10 @@
 	/// Return `false` if a limit not set.
 	/// @dev EVM selector for this function is: 0xf63bc572,
 	///  or in textual repr: collectionLimits()
-	function collectionLimits() public view returns (Tuple32[] memory) {
+	function collectionLimits() public view returns (Tuple34[] memory) {
 		require(false, stub_error);
 		dummy;
-		return new Tuple32[](0);
+		return new Tuple34[](0);
 	}
 
 	/// Set limits for the collection.
@@ -443,33 +422,19 @@
 	/// Returns nesting for a collection
 	/// @dev EVM selector for this function is: 0x22d25bfe,
 	///  or in textual repr: collectionNestingRestrictedCollectionIds()
-<<<<<<< HEAD
-	function collectionNestingRestrictedCollectionIds() public view returns (Tuple38 memory) {
+	function collectionNestingRestrictedCollectionIds() public view returns (Tuple40 memory) {
 		require(false, stub_error);
 		dummy;
-		return Tuple38(false, new uint256[](0));
-=======
-	function collectionNestingRestrictedCollectionIds() public view returns (Tuple35 memory) {
-		require(false, stub_error);
-		dummy;
-		return Tuple35(false, new uint256[](0));
->>>>>>> 09f69700... chore: generate stubs
+		return Tuple40(false, new uint256[](0));
 	}
 
 	/// Returns permissions for a collection
 	/// @dev EVM selector for this function is: 0x5b2eaf4b,
 	///  or in textual repr: collectionNestingPermissions()
-<<<<<<< HEAD
-	function collectionNestingPermissions() public view returns (Tuple41[] memory) {
-		require(false, stub_error);
-		dummy;
-		return new Tuple41[](0);
-=======
-	function collectionNestingPermissions() public view returns (Tuple38[] memory) {
+	function collectionNestingPermissions() public view returns (Tuple43[] memory) {
 		require(false, stub_error);
 		dummy;
-		return new Tuple38[](0);
->>>>>>> 09f69700... chore: generate stubs
+		return new Tuple43[](0);
 	}
 
 	/// Set the collection access method.
@@ -649,26 +614,17 @@
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple41 {
-=======
-struct Tuple38 {
->>>>>>> 09f69700... chore: generate stubs
+struct Tuple43 {
 	CollectionPermissions field_0;
 	bool field_1;
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple38 {
-=======
-struct Tuple35 {
->>>>>>> 09f69700... chore: generate stubs
+struct Tuple40 {
 	bool field_0;
 	uint256[] field_1;
 }
 
-<<<<<<< HEAD
 /// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM.
 enum CollectionLimits {
 	/// @dev How many tokens can a user have on one account.
@@ -692,20 +648,12 @@
 }
 
 /// @dev anonymous struct
-struct Tuple32 {
+struct Tuple34 {
 	CollectionLimits field_0;
 	bool field_1;
 	uint256 field_2;
-}
-
-/// @dev anonymous struct
-struct Tuple31 {
-	address field_0;
-	uint256 field_1;
 }
 
-=======
->>>>>>> 09f69700... chore: generate stubs
 /// @dev the ERC-165 identifier for this interface is 0x5b5e139f
 contract ERC721Metadata is Dummy, ERC165 {
 	// /// @notice A descriptive name for a collection of NFTs in this contract
modifiedtests/src/eth/abi/fungible.jsondiffbeforeafterboth
before · tests/src/eth/abi/fungible.json
1[2  {3    "anonymous": false,4    "inputs": [5      {6        "indexed": true,7        "internalType": "address",8        "name": "owner",9        "type": "address"10      },11      {12        "indexed": true,13        "internalType": "address",14        "name": "spender",15        "type": "address"16      },17      {18        "indexed": false,19        "internalType": "uint256",20        "name": "value",21        "type": "uint256"22      }23    ],24    "name": "Approval",25    "type": "event"26  },27  {28    "anonymous": false,29    "inputs": [30      {31        "indexed": true,32        "internalType": "address",33        "name": "from",34        "type": "address"35      },36      {37        "indexed": true,38        "internalType": "address",39        "name": "to",40        "type": "address"41      },42      {43        "indexed": false,44        "internalType": "uint256",45        "name": "value",46        "type": "uint256"47      }48    ],49    "name": "Transfer",50    "type": "event"51  },52  {53    "inputs": [54      {55        "components": [56          { "internalType": "address", "name": "eth", "type": "address" },57          { "internalType": "uint256", "name": "sub", "type": "uint256" }58        ],59        "internalType": "struct EthCrossAccount",60        "name": "newAdmin",61        "type": "tuple"62      }63    ],64    "name": "addCollectionAdminCross",65    "outputs": [],66    "stateMutability": "nonpayable",67    "type": "function"68  },69  {70    "inputs": [71      {72        "components": [73          { "internalType": "address", "name": "eth", "type": "address" },74          { "internalType": "uint256", "name": "sub", "type": "uint256" }75        ],76        "internalType": "struct EthCrossAccount",77        "name": "user",78        "type": "tuple"79      }80    ],81    "name": "addToCollectionAllowListCross",82    "outputs": [],83    "stateMutability": "nonpayable",84    "type": "function"85  },86  {87    "inputs": [88      { "internalType": "address", "name": "owner", "type": "address" },89      { "internalType": "address", "name": "spender", "type": "address" }90    ],91    "name": "allowance",92    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],93    "stateMutability": "view",94    "type": "function"95  },96  {97    "inputs": [98      {99        "components": [100          { "internalType": "address", "name": "eth", "type": "address" },101          { "internalType": "uint256", "name": "sub", "type": "uint256" }102        ],103        "internalType": "struct EthCrossAccount",104        "name": "user",105        "type": "tuple"106      }107    ],108    "name": "allowlistedCross",109    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],110    "stateMutability": "view",111    "type": "function"112  },113  {114    "inputs": [115      { "internalType": "address", "name": "spender", "type": "address" },116      { "internalType": "uint256", "name": "amount", "type": "uint256" }117    ],118    "name": "approve",119    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],120    "stateMutability": "nonpayable",121    "type": "function"122  },123  {124    "inputs": [125      {126        "components": [127          { "internalType": "address", "name": "eth", "type": "address" },128          { "internalType": "uint256", "name": "sub", "type": "uint256" }129        ],130        "internalType": "struct EthCrossAccount",131        "name": "spender",132        "type": "tuple"133      },134      { "internalType": "uint256", "name": "amount", "type": "uint256" }135    ],136    "name": "approveCross",137    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],138    "stateMutability": "nonpayable",139    "type": "function"140  },141  {142    "inputs": [143      { "internalType": "address", "name": "owner", "type": "address" }144    ],145    "name": "balanceOf",146    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],147    "stateMutability": "view",148    "type": "function"149  },150  {151    "inputs": [152      {153        "components": [154          { "internalType": "address", "name": "eth", "type": "address" },155          { "internalType": "uint256", "name": "sub", "type": "uint256" }156        ],157        "internalType": "struct EthCrossAccount",158        "name": "from",159        "type": "tuple"160      },161      { "internalType": "uint256", "name": "amount", "type": "uint256" }162    ],163    "name": "burnFromCross",164    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],165    "stateMutability": "nonpayable",166    "type": "function"167  },168  {169    "inputs": [170      {171        "components": [172          { "internalType": "address", "name": "eth", "type": "address" },173          { "internalType": "uint256", "name": "sub", "type": "uint256" }174        ],175        "internalType": "struct EthCrossAccount",176        "name": "newOwner",177        "type": "tuple"178      }179    ],180    "name": "changeCollectionOwnerCross",181    "outputs": [],182    "stateMutability": "nonpayable",183    "type": "function"184  },185  {186    "inputs": [],187    "name": "collectionAdmins",188    "outputs": [189      {190        "components": [191          { "internalType": "address", "name": "eth", "type": "address" },192          { "internalType": "uint256", "name": "sub", "type": "uint256" }193        ],194        "internalType": "struct EthCrossAccount[]",195        "name": "",196        "type": "tuple[]"197      }198    ],199    "stateMutability": "view",200    "type": "function"201  },202  {203    "inputs": [],204    "name": "collectionHelperAddress",205    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],206    "stateMutability": "view",207    "type": "function"208  },209  {210    "inputs": [],211    "name": "collectionLimits",212    "outputs": [213      {214        "components": [215          {216            "internalType": "enum CollectionLimits",217            "name": "field_0",218            "type": "uint8"219          },220          { "internalType": "bool", "name": "field_1", "type": "bool" },221          { "internalType": "uint256", "name": "field_2", "type": "uint256" }222        ],223        "internalType": "struct Tuple20[]",224        "name": "",225        "type": "tuple[]"226      }227    ],228    "stateMutability": "view",229    "type": "function"230  },231  {232    "inputs": [],233    "name": "collectionNestingPermissions",234    "outputs": [235      {236        "components": [237          {238            "internalType": "enum CollectionPermissions",239            "name": "field_0",240            "type": "uint8"241          },242          { "internalType": "bool", "name": "field_1", "type": "bool" }243        ],244<<<<<<< HEAD245        "internalType": "struct Tuple29[]",246=======247        "internalType": "struct Tuple27[]",248>>>>>>> 09f69700... chore: generate stubs249        "name": "",250        "type": "tuple[]"251      }252    ],253    "stateMutability": "view",254    "type": "function"255  },256  {257    "inputs": [],258    "name": "collectionNestingRestrictedCollectionIds",259    "outputs": [260      {261        "components": [262          { "internalType": "bool", "name": "field_0", "type": "bool" },263          {264            "internalType": "uint256[]",265            "name": "field_1",266            "type": "uint256[]"267          }268        ],269<<<<<<< HEAD270        "internalType": "struct Tuple26",271=======272        "internalType": "struct Tuple24",273>>>>>>> 09f69700... chore: generate stubs274        "name": "",275        "type": "tuple"276      }277    ],278    "stateMutability": "view",279    "type": "function"280  },281  {282    "inputs": [],283    "name": "collectionOwner",284    "outputs": [285      {286        "components": [287          { "internalType": "address", "name": "eth", "type": "address" },288          { "internalType": "uint256", "name": "sub", "type": "uint256" }289        ],290        "internalType": "struct EthCrossAccount",291        "name": "",292        "type": "tuple"293      }294    ],295    "stateMutability": "view",296    "type": "function"297  },298  {299    "inputs": [300      { "internalType": "string[]", "name": "keys", "type": "string[]" }301    ],302    "name": "collectionProperties",303    "outputs": [304      {305        "components": [306          { "internalType": "string", "name": "key", "type": "string" },307          { "internalType": "bytes", "name": "value", "type": "bytes" }308        ],309        "internalType": "struct Property[]",310        "name": "",311        "type": "tuple[]"312      }313    ],314    "stateMutability": "view",315    "type": "function"316  },317  {318    "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],319    "name": "collectionProperty",320    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],321    "stateMutability": "view",322    "type": "function"323  },324  {325    "inputs": [],326    "name": "collectionSponsor",327    "outputs": [328      {329        "components": [330          { "internalType": "address", "name": "eth", "type": "address" },331          { "internalType": "uint256", "name": "sub", "type": "uint256" }332        ],333        "internalType": "struct EthCrossAccount",334        "name": "",335        "type": "tuple"336      }337    ],338    "stateMutability": "view",339    "type": "function"340  },341  {342    "inputs": [],343    "name": "confirmCollectionSponsorship",344    "outputs": [],345    "stateMutability": "nonpayable",346    "type": "function"347  },348  {349    "inputs": [],350    "name": "contractAddress",351    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],352    "stateMutability": "view",353    "type": "function"354  },355  {356    "inputs": [],357    "name": "decimals",358    "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }],359    "stateMutability": "view",360    "type": "function"361  },362  {363    "inputs": [364      { "internalType": "string[]", "name": "keys", "type": "string[]" }365    ],366    "name": "deleteCollectionProperties",367    "outputs": [],368    "stateMutability": "nonpayable",369    "type": "function"370  },371  {372    "inputs": [],373    "name": "description",374    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],375    "stateMutability": "view",376    "type": "function"377  },378  {379    "inputs": [],380    "name": "hasCollectionPendingSponsor",381    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],382    "stateMutability": "view",383    "type": "function"384  },385  {386    "inputs": [387      {388        "components": [389          { "internalType": "address", "name": "eth", "type": "address" },390          { "internalType": "uint256", "name": "sub", "type": "uint256" }391        ],392        "internalType": "struct EthCrossAccount",393        "name": "user",394        "type": "tuple"395      }396    ],397    "name": "isOwnerOrAdminCross",398    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],399    "stateMutability": "view",400    "type": "function"401  },402  {403    "inputs": [404      { "internalType": "address", "name": "to", "type": "address" },405      { "internalType": "uint256", "name": "amount", "type": "uint256" }406    ],407    "name": "mint",408    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],409    "stateMutability": "nonpayable",410    "type": "function"411  },412  {413    "inputs": [414      {415        "components": [416          { "internalType": "address", "name": "field_0", "type": "address" },417          { "internalType": "uint256", "name": "field_1", "type": "uint256" }418        ],419        "internalType": "struct Tuple9[]",420        "name": "amounts",421        "type": "tuple[]"422      }423    ],424    "name": "mintBulk",425    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],426    "stateMutability": "nonpayable",427    "type": "function"428  },429  {430    "inputs": [431      {432        "components": [433          { "internalType": "address", "name": "eth", "type": "address" },434          { "internalType": "uint256", "name": "sub", "type": "uint256" }435        ],436        "internalType": "struct EthCrossAccount",437        "name": "to",438        "type": "tuple"439      },440      { "internalType": "uint256", "name": "amount", "type": "uint256" }441    ],442    "name": "mintCross",443    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],444    "stateMutability": "nonpayable",445    "type": "function"446  },447  {448    "inputs": [],449    "name": "name",450    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],451    "stateMutability": "view",452    "type": "function"453  },454  {455    "inputs": [456      {457        "components": [458          { "internalType": "address", "name": "eth", "type": "address" },459          { "internalType": "uint256", "name": "sub", "type": "uint256" }460        ],461        "internalType": "struct EthCrossAccount",462        "name": "admin",463        "type": "tuple"464      }465    ],466    "name": "removeCollectionAdminCross",467    "outputs": [],468    "stateMutability": "nonpayable",469    "type": "function"470  },471  {472    "inputs": [],473    "name": "removeCollectionSponsor",474    "outputs": [],475    "stateMutability": "nonpayable",476    "type": "function"477  },478  {479    "inputs": [480      {481        "components": [482          { "internalType": "address", "name": "eth", "type": "address" },483          { "internalType": "uint256", "name": "sub", "type": "uint256" }484        ],485        "internalType": "struct EthCrossAccount",486        "name": "user",487        "type": "tuple"488      }489    ],490    "name": "removeFromCollectionAllowListCross",491    "outputs": [],492    "stateMutability": "nonpayable",493    "type": "function"494  },495  {496    "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],497    "name": "setCollectionAccess",498    "outputs": [],499    "stateMutability": "nonpayable",500    "type": "function"501  },502  {503    "inputs": [504      {505        "internalType": "enum CollectionLimits",506        "name": "limit",507        "type": "uint8"508      },509      { "internalType": "bool", "name": "status", "type": "bool" },510      { "internalType": "uint256", "name": "value", "type": "uint256" }511    ],512    "name": "setCollectionLimit",513    "outputs": [],514    "stateMutability": "nonpayable",515    "type": "function"516  },517  {518    "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],519    "name": "setCollectionMintMode",520    "outputs": [],521    "stateMutability": "nonpayable",522    "type": "function"523  },524  {525    "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],526    "name": "setCollectionNesting",527    "outputs": [],528    "stateMutability": "nonpayable",529    "type": "function"530  },531  {532    "inputs": [533      { "internalType": "bool", "name": "enable", "type": "bool" },534      {535        "internalType": "address[]",536        "name": "collections",537        "type": "address[]"538      }539    ],540    "name": "setCollectionNesting",541    "outputs": [],542    "stateMutability": "nonpayable",543    "type": "function"544  },545  {546    "inputs": [547      {548        "components": [549          { "internalType": "string", "name": "key", "type": "string" },550          { "internalType": "bytes", "name": "value", "type": "bytes" }551        ],552        "internalType": "struct Property[]",553        "name": "properties",554        "type": "tuple[]"555      }556    ],557    "name": "setCollectionProperties",558    "outputs": [],559    "stateMutability": "nonpayable",560    "type": "function"561  },562  {563    "inputs": [564      {565        "components": [566          { "internalType": "address", "name": "eth", "type": "address" },567          { "internalType": "uint256", "name": "sub", "type": "uint256" }568        ],569        "internalType": "struct EthCrossAccount",570        "name": "sponsor",571        "type": "tuple"572      }573    ],574    "name": "setCollectionSponsorCross",575    "outputs": [],576    "stateMutability": "nonpayable",577    "type": "function"578  },579  {580    "inputs": [581      { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }582    ],583    "name": "supportsInterface",584    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],585    "stateMutability": "view",586    "type": "function"587  },588  {589    "inputs": [],590    "name": "symbol",591    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],592    "stateMutability": "view",593    "type": "function"594  },595  {596    "inputs": [],597    "name": "totalSupply",598    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],599    "stateMutability": "view",600    "type": "function"601  },602  {603    "inputs": [604      { "internalType": "address", "name": "to", "type": "address" },605      { "internalType": "uint256", "name": "amount", "type": "uint256" }606    ],607    "name": "transfer",608    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],609    "stateMutability": "nonpayable",610    "type": "function"611  },612  {613    "inputs": [614      {615        "components": [616          { "internalType": "address", "name": "eth", "type": "address" },617          { "internalType": "uint256", "name": "sub", "type": "uint256" }618        ],619        "internalType": "struct EthCrossAccount",620        "name": "to",621        "type": "tuple"622      },623      { "internalType": "uint256", "name": "amount", "type": "uint256" }624    ],625    "name": "transferCross",626    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],627    "stateMutability": "nonpayable",628    "type": "function"629  },630  {631    "inputs": [632      { "internalType": "address", "name": "from", "type": "address" },633      { "internalType": "address", "name": "to", "type": "address" },634      { "internalType": "uint256", "name": "amount", "type": "uint256" }635    ],636    "name": "transferFrom",637    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],638    "stateMutability": "nonpayable",639    "type": "function"640  },641  {642    "inputs": [643      {644        "components": [645          { "internalType": "address", "name": "eth", "type": "address" },646          { "internalType": "uint256", "name": "sub", "type": "uint256" }647        ],648        "internalType": "struct EthCrossAccount",649        "name": "from",650        "type": "tuple"651      },652      {653        "components": [654          { "internalType": "address", "name": "eth", "type": "address" },655          { "internalType": "uint256", "name": "sub", "type": "uint256" }656        ],657        "internalType": "struct EthCrossAccount",658        "name": "to",659        "type": "tuple"660      },661      { "internalType": "uint256", "name": "amount", "type": "uint256" }662    ],663    "name": "transferFromCross",664    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],665    "stateMutability": "nonpayable",666    "type": "function"667  },668  {669    "inputs": [],670    "name": "uniqueCollectionType",671    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],672    "stateMutability": "view",673    "type": "function"674  }675]
after · tests/src/eth/abi/fungible.json
1[2  {3    "anonymous": false,4    "inputs": [5      {6        "indexed": true,7        "internalType": "address",8        "name": "owner",9        "type": "address"10      },11      {12        "indexed": true,13        "internalType": "address",14        "name": "spender",15        "type": "address"16      },17      {18        "indexed": false,19        "internalType": "uint256",20        "name": "value",21        "type": "uint256"22      }23    ],24    "name": "Approval",25    "type": "event"26  },27  {28    "anonymous": false,29    "inputs": [30      {31        "indexed": true,32        "internalType": "address",33        "name": "from",34        "type": "address"35      },36      {37        "indexed": true,38        "internalType": "address",39        "name": "to",40        "type": "address"41      },42      {43        "indexed": false,44        "internalType": "uint256",45        "name": "value",46        "type": "uint256"47      }48    ],49    "name": "Transfer",50    "type": "event"51  },52  {53    "inputs": [54      {55        "components": [56          { "internalType": "address", "name": "eth", "type": "address" },57          { "internalType": "uint256", "name": "sub", "type": "uint256" }58        ],59        "internalType": "struct EthCrossAccount",60        "name": "newAdmin",61        "type": "tuple"62      }63    ],64    "name": "addCollectionAdminCross",65    "outputs": [],66    "stateMutability": "nonpayable",67    "type": "function"68  },69  {70    "inputs": [71      {72        "components": [73          { "internalType": "address", "name": "eth", "type": "address" },74          { "internalType": "uint256", "name": "sub", "type": "uint256" }75        ],76        "internalType": "struct EthCrossAccount",77        "name": "user",78        "type": "tuple"79      }80    ],81    "name": "addToCollectionAllowListCross",82    "outputs": [],83    "stateMutability": "nonpayable",84    "type": "function"85  },86  {87    "inputs": [88      { "internalType": "address", "name": "owner", "type": "address" },89      { "internalType": "address", "name": "spender", "type": "address" }90    ],91    "name": "allowance",92    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],93    "stateMutability": "view",94    "type": "function"95  },96  {97    "inputs": [98      {99        "components": [100          { "internalType": "address", "name": "eth", "type": "address" },101          { "internalType": "uint256", "name": "sub", "type": "uint256" }102        ],103        "internalType": "struct EthCrossAccount",104        "name": "user",105        "type": "tuple"106      }107    ],108    "name": "allowlistedCross",109    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],110    "stateMutability": "view",111    "type": "function"112  },113  {114    "inputs": [115      { "internalType": "address", "name": "spender", "type": "address" },116      { "internalType": "uint256", "name": "amount", "type": "uint256" }117    ],118    "name": "approve",119    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],120    "stateMutability": "nonpayable",121    "type": "function"122  },123  {124    "inputs": [125      {126        "components": [127          { "internalType": "address", "name": "eth", "type": "address" },128          { "internalType": "uint256", "name": "sub", "type": "uint256" }129        ],130        "internalType": "struct EthCrossAccount",131        "name": "spender",132        "type": "tuple"133      },134      { "internalType": "uint256", "name": "amount", "type": "uint256" }135    ],136    "name": "approveCross",137    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],138    "stateMutability": "nonpayable",139    "type": "function"140  },141  {142    "inputs": [143      { "internalType": "address", "name": "owner", "type": "address" }144    ],145    "name": "balanceOf",146    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],147    "stateMutability": "view",148    "type": "function"149  },150  {151    "inputs": [152      {153        "components": [154          { "internalType": "address", "name": "eth", "type": "address" },155          { "internalType": "uint256", "name": "sub", "type": "uint256" }156        ],157        "internalType": "struct EthCrossAccount",158        "name": "from",159        "type": "tuple"160      },161      { "internalType": "uint256", "name": "amount", "type": "uint256" }162    ],163    "name": "burnFromCross",164    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],165    "stateMutability": "nonpayable",166    "type": "function"167  },168  {169    "inputs": [170      {171        "components": [172          { "internalType": "address", "name": "eth", "type": "address" },173          { "internalType": "uint256", "name": "sub", "type": "uint256" }174        ],175        "internalType": "struct EthCrossAccount",176        "name": "newOwner",177        "type": "tuple"178      }179    ],180    "name": "changeCollectionOwnerCross",181    "outputs": [],182    "stateMutability": "nonpayable",183    "type": "function"184  },185  {186    "inputs": [],187    "name": "collectionAdmins",188    "outputs": [189      {190        "components": [191          { "internalType": "address", "name": "eth", "type": "address" },192          { "internalType": "uint256", "name": "sub", "type": "uint256" }193        ],194        "internalType": "struct EthCrossAccount[]",195        "name": "",196        "type": "tuple[]"197      }198    ],199    "stateMutability": "view",200    "type": "function"201  },202  {203    "inputs": [],204    "name": "collectionHelperAddress",205    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],206    "stateMutability": "view",207    "type": "function"208  },209  {210    "inputs": [],211    "name": "collectionLimits",212    "outputs": [213      {214        "components": [215          {216            "internalType": "enum CollectionLimits",217            "name": "field_0",218            "type": "uint8"219          },220          { "internalType": "bool", "name": "field_1", "type": "bool" },221          { "internalType": "uint256", "name": "field_2", "type": "uint256" }222        ],223        "internalType": "struct Tuple23[]",224        "name": "",225        "type": "tuple[]"226      }227    ],228    "stateMutability": "view",229    "type": "function"230  },231  {232    "inputs": [],233    "name": "collectionNestingPermissions",234    "outputs": [235      {236        "components": [237          {238            "internalType": "enum CollectionPermissions",239            "name": "field_0",240            "type": "uint8"241          },242          { "internalType": "bool", "name": "field_1", "type": "bool" }243        ],244        "internalType": "struct Tuple32[]",245        "name": "",246        "type": "tuple[]"247      }248    ],249    "stateMutability": "view",250    "type": "function"251  },252  {253    "inputs": [],254    "name": "collectionNestingRestrictedCollectionIds",255    "outputs": [256      {257        "components": [258          { "internalType": "bool", "name": "field_0", "type": "bool" },259          {260            "internalType": "uint256[]",261            "name": "field_1",262            "type": "uint256[]"263          }264        ],265        "internalType": "struct Tuple29",266        "name": "",267        "type": "tuple"268      }269    ],270    "stateMutability": "view",271    "type": "function"272  },273  {274    "inputs": [],275    "name": "collectionOwner",276    "outputs": [277      {278        "components": [279          { "internalType": "address", "name": "eth", "type": "address" },280          { "internalType": "uint256", "name": "sub", "type": "uint256" }281        ],282        "internalType": "struct EthCrossAccount",283        "name": "",284        "type": "tuple"285      }286    ],287    "stateMutability": "view",288    "type": "function"289  },290  {291    "inputs": [292      { "internalType": "string[]", "name": "keys", "type": "string[]" }293    ],294    "name": "collectionProperties",295    "outputs": [296      {297        "components": [298          { "internalType": "string", "name": "key", "type": "string" },299          { "internalType": "bytes", "name": "value", "type": "bytes" }300        ],301        "internalType": "struct Property[]",302        "name": "",303        "type": "tuple[]"304      }305    ],306    "stateMutability": "view",307    "type": "function"308  },309  {310    "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],311    "name": "collectionProperty",312    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],313    "stateMutability": "view",314    "type": "function"315  },316  {317    "inputs": [],318    "name": "collectionSponsor",319    "outputs": [320      {321        "components": [322          { "internalType": "address", "name": "eth", "type": "address" },323          { "internalType": "uint256", "name": "sub", "type": "uint256" }324        ],325        "internalType": "struct EthCrossAccount",326        "name": "",327        "type": "tuple"328      }329    ],330    "stateMutability": "view",331    "type": "function"332  },333  {334    "inputs": [],335    "name": "confirmCollectionSponsorship",336    "outputs": [],337    "stateMutability": "nonpayable",338    "type": "function"339  },340  {341    "inputs": [],342    "name": "contractAddress",343    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],344    "stateMutability": "view",345    "type": "function"346  },347  {348    "inputs": [],349    "name": "decimals",350    "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }],351    "stateMutability": "view",352    "type": "function"353  },354  {355    "inputs": [356      { "internalType": "string[]", "name": "keys", "type": "string[]" }357    ],358    "name": "deleteCollectionProperties",359    "outputs": [],360    "stateMutability": "nonpayable",361    "type": "function"362  },363  {364    "inputs": [],365    "name": "description",366    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],367    "stateMutability": "view",368    "type": "function"369  },370  {371    "inputs": [],372    "name": "hasCollectionPendingSponsor",373    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],374    "stateMutability": "view",375    "type": "function"376  },377  {378    "inputs": [379      {380        "components": [381          { "internalType": "address", "name": "eth", "type": "address" },382          { "internalType": "uint256", "name": "sub", "type": "uint256" }383        ],384        "internalType": "struct EthCrossAccount",385        "name": "user",386        "type": "tuple"387      }388    ],389    "name": "isOwnerOrAdminCross",390    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],391    "stateMutability": "view",392    "type": "function"393  },394  {395    "inputs": [396      { "internalType": "address", "name": "to", "type": "address" },397      { "internalType": "uint256", "name": "amount", "type": "uint256" }398    ],399    "name": "mint",400    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],401    "stateMutability": "nonpayable",402    "type": "function"403  },404  {405    "inputs": [406      {407        "components": [408          { "internalType": "address", "name": "field_0", "type": "address" },409          { "internalType": "uint256", "name": "field_1", "type": "uint256" }410        ],411        "internalType": "struct Tuple9[]",412        "name": "amounts",413        "type": "tuple[]"414      }415    ],416    "name": "mintBulk",417    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],418    "stateMutability": "nonpayable",419    "type": "function"420  },421  {422    "inputs": [423      {424        "components": [425          { "internalType": "address", "name": "eth", "type": "address" },426          { "internalType": "uint256", "name": "sub", "type": "uint256" }427        ],428        "internalType": "struct EthCrossAccount",429        "name": "to",430        "type": "tuple"431      },432      { "internalType": "uint256", "name": "amount", "type": "uint256" }433    ],434    "name": "mintCross",435    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],436    "stateMutability": "nonpayable",437    "type": "function"438  },439  {440    "inputs": [],441    "name": "name",442    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],443    "stateMutability": "view",444    "type": "function"445  },446  {447    "inputs": [448      {449        "components": [450          { "internalType": "address", "name": "eth", "type": "address" },451          { "internalType": "uint256", "name": "sub", "type": "uint256" }452        ],453        "internalType": "struct EthCrossAccount",454        "name": "admin",455        "type": "tuple"456      }457    ],458    "name": "removeCollectionAdminCross",459    "outputs": [],460    "stateMutability": "nonpayable",461    "type": "function"462  },463  {464    "inputs": [],465    "name": "removeCollectionSponsor",466    "outputs": [],467    "stateMutability": "nonpayable",468    "type": "function"469  },470  {471    "inputs": [472      {473        "components": [474          { "internalType": "address", "name": "eth", "type": "address" },475          { "internalType": "uint256", "name": "sub", "type": "uint256" }476        ],477        "internalType": "struct EthCrossAccount",478        "name": "user",479        "type": "tuple"480      }481    ],482    "name": "removeFromCollectionAllowListCross",483    "outputs": [],484    "stateMutability": "nonpayable",485    "type": "function"486  },487  {488    "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],489    "name": "setCollectionAccess",490    "outputs": [],491    "stateMutability": "nonpayable",492    "type": "function"493  },494  {495    "inputs": [496      {497        "internalType": "enum CollectionLimits",498        "name": "limit",499        "type": "uint8"500      },501      { "internalType": "bool", "name": "status", "type": "bool" },502      { "internalType": "uint256", "name": "value", "type": "uint256" }503    ],504    "name": "setCollectionLimit",505    "outputs": [],506    "stateMutability": "nonpayable",507    "type": "function"508  },509  {510    "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],511    "name": "setCollectionMintMode",512    "outputs": [],513    "stateMutability": "nonpayable",514    "type": "function"515  },516  {517    "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],518    "name": "setCollectionNesting",519    "outputs": [],520    "stateMutability": "nonpayable",521    "type": "function"522  },523  {524    "inputs": [525      { "internalType": "bool", "name": "enable", "type": "bool" },526      {527        "internalType": "address[]",528        "name": "collections",529        "type": "address[]"530      }531    ],532    "name": "setCollectionNesting",533    "outputs": [],534    "stateMutability": "nonpayable",535    "type": "function"536  },537  {538    "inputs": [539      {540        "components": [541          { "internalType": "string", "name": "key", "type": "string" },542          { "internalType": "bytes", "name": "value", "type": "bytes" }543        ],544        "internalType": "struct Property[]",545        "name": "properties",546        "type": "tuple[]"547      }548    ],549    "name": "setCollectionProperties",550    "outputs": [],551    "stateMutability": "nonpayable",552    "type": "function"553  },554  {555    "inputs": [556      {557        "components": [558          { "internalType": "address", "name": "eth", "type": "address" },559          { "internalType": "uint256", "name": "sub", "type": "uint256" }560        ],561        "internalType": "struct EthCrossAccount",562        "name": "sponsor",563        "type": "tuple"564      }565    ],566    "name": "setCollectionSponsorCross",567    "outputs": [],568    "stateMutability": "nonpayable",569    "type": "function"570  },571  {572    "inputs": [573      { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }574    ],575    "name": "supportsInterface",576    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],577    "stateMutability": "view",578    "type": "function"579  },580  {581    "inputs": [],582    "name": "symbol",583    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],584    "stateMutability": "view",585    "type": "function"586  },587  {588    "inputs": [],589    "name": "totalSupply",590    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],591    "stateMutability": "view",592    "type": "function"593  },594  {595    "inputs": [596      { "internalType": "address", "name": "to", "type": "address" },597      { "internalType": "uint256", "name": "amount", "type": "uint256" }598    ],599    "name": "transfer",600    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],601    "stateMutability": "nonpayable",602    "type": "function"603  },604  {605    "inputs": [606      {607        "components": [608          { "internalType": "address", "name": "eth", "type": "address" },609          { "internalType": "uint256", "name": "sub", "type": "uint256" }610        ],611        "internalType": "struct EthCrossAccount",612        "name": "to",613        "type": "tuple"614      },615      { "internalType": "uint256", "name": "amount", "type": "uint256" }616    ],617    "name": "transferCross",618    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],619    "stateMutability": "nonpayable",620    "type": "function"621  },622  {623    "inputs": [624      { "internalType": "address", "name": "from", "type": "address" },625      { "internalType": "address", "name": "to", "type": "address" },626      { "internalType": "uint256", "name": "amount", "type": "uint256" }627    ],628    "name": "transferFrom",629    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],630    "stateMutability": "nonpayable",631    "type": "function"632  },633  {634    "inputs": [635      {636        "components": [637          { "internalType": "address", "name": "eth", "type": "address" },638          { "internalType": "uint256", "name": "sub", "type": "uint256" }639        ],640        "internalType": "struct EthCrossAccount",641        "name": "from",642        "type": "tuple"643      },644      {645        "components": [646          { "internalType": "address", "name": "eth", "type": "address" },647          { "internalType": "uint256", "name": "sub", "type": "uint256" }648        ],649        "internalType": "struct EthCrossAccount",650        "name": "to",651        "type": "tuple"652      },653      { "internalType": "uint256", "name": "amount", "type": "uint256" }654    ],655    "name": "transferFromCross",656    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],657    "stateMutability": "nonpayable",658    "type": "function"659  },660  {661    "inputs": [],662    "name": "uniqueCollectionType",663    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],664    "stateMutability": "view",665    "type": "function"666  }667]
modifiedtests/src/eth/abi/nonFungible.jsondiffbeforeafterboth
--- a/tests/src/eth/abi/nonFungible.json
+++ b/tests/src/eth/abi/nonFungible.json
@@ -250,7 +250,7 @@
           { "internalType": "bool", "name": "field_1", "type": "bool" },
           { "internalType": "uint256", "name": "field_2", "type": "uint256" }
         ],
-        "internalType": "struct Tuple33[]",
+        "internalType": "struct Tuple35[]",
         "name": "",
         "type": "tuple[]"
       }
@@ -271,11 +271,7 @@
           },
           { "internalType": "bool", "name": "field_1", "type": "bool" }
         ],
-<<<<<<< HEAD
-        "internalType": "struct Tuple42[]",
-=======
-        "internalType": "struct Tuple39[]",
->>>>>>> 09f69700... chore: generate stubs
+        "internalType": "struct Tuple44[]",
         "name": "",
         "type": "tuple[]"
       }
@@ -296,11 +292,7 @@
             "type": "uint256[]"
           }
         ],
-<<<<<<< HEAD
-        "internalType": "struct Tuple39",
-=======
-        "internalType": "struct Tuple36",
->>>>>>> 09f69700... chore: generate stubs
+        "internalType": "struct Tuple41",
         "name": "",
         "type": "tuple"
       }
@@ -770,20 +762,12 @@
               },
               { "internalType": "bool", "name": "field_1", "type": "bool" }
             ],
-<<<<<<< HEAD
-            "internalType": "struct Tuple57[]",
-=======
-            "internalType": "struct Tuple54[]",
->>>>>>> 9e929f90... chore: generate stubs & types
+            "internalType": "struct Tuple59[]",
             "name": "field_1",
             "type": "tuple[]"
           }
         ],
-<<<<<<< HEAD
-        "internalType": "struct Tuple59[]",
-=======
-        "internalType": "struct Tuple56[]",
->>>>>>> 9e929f90... chore: generate stubs & types
+        "internalType": "struct Tuple61[]",
         "name": "permissions",
         "type": "tuple[]"
       }
@@ -844,20 +828,12 @@
               },
               { "internalType": "bool", "name": "field_1", "type": "bool" }
             ],
-<<<<<<< HEAD
-            "internalType": "struct Tuple57[]",
-=======
-            "internalType": "struct Tuple54[]",
->>>>>>> 9e929f90... chore: generate stubs & types
+            "internalType": "struct Tuple59[]",
             "name": "field_1",
             "type": "tuple[]"
           }
         ],
-<<<<<<< HEAD
-        "internalType": "struct Tuple59[]",
-=======
-        "internalType": "struct Tuple56[]",
->>>>>>> 9e929f90... chore: generate stubs & types
+        "internalType": "struct Tuple61[]",
         "name": "",
         "type": "tuple[]"
       }
modifiedtests/src/eth/abi/reFungible.jsondiffbeforeafterboth
--- a/tests/src/eth/abi/reFungible.json
+++ b/tests/src/eth/abi/reFungible.json
@@ -232,7 +232,7 @@
           { "internalType": "bool", "name": "field_1", "type": "bool" },
           { "internalType": "uint256", "name": "field_2", "type": "uint256" }
         ],
-        "internalType": "struct Tuple32[]",
+        "internalType": "struct Tuple34[]",
         "name": "",
         "type": "tuple[]"
       }
@@ -253,11 +253,7 @@
           },
           { "internalType": "bool", "name": "field_1", "type": "bool" }
         ],
-<<<<<<< HEAD
-        "internalType": "struct Tuple41[]",
-=======
-        "internalType": "struct Tuple38[]",
->>>>>>> 09f69700... chore: generate stubs
+        "internalType": "struct Tuple43[]",
         "name": "",
         "type": "tuple[]"
       }
@@ -278,11 +274,7 @@
             "type": "uint256[]"
           }
         ],
-<<<<<<< HEAD
-        "internalType": "struct Tuple38",
-=======
-        "internalType": "struct Tuple35",
->>>>>>> 09f69700... chore: generate stubs
+        "internalType": "struct Tuple40",
         "name": "",
         "type": "tuple"
       }
@@ -752,20 +744,12 @@
               },
               { "internalType": "bool", "name": "field_1", "type": "bool" }
             ],
-<<<<<<< HEAD
-            "internalType": "struct Tuple56[]",
-=======
-            "internalType": "struct Tuple53[]",
->>>>>>> 9e929f90... chore: generate stubs & types
+            "internalType": "struct Tuple58[]",
             "name": "field_1",
             "type": "tuple[]"
           }
         ],
-<<<<<<< HEAD
-        "internalType": "struct Tuple58[]",
-=======
-        "internalType": "struct Tuple55[]",
->>>>>>> 9e929f90... chore: generate stubs & types
+        "internalType": "struct Tuple60[]",
         "name": "permissions",
         "type": "tuple[]"
       }
@@ -835,20 +819,12 @@
               },
               { "internalType": "bool", "name": "field_1", "type": "bool" }
             ],
-<<<<<<< HEAD
-            "internalType": "struct Tuple56[]",
-=======
-            "internalType": "struct Tuple53[]",
->>>>>>> 9e929f90... chore: generate stubs & types
+            "internalType": "struct Tuple58[]",
             "name": "field_1",
             "type": "tuple[]"
           }
         ],
-<<<<<<< HEAD
-        "internalType": "struct Tuple58[]",
-=======
-        "internalType": "struct Tuple55[]",
->>>>>>> 9e929f90... chore: generate stubs & types
+        "internalType": "struct Tuple60[]",
         "name": "",
         "type": "tuple[]"
       }
modifiedtests/src/eth/api/UniqueFungible.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueFungible.sol
+++ b/tests/src/eth/api/UniqueFungible.sol
@@ -119,7 +119,7 @@
 	/// Return `false` if a limit not set.
 	/// @dev EVM selector for this function is: 0xf63bc572,
 	///  or in textual repr: collectionLimits()
-	function collectionLimits() external view returns (Tuple19[] memory);
+	function collectionLimits() external view returns (Tuple21[] memory);
 
 	/// Set limits for the collection.
 	/// @dev Throws error if limit not found.
@@ -191,20 +191,12 @@
 	/// Returns nesting for a collection
 	/// @dev EVM selector for this function is: 0x22d25bfe,
 	///  or in textual repr: collectionNestingRestrictedCollectionIds()
-<<<<<<< HEAD
-	function collectionNestingRestrictedCollectionIds() external view returns (Tuple24 memory);
-=======
-	function collectionNestingRestrictedCollectionIds() external view returns (Tuple22 memory);
->>>>>>> 09f69700... chore: generate stubs
+	function collectionNestingRestrictedCollectionIds() external view returns (Tuple26 memory);
 
 	/// Returns permissions for a collection
 	/// @dev EVM selector for this function is: 0x5b2eaf4b,
 	///  or in textual repr: collectionNestingPermissions()
-<<<<<<< HEAD
-	function collectionNestingPermissions() external view returns (Tuple27[] memory);
-=======
-	function collectionNestingPermissions() external view returns (Tuple25[] memory);
->>>>>>> 09f69700... chore: generate stubs
+	function collectionNestingPermissions() external view returns (Tuple29[] memory);
 
 	/// Set the collection access method.
 	/// @param mode Access mode
@@ -319,11 +311,7 @@
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple27 {
-=======
-struct Tuple25 {
->>>>>>> 09f69700... chore: generate stubs
+struct Tuple29 {
 	CollectionPermissions field_0;
 	bool field_1;
 }
@@ -334,11 +322,7 @@
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple24 {
-=======
-struct Tuple22 {
->>>>>>> 09f69700... chore: generate stubs
+struct Tuple26 {
 	bool field_0;
 	uint256[] field_1;
 }
@@ -366,7 +350,7 @@
 }
 
 /// @dev anonymous struct
-struct Tuple19 {
+struct Tuple21 {
 	CollectionLimits field_0;
 	bool field_1;
 	uint256 field_2;
modifiedtests/src/eth/api/UniqueNFT.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueNFT.sol
+++ b/tests/src/eth/api/UniqueNFT.sol
@@ -30,20 +30,12 @@
 	/// @param permissions Permissions for keys.
 	/// @dev EVM selector for this function is: 0xbd92983a,
 	///  or in textual repr: setTokenPropertyPermissions((string,(uint8,bool)[])[])
-<<<<<<< HEAD
-	function setTokenPropertyPermissions(Tuple52[] memory permissions) external;
-=======
-	function setTokenPropertyPermissions(Tuple49[] memory permissions) external;
->>>>>>> 9e929f90... chore: generate stubs & types
+	function setTokenPropertyPermissions(Tuple53[] memory permissions) external;
 
 	/// @notice Get permissions for token properties.
 	/// @dev EVM selector for this function is: 0xf23d7790,
 	///  or in textual repr: tokenPropertyPermissions()
-<<<<<<< HEAD
-	function tokenPropertyPermissions() external view returns (Tuple52[] memory);
-=======
-	function tokenPropertyPermissions() external view returns (Tuple49[] memory);
->>>>>>> 9e929f90... chore: generate stubs & types
+	function tokenPropertyPermissions() external view returns (Tuple53[] memory);
 
 	// /// @notice Set token property value.
 	// /// @dev Throws error if `msg.sender` has no permission to edit the property.
@@ -105,23 +97,13 @@
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple52 {
+struct Tuple53 {
 	string field_0;
-	Tuple50[] field_1;
+	Tuple51[] field_1;
 }
 
 /// @dev anonymous struct
-struct Tuple50 {
-=======
-struct Tuple49 {
-	string field_0;
-	Tuple47[] field_1;
-}
-
-/// @dev anonymous struct
-struct Tuple47 {
->>>>>>> 9e929f90... chore: generate stubs & types
+struct Tuple51 {
 	EthTokenPermissions field_0;
 	bool field_1;
 }
@@ -233,7 +215,7 @@
 	/// Return `false` if a limit not set.
 	/// @dev EVM selector for this function is: 0xf63bc572,
 	///  or in textual repr: collectionLimits()
-	function collectionLimits() external view returns (Tuple30[] memory);
+	function collectionLimits() external view returns (Tuple31[] memory);
 
 	/// Set limits for the collection.
 	/// @dev Throws error if limit not found.
@@ -305,20 +287,12 @@
 	/// Returns nesting for a collection
 	/// @dev EVM selector for this function is: 0x22d25bfe,
 	///  or in textual repr: collectionNestingRestrictedCollectionIds()
-<<<<<<< HEAD
-	function collectionNestingRestrictedCollectionIds() external view returns (Tuple35 memory);
-=======
-	function collectionNestingRestrictedCollectionIds() external view returns (Tuple32 memory);
->>>>>>> 09f69700... chore: generate stubs
+	function collectionNestingRestrictedCollectionIds() external view returns (Tuple36 memory);
 
 	/// Returns permissions for a collection
 	/// @dev EVM selector for this function is: 0x5b2eaf4b,
 	///  or in textual repr: collectionNestingPermissions()
-<<<<<<< HEAD
-	function collectionNestingPermissions() external view returns (Tuple38[] memory);
-=======
-	function collectionNestingPermissions() external view returns (Tuple35[] memory);
->>>>>>> 09f69700... chore: generate stubs
+	function collectionNestingPermissions() external view returns (Tuple39[] memory);
 
 	/// Set the collection access method.
 	/// @param mode Access mode
@@ -433,11 +407,7 @@
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple38 {
-=======
-struct Tuple35 {
->>>>>>> 09f69700... chore: generate stubs
+struct Tuple39 {
 	CollectionPermissions field_0;
 	bool field_1;
 }
@@ -448,16 +418,11 @@
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple35 {
-=======
-struct Tuple32 {
->>>>>>> 09f69700... chore: generate stubs
+struct Tuple36 {
 	bool field_0;
 	uint256[] field_1;
 }
 
-<<<<<<< HEAD
 /// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM.
 enum CollectionLimits {
 	/// @dev How many tokens can a user have on one account.
@@ -481,22 +446,12 @@
 }
 
 /// @dev anonymous struct
-struct Tuple30 {
+struct Tuple31 {
 	CollectionLimits field_0;
 	bool field_1;
 	uint256 field_2;
-}
-
-/// @dev anonymous struct
-struct Tuple27 {
-	address field_0;
-	uint256 field_1;
 }
 
-=======
->>>>>>> 0bf15e6f... fixed tests&tuple instead of struct, refactored `refungible` pallet
-=======
->>>>>>> 09f69700... chore: generate stubs
 /// @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 /// @dev See https://eips.ethereum.org/EIPS/eip-721
 /// @dev the ERC-165 identifier for this interface is 0x5b5e139f
modifiedtests/src/eth/api/UniqueRefungible.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueRefungible.sol
+++ b/tests/src/eth/api/UniqueRefungible.sol
@@ -30,20 +30,12 @@
 	/// @param permissions Permissions for keys.
 	/// @dev EVM selector for this function is: 0xbd92983a,
 	///  or in textual repr: setTokenPropertyPermissions((string,(uint8,bool)[])[])
-<<<<<<< HEAD
-	function setTokenPropertyPermissions(Tuple51[] memory permissions) external;
-=======
-	function setTokenPropertyPermissions(Tuple48[] memory permissions) external;
->>>>>>> 9e929f90... chore: generate stubs & types
+	function setTokenPropertyPermissions(Tuple52[] memory permissions) external;
 
 	/// @notice Get permissions for token properties.
 	/// @dev EVM selector for this function is: 0xf23d7790,
 	///  or in textual repr: tokenPropertyPermissions()
-<<<<<<< HEAD
-	function tokenPropertyPermissions() external view returns (Tuple51[] memory);
-=======
-	function tokenPropertyPermissions() external view returns (Tuple48[] memory);
->>>>>>> 9e929f90... chore: generate stubs & types
+	function tokenPropertyPermissions() external view returns (Tuple52[] memory);
 
 	// /// @notice Set token property value.
 	// /// @dev Throws error if `msg.sender` has no permission to edit the property.
@@ -105,23 +97,13 @@
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple51 {
+struct Tuple52 {
 	string field_0;
-	Tuple49[] field_1;
+	Tuple50[] field_1;
 }
 
 /// @dev anonymous struct
-struct Tuple49 {
-=======
-struct Tuple48 {
-	string field_0;
-	Tuple46[] field_1;
-}
-
-/// @dev anonymous struct
-struct Tuple46 {
->>>>>>> 9e929f90... chore: generate stubs & types
+struct Tuple50 {
 	EthTokenPermissions field_0;
 	bool field_1;
 }
@@ -233,7 +215,7 @@
 	/// Return `false` if a limit not set.
 	/// @dev EVM selector for this function is: 0xf63bc572,
 	///  or in textual repr: collectionLimits()
-	function collectionLimits() external view returns (Tuple29[] memory);
+	function collectionLimits() external view returns (Tuple30[] memory);
 
 	/// Set limits for the collection.
 	/// @dev Throws error if limit not found.
@@ -305,20 +287,12 @@
 	/// Returns nesting for a collection
 	/// @dev EVM selector for this function is: 0x22d25bfe,
 	///  or in textual repr: collectionNestingRestrictedCollectionIds()
-<<<<<<< HEAD
-	function collectionNestingRestrictedCollectionIds() external view returns (Tuple34 memory);
-=======
-	function collectionNestingRestrictedCollectionIds() external view returns (Tuple31 memory);
->>>>>>> 09f69700... chore: generate stubs
+	function collectionNestingRestrictedCollectionIds() external view returns (Tuple35 memory);
 
 	/// Returns permissions for a collection
 	/// @dev EVM selector for this function is: 0x5b2eaf4b,
 	///  or in textual repr: collectionNestingPermissions()
-<<<<<<< HEAD
-	function collectionNestingPermissions() external view returns (Tuple37[] memory);
-=======
-	function collectionNestingPermissions() external view returns (Tuple34[] memory);
->>>>>>> 09f69700... chore: generate stubs
+	function collectionNestingPermissions() external view returns (Tuple38[] memory);
 
 	/// Set the collection access method.
 	/// @param mode Access mode
@@ -433,11 +407,7 @@
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple37 {
-=======
-struct Tuple34 {
->>>>>>> 09f69700... chore: generate stubs
+struct Tuple38 {
 	CollectionPermissions field_0;
 	bool field_1;
 }
@@ -448,16 +418,11 @@
 }
 
 /// @dev anonymous struct
-<<<<<<< HEAD
-struct Tuple34 {
-=======
-struct Tuple31 {
->>>>>>> 09f69700... chore: generate stubs
+struct Tuple35 {
 	bool field_0;
 	uint256[] field_1;
 }
 
-<<<<<<< HEAD
 /// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM.
 enum CollectionLimits {
 	/// @dev How many tokens can a user have on one account.
@@ -481,22 +446,12 @@
 }
 
 /// @dev anonymous struct
-struct Tuple29 {
+struct Tuple30 {
 	CollectionLimits field_0;
 	bool field_1;
 	uint256 field_2;
-}
-
-/// @dev anonymous struct
-struct Tuple26 {
-	address field_0;
-	uint256 field_1;
 }
 
-=======
->>>>>>> 0bf15e6f... fixed tests&tuple instead of struct, refactored `refungible` pallet
-=======
->>>>>>> 09f69700... chore: generate stubs
 /// @dev the ERC-165 identifier for this interface is 0x5b5e139f
 interface ERC721Metadata is Dummy, ERC165 {
 	// /// @notice A descriptive name for a collection of NFTs in this contract