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

difftreelog

name anonymous tuples

Trubnikov Sergey2023-02-01parent: #55aed0d.patch.diff
in: master

15 files changed

modifiedpallets/common/src/eth.rsdiffbeforeafterboth
--- a/pallets/common/src/eth.rs
+++ b/pallets/common/src/eth.rs
@@ -18,7 +18,10 @@
 
 use alloc::format;
 use sp_std::{vec, vec::Vec};
-use evm_coder::{AbiCoder, types::Address};
+use evm_coder::{
+	AbiCoder,
+	types::{Address, String},
+};
 pub use pallet_evm::{Config, account::CrossAccountId};
 use sp_core::{H160, U256};
 use up_data_structs::CollectionId;
@@ -390,6 +393,16 @@
 	}
 }
 
+/// Data for creation token with uri.
+#[derive(Debug, AbiCoder)]
+pub struct TokenUri {
+	/// Id of new token.
+	pub id: U256,
+
+	/// Uri of new token.
+	pub uri: String,
+}
+
 /// Nested collections.
 #[derive(Debug, Default, AbiCoder)]
 pub struct CollectionNesting {
modifiedpallets/fungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/fungible/src/erc.rs
+++ b/pallets/fungible/src/erc.rs
@@ -6,7 +6,7 @@
 // the Free Software Foundation, either version 3 of the License, or
 // (at your option) any later version.
 
-// Unique Network is distributed in the hope that it will be useful,
+// Unique Network is disaddress: tod in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 // GNU General Public License for more details.
@@ -19,6 +19,7 @@
 extern crate alloc;
 use core::char::{REPLACEMENT_CHARACTER, decode_utf16};
 use core::convert::TryInto;
+use evm_coder::AbiCoder;
 use evm_coder::{
 	abi::AbiType, ToLog, execution::*, generate_stubgen, solidity, solidity_interface, types::*,
 	weight,
@@ -57,6 +58,12 @@
 	},
 }
 
+#[derive(AbiCoder, Debug)]
+pub struct AmountForAddress {
+	to: Address,
+	amount: U256,
+}
+
 #[solidity_interface(name = ERC20, events(ERC20Events), expect_selector = 0x942e8b22)]
 impl<T: Config> FungibleHandle<T> {
 	fn name(&self) -> Result<String> {
@@ -264,14 +271,14 @@
 	/// Mint tokens for multiple accounts.
 	/// @param amounts array of pairs of account address and amount
 	#[weight(<SelfWeightOf<T>>::create_multiple_items_ex(amounts.len() as u32))]
-	fn mint_bulk(&mut self, caller: Caller, amounts: Vec<(Address, U256)>) -> Result<bool> {
+	fn mint_bulk(&mut self, caller: Caller, amounts: Vec<AmountForAddress>) -> Result<bool> {
 		let caller = T::CrossAccountId::from_eth(caller);
 		let budget = self
 			.recorder
 			.weight_calls_budget(<StructureWeight<T>>::find_parent());
 		let amounts = amounts
 			.into_iter()
-			.map(|(to, amount)| {
+			.map(|AmountForAddress { to, amount }| {
 				Ok((
 					T::CrossAccountId::from_eth(to),
 					amount.try_into().map_err(|_| "amount overflow")?,
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
@@ -590,7 +590,7 @@
 	/// @param amounts array of pairs of account address and amount
 	/// @dev EVM selector for this function is: 0x1acf2d55,
 	///  or in textual repr: mintBulk((address,uint256)[])
-	function mintBulk(Tuple11[] memory amounts) public returns (bool) {
+	function mintBulk(AmountForAddress[] memory amounts) public returns (bool) {
 		require(false, stub_error);
 		amounts;
 		dummy = 0;
@@ -632,10 +632,9 @@
 	}
 }
 
-/// @dev anonymous struct
-struct Tuple11 {
-	address field_0;
-	uint256 field_1;
+struct AmountForAddress {
+	address to;
+	uint256 amount;
 }
 
 /// @dev the ERC-165 identifier for this interface is 0x40c10f19
modifiedpallets/nonfungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/erc.rs
+++ b/pallets/nonfungible/src/erc.rs
@@ -38,7 +38,7 @@
 use pallet_common::{
 	CollectionHandle, CollectionPropertyPermissions, CommonCollectionOperations,
 	erc::{CommonEvmHandler, PrecompileResult, CollectionCall, static_property::key},
-	eth,
+	eth::{self, TokenUri},
 };
 use pallet_evm::{account::CrossAccountId, PrecompileHandle};
 use pallet_evm_coder_substrate::call;
@@ -948,7 +948,7 @@
 		&mut self,
 		caller: Caller,
 		to: Address,
-		tokens: Vec<(U256, String)>,
+		tokens: Vec<TokenUri>,
 	) -> Result<bool> {
 		let key = key::url();
 		let caller = T::CrossAccountId::from_eth(caller);
@@ -961,7 +961,7 @@
 			.weight_calls_budget(<StructureWeight<T>>::find_parent());
 
 		let mut data = Vec::with_capacity(tokens.len());
-		for (id, token_uri) in tokens {
+		for TokenUri { id, uri } in tokens {
 			let id: u32 = id.try_into().map_err(|_| "token id overflow")?;
 			if id != expected_index {
 				return Err("item id should be next".into());
@@ -972,7 +972,7 @@
 			properties
 				.try_push(Property {
 					key: key.clone(),
-					value: token_uri
+					value: uri
 						.into_bytes()
 						.try_into()
 						.map_err(|_| "token uri is too long")?,
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
@@ -949,7 +949,7 @@
 	// /// @param tokens array of pairs of token ID and token URI for minted tokens
 	// /// @dev EVM selector for this function is: 0x36543006,
 	// ///  or in textual repr: mintBulkWithTokenURI(address,(uint256,string)[])
-	// function mintBulkWithTokenURI(address to, Tuple15[] memory tokens) public returns (bool) {
+	// function mintBulkWithTokenURI(address to, TokenUri[] memory tokens) public returns (bool) {
 	// 	require(false, stub_error);
 	// 	to;
 	// 	tokens;
@@ -981,10 +981,12 @@
 	}
 }
 
-/// @dev anonymous struct
-struct Tuple15 {
-	uint256 field_0;
-	string field_1;
+/// Data for creation token with uri.
+struct TokenUri {
+	/// Id of new token.
+	uint256 id;
+	/// Uri of new token.
+	string uri;
 }
 
 /// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
modifiedpallets/refungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/refungible/src/erc.rs
+++ b/pallets/refungible/src/erc.rs
@@ -34,7 +34,7 @@
 	CollectionHandle, CollectionPropertyPermissions, CommonCollectionOperations,
 	Error as CommonError,
 	erc::{CommonEvmHandler, CollectionCall, static_property::key},
-	eth,
+	eth::{self, TokenUri},
 };
 use pallet_evm::{account::CrossAccountId, PrecompileHandle};
 use pallet_evm_coder_substrate::{call, dispatch_to_evm};
@@ -999,7 +999,7 @@
 		&mut self,
 		caller: Caller,
 		to: Address,
-		tokens: Vec<(U256, String)>,
+		tokens: Vec<TokenUri>,
 	) -> Result<bool> {
 		let key = key::url();
 		let caller = T::CrossAccountId::from_eth(caller);
@@ -1017,7 +1017,7 @@
 			.collect::<BTreeMap<_, _>>()
 			.try_into()
 			.unwrap();
-		for (id, token_uri) in tokens {
+		for TokenUri { id, uri } in tokens {
 			let id: u32 = id.try_into().map_err(|_| "token id overflow")?;
 			if id != expected_index {
 				return Err("item id should be next".into());
@@ -1028,7 +1028,7 @@
 			properties
 				.try_push(Property {
 					key: key.clone(),
-					value: token_uri
+					value: uri
 						.into_bytes()
 						.try_into()
 						.map_err(|_| "token uri is too long")?,
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
@@ -938,7 +938,7 @@
 	// /// @param tokens array of pairs of token ID and token URI for minted tokens
 	// /// @dev EVM selector for this function is: 0x36543006,
 	// ///  or in textual repr: mintBulkWithTokenURI(address,(uint256,string)[])
-	// function mintBulkWithTokenURI(address to, Tuple14[] memory tokens) public returns (bool) {
+	// function mintBulkWithTokenURI(address to, TokenUri[] memory tokens) public returns (bool) {
 	// 	require(false, stub_error);
 	// 	to;
 	// 	tokens;
@@ -982,10 +982,12 @@
 	}
 }
 
-/// @dev anonymous struct
-struct Tuple14 {
-	uint256 field_0;
-	string field_1;
+/// Data for creation token with uri.
+struct TokenUri {
+	/// Id of new token.
+	uint256 id;
+	/// Uri of new token.
+	string uri;
 }
 
 /// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
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 CrossAddress",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 CrossAddress",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 CrossAddress",104        "name": "owner",105        "type": "tuple"106      },107      {108        "components": [109          { "internalType": "address", "name": "eth", "type": "address" },110          { "internalType": "uint256", "name": "sub", "type": "uint256" }111        ],112        "internalType": "struct CrossAddress",113        "name": "spender",114        "type": "tuple"115      }116    ],117    "name": "allowanceCross",118    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],119    "stateMutability": "view",120    "type": "function"121  },122  {123    "inputs": [124      {125        "components": [126          { "internalType": "address", "name": "eth", "type": "address" },127          { "internalType": "uint256", "name": "sub", "type": "uint256" }128        ],129        "internalType": "struct CrossAddress",130        "name": "user",131        "type": "tuple"132      }133    ],134    "name": "allowlistedCross",135    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],136    "stateMutability": "view",137    "type": "function"138  },139  {140    "inputs": [141      { "internalType": "address", "name": "spender", "type": "address" },142      { "internalType": "uint256", "name": "amount", "type": "uint256" }143    ],144    "name": "approve",145    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],146    "stateMutability": "nonpayable",147    "type": "function"148  },149  {150    "inputs": [151      {152        "components": [153          { "internalType": "address", "name": "eth", "type": "address" },154          { "internalType": "uint256", "name": "sub", "type": "uint256" }155        ],156        "internalType": "struct CrossAddress",157        "name": "spender",158        "type": "tuple"159      },160      { "internalType": "uint256", "name": "amount", "type": "uint256" }161    ],162    "name": "approveCross",163    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],164    "stateMutability": "nonpayable",165    "type": "function"166  },167  {168    "inputs": [169      { "internalType": "address", "name": "owner", "type": "address" }170    ],171    "name": "balanceOf",172    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],173    "stateMutability": "view",174    "type": "function"175  },176  {177    "inputs": [178      {179        "components": [180          { "internalType": "address", "name": "eth", "type": "address" },181          { "internalType": "uint256", "name": "sub", "type": "uint256" }182        ],183        "internalType": "struct CrossAddress",184        "name": "from",185        "type": "tuple"186      },187      { "internalType": "uint256", "name": "amount", "type": "uint256" }188    ],189    "name": "burnFromCross",190    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],191    "stateMutability": "nonpayable",192    "type": "function"193  },194  {195    "inputs": [196      {197        "components": [198          { "internalType": "address", "name": "eth", "type": "address" },199          { "internalType": "uint256", "name": "sub", "type": "uint256" }200        ],201        "internalType": "struct CrossAddress",202        "name": "newOwner",203        "type": "tuple"204      }205    ],206    "name": "changeCollectionOwnerCross",207    "outputs": [],208    "stateMutability": "nonpayable",209    "type": "function"210  },211  {212    "inputs": [],213    "name": "collectionAdmins",214    "outputs": [215      {216        "components": [217          { "internalType": "address", "name": "eth", "type": "address" },218          { "internalType": "uint256", "name": "sub", "type": "uint256" }219        ],220        "internalType": "struct CrossAddress[]",221        "name": "",222        "type": "tuple[]"223      }224    ],225    "stateMutability": "view",226    "type": "function"227  },228  {229    "inputs": [],230    "name": "collectionHelperAddress",231    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],232    "stateMutability": "view",233    "type": "function"234  },235  {236    "inputs": [],237    "name": "collectionLimits",238    "outputs": [239      {240        "components": [241          {242            "internalType": "enum CollectionLimitField",243            "name": "field",244            "type": "uint8"245          },246          {247            "components": [248              { "internalType": "bool", "name": "status", "type": "bool" },249              { "internalType": "uint256", "name": "value", "type": "uint256" }250            ],251            "internalType": "struct OptionUint256",252            "name": "value",253            "type": "tuple"254          }255        ],256        "internalType": "struct CollectionLimit[]",257        "name": "",258        "type": "tuple[]"259      }260    ],261    "stateMutability": "view",262    "type": "function"263  },264  {265    "inputs": [],266    "name": "collectionNestingPermissions",267    "outputs": [268      {269        "components": [270          {271            "internalType": "enum CollectionPermissionField",272            "name": "field",273            "type": "uint8"274          },275          { "internalType": "bool", "name": "value", "type": "bool" }276        ],277        "internalType": "struct CollectionNestingPermission[]",278        "name": "",279        "type": "tuple[]"280      }281    ],282    "stateMutability": "view",283    "type": "function"284  },285  {286    "inputs": [],287    "name": "collectionNestingRestrictedCollectionIds",288    "outputs": [289      {290        "components": [291          { "internalType": "bool", "name": "token_owner", "type": "bool" },292          { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }293        ],294        "internalType": "struct CollectionNesting",295        "name": "",296        "type": "tuple"297      }298    ],299    "stateMutability": "view",300    "type": "function"301  },302  {303    "inputs": [],304    "name": "collectionOwner",305    "outputs": [306      {307        "components": [308          { "internalType": "address", "name": "eth", "type": "address" },309          { "internalType": "uint256", "name": "sub", "type": "uint256" }310        ],311        "internalType": "struct CrossAddress",312        "name": "",313        "type": "tuple"314      }315    ],316    "stateMutability": "view",317    "type": "function"318  },319  {320    "inputs": [321      { "internalType": "string[]", "name": "keys", "type": "string[]" }322    ],323    "name": "collectionProperties",324    "outputs": [325      {326        "components": [327          { "internalType": "string", "name": "key", "type": "string" },328          { "internalType": "bytes", "name": "value", "type": "bytes" }329        ],330        "internalType": "struct Property[]",331        "name": "",332        "type": "tuple[]"333      }334    ],335    "stateMutability": "view",336    "type": "function"337  },338  {339    "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],340    "name": "collectionProperty",341    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],342    "stateMutability": "view",343    "type": "function"344  },345  {346    "inputs": [],347    "name": "collectionSponsor",348    "outputs": [349      {350        "components": [351          { "internalType": "address", "name": "eth", "type": "address" },352          { "internalType": "uint256", "name": "sub", "type": "uint256" }353        ],354        "internalType": "struct CrossAddress",355        "name": "",356        "type": "tuple"357      }358    ],359    "stateMutability": "view",360    "type": "function"361  },362  {363    "inputs": [],364    "name": "confirmCollectionSponsorship",365    "outputs": [],366    "stateMutability": "nonpayable",367    "type": "function"368  },369  {370    "inputs": [],371    "name": "contractAddress",372    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],373    "stateMutability": "view",374    "type": "function"375  },376  {377    "inputs": [],378    "name": "decimals",379    "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }],380    "stateMutability": "view",381    "type": "function"382  },383  {384    "inputs": [385      { "internalType": "string[]", "name": "keys", "type": "string[]" }386    ],387    "name": "deleteCollectionProperties",388    "outputs": [],389    "stateMutability": "nonpayable",390    "type": "function"391  },392  {393    "inputs": [],394    "name": "description",395    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],396    "stateMutability": "view",397    "type": "function"398  },399  {400    "inputs": [],401    "name": "hasCollectionPendingSponsor",402    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],403    "stateMutability": "view",404    "type": "function"405  },406  {407    "inputs": [408      {409        "components": [410          { "internalType": "address", "name": "eth", "type": "address" },411          { "internalType": "uint256", "name": "sub", "type": "uint256" }412        ],413        "internalType": "struct CrossAddress",414        "name": "user",415        "type": "tuple"416      }417    ],418    "name": "isOwnerOrAdminCross",419    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],420    "stateMutability": "view",421    "type": "function"422  },423  {424    "inputs": [425      { "internalType": "address", "name": "to", "type": "address" },426      { "internalType": "uint256", "name": "amount", "type": "uint256" }427    ],428    "name": "mint",429    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],430    "stateMutability": "nonpayable",431    "type": "function"432  },433  {434    "inputs": [435      {436        "components": [437          { "internalType": "address", "name": "field_0", "type": "address" },438          { "internalType": "uint256", "name": "field_1", "type": "uint256" }439        ],440        "internalType": "struct Tuple11[]",441        "name": "amounts",442        "type": "tuple[]"443      }444    ],445    "name": "mintBulk",446    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],447    "stateMutability": "nonpayable",448    "type": "function"449  },450  {451    "inputs": [452      {453        "components": [454          { "internalType": "address", "name": "eth", "type": "address" },455          { "internalType": "uint256", "name": "sub", "type": "uint256" }456        ],457        "internalType": "struct CrossAddress",458        "name": "to",459        "type": "tuple"460      },461      { "internalType": "uint256", "name": "amount", "type": "uint256" }462    ],463    "name": "mintCross",464    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],465    "stateMutability": "nonpayable",466    "type": "function"467  },468  {469    "inputs": [],470    "name": "name",471    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],472    "stateMutability": "view",473    "type": "function"474  },475  {476    "inputs": [477      {478        "components": [479          { "internalType": "address", "name": "eth", "type": "address" },480          { "internalType": "uint256", "name": "sub", "type": "uint256" }481        ],482        "internalType": "struct CrossAddress",483        "name": "admin",484        "type": "tuple"485      }486    ],487    "name": "removeCollectionAdminCross",488    "outputs": [],489    "stateMutability": "nonpayable",490    "type": "function"491  },492  {493    "inputs": [],494    "name": "removeCollectionSponsor",495    "outputs": [],496    "stateMutability": "nonpayable",497    "type": "function"498  },499  {500    "inputs": [501      {502        "components": [503          { "internalType": "address", "name": "eth", "type": "address" },504          { "internalType": "uint256", "name": "sub", "type": "uint256" }505        ],506        "internalType": "struct CrossAddress",507        "name": "user",508        "type": "tuple"509      }510    ],511    "name": "removeFromCollectionAllowListCross",512    "outputs": [],513    "stateMutability": "nonpayable",514    "type": "function"515  },516  {517    "inputs": [518      { "internalType": "enum AccessMode", "name": "mode", "type": "uint8" }519    ],520    "name": "setCollectionAccess",521    "outputs": [],522    "stateMutability": "nonpayable",523    "type": "function"524  },525  {526    "inputs": [527      {528        "components": [529          {530            "internalType": "enum CollectionLimitField",531            "name": "field",532            "type": "uint8"533          },534          {535            "components": [536              { "internalType": "bool", "name": "status", "type": "bool" },537              { "internalType": "uint256", "name": "value", "type": "uint256" }538            ],539            "internalType": "struct OptionUint256",540            "name": "value",541            "type": "tuple"542          }543        ],544        "internalType": "struct CollectionLimit",545        "name": "limit",546        "type": "tuple"547      }548    ],549    "name": "setCollectionLimit",550    "outputs": [],551    "stateMutability": "nonpayable",552    "type": "function"553  },554  {555    "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],556    "name": "setCollectionMintMode",557    "outputs": [],558    "stateMutability": "nonpayable",559    "type": "function"560  },561  {562    "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],563    "name": "setCollectionNesting",564    "outputs": [],565    "stateMutability": "nonpayable",566    "type": "function"567  },568  {569    "inputs": [570      { "internalType": "bool", "name": "enable", "type": "bool" },571      {572        "internalType": "address[]",573        "name": "collections",574        "type": "address[]"575      }576    ],577    "name": "setCollectionNesting",578    "outputs": [],579    "stateMutability": "nonpayable",580    "type": "function"581  },582  {583    "inputs": [584      {585        "components": [586          { "internalType": "string", "name": "key", "type": "string" },587          { "internalType": "bytes", "name": "value", "type": "bytes" }588        ],589        "internalType": "struct Property[]",590        "name": "properties",591        "type": "tuple[]"592      }593    ],594    "name": "setCollectionProperties",595    "outputs": [],596    "stateMutability": "nonpayable",597    "type": "function"598  },599  {600    "inputs": [601      {602        "components": [603          { "internalType": "address", "name": "eth", "type": "address" },604          { "internalType": "uint256", "name": "sub", "type": "uint256" }605        ],606        "internalType": "struct CrossAddress",607        "name": "sponsor",608        "type": "tuple"609      }610    ],611    "name": "setCollectionSponsorCross",612    "outputs": [],613    "stateMutability": "nonpayable",614    "type": "function"615  },616  {617    "inputs": [618      { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }619    ],620    "name": "supportsInterface",621    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],622    "stateMutability": "view",623    "type": "function"624  },625  {626    "inputs": [],627    "name": "symbol",628    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],629    "stateMutability": "view",630    "type": "function"631  },632  {633    "inputs": [],634    "name": "totalSupply",635    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],636    "stateMutability": "view",637    "type": "function"638  },639  {640    "inputs": [641      { "internalType": "address", "name": "to", "type": "address" },642      { "internalType": "uint256", "name": "amount", "type": "uint256" }643    ],644    "name": "transfer",645    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],646    "stateMutability": "nonpayable",647    "type": "function"648  },649  {650    "inputs": [651      {652        "components": [653          { "internalType": "address", "name": "eth", "type": "address" },654          { "internalType": "uint256", "name": "sub", "type": "uint256" }655        ],656        "internalType": "struct CrossAddress",657        "name": "to",658        "type": "tuple"659      },660      { "internalType": "uint256", "name": "amount", "type": "uint256" }661    ],662    "name": "transferCross",663    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],664    "stateMutability": "nonpayable",665    "type": "function"666  },667  {668    "inputs": [669      { "internalType": "address", "name": "from", "type": "address" },670      { "internalType": "address", "name": "to", "type": "address" },671      { "internalType": "uint256", "name": "amount", "type": "uint256" }672    ],673    "name": "transferFrom",674    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],675    "stateMutability": "nonpayable",676    "type": "function"677  },678  {679    "inputs": [680      {681        "components": [682          { "internalType": "address", "name": "eth", "type": "address" },683          { "internalType": "uint256", "name": "sub", "type": "uint256" }684        ],685        "internalType": "struct CrossAddress",686        "name": "from",687        "type": "tuple"688      },689      {690        "components": [691          { "internalType": "address", "name": "eth", "type": "address" },692          { "internalType": "uint256", "name": "sub", "type": "uint256" }693        ],694        "internalType": "struct CrossAddress",695        "name": "to",696        "type": "tuple"697      },698      { "internalType": "uint256", "name": "amount", "type": "uint256" }699    ],700    "name": "transferFromCross",701    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],702    "stateMutability": "nonpayable",703    "type": "function"704  },705  {706    "inputs": [],707    "name": "uniqueCollectionType",708    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],709    "stateMutability": "view",710    "type": "function"711  }712]
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 CrossAddress",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 CrossAddress",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 CrossAddress",104        "name": "owner",105        "type": "tuple"106      },107      {108        "components": [109          { "internalType": "address", "name": "eth", "type": "address" },110          { "internalType": "uint256", "name": "sub", "type": "uint256" }111        ],112        "internalType": "struct CrossAddress",113        "name": "spender",114        "type": "tuple"115      }116    ],117    "name": "allowanceCross",118    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],119    "stateMutability": "view",120    "type": "function"121  },122  {123    "inputs": [124      {125        "components": [126          { "internalType": "address", "name": "eth", "type": "address" },127          { "internalType": "uint256", "name": "sub", "type": "uint256" }128        ],129        "internalType": "struct CrossAddress",130        "name": "user",131        "type": "tuple"132      }133    ],134    "name": "allowlistedCross",135    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],136    "stateMutability": "view",137    "type": "function"138  },139  {140    "inputs": [141      { "internalType": "address", "name": "spender", "type": "address" },142      { "internalType": "uint256", "name": "amount", "type": "uint256" }143    ],144    "name": "approve",145    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],146    "stateMutability": "nonpayable",147    "type": "function"148  },149  {150    "inputs": [151      {152        "components": [153          { "internalType": "address", "name": "eth", "type": "address" },154          { "internalType": "uint256", "name": "sub", "type": "uint256" }155        ],156        "internalType": "struct CrossAddress",157        "name": "spender",158        "type": "tuple"159      },160      { "internalType": "uint256", "name": "amount", "type": "uint256" }161    ],162    "name": "approveCross",163    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],164    "stateMutability": "nonpayable",165    "type": "function"166  },167  {168    "inputs": [169      { "internalType": "address", "name": "owner", "type": "address" }170    ],171    "name": "balanceOf",172    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],173    "stateMutability": "view",174    "type": "function"175  },176  {177    "inputs": [178      {179        "components": [180          { "internalType": "address", "name": "eth", "type": "address" },181          { "internalType": "uint256", "name": "sub", "type": "uint256" }182        ],183        "internalType": "struct CrossAddress",184        "name": "from",185        "type": "tuple"186      },187      { "internalType": "uint256", "name": "amount", "type": "uint256" }188    ],189    "name": "burnFromCross",190    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],191    "stateMutability": "nonpayable",192    "type": "function"193  },194  {195    "inputs": [196      {197        "components": [198          { "internalType": "address", "name": "eth", "type": "address" },199          { "internalType": "uint256", "name": "sub", "type": "uint256" }200        ],201        "internalType": "struct CrossAddress",202        "name": "newOwner",203        "type": "tuple"204      }205    ],206    "name": "changeCollectionOwnerCross",207    "outputs": [],208    "stateMutability": "nonpayable",209    "type": "function"210  },211  {212    "inputs": [],213    "name": "collectionAdmins",214    "outputs": [215      {216        "components": [217          { "internalType": "address", "name": "eth", "type": "address" },218          { "internalType": "uint256", "name": "sub", "type": "uint256" }219        ],220        "internalType": "struct CrossAddress[]",221        "name": "",222        "type": "tuple[]"223      }224    ],225    "stateMutability": "view",226    "type": "function"227  },228  {229    "inputs": [],230    "name": "collectionHelperAddress",231    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],232    "stateMutability": "view",233    "type": "function"234  },235  {236    "inputs": [],237    "name": "collectionLimits",238    "outputs": [239      {240        "components": [241          {242            "internalType": "enum CollectionLimitField",243            "name": "field",244            "type": "uint8"245          },246          {247            "components": [248              { "internalType": "bool", "name": "status", "type": "bool" },249              { "internalType": "uint256", "name": "value", "type": "uint256" }250            ],251            "internalType": "struct OptionUint256",252            "name": "value",253            "type": "tuple"254          }255        ],256        "internalType": "struct CollectionLimit[]",257        "name": "",258        "type": "tuple[]"259      }260    ],261    "stateMutability": "view",262    "type": "function"263  },264  {265    "inputs": [],266    "name": "collectionNestingPermissions",267    "outputs": [268      {269        "components": [270          {271            "internalType": "enum CollectionPermissionField",272            "name": "field",273            "type": "uint8"274          },275          { "internalType": "bool", "name": "value", "type": "bool" }276        ],277        "internalType": "struct CollectionNestingPermission[]",278        "name": "",279        "type": "tuple[]"280      }281    ],282    "stateMutability": "view",283    "type": "function"284  },285  {286    "inputs": [],287    "name": "collectionNestingRestrictedCollectionIds",288    "outputs": [289      {290        "components": [291          { "internalType": "bool", "name": "token_owner", "type": "bool" },292          { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }293        ],294        "internalType": "struct CollectionNesting",295        "name": "",296        "type": "tuple"297      }298    ],299    "stateMutability": "view",300    "type": "function"301  },302  {303    "inputs": [],304    "name": "collectionOwner",305    "outputs": [306      {307        "components": [308          { "internalType": "address", "name": "eth", "type": "address" },309          { "internalType": "uint256", "name": "sub", "type": "uint256" }310        ],311        "internalType": "struct CrossAddress",312        "name": "",313        "type": "tuple"314      }315    ],316    "stateMutability": "view",317    "type": "function"318  },319  {320    "inputs": [321      { "internalType": "string[]", "name": "keys", "type": "string[]" }322    ],323    "name": "collectionProperties",324    "outputs": [325      {326        "components": [327          { "internalType": "string", "name": "key", "type": "string" },328          { "internalType": "bytes", "name": "value", "type": "bytes" }329        ],330        "internalType": "struct Property[]",331        "name": "",332        "type": "tuple[]"333      }334    ],335    "stateMutability": "view",336    "type": "function"337  },338  {339    "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],340    "name": "collectionProperty",341    "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],342    "stateMutability": "view",343    "type": "function"344  },345  {346    "inputs": [],347    "name": "collectionSponsor",348    "outputs": [349      {350        "components": [351          { "internalType": "address", "name": "eth", "type": "address" },352          { "internalType": "uint256", "name": "sub", "type": "uint256" }353        ],354        "internalType": "struct CrossAddress",355        "name": "",356        "type": "tuple"357      }358    ],359    "stateMutability": "view",360    "type": "function"361  },362  {363    "inputs": [],364    "name": "confirmCollectionSponsorship",365    "outputs": [],366    "stateMutability": "nonpayable",367    "type": "function"368  },369  {370    "inputs": [],371    "name": "contractAddress",372    "outputs": [{ "internalType": "address", "name": "", "type": "address" }],373    "stateMutability": "view",374    "type": "function"375  },376  {377    "inputs": [],378    "name": "decimals",379    "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }],380    "stateMutability": "view",381    "type": "function"382  },383  {384    "inputs": [385      { "internalType": "string[]", "name": "keys", "type": "string[]" }386    ],387    "name": "deleteCollectionProperties",388    "outputs": [],389    "stateMutability": "nonpayable",390    "type": "function"391  },392  {393    "inputs": [],394    "name": "description",395    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],396    "stateMutability": "view",397    "type": "function"398  },399  {400    "inputs": [],401    "name": "hasCollectionPendingSponsor",402    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],403    "stateMutability": "view",404    "type": "function"405  },406  {407    "inputs": [408      {409        "components": [410          { "internalType": "address", "name": "eth", "type": "address" },411          { "internalType": "uint256", "name": "sub", "type": "uint256" }412        ],413        "internalType": "struct CrossAddress",414        "name": "user",415        "type": "tuple"416      }417    ],418    "name": "isOwnerOrAdminCross",419    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],420    "stateMutability": "view",421    "type": "function"422  },423  {424    "inputs": [425      { "internalType": "address", "name": "to", "type": "address" },426      { "internalType": "uint256", "name": "amount", "type": "uint256" }427    ],428    "name": "mint",429    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],430    "stateMutability": "nonpayable",431    "type": "function"432  },433  {434    "inputs": [435      {436        "components": [437          { "internalType": "address", "name": "to", "type": "address" },438          { "internalType": "uint256", "name": "amount", "type": "uint256" }439        ],440        "internalType": "struct AmountForAddress[]",441        "name": "amounts",442        "type": "tuple[]"443      }444    ],445    "name": "mintBulk",446    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],447    "stateMutability": "nonpayable",448    "type": "function"449  },450  {451    "inputs": [452      {453        "components": [454          { "internalType": "address", "name": "eth", "type": "address" },455          { "internalType": "uint256", "name": "sub", "type": "uint256" }456        ],457        "internalType": "struct CrossAddress",458        "name": "to",459        "type": "tuple"460      },461      { "internalType": "uint256", "name": "amount", "type": "uint256" }462    ],463    "name": "mintCross",464    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],465    "stateMutability": "nonpayable",466    "type": "function"467  },468  {469    "inputs": [],470    "name": "name",471    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],472    "stateMutability": "view",473    "type": "function"474  },475  {476    "inputs": [477      {478        "components": [479          { "internalType": "address", "name": "eth", "type": "address" },480          { "internalType": "uint256", "name": "sub", "type": "uint256" }481        ],482        "internalType": "struct CrossAddress",483        "name": "admin",484        "type": "tuple"485      }486    ],487    "name": "removeCollectionAdminCross",488    "outputs": [],489    "stateMutability": "nonpayable",490    "type": "function"491  },492  {493    "inputs": [],494    "name": "removeCollectionSponsor",495    "outputs": [],496    "stateMutability": "nonpayable",497    "type": "function"498  },499  {500    "inputs": [501      {502        "components": [503          { "internalType": "address", "name": "eth", "type": "address" },504          { "internalType": "uint256", "name": "sub", "type": "uint256" }505        ],506        "internalType": "struct CrossAddress",507        "name": "user",508        "type": "tuple"509      }510    ],511    "name": "removeFromCollectionAllowListCross",512    "outputs": [],513    "stateMutability": "nonpayable",514    "type": "function"515  },516  {517    "inputs": [518      { "internalType": "enum AccessMode", "name": "mode", "type": "uint8" }519    ],520    "name": "setCollectionAccess",521    "outputs": [],522    "stateMutability": "nonpayable",523    "type": "function"524  },525  {526    "inputs": [527      {528        "components": [529          {530            "internalType": "enum CollectionLimitField",531            "name": "field",532            "type": "uint8"533          },534          {535            "components": [536              { "internalType": "bool", "name": "status", "type": "bool" },537              { "internalType": "uint256", "name": "value", "type": "uint256" }538            ],539            "internalType": "struct OptionUint256",540            "name": "value",541            "type": "tuple"542          }543        ],544        "internalType": "struct CollectionLimit",545        "name": "limit",546        "type": "tuple"547      }548    ],549    "name": "setCollectionLimit",550    "outputs": [],551    "stateMutability": "nonpayable",552    "type": "function"553  },554  {555    "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],556    "name": "setCollectionMintMode",557    "outputs": [],558    "stateMutability": "nonpayable",559    "type": "function"560  },561  {562    "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],563    "name": "setCollectionNesting",564    "outputs": [],565    "stateMutability": "nonpayable",566    "type": "function"567  },568  {569    "inputs": [570      { "internalType": "bool", "name": "enable", "type": "bool" },571      {572        "internalType": "address[]",573        "name": "collections",574        "type": "address[]"575      }576    ],577    "name": "setCollectionNesting",578    "outputs": [],579    "stateMutability": "nonpayable",580    "type": "function"581  },582  {583    "inputs": [584      {585        "components": [586          { "internalType": "string", "name": "key", "type": "string" },587          { "internalType": "bytes", "name": "value", "type": "bytes" }588        ],589        "internalType": "struct Property[]",590        "name": "properties",591        "type": "tuple[]"592      }593    ],594    "name": "setCollectionProperties",595    "outputs": [],596    "stateMutability": "nonpayable",597    "type": "function"598  },599  {600    "inputs": [601      {602        "components": [603          { "internalType": "address", "name": "eth", "type": "address" },604          { "internalType": "uint256", "name": "sub", "type": "uint256" }605        ],606        "internalType": "struct CrossAddress",607        "name": "sponsor",608        "type": "tuple"609      }610    ],611    "name": "setCollectionSponsorCross",612    "outputs": [],613    "stateMutability": "nonpayable",614    "type": "function"615  },616  {617    "inputs": [618      { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }619    ],620    "name": "supportsInterface",621    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],622    "stateMutability": "view",623    "type": "function"624  },625  {626    "inputs": [],627    "name": "symbol",628    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],629    "stateMutability": "view",630    "type": "function"631  },632  {633    "inputs": [],634    "name": "totalSupply",635    "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],636    "stateMutability": "view",637    "type": "function"638  },639  {640    "inputs": [641      { "internalType": "address", "name": "to", "type": "address" },642      { "internalType": "uint256", "name": "amount", "type": "uint256" }643    ],644    "name": "transfer",645    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],646    "stateMutability": "nonpayable",647    "type": "function"648  },649  {650    "inputs": [651      {652        "components": [653          { "internalType": "address", "name": "eth", "type": "address" },654          { "internalType": "uint256", "name": "sub", "type": "uint256" }655        ],656        "internalType": "struct CrossAddress",657        "name": "to",658        "type": "tuple"659      },660      { "internalType": "uint256", "name": "amount", "type": "uint256" }661    ],662    "name": "transferCross",663    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],664    "stateMutability": "nonpayable",665    "type": "function"666  },667  {668    "inputs": [669      { "internalType": "address", "name": "from", "type": "address" },670      { "internalType": "address", "name": "to", "type": "address" },671      { "internalType": "uint256", "name": "amount", "type": "uint256" }672    ],673    "name": "transferFrom",674    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],675    "stateMutability": "nonpayable",676    "type": "function"677  },678  {679    "inputs": [680      {681        "components": [682          { "internalType": "address", "name": "eth", "type": "address" },683          { "internalType": "uint256", "name": "sub", "type": "uint256" }684        ],685        "internalType": "struct CrossAddress",686        "name": "from",687        "type": "tuple"688      },689      {690        "components": [691          { "internalType": "address", "name": "eth", "type": "address" },692          { "internalType": "uint256", "name": "sub", "type": "uint256" }693        ],694        "internalType": "struct CrossAddress",695        "name": "to",696        "type": "tuple"697      },698      { "internalType": "uint256", "name": "amount", "type": "uint256" }699    ],700    "name": "transferFromCross",701    "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],702    "stateMutability": "nonpayable",703    "type": "function"704  },705  {706    "inputs": [],707    "name": "uniqueCollectionType",708    "outputs": [{ "internalType": "string", "name": "", "type": "string" }],709    "stateMutability": "view",710    "type": "function"711  }712]
modifiedtests/src/eth/api/UniqueFungible.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueFungible.sol
+++ b/tests/src/eth/api/UniqueFungible.sol
@@ -398,7 +398,7 @@
 	/// @param amounts array of pairs of account address and amount
 	/// @dev EVM selector for this function is: 0x1acf2d55,
 	///  or in textual repr: mintBulk((address,uint256)[])
-	function mintBulk(Tuple11[] memory amounts) external returns (bool);
+	function mintBulk(AmountForAddress[] memory amounts) external returns (bool);
 
 	/// @dev EVM selector for this function is: 0x2ada85ff,
 	///  or in textual repr: transferCross((address,uint256),uint256)
@@ -418,10 +418,9 @@
 	function collectionHelperAddress() external view returns (address);
 }
 
-/// @dev anonymous struct
-struct Tuple11 {
-	address field_0;
-	uint256 field_1;
+struct AmountForAddress {
+	address to;
+	uint256 amount;
 }
 
 /// @dev the ERC-165 identifier for this interface is 0x40c10f19
modifiedtests/src/eth/api/UniqueNFT.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueNFT.sol
+++ b/tests/src/eth/api/UniqueNFT.sol
@@ -644,7 +644,7 @@
 	// /// @param tokens array of pairs of token ID and token URI for minted tokens
 	// /// @dev EVM selector for this function is: 0x36543006,
 	// ///  or in textual repr: mintBulkWithTokenURI(address,(uint256,string)[])
-	// function mintBulkWithTokenURI(address to, Tuple13[] memory tokens) external returns (bool);
+	// function mintBulkWithTokenURI(address to, TokenUri[] memory tokens) external returns (bool);
 
 	/// @notice Function to mint a token.
 	/// @param to The new owner crossAccountId
@@ -660,10 +660,12 @@
 	function collectionHelperAddress() external view returns (address);
 }
 
-/// @dev anonymous struct
-struct Tuple13 {
-	uint256 field_0;
-	string field_1;
+/// Data for creation token with uri.
+struct TokenUri {
+	/// Id of new token.
+	uint256 id;
+	/// Uri of new token.
+	string uri;
 }
 
 /// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
modifiedtests/src/eth/api/UniqueRefungible.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueRefungible.sol
+++ b/tests/src/eth/api/UniqueRefungible.sol
@@ -638,7 +638,7 @@
 	// /// @param tokens array of pairs of token ID and token URI for minted tokens
 	// /// @dev EVM selector for this function is: 0x36543006,
 	// ///  or in textual repr: mintBulkWithTokenURI(address,(uint256,string)[])
-	// function mintBulkWithTokenURI(address to, Tuple12[] memory tokens) external returns (bool);
+	// function mintBulkWithTokenURI(address to, TokenUri[] memory tokens) external returns (bool);
 
 	/// @notice Function to mint a token.
 	/// @param to The new owner crossAccountId
@@ -661,10 +661,12 @@
 	function collectionHelperAddress() external view returns (address);
 }
 
-/// @dev anonymous struct
-struct Tuple12 {
-	uint256 field_0;
-	string field_1;
+/// Data for creation token with uri.
+struct TokenUri {
+	/// Id of new token.
+	uint256 id;
+	/// Uri of new token.
+	string uri;
 }
 
 /// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
modifiedtests/src/eth/proxy/UniqueNFTProxy.soldiffbeforeafterboth
--- a/tests/src/eth/proxy/UniqueNFTProxy.sol
+++ b/tests/src/eth/proxy/UniqueNFTProxy.sol
@@ -168,7 +168,7 @@
         return proxied.mintBulk(to, tokenIds);
     }
 
-    function mintBulkWithTokenURI(address to, Tuple6[] memory tokens)
+    function mintBulkWithTokenURI(address to, TokenUri[] memory tokens)
         external
         override
         returns (bool)