--- a/pallets/common/src/erc.rs +++ b/pallets/common/src/erc.rs @@ -35,8 +35,7 @@ use crate::{ Pallet, CollectionHandle, Config, CollectionProperties, SelfWeightOf, eth::{ - Property as PropertyStruct, EthCrossAccount, CollectionPermissions as EvmPermissions, - CollectionLimitField as EvmCollectionLimits, self, + CollectionPermissions as EvmPermissions, CollectionLimitField as EvmCollectionLimits, self, }, weights::WeightInfo, }; @@ -122,13 +121,13 @@ fn set_collection_properties( &mut self, caller: caller, - properties: Vec, + properties: Vec, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); let properties = properties .into_iter() - .map(|PropertyStruct { key, value }| { + .map(|eth::Property { key, value }| { let key = >::from(key) .try_into() .map_err(|_| "key too large")?; @@ -196,7 +195,7 @@ /// /// @param keys Properties keys. Empty keys for all propertyes. /// @return Vector of properties key/value pairs. - fn collection_properties(&self, keys: Vec) -> Result> { + fn collection_properties(&self, keys: Vec) -> Result> { let keys = keys .into_iter() .map(|key| { @@ -218,7 +217,7 @@ let key = string::from_utf8(p.key.into()).map_err(|e| Error::Revert(format!("{}", e)))?; let value = bytes(p.value.to_vec()); - Ok(PropertyStruct { key, value }) + Ok(eth::Property { key, value }) }) .collect::>>()?; Ok(properties) @@ -248,7 +247,7 @@ fn set_collection_sponsor_cross( &mut self, caller: caller, - sponsor: EthCrossAccount, + sponsor: eth::CrossAccount, ) -> Result { self.consume_store_reads_and_writes(1, 1)?; @@ -288,13 +287,13 @@ /// Get current sponsor. /// /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw. - fn collection_sponsor(&self) -> Result { + fn collection_sponsor(&self) -> Result { let sponsor = match self.collection.sponsorship.sponsor() { Some(sponsor) => sponsor, None => return Ok(Default::default()), }; - Ok(EthCrossAccount::from_sub::(&sponsor)) + Ok(eth::CrossAccount::from_sub::(&sponsor)) } /// Get current collection limits. @@ -377,7 +376,7 @@ fn add_collection_admin_cross( &mut self, caller: caller, - new_admin: EthCrossAccount, + new_admin: eth::CrossAccount, ) -> Result { self.consume_store_reads_and_writes(2, 2)?; @@ -392,7 +391,7 @@ fn remove_collection_admin_cross( &mut self, caller: caller, - admin: EthCrossAccount, + admin: eth::CrossAccount, ) -> Result { self.consume_store_reads_and_writes(2, 2)?; @@ -534,7 +533,7 @@ /// Checks that user allowed to operate with collection. /// /// @param user User address to check. - fn allowlisted_cross(&self, user: EthCrossAccount) -> Result { + fn allowlisted_cross(&self, user: eth::CrossAccount) -> Result { let user = user.into_sub_cross_account::()?; Ok(Pallet::::allowed(self.id, user)) } @@ -558,7 +557,7 @@ fn add_to_collection_allow_list_cross( &mut self, caller: caller, - user: EthCrossAccount, + user: eth::CrossAccount, ) -> Result { self.consume_store_writes(1)?; @@ -587,7 +586,7 @@ fn remove_from_collection_allow_list_cross( &mut self, caller: caller, - user: EthCrossAccount, + user: eth::CrossAccount, ) -> Result { self.consume_store_writes(1)?; @@ -625,7 +624,7 @@ /// /// @param user User cross account to verify /// @return "true" if account is the owner or admin - fn is_owner_or_admin_cross(&self, user: EthCrossAccount) -> Result { + fn is_owner_or_admin_cross(&self, user: eth::CrossAccount) -> Result { let user = user.into_sub_cross_account::()?; Ok(self.is_owner_or_admin(&user)) } @@ -646,8 +645,8 @@ /// /// @return Tuble with sponsor address and his substrate mirror. /// If address is canonical then substrate mirror is zero and vice versa. - fn collection_owner(&self) -> Result { - Ok(EthCrossAccount::from_sub_cross_account::( + fn collection_owner(&self) -> Result { + Ok(eth::CrossAccount::from_sub_cross_account::( &T::CrossAccountId::from_sub(self.owner.clone()), )) } @@ -670,9 +669,9 @@ /// /// @return Vector of tuples with admins address and his substrate mirror. /// If address is canonical then substrate mirror is zero and vice versa. - fn collection_admins(&self) -> Result> { + fn collection_admins(&self) -> Result> { let result = crate::IsAdmin::::iter_prefix((self.id,)) - .map(|(admin, _)| EthCrossAccount::from_sub_cross_account::(&admin)) + .map(|(admin, _)| eth::CrossAccount::from_sub_cross_account::(&admin)) .collect(); Ok(result) } @@ -684,7 +683,7 @@ fn change_collection_owner_cross( &mut self, caller: caller, - new_owner: EthCrossAccount, + new_owner: eth::CrossAccount, ) -> Result { self.consume_store_writes(1)?; @@ -693,29 +692,6 @@ self.change_owner(caller, new_owner) .map_err(dispatch_to_evm::) } -} - -/// ### Note -/// Do not forget to add: `self.consume_store_reads(1)?;` -fn check_is_owner_or_admin( - caller: caller, - collection: &CollectionHandle, -) -> Result { - let caller = T::CrossAccountId::from_eth(caller); - collection - .check_is_owner_or_admin(&caller) - .map_err(dispatch_to_evm::)?; - Ok(caller) -} - -/// ### Note -/// Do not forget to add: `self.consume_store_writes(1)?;` -fn save(collection: &CollectionHandle) -> Result { - collection - .check_is_internal() - .map_err(dispatch_to_evm::)?; - collection.save().map_err(dispatch_to_evm::)?; - Ok(()) } /// Contains static property keys and values. --- a/pallets/common/src/eth.rs +++ b/pallets/common/src/eth.rs @@ -68,13 +68,13 @@ /// Cross account struct #[derive(Debug, Default, AbiCoder)] -pub struct EthCrossAccount { +pub struct CrossAccount { pub(crate) eth: address, pub(crate) sub: uint256, } -impl EthCrossAccount { - /// Converts `CrossAccountId` to `EthCrossAccountId` +impl CrossAccount { + /// Converts `CrossAccountId` to [`CrossAccount`] pub fn from_sub_cross_account(cross_account_id: &T::CrossAccountId) -> Self where T: pallet_evm::Config, @@ -89,7 +89,7 @@ } } } - /// Creates `EthCrossAccount` from substrate account + /// Creates [`CrossAccount`] from substrate account pub fn from_sub(account_id: &T::AccountId) -> Self where T: pallet_evm::Config, @@ -100,7 +100,7 @@ sub: uint256::from_big_endian(account_id.as_ref()), } } - /// Converts `EthCrossAccount` to `CrossAccountId` + /// Converts [`CrossAccount`] to `CrossAccountId` pub fn into_sub_cross_account(&self) -> evm_coder::execution::Result where T: pallet_evm::Config, @@ -127,7 +127,7 @@ pub value: evm_coder::types::bytes, } -/// [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM. +/// [`CollectionLimits`](up_data_structs::CollectionLimits) fields representation for EVM. #[derive(Debug, Default, Clone, Copy, AbiCoder)] #[repr(u8)] pub enum CollectionLimitField { @@ -160,6 +160,7 @@ TransferEnabled, } +/// [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM. #[derive(Debug, Default, AbiCoder)] pub struct CollectionLimit { field: CollectionLimitField, @@ -168,6 +169,7 @@ } impl CollectionLimit { + /// Make [`CollectionLimit`] from [`CollectionLimitField`] and int value. pub fn from_int(field: CollectionLimitField, value: u32) -> Self { Self { field, @@ -176,6 +178,7 @@ } } + /// Make [`CollectionLimit`] from [`CollectionLimitField`] and optional int value. pub fn from_opt_int(field: CollectionLimitField, value: Option) -> Self { value .map(|v| Self { @@ -190,6 +193,7 @@ }) } + /// Make [`CollectionLimit`] from [`CollectionLimitField`] and bool value. pub fn from_opt_bool(field: CollectionLimitField, value: Option) -> Self { value .map(|v| Self { @@ -306,6 +310,7 @@ } impl PropertyPermission { + /// Make vector of [`PropertyPermission`] from [`up_data_structs::PropertyPermission`]. pub fn into_vec(pp: up_data_structs::PropertyPermission) -> Vec { vec![ PropertyPermission { @@ -323,6 +328,7 @@ ] } + /// Make [`up_data_structs::PropertyPermission`] from vector of [`PropertyPermission`]. pub fn from_vec(permission: Vec) -> up_data_structs::PropertyPermission { let mut token_permission = up_data_structs::PropertyPermission::default(); @@ -367,6 +373,7 @@ } impl TokenPropertyPermission { + /// Convert vector of [`TokenPropertyPermission`] into vector of [`up_data_structs::PropertyKeyPermission`]. pub fn into_property_key_permissions( permissions: Vec, ) -> evm_coder::execution::Result> { --- a/pallets/evm-contract-helpers/src/eth.rs +++ b/pallets/evm-contract-helpers/src/eth.rs @@ -25,7 +25,6 @@ types::*, ToLog, }; -use pallet_common::eth::EthCrossAccount; use pallet_evm::{ ExitRevert, OnCreate, OnMethodCall, PrecompileResult, PrecompileFailure, PrecompileHandle, account::CrossAccountId, @@ -175,10 +174,12 @@ /// /// @param contractAddress The contract for which a sponsor is requested. /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw. - fn sponsor(&self, contract_address: address) -> Result { - Ok(EthCrossAccount::from_sub_cross_account::( - &Pallet::::get_sponsor(contract_address).ok_or("Contract has no sponsor")?, - )) + fn sponsor(&self, contract_address: address) -> Result { + Ok( + pallet_common::eth::CrossAccount::from_sub_cross_account::( + &Pallet::::get_sponsor(contract_address).ok_or("Contract has no sponsor")?, + ), + ) } /// Check tat contract has confirmed sponsor. --- a/pallets/evm-contract-helpers/src/stubs/ContractHelpers.sol +++ b/pallets/evm-contract-helpers/src/stubs/ContractHelpers.sol @@ -96,11 +96,11 @@ /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw. /// @dev EVM selector for this function is: 0x766c4f37, /// or in textual repr: sponsor(address) - function sponsor(address contractAddress) public view returns (EthCrossAccount memory) { + function sponsor(address contractAddress) public view returns (CrossAccount memory) { require(false, stub_error); contractAddress; dummy; - return EthCrossAccount(0x0000000000000000000000000000000000000000, 0); + return CrossAccount(0x0000000000000000000000000000000000000000, 0); } /// Check tat contract has confirmed sponsor. @@ -266,7 +266,7 @@ } /// @dev Cross account struct -struct EthCrossAccount { +struct CrossAccount { address eth; uint256 sub; } --- a/pallets/fungible/src/erc.rs +++ b/pallets/fungible/src/erc.rs @@ -27,7 +27,6 @@ use pallet_common::{ CollectionHandle, erc::{CommonEvmHandler, PrecompileResult, CollectionCall}, - eth::EthCrossAccount, }; use sp_std::vec::Vec; use pallet_evm::{account::CrossAccountId, PrecompileHandle}; @@ -175,7 +174,12 @@ } #[weight(>::create_item())] - fn mint_cross(&mut self, caller: caller, to: EthCrossAccount, amount: uint256) -> Result { + fn mint_cross( + &mut self, + caller: caller, + to: pallet_common::eth::CrossAccount, + amount: uint256, + ) -> Result { let caller = T::CrossAccountId::from_eth(caller); let to = to.into_sub_cross_account::()?; let amount = amount.try_into().map_err(|_| "amount overflow")?; @@ -191,7 +195,7 @@ fn approve_cross( &mut self, caller: caller, - spender: EthCrossAccount, + spender: pallet_common::eth::CrossAccount, amount: uint256, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); @@ -232,7 +236,7 @@ fn burn_from_cross( &mut self, caller: caller, - from: EthCrossAccount, + from: pallet_common::eth::CrossAccount, amount: uint256, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); @@ -274,7 +278,7 @@ fn transfer_cross( &mut self, caller: caller, - to: EthCrossAccount, + to: pallet_common::eth::CrossAccount, amount: uint256, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); @@ -292,8 +296,8 @@ fn transfer_from_cross( &mut self, caller: caller, - from: EthCrossAccount, - to: EthCrossAccount, + from: pallet_common::eth::CrossAccount, + to: pallet_common::eth::CrossAccount, amount: uint256, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); --- a/pallets/fungible/src/stubs/UniqueFungible.sol +++ b/pallets/fungible/src/stubs/UniqueFungible.sol @@ -114,7 +114,7 @@ /// @param sponsor Cross account address of the sponsor from whose account funds will be debited for operations with the contract. /// @dev EVM selector for this function is: 0x84a1d5a8, /// or in textual repr: setCollectionSponsorCross((address,uint256)) - function setCollectionSponsorCross(EthCrossAccount memory sponsor) public { + function setCollectionSponsorCross(CrossAccount memory sponsor) public { require(false, stub_error); sponsor; dummy = 0; @@ -152,10 +152,10 @@ /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw. /// @dev EVM selector for this function is: 0x6ec0a9f1, /// or in textual repr: collectionSponsor() - function collectionSponsor() public view returns (EthCrossAccount memory) { + function collectionSponsor() public view returns (CrossAccount memory) { require(false, stub_error); dummy; - return EthCrossAccount(0x0000000000000000000000000000000000000000, 0); + return CrossAccount(0x0000000000000000000000000000000000000000, 0); } /// Get current collection limits. @@ -193,7 +193,7 @@ /// @param newAdmin Cross account administrator address. /// @dev EVM selector for this function is: 0x859aa7d6, /// or in textual repr: addCollectionAdminCross((address,uint256)) - function addCollectionAdminCross(EthCrossAccount memory newAdmin) public { + function addCollectionAdminCross(CrossAccount memory newAdmin) public { require(false, stub_error); newAdmin; dummy = 0; @@ -203,7 +203,7 @@ /// @param admin Cross account administrator address. /// @dev EVM selector for this function is: 0x6c0cd173, /// or in textual repr: removeCollectionAdminCross((address,uint256)) - function removeCollectionAdminCross(EthCrossAccount memory admin) public { + function removeCollectionAdminCross(CrossAccount memory admin) public { require(false, stub_error); admin; dummy = 0; @@ -289,7 +289,7 @@ /// @param user User address to check. /// @dev EVM selector for this function is: 0x91b6df49, /// or in textual repr: allowlistedCross((address,uint256)) - function allowlistedCross(EthCrossAccount memory user) public view returns (bool) { + function allowlistedCross(CrossAccount memory user) public view returns (bool) { require(false, stub_error); user; dummy; @@ -312,7 +312,7 @@ /// @param user User cross account address. /// @dev EVM selector for this function is: 0xa0184a3a, /// or in textual repr: addToCollectionAllowListCross((address,uint256)) - function addToCollectionAllowListCross(EthCrossAccount memory user) public { + function addToCollectionAllowListCross(CrossAccount memory user) public { require(false, stub_error); user; dummy = 0; @@ -334,7 +334,7 @@ /// @param user User cross account address. /// @dev EVM selector for this function is: 0x09ba452a, /// or in textual repr: removeFromCollectionAllowListCross((address,uint256)) - function removeFromCollectionAllowListCross(EthCrossAccount memory user) public { + function removeFromCollectionAllowListCross(CrossAccount memory user) public { require(false, stub_error); user; dummy = 0; @@ -370,7 +370,7 @@ /// @return "true" if account is the owner or admin /// @dev EVM selector for this function is: 0x3e75a905, /// or in textual repr: isOwnerOrAdminCross((address,uint256)) - function isOwnerOrAdminCross(EthCrossAccount memory user) public view returns (bool) { + function isOwnerOrAdminCross(CrossAccount memory user) public view returns (bool) { require(false, stub_error); user; dummy; @@ -394,10 +394,10 @@ /// If address is canonical then substrate mirror is zero and vice versa. /// @dev EVM selector for this function is: 0xdf727d3b, /// or in textual repr: collectionOwner() - function collectionOwner() public view returns (EthCrossAccount memory) { + function collectionOwner() public view returns (CrossAccount memory) { require(false, stub_error); dummy; - return EthCrossAccount(0x0000000000000000000000000000000000000000, 0); + return CrossAccount(0x0000000000000000000000000000000000000000, 0); } // /// Changes collection owner to another account @@ -418,10 +418,10 @@ /// If address is canonical then substrate mirror is zero and vice versa. /// @dev EVM selector for this function is: 0x5813216b, /// or in textual repr: collectionAdmins() - function collectionAdmins() public view returns (EthCrossAccount[] memory) { + function collectionAdmins() public view returns (CrossAccount[] memory) { require(false, stub_error); dummy; - return new EthCrossAccount[](0); + return new CrossAccount[](0); } /// Changes collection owner to another account @@ -430,7 +430,7 @@ /// @param newOwner new owner cross account /// @dev EVM selector for this function is: 0x6496c497, /// or in textual repr: changeCollectionOwnerCross((address,uint256)) - function changeCollectionOwnerCross(EthCrossAccount memory newOwner) public { + function changeCollectionOwnerCross(CrossAccount memory newOwner) public { require(false, stub_error); newOwner; dummy = 0; @@ -438,7 +438,7 @@ } /// @dev Cross account struct -struct EthCrossAccount { +struct CrossAccount { address eth; uint256 sub; } @@ -463,13 +463,14 @@ uint256[] field_1; } +/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM. struct CollectionLimit { CollectionLimitField field; bool status; uint256 value; } -/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM. +/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) fields representation for EVM. enum CollectionLimitField { /// @dev How many tokens can a user have on one account. AccountTokenOwnership, @@ -512,7 +513,7 @@ /// @dev EVM selector for this function is: 0x269e6158, /// or in textual repr: mintCross((address,uint256),uint256) - function mintCross(EthCrossAccount memory to, uint256 amount) public returns (bool) { + function mintCross(CrossAccount memory to, uint256 amount) public returns (bool) { require(false, stub_error); to; amount; @@ -522,7 +523,7 @@ /// @dev EVM selector for this function is: 0x0ecd0ab0, /// or in textual repr: approveCross((address,uint256),uint256) - function approveCross(EthCrossAccount memory spender, uint256 amount) public returns (bool) { + function approveCross(CrossAccount memory spender, uint256 amount) public returns (bool) { require(false, stub_error); spender; amount; @@ -552,7 +553,7 @@ /// @param amount The amount that will be burnt. /// @dev EVM selector for this function is: 0xbb2f5a58, /// or in textual repr: burnFromCross((address,uint256),uint256) - function burnFromCross(EthCrossAccount memory from, uint256 amount) public returns (bool) { + function burnFromCross(CrossAccount memory from, uint256 amount) public returns (bool) { require(false, stub_error); from; amount; @@ -573,7 +574,7 @@ /// @dev EVM selector for this function is: 0x2ada85ff, /// or in textual repr: transferCross((address,uint256),uint256) - function transferCross(EthCrossAccount memory to, uint256 amount) public returns (bool) { + function transferCross(CrossAccount memory to, uint256 amount) public returns (bool) { require(false, stub_error); to; amount; @@ -584,8 +585,8 @@ /// @dev EVM selector for this function is: 0xd5cf430b, /// or in textual repr: transferFromCross((address,uint256),(address,uint256),uint256) function transferFromCross( - EthCrossAccount memory from, - EthCrossAccount memory to, + CrossAccount memory from, + CrossAccount memory to, uint256 amount ) public returns (bool) { require(false, stub_error); --- a/pallets/nonfungible/src/erc.rs +++ b/pallets/nonfungible/src/erc.rs @@ -38,7 +38,6 @@ use pallet_common::{ CollectionHandle, CollectionPropertyPermissions, CommonCollectionOperations, erc::{CommonEvmHandler, PrecompileResult, CollectionCall, static_property::key}, - eth::{Property as PropertyStruct, EthCrossAccount}, }; use pallet_evm::{account::CrossAccountId, PrecompileHandle}; use pallet_evm_coder_substrate::call; @@ -160,7 +159,7 @@ &mut self, caller: caller, token_id: uint256, - properties: Vec, + properties: Vec, ) -> Result<()> { let caller = T::CrossAccountId::from_eth(caller); let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?; @@ -171,7 +170,7 @@ let properties = properties .into_iter() - .map(|PropertyStruct { key, value }| { + .map(|pallet_common::eth::Property { key, value }| { let key = >::from(key) .try_into() .map_err(|_| "key too large")?; @@ -762,9 +761,9 @@ /// Returns the owner (in cross format) of the token. /// /// @param tokenId Id for the token. - fn cross_owner_of(&self, token_id: uint256) -> Result { + fn cross_owner_of(&self, token_id: uint256) -> Result { Self::token_owner(&self, token_id.try_into()?) - .map(|o| EthCrossAccount::from_sub_cross_account::(&o)) + .map(|o| pallet_common::eth::CrossAccount::from_sub_cross_account::(&o)) .ok_or(Error::Revert("key too large".into())) } @@ -773,7 +772,11 @@ /// @param tokenId Id for the token. /// @param keys Properties keys. Empty keys for all propertyes. /// @return Vector of properties key/value pairs. - fn properties(&self, token_id: uint256, keys: Vec) -> Result> { + fn properties( + &self, + token_id: uint256, + keys: Vec, + ) -> Result> { let keys = keys .into_iter() .map(|key| { @@ -793,7 +796,7 @@ let key = string::from_utf8(p.key.to_vec()) .map_err(|e| Error::Revert(alloc::format!("{}", e)))?; let value = bytes(p.value.to_vec()); - Ok(PropertyStruct { key, value }) + Ok(pallet_common::eth::Property { key, value }) }) .collect::>>() } @@ -808,7 +811,7 @@ fn approve_cross( &mut self, caller: caller, - approved: EthCrossAccount, + approved: pallet_common::eth::CrossAccount, token_id: uint256, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); @@ -847,7 +850,7 @@ fn transfer_cross( &mut self, caller: caller, - to: EthCrossAccount, + to: pallet_common::eth::CrossAccount, token_id: uint256, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); @@ -871,8 +874,8 @@ fn transfer_from_cross( &mut self, caller: caller, - from: EthCrossAccount, - to: EthCrossAccount, + from: pallet_common::eth::CrossAccount, + to: pallet_common::eth::CrossAccount, token_id: uint256, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); @@ -918,7 +921,7 @@ fn burn_from_cross( &mut self, caller: caller, - from: EthCrossAccount, + from: pallet_common::eth::CrossAccount, token_id: uint256, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); @@ -1040,8 +1043,8 @@ fn mint_cross( &mut self, caller: caller, - to: EthCrossAccount, - properties: Vec, + to: pallet_common::eth::CrossAccount, + properties: Vec, ) -> Result { let token_id = >::get(self.id) .checked_add(1) @@ -1051,7 +1054,7 @@ let properties = properties .into_iter() - .map(|PropertyStruct { key, value }| { + .map(|pallet_common::eth::Property { key, value }| { let key = >::from(key) .try_into() .map_err(|_| "key too large")?; --- a/pallets/nonfungible/src/stubs/UniqueNFT.sol +++ b/pallets/nonfungible/src/stubs/UniqueNFT.sol @@ -258,7 +258,7 @@ /// @param sponsor Cross account address of the sponsor from whose account funds will be debited for operations with the contract. /// @dev EVM selector for this function is: 0x84a1d5a8, /// or in textual repr: setCollectionSponsorCross((address,uint256)) - function setCollectionSponsorCross(EthCrossAccount memory sponsor) public { + function setCollectionSponsorCross(CrossAccount memory sponsor) public { require(false, stub_error); sponsor; dummy = 0; @@ -296,10 +296,10 @@ /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw. /// @dev EVM selector for this function is: 0x6ec0a9f1, /// or in textual repr: collectionSponsor() - function collectionSponsor() public view returns (EthCrossAccount memory) { + function collectionSponsor() public view returns (CrossAccount memory) { require(false, stub_error); dummy; - return EthCrossAccount(0x0000000000000000000000000000000000000000, 0); + return CrossAccount(0x0000000000000000000000000000000000000000, 0); } /// Get current collection limits. @@ -337,7 +337,7 @@ /// @param newAdmin Cross account administrator address. /// @dev EVM selector for this function is: 0x859aa7d6, /// or in textual repr: addCollectionAdminCross((address,uint256)) - function addCollectionAdminCross(EthCrossAccount memory newAdmin) public { + function addCollectionAdminCross(CrossAccount memory newAdmin) public { require(false, stub_error); newAdmin; dummy = 0; @@ -347,7 +347,7 @@ /// @param admin Cross account administrator address. /// @dev EVM selector for this function is: 0x6c0cd173, /// or in textual repr: removeCollectionAdminCross((address,uint256)) - function removeCollectionAdminCross(EthCrossAccount memory admin) public { + function removeCollectionAdminCross(CrossAccount memory admin) public { require(false, stub_error); admin; dummy = 0; @@ -433,7 +433,7 @@ /// @param user User address to check. /// @dev EVM selector for this function is: 0x91b6df49, /// or in textual repr: allowlistedCross((address,uint256)) - function allowlistedCross(EthCrossAccount memory user) public view returns (bool) { + function allowlistedCross(CrossAccount memory user) public view returns (bool) { require(false, stub_error); user; dummy; @@ -456,7 +456,7 @@ /// @param user User cross account address. /// @dev EVM selector for this function is: 0xa0184a3a, /// or in textual repr: addToCollectionAllowListCross((address,uint256)) - function addToCollectionAllowListCross(EthCrossAccount memory user) public { + function addToCollectionAllowListCross(CrossAccount memory user) public { require(false, stub_error); user; dummy = 0; @@ -478,7 +478,7 @@ /// @param user User cross account address. /// @dev EVM selector for this function is: 0x09ba452a, /// or in textual repr: removeFromCollectionAllowListCross((address,uint256)) - function removeFromCollectionAllowListCross(EthCrossAccount memory user) public { + function removeFromCollectionAllowListCross(CrossAccount memory user) public { require(false, stub_error); user; dummy = 0; @@ -514,7 +514,7 @@ /// @return "true" if account is the owner or admin /// @dev EVM selector for this function is: 0x3e75a905, /// or in textual repr: isOwnerOrAdminCross((address,uint256)) - function isOwnerOrAdminCross(EthCrossAccount memory user) public view returns (bool) { + function isOwnerOrAdminCross(CrossAccount memory user) public view returns (bool) { require(false, stub_error); user; dummy; @@ -538,10 +538,10 @@ /// If address is canonical then substrate mirror is zero and vice versa. /// @dev EVM selector for this function is: 0xdf727d3b, /// or in textual repr: collectionOwner() - function collectionOwner() public view returns (EthCrossAccount memory) { + function collectionOwner() public view returns (CrossAccount memory) { require(false, stub_error); dummy; - return EthCrossAccount(0x0000000000000000000000000000000000000000, 0); + return CrossAccount(0x0000000000000000000000000000000000000000, 0); } // /// Changes collection owner to another account @@ -562,10 +562,10 @@ /// If address is canonical then substrate mirror is zero and vice versa. /// @dev EVM selector for this function is: 0x5813216b, /// or in textual repr: collectionAdmins() - function collectionAdmins() public view returns (EthCrossAccount[] memory) { + function collectionAdmins() public view returns (CrossAccount[] memory) { require(false, stub_error); dummy; - return new EthCrossAccount[](0); + return new CrossAccount[](0); } /// Changes collection owner to another account @@ -574,7 +574,7 @@ /// @param newOwner new owner cross account /// @dev EVM selector for this function is: 0x6496c497, /// or in textual repr: changeCollectionOwnerCross((address,uint256)) - function changeCollectionOwnerCross(EthCrossAccount memory newOwner) public { + function changeCollectionOwnerCross(CrossAccount memory newOwner) public { require(false, stub_error); newOwner; dummy = 0; @@ -582,7 +582,7 @@ } /// @dev Cross account struct -struct EthCrossAccount { +struct CrossAccount { address eth; uint256 sub; } @@ -607,13 +607,14 @@ uint256[] field_1; } +/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM. struct CollectionLimit { CollectionLimitField field; bool status; uint256 value; } -/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM. +/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) fields representation for EVM. enum CollectionLimitField { /// @dev How many tokens can a user have on one account. AccountTokenOwnership, @@ -813,11 +814,11 @@ /// @param tokenId Id for the token. /// @dev EVM selector for this function is: 0x2b29dace, /// or in textual repr: crossOwnerOf(uint256) - function crossOwnerOf(uint256 tokenId) public view returns (EthCrossAccount memory) { + function crossOwnerOf(uint256 tokenId) public view returns (CrossAccount memory) { require(false, stub_error); tokenId; dummy; - return EthCrossAccount(0x0000000000000000000000000000000000000000, 0); + return CrossAccount(0x0000000000000000000000000000000000000000, 0); } /// Returns the token properties. @@ -843,7 +844,7 @@ /// @param tokenId The NFT to approve /// @dev EVM selector for this function is: 0x0ecd0ab0, /// or in textual repr: approveCross((address,uint256),uint256) - function approveCross(EthCrossAccount memory approved, uint256 tokenId) public { + function approveCross(CrossAccount memory approved, uint256 tokenId) public { require(false, stub_error); approved; tokenId; @@ -871,7 +872,7 @@ /// @param tokenId The NFT to transfer /// @dev EVM selector for this function is: 0x2ada85ff, /// or in textual repr: transferCross((address,uint256),uint256) - function transferCross(EthCrossAccount memory to, uint256 tokenId) public { + function transferCross(CrossAccount memory to, uint256 tokenId) public { require(false, stub_error); to; tokenId; @@ -887,8 +888,8 @@ /// @dev EVM selector for this function is: 0xd5cf430b, /// or in textual repr: transferFromCross((address,uint256),(address,uint256),uint256) function transferFromCross( - EthCrossAccount memory from, - EthCrossAccount memory to, + CrossAccount memory from, + CrossAccount memory to, uint256 tokenId ) public { require(false, stub_error); @@ -921,7 +922,7 @@ /// @param tokenId The NFT to transfer /// @dev EVM selector for this function is: 0xbb2f5a58, /// or in textual repr: burnFromCross((address,uint256),uint256) - function burnFromCross(EthCrossAccount memory from, uint256 tokenId) public { + function burnFromCross(CrossAccount memory from, uint256 tokenId) public { require(false, stub_error); from; tokenId; @@ -973,7 +974,7 @@ /// @return uint256 The id of the newly minted token /// @dev EVM selector for this function is: 0xb904db03, /// or in textual repr: mintCross((address,uint256),(string,bytes)[]) - function mintCross(EthCrossAccount memory to, Property[] memory properties) public returns (uint256) { + function mintCross(CrossAccount memory to, Property[] memory properties) public returns (uint256) { require(false, stub_error); to; properties; --- a/pallets/refungible/src/erc.rs +++ b/pallets/refungible/src/erc.rs @@ -33,7 +33,6 @@ use pallet_common::{ CollectionHandle, CollectionPropertyPermissions, CommonCollectionOperations, erc::{CommonEvmHandler, CollectionCall, static_property::key}, - eth::{Property as PropertyStruct, EthCrossAccount}, Error as CommonError, }; use pallet_evm::{account::CrossAccountId, PrecompileHandle}; @@ -163,7 +162,7 @@ &mut self, caller: caller, token_id: uint256, - properties: Vec, + properties: Vec, ) -> Result<()> { let caller = T::CrossAccountId::from_eth(caller); let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?; @@ -174,7 +173,7 @@ let properties = properties .into_iter() - .map(|PropertyStruct { key, value }| { + .map(|pallet_common::eth::Property { key, value }| { let key = >::from(key) .try_into() .map_err(|_| "key too large")?; @@ -797,9 +796,9 @@ /// Returns the owner (in cross format) of the token. /// /// @param tokenId Id for the token. - fn cross_owner_of(&self, token_id: uint256) -> Result { + fn cross_owner_of(&self, token_id: uint256) -> Result { Self::token_owner(&self, token_id.try_into()?) - .map(|o| EthCrossAccount::from_sub_cross_account::(&o)) + .map(|o| pallet_common::eth::CrossAccount::from_sub_cross_account::(&o)) .ok_or(Error::Revert("key too large".into())) } @@ -808,7 +807,11 @@ /// @param tokenId Id for the token. /// @param keys Properties keys. Empty keys for all propertyes. /// @return Vector of properties key/value pairs. - fn properties(&self, token_id: uint256, keys: Vec) -> Result> { + fn properties( + &self, + token_id: uint256, + keys: Vec, + ) -> Result> { let keys = keys .into_iter() .map(|key| { @@ -828,7 +831,7 @@ let key = string::from_utf8(p.key.to_vec()) .map_err(|e| Error::Revert(alloc::format!("{}", e)))?; let value = bytes(p.value.to_vec()); - Ok(PropertyStruct { key, value }) + Ok(pallet_common::eth::Property { key, value }) }) .collect::>>() } @@ -865,7 +868,7 @@ fn transfer_cross( &mut self, caller: caller, - to: EthCrossAccount, + to: pallet_common::eth::CrossAccount, token_id: uint256, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); @@ -893,8 +896,8 @@ fn transfer_from_cross( &mut self, caller: caller, - from: EthCrossAccount, - to: EthCrossAccount, + from: pallet_common::eth::CrossAccount, + to: pallet_common::eth::CrossAccount, token_id: uint256, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); @@ -949,7 +952,7 @@ fn burn_from_cross( &mut self, caller: caller, - from: EthCrossAccount, + from: pallet_common::eth::CrossAccount, token_id: uint256, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); @@ -1086,8 +1089,8 @@ fn mint_cross( &mut self, caller: caller, - to: EthCrossAccount, - properties: Vec, + to: pallet_common::eth::CrossAccount, + properties: Vec, ) -> Result { let token_id = >::get(self.id) .checked_add(1) @@ -1097,7 +1100,7 @@ let properties = properties .into_iter() - .map(|PropertyStruct { key, value }| { + .map(|pallet_common::eth::Property { key, value }| { let key = >::from(key) .try_into() .map_err(|_| "key too large")?; --- a/pallets/refungible/src/erc_token.rs +++ b/pallets/refungible/src/erc_token.rs @@ -30,7 +30,7 @@ use pallet_common::{ CommonWeightInfo, erc::{CommonEvmHandler, PrecompileResult}, - eth::{collection_id_to_address, EthCrossAccount}, + eth::collection_id_to_address, }; use pallet_evm::{account::CrossAccountId, PrecompileHandle}; use pallet_evm_coder_substrate::{call, dispatch_to_evm, WithRecorder}; @@ -224,7 +224,7 @@ fn burn_from_cross( &mut self, caller: caller, - from: EthCrossAccount, + from: pallet_common::eth::CrossAccount, amount: uint256, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); @@ -250,7 +250,7 @@ fn approve_cross( &mut self, caller: caller, - spender: EthCrossAccount, + spender: pallet_common::eth::CrossAccount, amount: uint256, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); @@ -280,7 +280,7 @@ fn transfer_cross( &mut self, caller: caller, - to: EthCrossAccount, + to: pallet_common::eth::CrossAccount, amount: uint256, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); @@ -303,8 +303,8 @@ fn transfer_from_cross( &mut self, caller: caller, - from: EthCrossAccount, - to: EthCrossAccount, + from: pallet_common::eth::CrossAccount, + to: pallet_common::eth::CrossAccount, amount: uint256, ) -> Result { let caller = T::CrossAccountId::from_eth(caller); --- a/pallets/refungible/src/lib.rs +++ b/pallets/refungible/src/lib.rs @@ -92,12 +92,8 @@ use codec::{Encode, Decode, MaxEncodedLen}; use core::ops::Deref; -use derivative::Derivative; use evm_coder::ToLog; -use frame_support::{ - BoundedBTreeMap, BoundedVec, ensure, fail, storage::with_transaction, transactional, - pallet_prelude::ConstU32, -}; +use frame_support::{BoundedVec, ensure, fail, storage::with_transaction, transactional}; use pallet_evm::{account::CrossAccountId, Pallet as PalletEvm}; use pallet_evm_coder_substrate::WithRecorder; use pallet_common::{ @@ -110,11 +106,10 @@ use sp_runtime::{ArithmeticError, DispatchError, DispatchResult, TransactionOutcome}; use sp_std::{vec::Vec, vec, collections::btree_map::BTreeMap}; use up_data_structs::{ - AccessMode, budget::Budget, CollectionId, CollectionFlags, CollectionPropertiesVec, - CreateCollectionData, CustomDataLimit, mapping::TokenAddressMapping, MAX_ITEMS_PER_BATCH, - MAX_REFUNGIBLE_PIECES, Property, PropertyKey, PropertyKeyPermission, PropertyPermission, - PropertyScope, PropertyValue, TokenId, TrySetProperty, PropertiesPermissionMap, - CreateRefungibleExMultipleOwners, + AccessMode, budget::Budget, CollectionId, CollectionFlags, CreateCollectionData, + CustomDataLimit, mapping::TokenAddressMapping, MAX_REFUNGIBLE_PIECES, Property, PropertyKey, + PropertyKeyPermission, PropertyPermission, PropertyScope, PropertyValue, TokenId, + TrySetProperty, PropertiesPermissionMap, CreateRefungibleExMultipleOwners, }; pub use pallet::*; --- a/pallets/refungible/src/stubs/UniqueRefungible.sol +++ b/pallets/refungible/src/stubs/UniqueRefungible.sol @@ -258,7 +258,7 @@ /// @param sponsor Cross account address of the sponsor from whose account funds will be debited for operations with the contract. /// @dev EVM selector for this function is: 0x84a1d5a8, /// or in textual repr: setCollectionSponsorCross((address,uint256)) - function setCollectionSponsorCross(EthCrossAccount memory sponsor) public { + function setCollectionSponsorCross(CrossAccount memory sponsor) public { require(false, stub_error); sponsor; dummy = 0; @@ -296,10 +296,10 @@ /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw. /// @dev EVM selector for this function is: 0x6ec0a9f1, /// or in textual repr: collectionSponsor() - function collectionSponsor() public view returns (EthCrossAccount memory) { + function collectionSponsor() public view returns (CrossAccount memory) { require(false, stub_error); dummy; - return EthCrossAccount(0x0000000000000000000000000000000000000000, 0); + return CrossAccount(0x0000000000000000000000000000000000000000, 0); } /// Get current collection limits. @@ -337,7 +337,7 @@ /// @param newAdmin Cross account administrator address. /// @dev EVM selector for this function is: 0x859aa7d6, /// or in textual repr: addCollectionAdminCross((address,uint256)) - function addCollectionAdminCross(EthCrossAccount memory newAdmin) public { + function addCollectionAdminCross(CrossAccount memory newAdmin) public { require(false, stub_error); newAdmin; dummy = 0; @@ -347,7 +347,7 @@ /// @param admin Cross account administrator address. /// @dev EVM selector for this function is: 0x6c0cd173, /// or in textual repr: removeCollectionAdminCross((address,uint256)) - function removeCollectionAdminCross(EthCrossAccount memory admin) public { + function removeCollectionAdminCross(CrossAccount memory admin) public { require(false, stub_error); admin; dummy = 0; @@ -433,7 +433,7 @@ /// @param user User address to check. /// @dev EVM selector for this function is: 0x91b6df49, /// or in textual repr: allowlistedCross((address,uint256)) - function allowlistedCross(EthCrossAccount memory user) public view returns (bool) { + function allowlistedCross(CrossAccount memory user) public view returns (bool) { require(false, stub_error); user; dummy; @@ -456,7 +456,7 @@ /// @param user User cross account address. /// @dev EVM selector for this function is: 0xa0184a3a, /// or in textual repr: addToCollectionAllowListCross((address,uint256)) - function addToCollectionAllowListCross(EthCrossAccount memory user) public { + function addToCollectionAllowListCross(CrossAccount memory user) public { require(false, stub_error); user; dummy = 0; @@ -478,7 +478,7 @@ /// @param user User cross account address. /// @dev EVM selector for this function is: 0x09ba452a, /// or in textual repr: removeFromCollectionAllowListCross((address,uint256)) - function removeFromCollectionAllowListCross(EthCrossAccount memory user) public { + function removeFromCollectionAllowListCross(CrossAccount memory user) public { require(false, stub_error); user; dummy = 0; @@ -514,7 +514,7 @@ /// @return "true" if account is the owner or admin /// @dev EVM selector for this function is: 0x3e75a905, /// or in textual repr: isOwnerOrAdminCross((address,uint256)) - function isOwnerOrAdminCross(EthCrossAccount memory user) public view returns (bool) { + function isOwnerOrAdminCross(CrossAccount memory user) public view returns (bool) { require(false, stub_error); user; dummy; @@ -538,10 +538,10 @@ /// If address is canonical then substrate mirror is zero and vice versa. /// @dev EVM selector for this function is: 0xdf727d3b, /// or in textual repr: collectionOwner() - function collectionOwner() public view returns (EthCrossAccount memory) { + function collectionOwner() public view returns (CrossAccount memory) { require(false, stub_error); dummy; - return EthCrossAccount(0x0000000000000000000000000000000000000000, 0); + return CrossAccount(0x0000000000000000000000000000000000000000, 0); } // /// Changes collection owner to another account @@ -562,10 +562,10 @@ /// If address is canonical then substrate mirror is zero and vice versa. /// @dev EVM selector for this function is: 0x5813216b, /// or in textual repr: collectionAdmins() - function collectionAdmins() public view returns (EthCrossAccount[] memory) { + function collectionAdmins() public view returns (CrossAccount[] memory) { require(false, stub_error); dummy; - return new EthCrossAccount[](0); + return new CrossAccount[](0); } /// Changes collection owner to another account @@ -574,7 +574,7 @@ /// @param newOwner new owner cross account /// @dev EVM selector for this function is: 0x6496c497, /// or in textual repr: changeCollectionOwnerCross((address,uint256)) - function changeCollectionOwnerCross(EthCrossAccount memory newOwner) public { + function changeCollectionOwnerCross(CrossAccount memory newOwner) public { require(false, stub_error); newOwner; dummy = 0; @@ -582,7 +582,7 @@ } /// @dev Cross account struct -struct EthCrossAccount { +struct CrossAccount { address eth; uint256 sub; } @@ -607,13 +607,14 @@ uint256[] field_1; } +/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM. struct CollectionLimit { CollectionLimitField field; bool status; uint256 value; } -/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM. +/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) fields representation for EVM. enum CollectionLimitField { /// @dev How many tokens can a user have on one account. AccountTokenOwnership, @@ -811,11 +812,11 @@ /// @param tokenId Id for the token. /// @dev EVM selector for this function is: 0x2b29dace, /// or in textual repr: crossOwnerOf(uint256) - function crossOwnerOf(uint256 tokenId) public view returns (EthCrossAccount memory) { + function crossOwnerOf(uint256 tokenId) public view returns (CrossAccount memory) { require(false, stub_error); tokenId; dummy; - return EthCrossAccount(0x0000000000000000000000000000000000000000, 0); + return CrossAccount(0x0000000000000000000000000000000000000000, 0); } /// Returns the token properties. @@ -856,7 +857,7 @@ /// @param tokenId The RFT to transfer /// @dev EVM selector for this function is: 0x2ada85ff, /// or in textual repr: transferCross((address,uint256),uint256) - function transferCross(EthCrossAccount memory to, uint256 tokenId) public { + function transferCross(CrossAccount memory to, uint256 tokenId) public { require(false, stub_error); to; tokenId; @@ -872,8 +873,8 @@ /// @dev EVM selector for this function is: 0xd5cf430b, /// or in textual repr: transferFromCross((address,uint256),(address,uint256),uint256) function transferFromCross( - EthCrossAccount memory from, - EthCrossAccount memory to, + CrossAccount memory from, + CrossAccount memory to, uint256 tokenId ) public { require(false, stub_error); @@ -908,7 +909,7 @@ /// @param tokenId The RFT to transfer /// @dev EVM selector for this function is: 0xbb2f5a58, /// or in textual repr: burnFromCross((address,uint256),uint256) - function burnFromCross(EthCrossAccount memory from, uint256 tokenId) public { + function burnFromCross(CrossAccount memory from, uint256 tokenId) public { require(false, stub_error); from; tokenId; @@ -960,7 +961,7 @@ /// @return uint256 The id of the newly minted token /// @dev EVM selector for this function is: 0xb904db03, /// or in textual repr: mintCross((address,uint256),(string,bytes)[]) - function mintCross(EthCrossAccount memory to, Property[] memory properties) public returns (uint256) { + function mintCross(CrossAccount memory to, Property[] memory properties) public returns (uint256) { require(false, stub_error); to; properties; --- a/pallets/refungible/src/stubs/UniqueRefungibleToken.sol +++ b/pallets/refungible/src/stubs/UniqueRefungibleToken.sol @@ -58,7 +58,7 @@ /// @param amount The amount that will be burnt. /// @dev EVM selector for this function is: 0xbb2f5a58, /// or in textual repr: burnFromCross((address,uint256),uint256) - function burnFromCross(EthCrossAccount memory from, uint256 amount) public returns (bool) { + function burnFromCross(CrossAccount memory from, uint256 amount) public returns (bool) { require(false, stub_error); from; amount; @@ -75,7 +75,7 @@ /// @param amount The amount of tokens to be spent. /// @dev EVM selector for this function is: 0x0ecd0ab0, /// or in textual repr: approveCross((address,uint256),uint256) - function approveCross(EthCrossAccount memory spender, uint256 amount) public returns (bool) { + function approveCross(CrossAccount memory spender, uint256 amount) public returns (bool) { require(false, stub_error); spender; amount; @@ -100,7 +100,7 @@ /// @param amount The amount to be transferred. /// @dev EVM selector for this function is: 0x2ada85ff, /// or in textual repr: transferCross((address,uint256),uint256) - function transferCross(EthCrossAccount memory to, uint256 amount) public returns (bool) { + function transferCross(CrossAccount memory to, uint256 amount) public returns (bool) { require(false, stub_error); to; amount; @@ -115,8 +115,8 @@ /// @dev EVM selector for this function is: 0xd5cf430b, /// or in textual repr: transferFromCross((address,uint256),(address,uint256),uint256) function transferFromCross( - EthCrossAccount memory from, - EthCrossAccount memory to, + CrossAccount memory from, + CrossAccount memory to, uint256 amount ) public returns (bool) { require(false, stub_error); @@ -129,7 +129,7 @@ } /// @dev Cross account struct -struct EthCrossAccount { +struct CrossAccount { address eth; uint256 sub; } --- a/tests/src/eth/abi/contractHelpers.json +++ b/tests/src/eth/abi/contractHelpers.json @@ -226,7 +226,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "", "type": "tuple" } --- a/tests/src/eth/abi/fungible.json +++ b/tests/src/eth/abi/fungible.json @@ -56,7 +56,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "newAdmin", "type": "tuple" } @@ -73,7 +73,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "user", "type": "tuple" } @@ -100,7 +100,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "user", "type": "tuple" } @@ -127,7 +127,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "spender", "type": "tuple" }, @@ -154,7 +154,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "from", "type": "tuple" }, @@ -172,7 +172,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "newOwner", "type": "tuple" } @@ -191,7 +191,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount[]", + "internalType": "struct CrossAccount[]", "name": "", "type": "tuple[]" } @@ -279,7 +279,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "", "type": "tuple" } @@ -322,7 +322,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "", "type": "tuple" } @@ -381,7 +381,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "user", "type": "tuple" } @@ -425,7 +425,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "to", "type": "tuple" }, @@ -450,7 +450,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "admin", "type": "tuple" } @@ -474,7 +474,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "user", "type": "tuple" } @@ -565,7 +565,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "sponsor", "type": "tuple" } @@ -615,7 +615,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "to", "type": "tuple" }, @@ -644,7 +644,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "from", "type": "tuple" }, @@ -653,7 +653,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "to", "type": "tuple" }, --- a/tests/src/eth/abi/nonFungible.json +++ b/tests/src/eth/abi/nonFungible.json @@ -87,7 +87,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "newAdmin", "type": "tuple" } @@ -104,7 +104,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "user", "type": "tuple" } @@ -121,7 +121,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "user", "type": "tuple" } @@ -148,7 +148,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "approved", "type": "tuple" }, @@ -184,7 +184,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "from", "type": "tuple" }, @@ -202,7 +202,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "newOwner", "type": "tuple" } @@ -221,7 +221,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount[]", + "internalType": "struct CrossAccount[]", "name": "", "type": "tuple[]" } @@ -309,7 +309,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "", "type": "tuple" } @@ -352,7 +352,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "", "type": "tuple" } @@ -385,7 +385,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "", "type": "tuple" } @@ -459,7 +459,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "user", "type": "tuple" } @@ -483,7 +483,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "to", "type": "tuple" }, @@ -579,7 +579,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "admin", "type": "tuple" } @@ -603,7 +603,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "user", "type": "tuple" } @@ -727,7 +727,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "sponsor", "type": "tuple" } @@ -881,7 +881,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "to", "type": "tuple" }, @@ -910,7 +910,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "from", "type": "tuple" }, @@ -919,7 +919,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "to", "type": "tuple" }, --- a/tests/src/eth/abi/reFungible.json +++ b/tests/src/eth/abi/reFungible.json @@ -87,7 +87,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "newAdmin", "type": "tuple" } @@ -104,7 +104,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "user", "type": "tuple" } @@ -121,7 +121,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "user", "type": "tuple" } @@ -166,7 +166,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "from", "type": "tuple" }, @@ -184,7 +184,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "newOwner", "type": "tuple" } @@ -203,7 +203,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount[]", + "internalType": "struct CrossAccount[]", "name": "", "type": "tuple[]" } @@ -291,7 +291,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "", "type": "tuple" } @@ -334,7 +334,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "", "type": "tuple" } @@ -367,7 +367,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "", "type": "tuple" } @@ -441,7 +441,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "user", "type": "tuple" } @@ -465,7 +465,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "to", "type": "tuple" }, @@ -561,7 +561,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "admin", "type": "tuple" } @@ -585,7 +585,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "user", "type": "tuple" } @@ -709,7 +709,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "sponsor", "type": "tuple" } @@ -872,7 +872,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "to", "type": "tuple" }, @@ -901,7 +901,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "from", "type": "tuple" }, @@ -910,7 +910,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "to", "type": "tuple" }, --- a/tests/src/eth/abi/reFungibleToken.json +++ b/tests/src/eth/abi/reFungibleToken.json @@ -76,7 +76,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "spender", "type": "tuple" }, @@ -113,7 +113,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "from", "type": "tuple" }, @@ -201,7 +201,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "to", "type": "tuple" }, @@ -230,7 +230,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "from", "type": "tuple" }, @@ -239,7 +239,7 @@ { "internalType": "address", "name": "eth", "type": "address" }, { "internalType": "uint256", "name": "sub", "type": "uint256" } ], - "internalType": "struct EthCrossAccount", + "internalType": "struct CrossAccount", "name": "to", "type": "tuple" }, --- a/tests/src/eth/api/ContractHelpers.sol +++ b/tests/src/eth/api/ContractHelpers.sol @@ -69,7 +69,7 @@ /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw. /// @dev EVM selector for this function is: 0x766c4f37, /// or in textual repr: sponsor(address) - function sponsor(address contractAddress) external view returns (EthCrossAccount memory); + function sponsor(address contractAddress) external view returns (CrossAccount memory); /// Check tat contract has confirmed sponsor. /// @@ -172,7 +172,7 @@ } /// @dev Cross account struct -struct EthCrossAccount { +struct CrossAccount { address eth; uint256 sub; } --- a/tests/src/eth/api/UniqueFungible.sol +++ b/tests/src/eth/api/UniqueFungible.sol @@ -78,7 +78,7 @@ /// @param sponsor Cross account address of the sponsor from whose account funds will be debited for operations with the contract. /// @dev EVM selector for this function is: 0x84a1d5a8, /// or in textual repr: setCollectionSponsorCross((address,uint256)) - function setCollectionSponsorCross(EthCrossAccount memory sponsor) external; + function setCollectionSponsorCross(CrossAccount memory sponsor) external; /// Whether there is a pending sponsor. /// @dev EVM selector for this function is: 0x058ac185, @@ -102,7 +102,7 @@ /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw. /// @dev EVM selector for this function is: 0x6ec0a9f1, /// or in textual repr: collectionSponsor() - function collectionSponsor() external view returns (EthCrossAccount memory); + function collectionSponsor() external view returns (CrossAccount memory); /// Get current collection limits. /// @@ -127,13 +127,13 @@ /// @param newAdmin Cross account administrator address. /// @dev EVM selector for this function is: 0x859aa7d6, /// or in textual repr: addCollectionAdminCross((address,uint256)) - function addCollectionAdminCross(EthCrossAccount memory newAdmin) external; + function addCollectionAdminCross(CrossAccount memory newAdmin) external; /// Remove collection admin. /// @param admin Cross account administrator address. /// @dev EVM selector for this function is: 0x6c0cd173, /// or in textual repr: removeCollectionAdminCross((address,uint256)) - function removeCollectionAdminCross(EthCrossAccount memory admin) external; + function removeCollectionAdminCross(CrossAccount memory admin) external; // /// Add collection admin. // /// @param newAdmin Address of the added administrator. @@ -186,7 +186,7 @@ /// @param user User address to check. /// @dev EVM selector for this function is: 0x91b6df49, /// or in textual repr: allowlistedCross((address,uint256)) - function allowlistedCross(EthCrossAccount memory user) external view returns (bool); + function allowlistedCross(CrossAccount memory user) external view returns (bool); // /// Add the user to the allowed list. // /// @@ -200,7 +200,7 @@ /// @param user User cross account address. /// @dev EVM selector for this function is: 0xa0184a3a, /// or in textual repr: addToCollectionAllowListCross((address,uint256)) - function addToCollectionAllowListCross(EthCrossAccount memory user) external; + function addToCollectionAllowListCross(CrossAccount memory user) external; // /// Remove the user from the allowed list. // /// @@ -214,7 +214,7 @@ /// @param user User cross account address. /// @dev EVM selector for this function is: 0x09ba452a, /// or in textual repr: removeFromCollectionAllowListCross((address,uint256)) - function removeFromCollectionAllowListCross(EthCrossAccount memory user) external; + function removeFromCollectionAllowListCross(CrossAccount memory user) external; /// Switch permission for minting. /// @@ -237,7 +237,7 @@ /// @return "true" if account is the owner or admin /// @dev EVM selector for this function is: 0x3e75a905, /// or in textual repr: isOwnerOrAdminCross((address,uint256)) - function isOwnerOrAdminCross(EthCrossAccount memory user) external view returns (bool); + function isOwnerOrAdminCross(CrossAccount memory user) external view returns (bool); /// Returns collection type /// @@ -252,7 +252,7 @@ /// If address is canonical then substrate mirror is zero and vice versa. /// @dev EVM selector for this function is: 0xdf727d3b, /// or in textual repr: collectionOwner() - function collectionOwner() external view returns (EthCrossAccount memory); + function collectionOwner() external view returns (CrossAccount memory); // /// Changes collection owner to another account // /// @@ -268,7 +268,7 @@ /// If address is canonical then substrate mirror is zero and vice versa. /// @dev EVM selector for this function is: 0x5813216b, /// or in textual repr: collectionAdmins() - function collectionAdmins() external view returns (EthCrossAccount[] memory); + function collectionAdmins() external view returns (CrossAccount[] memory); /// Changes collection owner to another account /// @@ -276,11 +276,11 @@ /// @param newOwner new owner cross account /// @dev EVM selector for this function is: 0x6496c497, /// or in textual repr: changeCollectionOwnerCross((address,uint256)) - function changeCollectionOwnerCross(EthCrossAccount memory newOwner) external; + function changeCollectionOwnerCross(CrossAccount memory newOwner) external; } /// @dev Cross account struct -struct EthCrossAccount { +struct CrossAccount { address eth; uint256 sub; } @@ -305,13 +305,14 @@ uint256[] field_1; } +/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM. struct CollectionLimit { CollectionLimitField field; bool status; uint256 value; } -/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM. +/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) fields representation for EVM. enum CollectionLimitField { /// @dev How many tokens can a user have on one account. AccountTokenOwnership, @@ -350,11 +351,11 @@ /// @dev EVM selector for this function is: 0x269e6158, /// or in textual repr: mintCross((address,uint256),uint256) - function mintCross(EthCrossAccount memory to, uint256 amount) external returns (bool); + function mintCross(CrossAccount memory to, uint256 amount) external returns (bool); /// @dev EVM selector for this function is: 0x0ecd0ab0, /// or in textual repr: approveCross((address,uint256),uint256) - function approveCross(EthCrossAccount memory spender, uint256 amount) external returns (bool); + function approveCross(CrossAccount memory spender, uint256 amount) external returns (bool); // /// Burn tokens from account // /// @dev Function that burns an `amount` of the tokens of a given account, @@ -372,7 +373,7 @@ /// @param amount The amount that will be burnt. /// @dev EVM selector for this function is: 0xbb2f5a58, /// or in textual repr: burnFromCross((address,uint256),uint256) - function burnFromCross(EthCrossAccount memory from, uint256 amount) external returns (bool); + function burnFromCross(CrossAccount memory from, uint256 amount) external returns (bool); /// Mint tokens for multiple accounts. /// @param amounts array of pairs of account address and amount @@ -382,13 +383,13 @@ /// @dev EVM selector for this function is: 0x2ada85ff, /// or in textual repr: transferCross((address,uint256),uint256) - function transferCross(EthCrossAccount memory to, uint256 amount) external returns (bool); + function transferCross(CrossAccount memory to, uint256 amount) external returns (bool); /// @dev EVM selector for this function is: 0xd5cf430b, /// or in textual repr: transferFromCross((address,uint256),(address,uint256),uint256) function transferFromCross( - EthCrossAccount memory from, - EthCrossAccount memory to, + CrossAccount memory from, + CrossAccount memory to, uint256 amount ) external returns (bool); } --- a/tests/src/eth/api/UniqueNFT.sol +++ b/tests/src/eth/api/UniqueNFT.sol @@ -180,7 +180,7 @@ /// @param sponsor Cross account address of the sponsor from whose account funds will be debited for operations with the contract. /// @dev EVM selector for this function is: 0x84a1d5a8, /// or in textual repr: setCollectionSponsorCross((address,uint256)) - function setCollectionSponsorCross(EthCrossAccount memory sponsor) external; + function setCollectionSponsorCross(CrossAccount memory sponsor) external; /// Whether there is a pending sponsor. /// @dev EVM selector for this function is: 0x058ac185, @@ -204,7 +204,7 @@ /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw. /// @dev EVM selector for this function is: 0x6ec0a9f1, /// or in textual repr: collectionSponsor() - function collectionSponsor() external view returns (EthCrossAccount memory); + function collectionSponsor() external view returns (CrossAccount memory); /// Get current collection limits. /// @@ -229,13 +229,13 @@ /// @param newAdmin Cross account administrator address. /// @dev EVM selector for this function is: 0x859aa7d6, /// or in textual repr: addCollectionAdminCross((address,uint256)) - function addCollectionAdminCross(EthCrossAccount memory newAdmin) external; + function addCollectionAdminCross(CrossAccount memory newAdmin) external; /// Remove collection admin. /// @param admin Cross account administrator address. /// @dev EVM selector for this function is: 0x6c0cd173, /// or in textual repr: removeCollectionAdminCross((address,uint256)) - function removeCollectionAdminCross(EthCrossAccount memory admin) external; + function removeCollectionAdminCross(CrossAccount memory admin) external; // /// Add collection admin. // /// @param newAdmin Address of the added administrator. @@ -288,7 +288,7 @@ /// @param user User address to check. /// @dev EVM selector for this function is: 0x91b6df49, /// or in textual repr: allowlistedCross((address,uint256)) - function allowlistedCross(EthCrossAccount memory user) external view returns (bool); + function allowlistedCross(CrossAccount memory user) external view returns (bool); // /// Add the user to the allowed list. // /// @@ -302,7 +302,7 @@ /// @param user User cross account address. /// @dev EVM selector for this function is: 0xa0184a3a, /// or in textual repr: addToCollectionAllowListCross((address,uint256)) - function addToCollectionAllowListCross(EthCrossAccount memory user) external; + function addToCollectionAllowListCross(CrossAccount memory user) external; // /// Remove the user from the allowed list. // /// @@ -316,7 +316,7 @@ /// @param user User cross account address. /// @dev EVM selector for this function is: 0x09ba452a, /// or in textual repr: removeFromCollectionAllowListCross((address,uint256)) - function removeFromCollectionAllowListCross(EthCrossAccount memory user) external; + function removeFromCollectionAllowListCross(CrossAccount memory user) external; /// Switch permission for minting. /// @@ -339,7 +339,7 @@ /// @return "true" if account is the owner or admin /// @dev EVM selector for this function is: 0x3e75a905, /// or in textual repr: isOwnerOrAdminCross((address,uint256)) - function isOwnerOrAdminCross(EthCrossAccount memory user) external view returns (bool); + function isOwnerOrAdminCross(CrossAccount memory user) external view returns (bool); /// Returns collection type /// @@ -354,7 +354,7 @@ /// If address is canonical then substrate mirror is zero and vice versa. /// @dev EVM selector for this function is: 0xdf727d3b, /// or in textual repr: collectionOwner() - function collectionOwner() external view returns (EthCrossAccount memory); + function collectionOwner() external view returns (CrossAccount memory); // /// Changes collection owner to another account // /// @@ -370,7 +370,7 @@ /// If address is canonical then substrate mirror is zero and vice versa. /// @dev EVM selector for this function is: 0x5813216b, /// or in textual repr: collectionAdmins() - function collectionAdmins() external view returns (EthCrossAccount[] memory); + function collectionAdmins() external view returns (CrossAccount[] memory); /// Changes collection owner to another account /// @@ -378,11 +378,11 @@ /// @param newOwner new owner cross account /// @dev EVM selector for this function is: 0x6496c497, /// or in textual repr: changeCollectionOwnerCross((address,uint256)) - function changeCollectionOwnerCross(EthCrossAccount memory newOwner) external; + function changeCollectionOwnerCross(CrossAccount memory newOwner) external; } /// @dev Cross account struct -struct EthCrossAccount { +struct CrossAccount { address eth; uint256 sub; } @@ -407,13 +407,14 @@ uint256[] field_1; } +/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM. struct CollectionLimit { CollectionLimitField field; bool status; uint256 value; } -/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM. +/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) fields representation for EVM. enum CollectionLimitField { /// @dev How many tokens can a user have on one account. AccountTokenOwnership, @@ -552,7 +553,7 @@ /// @param tokenId Id for the token. /// @dev EVM selector for this function is: 0x2b29dace, /// or in textual repr: crossOwnerOf(uint256) - function crossOwnerOf(uint256 tokenId) external view returns (EthCrossAccount memory); + function crossOwnerOf(uint256 tokenId) external view returns (CrossAccount memory); /// Returns the token properties. /// @@ -571,7 +572,7 @@ /// @param tokenId The NFT to approve /// @dev EVM selector for this function is: 0x0ecd0ab0, /// or in textual repr: approveCross((address,uint256),uint256) - function approveCross(EthCrossAccount memory approved, uint256 tokenId) external; + function approveCross(CrossAccount memory approved, uint256 tokenId) external; /// @notice Transfer ownership of an NFT /// @dev Throws unless `msg.sender` is the current owner. Throws if `to` @@ -589,7 +590,7 @@ /// @param tokenId The NFT to transfer /// @dev EVM selector for this function is: 0x2ada85ff, /// or in textual repr: transferCross((address,uint256),uint256) - function transferCross(EthCrossAccount memory to, uint256 tokenId) external; + function transferCross(CrossAccount memory to, uint256 tokenId) external; /// @notice Transfer ownership of an NFT from cross account address to cross account address /// @dev Throws unless `msg.sender` is the current owner. Throws if `to` @@ -600,8 +601,8 @@ /// @dev EVM selector for this function is: 0xd5cf430b, /// or in textual repr: transferFromCross((address,uint256),(address,uint256),uint256) function transferFromCross( - EthCrossAccount memory from, - EthCrossAccount memory to, + CrossAccount memory from, + CrossAccount memory to, uint256 tokenId ) external; @@ -623,7 +624,7 @@ /// @param tokenId The NFT to transfer /// @dev EVM selector for this function is: 0xbb2f5a58, /// or in textual repr: burnFromCross((address,uint256),uint256) - function burnFromCross(EthCrossAccount memory from, uint256 tokenId) external; + function burnFromCross(CrossAccount memory from, uint256 tokenId) external; /// @notice Returns next free NFT ID. /// @dev EVM selector for this function is: 0x75794a3c, @@ -654,7 +655,7 @@ /// @return uint256 The id of the newly minted token /// @dev EVM selector for this function is: 0xb904db03, /// or in textual repr: mintCross((address,uint256),(string,bytes)[]) - function mintCross(EthCrossAccount memory to, Property[] memory properties) external returns (uint256); + function mintCross(CrossAccount memory to, Property[] memory properties) external returns (uint256); } /// @dev anonymous struct --- a/tests/src/eth/api/UniqueRefungible.sol +++ b/tests/src/eth/api/UniqueRefungible.sol @@ -180,7 +180,7 @@ /// @param sponsor Cross account address of the sponsor from whose account funds will be debited for operations with the contract. /// @dev EVM selector for this function is: 0x84a1d5a8, /// or in textual repr: setCollectionSponsorCross((address,uint256)) - function setCollectionSponsorCross(EthCrossAccount memory sponsor) external; + function setCollectionSponsorCross(CrossAccount memory sponsor) external; /// Whether there is a pending sponsor. /// @dev EVM selector for this function is: 0x058ac185, @@ -204,7 +204,7 @@ /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw. /// @dev EVM selector for this function is: 0x6ec0a9f1, /// or in textual repr: collectionSponsor() - function collectionSponsor() external view returns (EthCrossAccount memory); + function collectionSponsor() external view returns (CrossAccount memory); /// Get current collection limits. /// @@ -229,13 +229,13 @@ /// @param newAdmin Cross account administrator address. /// @dev EVM selector for this function is: 0x859aa7d6, /// or in textual repr: addCollectionAdminCross((address,uint256)) - function addCollectionAdminCross(EthCrossAccount memory newAdmin) external; + function addCollectionAdminCross(CrossAccount memory newAdmin) external; /// Remove collection admin. /// @param admin Cross account administrator address. /// @dev EVM selector for this function is: 0x6c0cd173, /// or in textual repr: removeCollectionAdminCross((address,uint256)) - function removeCollectionAdminCross(EthCrossAccount memory admin) external; + function removeCollectionAdminCross(CrossAccount memory admin) external; // /// Add collection admin. // /// @param newAdmin Address of the added administrator. @@ -288,7 +288,7 @@ /// @param user User address to check. /// @dev EVM selector for this function is: 0x91b6df49, /// or in textual repr: allowlistedCross((address,uint256)) - function allowlistedCross(EthCrossAccount memory user) external view returns (bool); + function allowlistedCross(CrossAccount memory user) external view returns (bool); // /// Add the user to the allowed list. // /// @@ -302,7 +302,7 @@ /// @param user User cross account address. /// @dev EVM selector for this function is: 0xa0184a3a, /// or in textual repr: addToCollectionAllowListCross((address,uint256)) - function addToCollectionAllowListCross(EthCrossAccount memory user) external; + function addToCollectionAllowListCross(CrossAccount memory user) external; // /// Remove the user from the allowed list. // /// @@ -316,7 +316,7 @@ /// @param user User cross account address. /// @dev EVM selector for this function is: 0x09ba452a, /// or in textual repr: removeFromCollectionAllowListCross((address,uint256)) - function removeFromCollectionAllowListCross(EthCrossAccount memory user) external; + function removeFromCollectionAllowListCross(CrossAccount memory user) external; /// Switch permission for minting. /// @@ -339,7 +339,7 @@ /// @return "true" if account is the owner or admin /// @dev EVM selector for this function is: 0x3e75a905, /// or in textual repr: isOwnerOrAdminCross((address,uint256)) - function isOwnerOrAdminCross(EthCrossAccount memory user) external view returns (bool); + function isOwnerOrAdminCross(CrossAccount memory user) external view returns (bool); /// Returns collection type /// @@ -354,7 +354,7 @@ /// If address is canonical then substrate mirror is zero and vice versa. /// @dev EVM selector for this function is: 0xdf727d3b, /// or in textual repr: collectionOwner() - function collectionOwner() external view returns (EthCrossAccount memory); + function collectionOwner() external view returns (CrossAccount memory); // /// Changes collection owner to another account // /// @@ -370,7 +370,7 @@ /// If address is canonical then substrate mirror is zero and vice versa. /// @dev EVM selector for this function is: 0x5813216b, /// or in textual repr: collectionAdmins() - function collectionAdmins() external view returns (EthCrossAccount[] memory); + function collectionAdmins() external view returns (CrossAccount[] memory); /// Changes collection owner to another account /// @@ -378,11 +378,11 @@ /// @param newOwner new owner cross account /// @dev EVM selector for this function is: 0x6496c497, /// or in textual repr: changeCollectionOwnerCross((address,uint256)) - function changeCollectionOwnerCross(EthCrossAccount memory newOwner) external; + function changeCollectionOwnerCross(CrossAccount memory newOwner) external; } /// @dev Cross account struct -struct EthCrossAccount { +struct CrossAccount { address eth; uint256 sub; } @@ -407,13 +407,14 @@ uint256[] field_1; } +/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM. struct CollectionLimit { CollectionLimitField field; bool status; uint256 value; } -/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) representation for EVM. +/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) fields representation for EVM. enum CollectionLimitField { /// @dev How many tokens can a user have on one account. AccountTokenOwnership, @@ -550,7 +551,7 @@ /// @param tokenId Id for the token. /// @dev EVM selector for this function is: 0x2b29dace, /// or in textual repr: crossOwnerOf(uint256) - function crossOwnerOf(uint256 tokenId) external view returns (EthCrossAccount memory); + function crossOwnerOf(uint256 tokenId) external view returns (CrossAccount memory); /// Returns the token properties. /// @@ -579,7 +580,7 @@ /// @param tokenId The RFT to transfer /// @dev EVM selector for this function is: 0x2ada85ff, /// or in textual repr: transferCross((address,uint256),uint256) - function transferCross(EthCrossAccount memory to, uint256 tokenId) external; + function transferCross(CrossAccount memory to, uint256 tokenId) external; /// @notice Transfer ownership of an RFT /// @dev Throws unless `msg.sender` is the current owner. Throws if `to` @@ -590,8 +591,8 @@ /// @dev EVM selector for this function is: 0xd5cf430b, /// or in textual repr: transferFromCross((address,uint256),(address,uint256),uint256) function transferFromCross( - EthCrossAccount memory from, - EthCrossAccount memory to, + CrossAccount memory from, + CrossAccount memory to, uint256 tokenId ) external; @@ -615,7 +616,7 @@ /// @param tokenId The RFT to transfer /// @dev EVM selector for this function is: 0xbb2f5a58, /// or in textual repr: burnFromCross((address,uint256),uint256) - function burnFromCross(EthCrossAccount memory from, uint256 tokenId) external; + function burnFromCross(CrossAccount memory from, uint256 tokenId) external; /// @notice Returns next free RFT ID. /// @dev EVM selector for this function is: 0x75794a3c, @@ -646,7 +647,7 @@ /// @return uint256 The id of the newly minted token /// @dev EVM selector for this function is: 0xb904db03, /// or in textual repr: mintCross((address,uint256),(string,bytes)[]) - function mintCross(EthCrossAccount memory to, Property[] memory properties) external returns (uint256); + function mintCross(CrossAccount memory to, Property[] memory properties) external returns (uint256); /// Returns EVM address for refungible token /// --- a/tests/src/eth/api/UniqueRefungibleToken.sol +++ b/tests/src/eth/api/UniqueRefungibleToken.sol @@ -39,7 +39,7 @@ /// @param amount The amount that will be burnt. /// @dev EVM selector for this function is: 0xbb2f5a58, /// or in textual repr: burnFromCross((address,uint256),uint256) - function burnFromCross(EthCrossAccount memory from, uint256 amount) external returns (bool); + function burnFromCross(CrossAccount memory from, uint256 amount) external returns (bool); /// @dev Approve the passed address to spend the specified amount of tokens on behalf of `msg.sender`. /// Beware that changing an allowance with this method brings the risk that someone may use both the old @@ -50,7 +50,7 @@ /// @param amount The amount of tokens to be spent. /// @dev EVM selector for this function is: 0x0ecd0ab0, /// or in textual repr: approveCross((address,uint256),uint256) - function approveCross(EthCrossAccount memory spender, uint256 amount) external returns (bool); + function approveCross(CrossAccount memory spender, uint256 amount) external returns (bool); /// @dev Function that changes total amount of the tokens. /// Throws if `msg.sender` doesn't owns all of the tokens. @@ -64,7 +64,7 @@ /// @param amount The amount to be transferred. /// @dev EVM selector for this function is: 0x2ada85ff, /// or in textual repr: transferCross((address,uint256),uint256) - function transferCross(EthCrossAccount memory to, uint256 amount) external returns (bool); + function transferCross(CrossAccount memory to, uint256 amount) external returns (bool); /// @dev Transfer tokens from one address to another /// @param from The address which you want to send tokens from @@ -73,14 +73,14 @@ /// @dev EVM selector for this function is: 0xd5cf430b, /// or in textual repr: transferFromCross((address,uint256),(address,uint256),uint256) function transferFromCross( - EthCrossAccount memory from, - EthCrossAccount memory to, + CrossAccount memory from, + CrossAccount memory to, uint256 amount ) external returns (bool); } /// @dev Cross account struct -struct EthCrossAccount { +struct CrossAccount { address eth; uint256 sub; } --- a/tests/src/eth/fractionalizer/Fractionalizer.sol +++ b/tests/src/eth/fractionalizer/Fractionalizer.sol @@ -3,7 +3,7 @@ import {CollectionHelpers} from "../api/CollectionHelpers.sol"; import {ContractHelpers} from "../api/ContractHelpers.sol"; import {UniqueRefungibleToken} from "../api/UniqueRefungibleToken.sol"; -import {UniqueRefungible, EthCrossAccount} from "../api/UniqueRefungible.sol"; +import {UniqueRefungible, CrossAccount} from "../api/UniqueRefungible.sol"; import {UniqueNFT} from "../api/UniqueNFT.sol"; /// @dev Fractionalization contract. It stores mappings between NFT and RFT tokens, @@ -63,7 +63,7 @@ "Wrong collection type. Collection is not refungible." ); require( - refungibleContract.isOwnerOrAdminCross(EthCrossAccount({eth: address(this), sub: uint256(0)})), + refungibleContract.isOwnerOrAdminCross(CrossAccount({eth: address(this), sub: uint256(0)})), "Fractionalizer contract should be an admin of the collection" ); rftCollection = _collection; @@ -128,7 +128,7 @@ address rftTokenAddress; UniqueRefungibleToken rftTokenContract; if (nft2rftMapping[_collection][_token] == 0) { - rftTokenId = rftCollectionContract.mint(address(this)); + rftTokenId = rftCollectionContract.mint(address(this)); rftTokenAddress = rftCollectionContract.tokenContractAddress(rftTokenId); nft2rftMapping[_collection][_token] = rftTokenId; rft2nftMapping[rftTokenAddress] = Token(_collection, _token); --- a/tests/src/eth/util/playgrounds/types.ts +++ b/tests/src/eth/util/playgrounds/types.ts @@ -25,6 +25,7 @@ TokenOwner, CollectionAdmin } + export enum CollectionLimitField { AccountTokenOwnership, SponsoredDataSize, @@ -37,8 +38,8 @@ TransferEnabled } -export interface EthCollectionLimit { +export interface CollectionLimit { field: CollectionLimitField, status: boolean, - value: bigint, + value: bigint | number, }