git.delta.rocks / unique-network / refs/commits / 5c9b347b87d5

difftreelog

feat(rmrk) benchmark adding resources

Daniel Shiposha2022-06-09parent: #e1169bb.patch.diff
in: master

2 files changed

modifiedpallets/proxy-rmrk-core/src/benchmarking.rsdiffbeforeafterboth
before · pallets/proxy-rmrk-core/src/benchmarking.rs
1use sp_std::vec;23use frame_benchmarking::{benchmarks, account};4use frame_system::RawOrigin;5use frame_support::{6	traits::{Currency, Get},7	BoundedVec,8};9use sp_runtime::Permill;1011use up_data_structs::*;1213use super::*;1415const SEED: u32 = 1;1617fn create_data<S: Get<u32>>() -> BoundedVec<u8, S> {18	vec![b'A'; S::get() as usize].try_into().expect("size == S")19}2021fn create_priorities<S: Get<u32>>() -> BoundedVec<RmrkResourceId, S> {22	vec![0; S::get() as usize].try_into().expect("size == S")23}2425fn create_max_collection<T: Config>(owner: &T::AccountId) -> DispatchResult {26	<T as pallet_common::Config>::Currency::deposit_creating(owner, T::CollectionCreationPrice::get());2728	let metadata = create_data();29	let max = None;30	let symbol = create_data();3132	<Pallet<T>>::create_collection(RawOrigin::Signed(owner.clone()).into(), metadata, max, symbol)33}3435fn create_max_nft<T: Config>(owner: &T::AccountId, collection_id: RmrkCollectionId) -> DispatchResult {36	let royalty_recipient = Some(owner.clone());37	let royalty_amount = Some(Permill::from_percent(25));38	let metadata = create_data();39	let transferable = true;4041	<Pallet<T>>::mint_nft(42		RawOrigin::Signed(owner.clone()).into(),43		owner.clone(),44		collection_id,45		royalty_recipient,46		royalty_amount,47		metadata,48		transferable49	)50}5152struct NftBuilder {53	collection_id: RmrkCollectionId,54	current_nft_id: RmrkNftId55}5657impl NftBuilder {58	fn new(collection_id: RmrkCollectionId) -> Self {59		Self {60			collection_id,61			current_nft_id: 062		}63	}6465	fn build<T: Config>(&mut self, owner: &T::AccountId) -> Result<RmrkNftId, DispatchError> {66		create_max_nft::<T>(owner, self.collection_id)?;67		self.current_nft_id += 1;6869		Ok(self.current_nft_id)70	}7172	fn build_tower<T: Config>(&mut self, owner: &T::AccountId, height: u32) -> Result<RmrkNftId, DispatchError> {73		self.build::<T>(owner)?;7475		let mut prev_nft_id = self.current_nft_id;7677		for _ in 0..height {78			self.build::<T>(owner)?;79			80			let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(81				self.collection_id,82				prev_nft_id83			);8485			<Pallet<T>>::send(86				RawOrigin::Signed(owner.clone()).into(),87				self.collection_id,88				self.current_nft_id,89				new_owner,90			)?;9192			prev_nft_id = self.current_nft_id;93		}9495		let deepest_nft_id = self.current_nft_id;9697		Ok(deepest_nft_id)98	}99}100101benchmarks! {102	create_collection {103		let caller = account("caller", 0, SEED);104		<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());105		let metadata = create_data();106		let max = None;107		let symbol = create_data();108	}: _(RawOrigin::Signed(caller), metadata, max, symbol)109110	destroy_collection {111		let caller = account("caller", 0, SEED);112		113		create_max_collection::<T>(&caller)?;114		let collection_id = 0;115	}: _(RawOrigin::Signed(caller), collection_id)116117	change_collection_issuer {118		let caller: T::AccountId = account("caller", 0, SEED);119120		create_max_collection::<T>(&caller)?;121		let collection_id = 0;122123		let new_owner: T::AccountId = account("new_owner", 0, SEED);124125		let new_owner_source = T::Lookup::unlookup(new_owner);126	}: _(RawOrigin::Signed(caller), collection_id, new_owner_source)127128	lock_collection {129		let caller: T::AccountId = account("caller", 0, SEED);130131		create_max_collection::<T>(&caller)?;132		let collection_id = 0;133	}: _(RawOrigin::Signed(caller), collection_id)134135	mint_nft {136		let caller: T::AccountId = account("caller", 0, SEED);137138		create_max_collection::<T>(&caller)?;139		let collection_id = 0;140		let owner = caller.clone();141		142		let royalty_recipient = Some(caller.clone());143		let royalty_amount = Some(Permill::from_percent(25));144		let metadata = create_data();145		let transferable = true;146	}:  _(147		RawOrigin::Signed(caller),148		owner,149		collection_id,150		royalty_recipient,151		royalty_amount,152		metadata,153		transferable154	)155156	send {157		let caller: T::AccountId = account("caller", 0, SEED);158		create_max_collection::<T>(&caller)?;159		let collection_id = 0;160161		let mut nft_builder = NftBuilder::new(collection_id);162		let src_nft_id = nft_builder.build::<T>(&caller)?;163		let target_nft_id = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 2)?;164	}: _(165		RawOrigin::Signed(caller),166		collection_id,167		src_nft_id,168		<RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(collection_id, target_nft_id)169	)170171	accept_nft {172		let caller: T::AccountId = account("caller", 0, SEED);173		let sender: T::AccountId = account("sender", 0, SEED);174175		create_max_collection::<T>(&sender)?;176		let src_collection_id = 0;177178		create_max_collection::<T>(&caller)?;179		let target_collection_id = 1;180181		let mut src_nft_builder = NftBuilder::new(src_collection_id);182		let src_nft_id = src_nft_builder.build::<T>(&sender)?;183184		let mut target_nft_builder = NftBuilder::new(target_collection_id);185		let fake_target_nft_id = target_nft_builder.build::<T>(&caller)?;186		let target_nft_id = target_nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;187188		let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(189			target_collection_id,190			fake_target_nft_id191		);192193		let actual_new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(194			target_collection_id,195			target_nft_id196		);197198		<Pallet<T>>::send(199			RawOrigin::Signed(sender.clone()).into(),200			src_collection_id,201			src_nft_id,202			new_owner,203		)?;204	}: _(205		RawOrigin::Signed(caller),206		src_collection_id,207		src_nft_id,208		actual_new_owner209	)210211	set_property {212		let caller: T::AccountId = account("caller", 0, SEED);213		create_max_collection::<T>(&caller)?;214		let collection_id = 0;215216		let mut nft_builder = NftBuilder::new(collection_id);217		let nft_id = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;218219		let key = create_data();220		let value = create_data();221	}: _(222		RawOrigin::Signed(caller),223		collection_id,224		Some(nft_id),225		key,226		value227	)228229	set_priority {230		let caller: T::AccountId = account("caller", 0, SEED);231		create_max_collection::<T>(&caller)?;232		let collection_id = 0;233234		let mut nft_builder = NftBuilder::new(collection_id);235		let nft_id = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;236		let priorities = create_priorities();237	}: _(238		RawOrigin::Signed(caller),239		collection_id,240		nft_id,241		priorities242	)243}
after · pallets/proxy-rmrk-core/src/benchmarking.rs
1use sp_std::vec;23use frame_benchmarking::{benchmarks, account};4use frame_system::RawOrigin;5use frame_support::{6	traits::{Currency, Get},7	BoundedVec,8};9use sp_runtime::Permill;1011use up_data_structs::*;1213use super::*;1415const SEED: u32 = 1;1617fn create_data<S: Get<u32>>() -> BoundedVec<u8, S> {18	vec![b'A'; S::get() as usize].try_into().expect("size == S")19}2021fn create_u32_array<S: Get<u32>>() -> BoundedVec<u32, S> {22	vec![0; S::get() as usize].try_into().expect("size == S")23}2425fn create_basic_resource() -> RmrkBasicResource {26	RmrkBasicResource {27		src: Some(create_data()),28		metadata: Some(create_data()),29		license: Some(create_data()),30		thumb: Some(create_data()),31	}32}3334fn create_composable_resource() -> RmrkComposableResource {35	RmrkComposableResource {36		parts: create_u32_array(),37		base: 100,38		src: Some(create_data()),39		metadata: Some(create_data()),40		license: Some(create_data()),41		thumb: Some(create_data()),42	}43}4445fn create_slot_resource() -> RmrkSlotResource {46	RmrkSlotResource {47		base: 100,48		slot: 200,49		src: Some(create_data()),50		metadata: Some(create_data()),51		license: Some(create_data()),52		thumb: Some(create_data()),53	}54}5556fn create_max_collection<T: Config>(owner: &T::AccountId) -> DispatchResult {57	<T as pallet_common::Config>::Currency::deposit_creating(owner, T::CollectionCreationPrice::get());5859	let metadata = create_data();60	let max = None;61	let symbol = create_data();6263	<Pallet<T>>::create_collection(RawOrigin::Signed(owner.clone()).into(), metadata, max, symbol)64}6566fn create_max_nft<T: Config>(owner: &T::AccountId, collection_id: RmrkCollectionId) -> DispatchResult {67	let royalty_recipient = Some(owner.clone());68	let royalty_amount = Some(Permill::from_percent(25));69	let metadata = create_data();70	let transferable = true;7172	<Pallet<T>>::mint_nft(73		RawOrigin::Signed(owner.clone()).into(),74		owner.clone(),75		collection_id,76		royalty_recipient,77		royalty_amount,78		metadata,79		transferable80	)81}8283struct NftBuilder {84	collection_id: RmrkCollectionId,85	current_nft_id: RmrkNftId86}8788impl NftBuilder {89	fn new(collection_id: RmrkCollectionId) -> Self {90		Self {91			collection_id,92			current_nft_id: 093		}94	}9596	fn build<T: Config>(&mut self, owner: &T::AccountId) -> Result<RmrkNftId, DispatchError> {97		create_max_nft::<T>(owner, self.collection_id)?;98		self.current_nft_id += 1;99100		Ok(self.current_nft_id)101	}102103	fn build_tower<T: Config>(&mut self, owner: &T::AccountId, height: u32) -> Result<RmrkNftId, DispatchError> {104		self.build::<T>(owner)?;105106		let mut prev_nft_id = self.current_nft_id;107108		for _ in 0..height {109			self.build::<T>(owner)?;110			111			let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(112				self.collection_id,113				prev_nft_id114			);115116			<Pallet<T>>::send(117				RawOrigin::Signed(owner.clone()).into(),118				self.collection_id,119				self.current_nft_id,120				new_owner,121			)?;122123			prev_nft_id = self.current_nft_id;124		}125126		let deepest_nft_id = self.current_nft_id;127128		Ok(deepest_nft_id)129	}130}131132benchmarks! {133	create_collection {134		let caller = account("caller", 0, SEED);135		<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());136		let metadata = create_data();137		let max = None;138		let symbol = create_data();139	}: _(RawOrigin::Signed(caller), metadata, max, symbol)140141	destroy_collection {142		let caller = account("caller", 0, SEED);143		144		create_max_collection::<T>(&caller)?;145		let collection_id = 0;146	}: _(RawOrigin::Signed(caller), collection_id)147148	change_collection_issuer {149		let caller: T::AccountId = account("caller", 0, SEED);150151		create_max_collection::<T>(&caller)?;152		let collection_id = 0;153154		let new_owner: T::AccountId = account("new_owner", 0, SEED);155156		let new_owner_source = T::Lookup::unlookup(new_owner);157	}: _(RawOrigin::Signed(caller), collection_id, new_owner_source)158159	lock_collection {160		let caller: T::AccountId = account("caller", 0, SEED);161162		create_max_collection::<T>(&caller)?;163		let collection_id = 0;164	}: _(RawOrigin::Signed(caller), collection_id)165166	mint_nft {167		let caller: T::AccountId = account("caller", 0, SEED);168169		create_max_collection::<T>(&caller)?;170		let collection_id = 0;171		let owner = caller.clone();172		173		let royalty_recipient = Some(caller.clone());174		let royalty_amount = Some(Permill::from_percent(25));175		let metadata = create_data();176		let transferable = true;177	}:  _(178		RawOrigin::Signed(caller),179		owner,180		collection_id,181		royalty_recipient,182		royalty_amount,183		metadata,184		transferable185	)186187	send {188		let caller: T::AccountId = account("caller", 0, SEED);189		create_max_collection::<T>(&caller)?;190		let collection_id = 0;191192		let mut nft_builder = NftBuilder::new(collection_id);193		let src_nft_id = nft_builder.build::<T>(&caller)?;194		let target_nft_id = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 2)?;195	}: _(196		RawOrigin::Signed(caller),197		collection_id,198		src_nft_id,199		<RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(collection_id, target_nft_id)200	)201202	accept_nft {203		let caller: T::AccountId = account("caller", 0, SEED);204		let sender: T::AccountId = account("sender", 0, SEED);205206		create_max_collection::<T>(&sender)?;207		let src_collection_id = 0;208209		create_max_collection::<T>(&caller)?;210		let target_collection_id = 1;211212		let mut src_nft_builder = NftBuilder::new(src_collection_id);213		let src_nft_id = src_nft_builder.build::<T>(&sender)?;214215		let mut target_nft_builder = NftBuilder::new(target_collection_id);216		let fake_target_nft_id = target_nft_builder.build::<T>(&caller)?;217		let target_nft_id = target_nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;218219		let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(220			target_collection_id,221			fake_target_nft_id222		);223224		let actual_new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(225			target_collection_id,226			target_nft_id227		);228229		<Pallet<T>>::send(230			RawOrigin::Signed(sender.clone()).into(),231			src_collection_id,232			src_nft_id,233			new_owner,234		)?;235	}: _(236		RawOrigin::Signed(caller),237		src_collection_id,238		src_nft_id,239		actual_new_owner240	)241242	set_property {243		let caller: T::AccountId = account("caller", 0, SEED);244		create_max_collection::<T>(&caller)?;245		let collection_id = 0;246247		let mut nft_builder = NftBuilder::new(collection_id);248		let nft_id = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;249250		let key = create_data();251		let value = create_data();252	}: _(253		RawOrigin::Signed(caller),254		collection_id,255		Some(nft_id),256		key,257		value258	)259260	set_priority {261		let caller: T::AccountId = account("caller", 0, SEED);262		create_max_collection::<T>(&caller)?;263		let collection_id = 0;264265		let mut nft_builder = NftBuilder::new(collection_id);266		let nft_id = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;267		let priorities = create_u32_array();268	}: _(269		RawOrigin::Signed(caller),270		collection_id,271		nft_id,272		priorities273	)274275	add_basic_resource {276		let caller: T::AccountId = account("caller", 0, SEED);277		<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());278279280		create_max_collection::<T>(&caller)?;281		let collection_id = 0;282283		let mut nft_builder = NftBuilder::new(collection_id);284		let nft_id = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;285		let resource = create_basic_resource();286	}: _(287		RawOrigin::Signed(caller),288		collection_id,289		nft_id,290		resource291	)292293	add_composable_resource {294		let caller: T::AccountId = account("caller", 0, SEED);295		<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());296297		create_max_collection::<T>(&caller)?;298		let collection_id = 0;299300		let mut nft_builder = NftBuilder::new(collection_id);301		let nft_id = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;302		let resource = create_composable_resource();303	}: _(304		RawOrigin::Signed(caller),305		collection_id,306		nft_id,307		resource308	)309310	add_slot_resource {311		let caller: T::AccountId = account("caller", 0, SEED);312		<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());313314		create_max_collection::<T>(&caller)?;315		let collection_id = 0;316317		let mut nft_builder = NftBuilder::new(collection_id);318		let nft_id = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;319		let resource = create_slot_resource();320	}: _(321		RawOrigin::Signed(caller),322		collection_id,323		nft_id,324		resource325	)326}
modifiedpallets/proxy-rmrk-core/src/lib.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-core/src/lib.rs
+++ b/pallets/proxy-rmrk-core/src/lib.rs
@@ -926,7 +926,6 @@
 			origin: OriginFor<T>,
 			rmrk_collection_id: RmrkCollectionId,
 			nft_id: RmrkNftId,
-			_resource_id: RmrkBoundedResource,
 			resource: RmrkComposableResource,
 		) -> DispatchResult {
 			let sender = ensure_signed(origin.clone())?;