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

difftreelog

feat(rmrk) benchmark accept_nft

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

1 file 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![0; S::get() as usize].try_into().expect("size == S")19}2021fn create_max_collection<T: Config>(owner: &T::AccountId) -> DispatchResult {22	<T as pallet_common::Config>::Currency::deposit_creating(owner, T::CollectionCreationPrice::get());2324	let metadata = create_data();25	let max = None;26	let symbol = create_data();2728	<Pallet<T>>::create_collection(RawOrigin::Signed(owner.clone()).into(), metadata, max, symbol)29}3031fn create_max_nft<T: Config>(owner: &T::AccountId, collection_id: RmrkCollectionId) -> DispatchResult {32	let royalty_recipient = Some(owner.clone());33	let royalty_amount = Some(Permill::from_percent(25));34	let metadata = create_data();35	let transferable = true;3637	<Pallet<T>>::mint_nft(38		RawOrigin::Signed(owner.clone()).into(),39		owner.clone(),40		collection_id,41		royalty_recipient,42		royalty_amount,43		metadata,44		transferable45	)46}4748struct NftTowerBuilder {49	collection_id: RmrkCollectionId,50	current_nft_id: RmrkNftId51}5253impl NftTowerBuilder {54	fn new(collection_id: RmrkCollectionId) -> Self {55		Self {56			collection_id,57			current_nft_id: 058		}59	}6061	fn build<T: Config>(&mut self, owner: &T::AccountId, height: u32) -> Result<RmrkNftId, DispatchError> {62		create_max_nft::<T>(owner, self.collection_id)?;63		self.current_nft_id += 1;6465		let mut prev_nft_id = self.current_nft_id;6667		for _ in 0..height {68			create_max_nft::<T>(owner, self.collection_id)?;69			self.current_nft_id += 1;70			71			let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(72				self.collection_id,73				prev_nft_id74			);7576			<Pallet<T>>::send(77				RawOrigin::Signed(owner.clone()).into(),78				self.collection_id,79				self.current_nft_id,80				new_owner,81			)?;8283			prev_nft_id = self.current_nft_id;84		}8586		let deepest_nft_id = self.current_nft_id;8788		Ok(deepest_nft_id)89	}90}9192benchmarks! {93	create_collection {94		let caller = account("caller", 0, SEED);95		<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());96		let metadata = create_data();97		let max = None;98		let symbol = create_data();99	}: _(RawOrigin::Signed(caller), metadata, max, symbol)100101	destroy_collection {102		let caller = account("caller", 0, SEED);103		104		create_max_collection::<T>(&caller)?;105		let collection_id = 0;106	}: _(RawOrigin::Signed(caller), collection_id)107108	change_collection_issuer {109		let caller: T::AccountId = account("caller", 0, SEED);110111		create_max_collection::<T>(&caller)?;112		let collection_id = 0;113114		let new_owner: T::AccountId = account("new_owner", 0, SEED);115116		let new_owner_source = T::Lookup::unlookup(new_owner);117	}: _(RawOrigin::Signed(caller), collection_id, new_owner_source)118119	lock_collection {120		let caller: T::AccountId = account("caller", 0, SEED);121122		create_max_collection::<T>(&caller)?;123		let collection_id = 0;124	}: _(RawOrigin::Signed(caller), collection_id)125126	mint_nft {127		let caller: T::AccountId = account("caller", 0, SEED);128129		create_max_collection::<T>(&caller)?;130		let collection_id = 0;131		let owner = caller.clone();132		133		let royalty_recipient = Some(caller.clone());134		let royalty_amount = Some(Permill::from_percent(25));135		let metadata = create_data();136		let transferable = true;137	}:  _(138		RawOrigin::Signed(caller),139		owner,140		collection_id,141		royalty_recipient,142		royalty_amount,143		metadata,144		transferable145	)146147	send {148		let caller: T::AccountId = account("caller", 0, SEED);149		create_max_collection::<T>(&caller)?;150		let collection_id = 0;151152		let mut nft_tower_builder = NftTowerBuilder::new(collection_id);153		let src_nft_id = nft_tower_builder.build::<T>(&caller, 0)?;154		let target_nft_id = nft_tower_builder.build::<T>(&caller, NESTING_BUDGET - 2)?;155	}: _(156		RawOrigin::Signed(caller),157		collection_id,158		src_nft_id,159		<RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(collection_id, target_nft_id)160	)161}