git.delta.rocks / unique-network / refs/commits / 00a765656f26

difftreelog

source

pallets/proxy-rmrk-core/src/benchmarking.rs12.0 KiBsourcehistory
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(58		owner,59		T::CollectionCreationPrice::get(),60	);6162	let metadata = create_data();63	let max = None;64	let symbol = create_data();6566	<Pallet<T>>::create_collection(67		RawOrigin::Signed(owner.clone()).into(),68		metadata,69		max,70		symbol,71	)72}7374fn create_max_nft<T: Config>(75	owner: &T::AccountId,76	collection_id: RmrkCollectionId,77) -> DispatchResult {78	let royalty_recipient = Some(owner.clone());79	let royalty_amount = Some(Permill::from_percent(25));80	let metadata = create_data();81	let transferable = true;8283	<Pallet<T>>::mint_nft(84		RawOrigin::Signed(owner.clone()).into(),85		owner.clone(),86		collection_id,87		royalty_recipient,88		royalty_amount,89		metadata,90		transferable,91	)92}9394struct NftBuilder {95	collection_id: RmrkCollectionId,96	current_nft_id: RmrkNftId,97}9899impl NftBuilder {100	fn new(collection_id: RmrkCollectionId) -> Self {101		Self {102			collection_id,103			current_nft_id: 0,104		}105	}106107	fn current_nft_id(&self) -> RmrkNftId {108		self.current_nft_id109	}110111	fn build<T: Config>(&mut self, owner: &T::AccountId) -> Result<RmrkNftId, DispatchError> {112		create_max_nft::<T>(owner, self.collection_id)?;113		self.current_nft_id += 1;114115		Ok(self.current_nft_id)116	}117118	fn build_tower<T: Config>(119		&mut self,120		owner: &T::AccountId,121		height: u32,122	) -> Result<(RmrkNftId, RmrkNftId), DispatchError> {123		self.build::<T>(owner)?;124125		let root_nft_id = self.current_nft_id;126		let mut prev_nft_id = root_nft_id;127128		for _ in 0..height {129			self.build::<T>(owner)?;130131			let new_owner =132				<RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(133					self.collection_id,134					prev_nft_id,135				);136137			<Pallet<T>>::send(138				RawOrigin::Signed(owner.clone()).into(),139				self.collection_id,140				self.current_nft_id,141				new_owner,142			)?;143144			prev_nft_id = self.current_nft_id;145		}146147		let deepest_nft_id = self.current_nft_id;148149		Ok((root_nft_id, deepest_nft_id))150	}151}152153benchmarks! {154	create_collection {155		let caller = account("caller", 0, SEED);156		<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());157		let metadata = create_data();158		let max = None;159		let symbol = create_data();160	}: _(RawOrigin::Signed(caller), metadata, max, symbol)161162	destroy_collection {163		let caller = account("caller", 0, SEED);164165		create_max_collection::<T>(&caller)?;166		let collection_id = 0;167	}: _(RawOrigin::Signed(caller), collection_id)168169	change_collection_issuer {170		let caller: T::AccountId = account("caller", 0, SEED);171172		create_max_collection::<T>(&caller)?;173		let collection_id = 0;174175		let new_owner: T::AccountId = account("new_owner", 0, SEED);176177		let new_owner_source = T::Lookup::unlookup(new_owner);178	}: _(RawOrigin::Signed(caller), collection_id, new_owner_source)179180	lock_collection {181		let caller: T::AccountId = account("caller", 0, SEED);182183		create_max_collection::<T>(&caller)?;184		let collection_id = 0;185	}: _(RawOrigin::Signed(caller), collection_id)186187	mint_nft {188		let caller: T::AccountId = account("caller", 0, SEED);189190		create_max_collection::<T>(&caller)?;191		let collection_id = 0;192		let owner = caller.clone();193194		let royalty_recipient = Some(caller.clone());195		let royalty_amount = Some(Permill::from_percent(25));196		let metadata = create_data();197		let transferable = true;198	}:  _(199		RawOrigin::Signed(caller),200		owner,201		collection_id,202		royalty_recipient,203		royalty_amount,204		metadata,205		transferable206	)207208	send {209		let caller: T::AccountId = account("caller", 0, SEED);210		create_max_collection::<T>(&caller)?;211		let collection_id = 0;212213		let mut nft_builder = NftBuilder::new(collection_id);214		let src_nft_id = nft_builder.build::<T>(&caller)?;215		let (_, target_nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 2)?;216	}: _(217		RawOrigin::Signed(caller),218		collection_id,219		src_nft_id,220		<RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(collection_id, target_nft_id)221	)222223	accept_nft {224		let caller: T::AccountId = account("caller", 0, SEED);225		let sender: T::AccountId = account("sender", 0, SEED);226227		create_max_collection::<T>(&sender)?;228		let src_collection_id = 0;229230		create_max_collection::<T>(&caller)?;231		let target_collection_id = 1;232233		let mut src_nft_builder = NftBuilder::new(src_collection_id);234		let src_nft_id = src_nft_builder.build::<T>(&sender)?;235236		let mut target_nft_builder = NftBuilder::new(target_collection_id);237		let fake_target_nft_id = target_nft_builder.build::<T>(&caller)?;238		let (_, target_nft_id) = target_nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;239240		let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(241			target_collection_id,242			fake_target_nft_id243		);244245		let actual_new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(246			target_collection_id,247			target_nft_id248		);249250		<Pallet<T>>::send(251			RawOrigin::Signed(sender.clone()).into(),252			src_collection_id,253			src_nft_id,254			new_owner,255		)?;256	}: _(257		RawOrigin::Signed(caller),258		src_collection_id,259		src_nft_id,260		actual_new_owner261	)262263	reject_nft {264		let caller: T::AccountId = account("caller", 0, SEED);265		let sender: T::AccountId = account("sender", 0, SEED);266267		create_max_collection::<T>(&sender)?;268		let src_collection_id = 0;269270		create_max_collection::<T>(&caller)?;271		let target_collection_id = 1;272273		let mut src_nft_builder = NftBuilder::new(src_collection_id);274		let (src_root_nft_id, _) = src_nft_builder.build_tower::<T>(&sender, NESTING_BUDGET - 1)?;275276		let mut target_nft_builder = NftBuilder::new(target_collection_id);277		let target_nft_id = target_nft_builder.build::<T>(&caller)?;278279		let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(280			target_collection_id,281			target_nft_id282		);283284		<Pallet<T>>::send(285			RawOrigin::Signed(sender.clone()).into(),286			src_collection_id,287			src_root_nft_id,288			new_owner,289		)?;290	}: _(291		RawOrigin::Signed(caller),292		src_collection_id,293		src_root_nft_id294	)295296	set_property {297		let caller: T::AccountId = account("caller", 0, SEED);298		create_max_collection::<T>(&caller)?;299		let collection_id = 0;300301		let mut nft_builder = NftBuilder::new(collection_id);302		let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;303304		let key = create_data();305		let value = create_data();306	}: _(307		RawOrigin::Signed(caller),308		collection_id,309		Some(nft_id),310		key,311		value312	)313314	set_priority {315		let caller: T::AccountId = account("caller", 0, SEED);316		create_max_collection::<T>(&caller)?;317		let collection_id = 0;318319		let mut nft_builder = NftBuilder::new(collection_id);320		let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;321		let priorities = create_u32_array();322	}: _(323		RawOrigin::Signed(caller),324		collection_id,325		nft_id,326		priorities327	)328329	add_basic_resource {330		let caller: T::AccountId = account("caller", 0, SEED);331		<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());332333		create_max_collection::<T>(&caller)?;334		let collection_id = 0;335336		let mut nft_builder = NftBuilder::new(collection_id);337		let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;338		let resource = create_basic_resource();339	}: _(340		RawOrigin::Signed(caller),341		collection_id,342		nft_id,343		resource344	)345346	add_composable_resource {347		let caller: T::AccountId = account("caller", 0, SEED);348		<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());349350		create_max_collection::<T>(&caller)?;351		let collection_id = 0;352353		let mut nft_builder = NftBuilder::new(collection_id);354		let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;355		let resource = create_composable_resource();356	}: _(357		RawOrigin::Signed(caller),358		collection_id,359		nft_id,360		resource361	)362363	add_slot_resource {364		let caller: T::AccountId = account("caller", 0, SEED);365		<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());366367		create_max_collection::<T>(&caller)?;368		let collection_id = 0;369370		let mut nft_builder = NftBuilder::new(collection_id);371		let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;372		let resource = create_slot_resource();373	}: _(374		RawOrigin::Signed(caller),375		collection_id,376		nft_id,377		resource378	)379380	remove_resource {381		let caller: T::AccountId = account("caller", 0, SEED);382		<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());383384		create_max_collection::<T>(&caller)?;385		let collection_id = 0;386387		let mut nft_builder = NftBuilder::new(collection_id);388		let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;389		let resource = create_basic_resource();390391		<Pallet<T>>::add_basic_resource(392			RawOrigin::Signed(caller.clone()).into(),393			collection_id,394			nft_id,395			resource396		)?;397398		let resource_id = 1;399	}: _(400		RawOrigin::Signed(caller),401		collection_id,402		nft_id,403		resource_id404	)405406	accept_resource {407		let caller: T::AccountId = account("caller", 0, SEED);408		let admin: T::AccountId = account("admin", 0, SEED);409410		<T as pallet_common::Config>::Currency::deposit_creating(&admin, T::CollectionCreationPrice::get());411412		create_max_collection::<T>(&admin)?;413		let collection_id = 0;414415		let mut nft_builder = NftBuilder::new(collection_id);416		let root_nft_id = 1;417		let (_, nested_nft_id) = nft_builder.build_tower::<T>(&admin, NESTING_BUDGET - 1)?;418		let resource = create_basic_resource();419420		let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::AccountId(caller.clone());421422		<Pallet<T>>::send(423			RawOrigin::Signed(admin.clone()).into(),424			collection_id,425			root_nft_id,426			new_owner,427		)?;428429		<Pallet<T>>::add_basic_resource(430			RawOrigin::Signed(admin.clone()).into(),431			collection_id,432			nested_nft_id,433			resource434		)?;435436		let resource_id = 1;437	}: _(438		RawOrigin::Signed(caller),439		collection_id,440		nested_nft_id,441		resource_id442	)443444	accept_resource_removal {445		let caller: T::AccountId = account("caller", 0, SEED);446		let admin: T::AccountId = account("admin", 0, SEED);447448		<T as pallet_common::Config>::Currency::deposit_creating(&admin, T::CollectionCreationPrice::get());449450		create_max_collection::<T>(&admin)?;451		let collection_id = 0;452453		let mut nft_builder = NftBuilder::new(collection_id);454		let root_nft_id = 1;455		let (_, nested_nft_id) = nft_builder.build_tower::<T>(&admin, NESTING_BUDGET - 1)?;456		let resource = create_basic_resource();457458		<Pallet<T>>::add_basic_resource(459			RawOrigin::Signed(admin.clone()).into(),460			collection_id,461			nested_nft_id,462			resource463		)?;464465		let resource_id = 1;466467		let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::AccountId(caller.clone());468469		<Pallet<T>>::send(470			RawOrigin::Signed(admin.clone()).into(),471			collection_id,472			root_nft_id,473			new_owner,474		)?;475476		<Pallet<T>>::remove_resource(477			RawOrigin::Signed(admin).into(),478			collection_id,479			nested_nft_id,480			resource_id481		)?;482	}: _(483		RawOrigin::Signed(caller),484		collection_id,485		nested_nft_id,486		resource_id487	)488}