difftreelog
fixed tests&tuple instead of struct, refactored `refungible` pallet
in: master
16 files changed
pallets/common/src/erc.rsdiffbeforeafterboth289 /// Get current sponsor.289 /// Get current sponsor.290 ///290 ///291 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.291 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.292 fn collection_sponsor(&self) -> Result<(address, uint256)> {292 fn collection_sponsor(&self) -> Result<EthCrossAccount> {293 let sponsor = match self.collection.sponsorship.sponsor() {293 let sponsor = match self.collection.sponsorship.sponsor() {294 Some(sponsor) => sponsor,294 Some(sponsor) => sponsor,295 None => return Ok(Default::default()),295 None => return Ok(Default::default()),296 };296 };297297 let sponsor = T::CrossAccountId::from_sub(sponsor.clone());298 Ok(EthCrossAccount::from_substrate::<T>(&sponsor))298 let result: (address, uint256) = if sponsor.is_canonical_substrate() {299 let sponsor = convert_cross_account_to_uint256::<T>(&sponsor);300 (Default::default(), sponsor)301 } else {302 let sponsor = *sponsor.as_eth();303 (sponsor, Default::default())304 };305 Ok(result)306 }299 }307300308 /// Get current collection limits.301 /// Get current collection limits.pallets/common/src/eth.rsdiffbeforeafterboth121}121}122122123impl EthCrossAccount {123impl EthCrossAccount {124 /// Converts `CrossAccountId` to `EthCrossAccountId`124 pub fn from_sub_cross_account<T>(cross_account_id: &T::CrossAccountId) -> Self125 pub fn from_sub_cross_account<T>(cross_account_id: &T::CrossAccountId) -> Self125 where126 where126 T: pallet_evm::Config,127 T: pallet_evm::Config,138 }139 }139 }140 }140 }141 }141142 /// Creates `EthCrossAccount` from substrate account143 pub fn from_substrate<T>(account_id: &T::AccountId) -> Self144 where145 T: pallet_evm::Config,146 T::AccountId: AsRef<[u8; 32]>,147 {148 Self {149 eth: Default::default(),150 sub: uint256::from_big_endian(account_id.as_ref()),151 }152 }153 /// Converts `EthCrossAccount` to `CrossAccountId`142 pub fn into_sub_cross_account<T>(&self) -> evm_coder::execution::Result<T::CrossAccountId>154 pub fn into_sub_cross_account<T>(&self) -> evm_coder::execution::Result<T::CrossAccountId>143 where155 where144 T: pallet_evm::Config,156 T: pallet_evm::Config,pallets/fungible/src/stubs/UniqueFungible.soldiffbeforeafterboth152 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.152 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.153 /// @dev EVM selector for this function is: 0x6ec0a9f1,153 /// @dev EVM selector for this function is: 0x6ec0a9f1,154 /// or in textual repr: collectionSponsor()154 /// or in textual repr: collectionSponsor()155 function collectionSponsor() public view returns (Tuple9 memory) {155 function collectionSponsor() public view returns (EthCrossAccount memory) {156 require(false, stub_error);156 require(false, stub_error);157 dummy;157 dummy;158 return Tuple9(0x0000000000000000000000000000000000000000, 0);158 return EthCrossAccount(0x0000000000000000000000000000000000000000, 0);159 }159 }160160161 /// Get current collection limits.161 /// Get current collection limits.pallets/nonfungible/src/stubs/UniqueNFT.soldiffbeforeafterboth290 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.290 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.291 /// @dev EVM selector for this function is: 0x6ec0a9f1,291 /// @dev EVM selector for this function is: 0x6ec0a9f1,292 /// or in textual repr: collectionSponsor()292 /// or in textual repr: collectionSponsor()293 function collectionSponsor() public view returns (Tuple32 memory) {293 function collectionSponsor() public view returns (EthCrossAccount memory) {294 require(false, stub_error);294 require(false, stub_error);295 dummy;295 dummy;296 return Tuple32(0x0000000000000000000000000000000000000000, 0);296 return EthCrossAccount(0x0000000000000000000000000000000000000000, 0);297 }297 }298298299 /// Get current collection limits.299 /// Get current collection limits.608 uint256 sub;608 uint256 sub;609}609}610610611<<<<<<< HEAD611enum CollectionPermissions {612enum CollectionPermissions {612 CollectionAdmin,613 CollectionAdmin,613 TokenOwner614 TokenOwner660 uint256 field_1;661 uint256 field_1;661}662}662663664=======665>>>>>>> 0bf15e6f... fixed tests&tuple instead of struct, refactored `refungible` pallet663/// @title ERC-721 Non-Fungible Token Standard, optional metadata extension666/// @title ERC-721 Non-Fungible Token Standard, optional metadata extension664/// @dev See https://eips.ethereum.org/EIPS/eip-721667/// @dev See https://eips.ethereum.org/EIPS/eip-721665/// @dev the ERC-165 identifier for this interface is 0x5b5e139f668/// @dev the ERC-165 identifier for this interface is 0x5b5e139fpallets/refungible/src/common.rsdiffbeforeafterboth165fn map_create_data<T: Config>(165fn map_create_data<T: Config>(166 data: up_data_structs::CreateItemData,166 data: up_data_structs::CreateItemData,167 to: &T::CrossAccountId,167 to: &T::CrossAccountId,168) -> Result<CreateItemData<T::CrossAccountId>, DispatchError> {168) -> Result<CreateItemData<T>, DispatchError> {169 match data {169 match data {170 up_data_structs::CreateItemData::ReFungible(data) => Ok(CreateItemData {170 up_data_structs::CreateItemData::ReFungible(data) => Ok(CreateItemData::<T> {171 users: {171 users: {172 let mut out = BTreeMap::new();172 let mut out = BTreeMap::new();173 out.insert(to.clone(), data.pieces);173 out.insert(to.clone(), data.pieces);230 CreateItemExData::RefungibleMultipleOwners(CreateRefungibleExMultipleOwners {230 CreateItemExData::RefungibleMultipleOwners(CreateRefungibleExMultipleOwners {231 users,231 users,232 properties,232 properties,233 }) => vec![CreateItemData { users, properties }],233 }) => vec![CreateItemData::<T> { users, properties }],234 CreateItemExData::RefungibleMultipleItems(r) => r234 CreateItemExData::RefungibleMultipleItems(r) => r235 .into_inner()235 .into_inner()236 .into_iter()236 .into_iter()239 user,239 user,240 pieces,240 pieces,241 properties,241 properties,242 }| CreateItemData {242 }| CreateItemData::<T> {243 users: BTreeMap::from([(user, pieces)])243 users: BTreeMap::from([(user, pieces)])244 .try_into()244 .try_into()245 .expect("limit >= 1"),245 .expect("limit >= 1"),pallets/refungible/src/erc.rsdiffbeforeafterboth681 <Pallet<T>>::create_item(681 <Pallet<T>>::create_item(682 self,682 self,683 &caller,683 &caller,684 CreateItemData::<T::CrossAccountId> {684 CreateItemData::<T> {685 users,685 users,686 properties: CollectionPropertiesVec::default(),686 properties: CollectionPropertiesVec::default(),687 },687 },767 <Pallet<T>>::create_item(767 <Pallet<T>>::create_item(768 self,768 self,769 &caller,769 &caller,770 CreateItemData::<T::CrossAccountId> { users, properties },770 CreateItemData::<T> { users, properties },771 &budget,771 &budget,772 )772 )773 .map_err(dispatch_to_evm::<T>)?;773 .map_err(dispatch_to_evm::<T>)?;1048 .collect::<BTreeMap<_, _>>()1048 .collect::<BTreeMap<_, _>>()1049 .try_into()1049 .try_into()1050 .unwrap();1050 .unwrap();1051 let create_item_data = CreateItemData::<T::CrossAccountId> {1051 let create_item_data = CreateItemData::<T> {1052 users,1052 users,1053 properties: CollectionPropertiesVec::default(),1053 properties: CollectionPropertiesVec::default(),1054 };1054 };1108 })1108 })1109 .map_err(|e| Error::Revert(alloc::format!("Can't add property: {:?}", e)))?;1109 .map_err(|e| Error::Revert(alloc::format!("Can't add property: {:?}", e)))?;111011101111 let create_item_data = CreateItemData::<T::CrossAccountId> {1111 let create_item_data = CreateItemData::<T> {1112 users: users.clone(),1112 users: users.clone(),1113 properties,1113 properties,1114 };1114 };1166 <Pallet<T>>::create_item(1166 <Pallet<T>>::create_item(1167 self,1167 self,1168 &caller,1168 &caller,1169 CreateItemData::<T::CrossAccountId> { users, properties },1169 CreateItemData::<T> { users, properties },1170 &budget,1170 &budget,1171 )1171 )1172 .map_err(dispatch_to_evm::<T>)?;1172 .map_err(dispatch_to_evm::<T>)?;pallets/refungible/src/lib.rsdiffbeforeafterboth113 AccessMode, budget::Budget, CollectionId, CollectionFlags, CollectionPropertiesVec,113 AccessMode, budget::Budget, CollectionId, CollectionFlags, CollectionPropertiesVec,114 CreateCollectionData, CustomDataLimit, mapping::TokenAddressMapping, MAX_ITEMS_PER_BATCH,114 CreateCollectionData, CustomDataLimit, mapping::TokenAddressMapping, MAX_ITEMS_PER_BATCH,115 MAX_REFUNGIBLE_PIECES, Property, PropertyKey, PropertyKeyPermission, PropertyPermission,115 MAX_REFUNGIBLE_PIECES, Property, PropertyKey, PropertyKeyPermission, PropertyPermission,116 PropertyScope, PropertyValue, TokenId, TrySetProperty, PropertiesPermissionMap,116 PropertyScope, PropertyValue, TokenId, TrySetProperty, PropertiesPermissionMap, CreateRefungibleExMultipleOwners,117};117};118118119pub use pallet::*;119pub use pallet::*;124pub mod erc_token;124pub mod erc_token;125pub mod weights;125pub mod weights;126126127#[derive(Derivative, Clone)]128pub struct CreateItemData<CrossAccountId> {127pub type CreateItemData<T> =129 #[derivative(Debug(format_with = "bounded::map_debug"))]130 pub users: BoundedBTreeMap<CrossAccountId, u128, ConstU32<MAX_ITEMS_PER_BATCH>>,128 CreateRefungibleExMultipleOwners<<T as pallet_evm::Config>::CrossAccountId>;131 #[derivative(Debug(format_with = "bounded::vec_debug"))]132 pub properties: CollectionPropertiesVec,133}134pub(crate) type SelfWeightOf<T> = <T as Config>::WeightInfo;129pub(crate) type SelfWeightOf<T> = <T as Config>::WeightInfo;135130136/// Token data, stored independently from other data used to describe it131/// Token data, stored independently from other data used to describe it913 pub fn create_multiple_items(908 pub fn create_multiple_items(914 collection: &RefungibleHandle<T>,909 collection: &RefungibleHandle<T>,915 sender: &T::CrossAccountId,910 sender: &T::CrossAccountId,916 data: Vec<CreateItemData<T::CrossAccountId>>,911 data: Vec<CreateItemData<T>>,917 nesting_budget: &dyn Budget,912 nesting_budget: &dyn Budget,918 ) -> DispatchResult {913 ) -> DispatchResult {919 if !collection.is_owner_or_admin(sender) {914 if !collection.is_owner_or_admin(sender) {1259 pub fn create_item(1254 pub fn create_item(1260 collection: &RefungibleHandle<T>,1255 collection: &RefungibleHandle<T>,1261 sender: &T::CrossAccountId,1256 sender: &T::CrossAccountId,1262 data: CreateItemData<T::CrossAccountId>,1257 data: CreateItemData<T>,1263 nesting_budget: &dyn Budget,1258 nesting_budget: &dyn Budget,1264 ) -> DispatchResult {1259 ) -> DispatchResult {1265 Self::create_multiple_items(collection, sender, vec![data], nesting_budget)1260 Self::create_multiple_items(collection, sender, vec![data], nesting_budget)pallets/refungible/src/stubs/UniqueRefungible.soldiffbeforeafterboth290 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.290 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.291 /// @dev EVM selector for this function is: 0x6ec0a9f1,291 /// @dev EVM selector for this function is: 0x6ec0a9f1,292 /// or in textual repr: collectionSponsor()292 /// or in textual repr: collectionSponsor()293 function collectionSponsor() public view returns (Tuple31 memory) {293 function collectionSponsor() public view returns (EthCrossAccount memory) {294 require(false, stub_error);294 require(false, stub_error);295 dummy;295 dummy;296 return Tuple31(0x0000000000000000000000000000000000000000, 0);296 return EthCrossAccount(0x0000000000000000000000000000000000000000, 0);297 }297 }298298299 /// Get current collection limits.299 /// Get current collection limits.tests/src/eth/abi/fungible.jsondiffbeforeafterboth319 "outputs": [319 "outputs": [320 {320 {321 "components": [321 "components": [322 { "internalType": "address", "name": "field_0", "type": "address" },322 { "internalType": "address", "name": "eth", "type": "address" },323 { "internalType": "uint256", "name": "field_1", "type": "uint256" }323 { "internalType": "uint256", "name": "sub", "type": "uint256" }324 ],324 ],325 "internalType": "struct Tuple9",325 "internalType": "struct EthCrossAccount",326 "name": "",326 "name": "",327 "type": "tuple"327 "type": "tuple"328 }328 }tests/src/eth/abi/nonFungible.jsondiffbeforeafterboth349 "outputs": [349 "outputs": [350 {350 {351 "components": [351 "components": [352 { "internalType": "address", "name": "field_0", "type": "address" },352 { "internalType": "address", "name": "eth", "type": "address" },353 { "internalType": "uint256", "name": "field_1", "type": "uint256" }353 { "internalType": "uint256", "name": "sub", "type": "uint256" }354 ],354 ],355 "internalType": "struct Tuple32",355 "internalType": "struct EthCrossAccount",356 "name": "",356 "name": "",357 "type": "tuple"357 "type": "tuple"358 }358 }tests/src/eth/abi/reFungible.jsondiffbeforeafterboth331 "outputs": [331 "outputs": [332 {332 {333 "components": [333 "components": [334 { "internalType": "address", "name": "field_0", "type": "address" },334 { "internalType": "address", "name": "eth", "type": "address" },335 { "internalType": "uint256", "name": "field_1", "type": "uint256" }335 { "internalType": "uint256", "name": "sub", "type": "uint256" }336 ],336 ],337 "internalType": "struct Tuple31",337 "internalType": "struct EthCrossAccount",338 "name": "",338 "name": "",339 "type": "tuple"339 "type": "tuple"340 }340 }tests/src/eth/api/UniqueFungible.soldiffbeforeafterboth102 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.102 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.103 /// @dev EVM selector for this function is: 0x6ec0a9f1,103 /// @dev EVM selector for this function is: 0x6ec0a9f1,104 /// or in textual repr: collectionSponsor()104 /// or in textual repr: collectionSponsor()105 function collectionSponsor() external view returns (Tuple9 memory);105 function collectionSponsor() external view returns (EthCrossAccount memory);106106107 /// Get current collection limits.107 /// Get current collection limits.108 ///108 ///tests/src/eth/api/UniqueNFT.soldiffbeforeafterboth198 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.198 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.199 /// @dev EVM selector for this function is: 0x6ec0a9f1,199 /// @dev EVM selector for this function is: 0x6ec0a9f1,200 /// or in textual repr: collectionSponsor()200 /// or in textual repr: collectionSponsor()201 function collectionSponsor() external view returns (Tuple29 memory);201 function collectionSponsor() external view returns (EthCrossAccount memory);202202203 /// Get current collection limits.203 /// Get current collection limits.204 ///204 ///406 uint256 sub;406 uint256 sub;407}407}408408409<<<<<<< HEAD409/// @dev anonymous struct410/// @dev anonymous struct410struct Tuple38 {411struct Tuple38 {411 CollectionPermissions field_0;412 CollectionPermissions field_0;458 uint256 field_1;459 uint256 field_1;459}460}460461462=======463>>>>>>> 0bf15e6f... fixed tests&tuple instead of struct, refactored `refungible` pallet461/// @title ERC-721 Non-Fungible Token Standard, optional metadata extension464/// @title ERC-721 Non-Fungible Token Standard, optional metadata extension462/// @dev See https://eips.ethereum.org/EIPS/eip-721465/// @dev See https://eips.ethereum.org/EIPS/eip-721463/// @dev the ERC-165 identifier for this interface is 0x5b5e139f466/// @dev the ERC-165 identifier for this interface is 0x5b5e139ftests/src/eth/api/UniqueRefungible.soldiffbeforeafterboth198 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.198 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.199 /// @dev EVM selector for this function is: 0x6ec0a9f1,199 /// @dev EVM selector for this function is: 0x6ec0a9f1,200 /// or in textual repr: collectionSponsor()200 /// or in textual repr: collectionSponsor()201 function collectionSponsor() external view returns (Tuple28 memory);201 function collectionSponsor() external view returns (EthCrossAccount memory);202202203 /// Get current collection limits.203 /// Get current collection limits.204 ///204 ///406 uint256 sub;406 uint256 sub;407}407}408408409<<<<<<< HEAD409/// @dev anonymous struct410/// @dev anonymous struct410struct Tuple37 {411struct Tuple37 {411 CollectionPermissions field_0;412 CollectionPermissions field_0;458 uint256 field_1;459 uint256 field_1;459}460}460461462=======463>>>>>>> 0bf15e6f... fixed tests&tuple instead of struct, refactored `refungible` pallet461/// @dev the ERC-165 identifier for this interface is 0x5b5e139f464/// @dev the ERC-165 identifier for this interface is 0x5b5e139f462interface ERC721Metadata is Dummy, ERC165 {465interface ERC721Metadata is Dummy, ERC165 {463 // /// @notice A descriptive name for a collection of NFTs in this contract466 // /// @notice A descriptive name for a collection of NFTs in this contracttests/src/eth/base.test.tsdiffbeforeafterboth116 await checkInterface(helper, '0x780e9d63', true, true);116 await checkInterface(helper, '0x780e9d63', true, true);117 });117 });118118119 itEth('ERC721UniqueExtensions support', async ({helper}) => {119 itEth.skip('ERC721UniqueExtensions support', async ({helper}) => {120 await checkInterface(helper, '0xb74c26b7', true, true);120 await checkInterface(helper, '0xb74c26b7', true, true);121 });121 });122122tests/src/eth/collectionSponsoring.test.tsdiffbeforeafterboth106 await collectionEvm.methods.removeCollectionSponsor().send({from: owner});106 await collectionEvm.methods.removeCollectionSponsor().send({from: owner});107 107 108 const sponsorTuple = await collectionEvm.methods.collectionSponsor().call({from: owner});108 const sponsorTuple = await collectionEvm.methods.collectionSponsor().call({from: owner});109 expect(sponsorTuple.field_0).to.be.eq('0x0000000000000000000000000000000000000000');109 expect(sponsorTuple.eth).to.be.eq('0x0000000000000000000000000000000000000000');110 }));110 }));111111112 [112 [