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

difftreelog

fix forward collection flags

Yaroslav Bolyukin2022-10-13parent: #f27580f.patch.diff
in: master

10 files changed

modifiedpallets/common/src/dispatch.rsdiffbeforeafterboth
--- a/pallets/common/src/dispatch.rs
+++ b/pallets/common/src/dispatch.rs
@@ -9,7 +9,7 @@
 	traits::Get,
 };
 use sp_runtime::DispatchError;
-use up_data_structs::{CollectionId, CreateCollectionData};
+use up_data_structs::{CollectionId, CreateCollectionData, CollectionFlags};
 
 use crate::{pallet::Config, CommonCollectionOperations, CollectionHandle};
 
@@ -80,6 +80,7 @@
 		sender: T::CrossAccountId,
 		payer: T::CrossAccountId,
 		data: CreateCollectionData<T::AccountId>,
+		flags: CollectionFlags,
 	) -> Result<CollectionId, DispatchError>;
 
 	/// Delete the collection.
modifiedpallets/fungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/fungible/src/lib.rs
+++ b/pallets/fungible/src/lib.rs
@@ -212,8 +212,9 @@
 		owner: T::CrossAccountId,
 		payer: T::CrossAccountId,
 		data: CreateCollectionData<T::AccountId>,
+		flags: CollectionFlags,
 	) -> Result<CollectionId, DispatchError> {
-		<PalletCommon<T>>::init_collection(owner, payer, data, CollectionFlags::default())
+		<PalletCommon<T>>::init_collection(owner, payer, data, flags)
 	}
 
 	/// Initializes the collection with ForeignCollection flag. Returns [CollectionId] on success, [DispatchError] otherwise.
modifiedpallets/nonfungible/src/benchmarking.rsdiffbeforeafterboth
before · pallets/nonfungible/src/benchmarking.rs
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617use super::*;18use crate::{Pallet, Config, NonfungibleHandle};1920use frame_benchmarking::{benchmarks, account};21use pallet_common::{22	bench_init,23	benchmarking::{create_collection_raw, property_key, property_value},24	CommonCollectionOperations,25};26use sp_std::prelude::*;27use up_data_structs::{CollectionMode, MAX_ITEMS_PER_BATCH, MAX_PROPERTIES_PER_ITEM, budget::Unlimited};2829const SEED: u32 = 1;3031fn create_max_item_data<T: Config>(owner: T::CrossAccountId) -> CreateItemData<T> {32	CreateItemData::<T> {33		owner,34		properties: Default::default(),35	}36}37fn create_max_item<T: Config>(38	collection: &NonfungibleHandle<T>,39	sender: &T::CrossAccountId,40	owner: T::CrossAccountId,41) -> Result<TokenId, DispatchError> {42	<Pallet<T>>::create_item(43		&collection,44		sender,45		create_max_item_data::<T>(owner),46		&Unlimited,47	)?;48	Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))49}5051fn create_collection<T: Config>(52	owner: T::CrossAccountId,53) -> Result<NonfungibleHandle<T>, DispatchError> {54	create_collection_raw(55		owner,56		CollectionMode::NFT,57		|owner: T::CrossAccountId, data| {58			<Pallet<T>>::init_collection(owner.clone(), owner, data, true)59		},60		NonfungibleHandle::cast,61	)62}6364benchmarks! {65	create_item {66		bench_init!{67			owner: sub; collection: collection(owner);68			sender: cross_from_sub(owner); to: cross_sub;69		};70	}: {create_max_item(&collection, &sender, to.clone())?}7172	create_multiple_items {73		let b in 0..MAX_ITEMS_PER_BATCH;74		bench_init!{75			owner: sub; collection: collection(owner);76			sender: cross_from_sub(owner); to: cross_sub;77		};78		let data = (0..b).map(|_| create_max_item_data::<T>(to.clone())).collect();79	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}8081	create_multiple_items_ex {82		let b in 0..MAX_ITEMS_PER_BATCH;83		bench_init!{84			owner: sub; collection: collection(owner);85			sender: cross_from_sub(owner);86		};87		let data = (0..b).map(|i| {88			bench_init!(to: cross_sub(i););89			create_max_item_data::<T>(to)90		}).collect();91	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}9293	burn_item {94		bench_init!{95			owner: sub; collection: collection(owner);96			sender: cross_from_sub(owner); burner: cross_sub;97		};98		let item = create_max_item(&collection, &sender, burner.clone())?;99	}: {<Pallet<T>>::burn(&collection, &burner, item)?}100101	burn_recursively_self_raw {102		bench_init!{103			owner: sub; collection: collection(owner);104			sender: cross_from_sub(owner); burner: cross_sub;105		};106		let item = create_max_item(&collection, &sender, burner.clone())?;107	}: {<Pallet<T>>::burn_recursively(&collection, &burner, item, &Unlimited, &Unlimited)?}108109	burn_recursively_breadth_plus_self_plus_self_per_each_raw {110		let b in 0..200;111		bench_init!{112			owner: sub; collection: collection(owner);113			sender: cross_from_sub(owner); burner: cross_sub;114		};115		let item = create_max_item(&collection, &sender, burner.clone())?;116		for i in 0..b {117			create_max_item(&collection, &sender, T::CrossTokenAddressMapping::token_to_address(collection.id, item))?;118		}119	}: {<Pallet<T>>::burn_recursively(&collection, &burner, item, &Unlimited, &Unlimited)?}120121	transfer {122		bench_init!{123			owner: sub; collection: collection(owner);124			owner: cross_from_sub; sender: cross_sub; receiver: cross_sub;125		};126		let item = create_max_item(&collection, &owner, sender.clone())?;127	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, &Unlimited)?}128129	approve {130		bench_init!{131			owner: sub; collection: collection(owner);132			owner: cross_from_sub; sender: cross_sub; spender: cross_sub;133		};134		let item = create_max_item(&collection, &owner, sender.clone())?;135	}: {<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?}136137	transfer_from {138		bench_init!{139			owner: sub; collection: collection(owner);140			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;141		};142		let item = create_max_item(&collection, &owner, sender.clone())?;143		<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?;144	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, &Unlimited)?}145146	burn_from {147		bench_init!{148			owner: sub; collection: collection(owner);149			owner: cross_from_sub; sender: cross_sub; burner: cross_sub;150		};151		let item = create_max_item(&collection, &owner, sender.clone())?;152		<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&burner))?;153	}: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, &Unlimited)?}154155	set_token_property_permissions {156		let b in 0..MAX_PROPERTIES_PER_ITEM;157		bench_init!{158			owner: sub; collection: collection(owner);159			owner: cross_from_sub;160		};161		let perms = (0..b).map(|k| PropertyKeyPermission {162			key: property_key(k as usize),163			permission: PropertyPermission {164				mutable: false,165				collection_admin: false,166				token_owner: false,167			},168		}).collect::<Vec<_>>();169	}: {<Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?}170171	set_token_properties {172		let b in 0..MAX_PROPERTIES_PER_ITEM;173		bench_init!{174			owner: sub; collection: collection(owner);175			owner: cross_from_sub;176		};177		let perms = (0..b).map(|k| PropertyKeyPermission {178			key: property_key(k as usize),179			permission: PropertyPermission {180				mutable: false,181				collection_admin: true,182				token_owner: true,183			},184		}).collect::<Vec<_>>();185		<Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;186		let props = (0..b).map(|k| Property {187			key: property_key(k as usize),188			value: property_value(),189		}).collect::<Vec<_>>();190		let item = create_max_item(&collection, &owner, owner.clone())?;191	}: {<Pallet<T>>::set_token_properties(&collection, &owner, item, props.into_iter(), false, &Unlimited)?}192193	delete_token_properties {194		let b in 0..MAX_PROPERTIES_PER_ITEM;195		bench_init!{196			owner: sub; collection: collection(owner);197			owner: cross_from_sub;198		};199		let perms = (0..b).map(|k| PropertyKeyPermission {200			key: property_key(k as usize),201			permission: PropertyPermission {202				mutable: true,203				collection_admin: true,204				token_owner: true,205			},206		}).collect::<Vec<_>>();207		<Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;208		let props = (0..b).map(|k| Property {209			key: property_key(k as usize),210			value: property_value(),211		}).collect::<Vec<_>>();212		let item = create_max_item(&collection, &owner, owner.clone())?;213		<Pallet<T>>::set_token_properties(&collection, &owner, item, props.into_iter(), false, &Unlimited)?;214		let to_delete = (0..b).map(|k| property_key(k as usize)).collect::<Vec<_>>();215	}: {<Pallet<T>>::delete_token_properties(&collection, &owner, item, to_delete.into_iter(), &Unlimited)?}216217	token_owner {218		bench_init!{219			owner: sub; collection: collection(owner);220			owner: cross_from_sub;221		};222		let item = create_max_item(&collection, &owner, owner.clone())?;223224	}: {collection.token_owner(item)}225}
modifiedpallets/nonfungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -408,17 +408,9 @@
 		owner: T::CrossAccountId,
 		payer: T::CrossAccountId,
 		data: CreateCollectionData<T::AccountId>,
-		is_external: bool,
+		flags: CollectionFlags,
 	) -> Result<CollectionId, DispatchError> {
-		<PalletCommon<T>>::init_collection(
-			owner,
-			payer,
-			data,
-			CollectionFlags {
-				external: is_external,
-				..Default::default()
-			},
-		)
+		<PalletCommon<T>>::init_collection(owner, payer, data, flags)
 	}
 
 	/// Destroy NFT collection
modifiedpallets/proxy-rmrk-core/src/lib.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-core/src/lib.rs
+++ b/pallets/proxy-rmrk-core/src/lib.rs
@@ -1448,7 +1448,15 @@
 		data: CreateCollectionData<T::AccountId>,
 		properties: impl Iterator<Item = Property>,
 	) -> Result<CollectionId, DispatchError> {
-		let collection_id = <PalletNft<T>>::init_collection(sender.clone(), sender, data, true);
+		let collection_id = <PalletNft<T>>::init_collection(
+			sender.clone(),
+			sender,
+			data,
+			up_data_structs::CollectionFlags {
+				external: true,
+				..Default::default()
+			},
+		);
 
 		if let Err(DispatchError::Arithmetic(_)) = &collection_id {
 			return Err(<Error<T>>::NoAvailableCollectionId.into());
modifiedpallets/proxy-rmrk-equip/src/lib.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-equip/src/lib.rs
+++ b/pallets/proxy-rmrk-equip/src/lib.rs
@@ -254,7 +254,10 @@
 				cross_sender.clone(),
 				cross_sender.clone(),
 				data,
-				true,
+				up_data_structs::CollectionFlags {
+					external: true,
+					..Default::default()
+				},
 			);
 
 			if let Err(DispatchError::Arithmetic(_)) = &collection_id_res {
modifiedpallets/refungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/refungible/src/lib.rs
+++ b/pallets/refungible/src/lib.rs
@@ -371,8 +371,9 @@
 		owner: T::CrossAccountId,
 		payer: T::CrossAccountId,
 		data: CreateCollectionData<T::AccountId>,
+		flags: CollectionFlags,
 	) -> Result<CollectionId, DispatchError> {
-		<PalletCommon<T>>::init_collection(owner, payer, data, CollectionFlags::default())
+		<PalletCommon<T>>::init_collection(owner, payer, data, flags)
 	}
 
 	/// Destroy RFT collection
modifiedpallets/unique/src/eth/mod.rsdiffbeforeafterboth
--- a/pallets/unique/src/eth/mod.rs
+++ b/pallets/unique/src/eth/mod.rs
@@ -34,7 +34,7 @@
 use sp_std::vec;
 use up_data_structs::{
 	CollectionName, CollectionDescription, CollectionTokenPrefix, CreateCollectionData,
-	CollectionMode, PropertyValue,
+	CollectionMode, PropertyValue, CollectionFlags,
 };
 
 use crate::{Config, SelfWeightOf, weights::WeightInfo};
@@ -186,9 +186,16 @@
 	let collection_helpers_address =
 		T::CrossAccountId::from_eth(<T as pallet_common::Config>::ContractAddress::get());
 
-	let collection_id =
-		T::CollectionDispatch::create(caller.clone(), collection_helpers_address, data)
-			.map_err(pallet_evm_coder_substrate::dispatch_to_evm::<T>)?;
+	let collection_id = T::CollectionDispatch::create(
+		caller.clone(),
+		collection_helpers_address,
+		data,
+		CollectionFlags {
+			erc721metadata: add_properties,
+			..Default::default()
+		},
+	)
+	.map_err(pallet_evm_coder_substrate::dispatch_to_evm::<T>)?;
 	let address = pallet_common::eth::collection_id_to_address(collection_id);
 	Ok(address)
 }
@@ -243,8 +250,13 @@
 		check_sent_amount_equals_collection_creation_price::<T>(value)?;
 		let collection_helpers_address =
 			T::CrossAccountId::from_eth(<T as pallet_common::Config>::ContractAddress::get());
-		let collection_id = T::CollectionDispatch::create(caller, collection_helpers_address, data)
-			.map_err(dispatch_to_evm::<T>)?;
+		let collection_id = T::CollectionDispatch::create(
+			caller,
+			collection_helpers_address,
+			data,
+			Default::default(),
+		)
+		.map_err(dispatch_to_evm::<T>)?;
 
 		let address = pallet_common::eth::collection_id_to_address(collection_id);
 		Ok(address)
@@ -291,8 +303,16 @@
 		check_sent_amount_equals_collection_creation_price::<T>(value)?;
 		let collection_helpers_address =
 			T::CrossAccountId::from_eth(<T as pallet_common::Config>::ContractAddress::get());
-		let collection_id = T::CollectionDispatch::create(caller, collection_helpers_address, data)
-			.map_err(pallet_evm_coder_substrate::dispatch_to_evm::<T>)?;
+		let collection_id = T::CollectionDispatch::create(
+			caller,
+			collection_helpers_address,
+			data,
+			CollectionFlags {
+				erc721metadata: true,
+				..Default::default()
+			},
+		)
+		.map_err(pallet_evm_coder_substrate::dispatch_to_evm::<T>)?;
 
 		let address = pallet_common::eth::collection_id_to_address(collection_id);
 		Ok(address)
modifiedpallets/unique/src/lib.rsdiffbeforeafterboth
--- a/pallets/unique/src/lib.rs
+++ b/pallets/unique/src/lib.rs
@@ -345,7 +345,7 @@
 
 			// =========
 			let sender = T::CrossAccountId::from_sub(sender);
-			let _id = T::CollectionDispatch::create(sender.clone(), sender, data)?;
+			let _id = T::CollectionDispatch::create(sender.clone(), sender, data, Default::default())?;
 
 			Ok(())
 		}
modifiedruntime/common/dispatch.rsdiffbeforeafterboth
--- a/runtime/common/dispatch.rs
+++ b/runtime/common/dispatch.rs
@@ -31,7 +31,7 @@
 };
 use up_data_structs::{
 	CollectionMode, CreateCollectionData, MAX_DECIMAL_POINTS, mapping::TokenAddressMapping,
-	CollectionId,
+	CollectionId, CollectionFlags,
 };
 
 #[cfg(not(feature = "refungible"))]
@@ -57,10 +57,11 @@
 		sender: T::CrossAccountId,
 		payer: T::CrossAccountId,
 		data: CreateCollectionData<T::AccountId>,
+		flags: CollectionFlags,
 	) -> Result<CollectionId, DispatchError> {
 		let id = match data.mode {
 			CollectionMode::NFT => {
-				<PalletNonfungible<T>>::init_collection(sender, payer, data, false)?
+				<PalletNonfungible<T>>::init_collection(sender, payer, data, flags)?
 			}
 			CollectionMode::Fungible(decimal_points) => {
 				// check params
@@ -68,11 +69,13 @@
 					decimal_points <= MAX_DECIMAL_POINTS,
 					pallet_unique::Error::<T>::CollectionDecimalPointLimitExceeded
 				);
-				<PalletFungible<T>>::init_collection(sender, payer, data)?
+				<PalletFungible<T>>::init_collection(sender, payer, data, flags)?
 			}
 
 			#[cfg(feature = "refungible")]
-			CollectionMode::ReFungible => <PalletRefungible<T>>::init_collection(sender, payer, data)?,
+			CollectionMode::ReFungible => {
+				<PalletRefungible<T>>::init_collection(sender, payer, data, flags)?
+			}
 
 			#[cfg(not(feature = "refungible"))]
 			CollectionMode::ReFungible => return unsupported!(T),