git.delta.rocks / unique-network / refs/commits / 0fa7bd45c6ff

difftreelog

source

pallets/refungible/src/benchmarking.rs6.2 KiBsourcehistory
1use super::*;2use crate::{Pallet, Config, RefungibleHandle};34use sp_std::prelude::*;5use pallet_common::benchmarking::{create_collection_raw, create_data};6use frame_benchmarking::{benchmarks, account};7use up_data_structs::{CollectionMode, MAX_ITEMS_PER_BATCH};8use pallet_common::bench_init;9use core::convert::TryInto;10use core::iter::IntoIterator;1112const SEED: u32 = 1;1314fn create_max_item_data<T: Config>(15	users: impl IntoIterator<Item = (T::CrossAccountId, u128)>,16) -> CreateItemData<T> {17	let const_data = create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap();18	let variable_data = create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap();19	CreateItemData {20		const_data,21		variable_data,22		users: users.into_iter().collect(),23	}24}25fn create_max_item<T: Config>(26	collection: &RefungibleHandle<T>,27	sender: &T::CrossAccountId,28	users: impl IntoIterator<Item = (T::CrossAccountId, u128)>,29) -> Result<TokenId, DispatchError> {30	<Pallet<T>>::create_item(&collection, sender, create_max_item_data(users))?;31	Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))32}3334fn create_collection<T: Config>(owner: T::AccountId) -> Result<RefungibleHandle<T>, DispatchError> {35	create_collection_raw(36		owner,37		CollectionMode::NFT,38		<Pallet<T>>::init_collection,39		RefungibleHandle::cast,40	)41}42benchmarks! {43	create_item {44		bench_init!{45			owner: sub; collection: collection(owner);46			sender: cross_from_sub(owner); to: cross_sub;47		};48	}: {create_max_item(&collection, &sender, [(to.clone(), 200)])?}4950	create_multiple_items {51		let b in 0..MAX_ITEMS_PER_BATCH;52		bench_init!{53			owner: sub; collection: collection(owner);54			sender: cross_from_sub(owner); to: cross_sub;55		};56		let data = (0..b).map(|_| create_max_item_data([(to.clone(), 200)])).collect();57	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}5859	// Other user left, token data is kept60	burn_item_partial {61		bench_init!{62			owner: sub; collection: collection(owner);63			sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;64		};65		let item = create_max_item(&collection, &sender, [(burner.clone(), 200), (another_owner, 200)])?;66	}: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}67	// No users remaining, token is destroyed68	burn_item_fully {69		bench_init!{70			owner: sub; collection: collection(owner);71			sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;72		};73		let item = create_max_item(&collection, &sender, [(burner.clone(), 200)])?;74	}: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}7576	transfer_normal {77		bench_init!{78			owner: sub; collection: collection(owner);79			sender: cross_from_sub(owner); receiver: cross_sub;80		};81		let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;82	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100)?}83	// Target account is created84	transfer_creating {85		bench_init!{86			owner: sub; collection: collection(owner);87			sender: cross_from_sub(owner); receiver: cross_sub;88		};89		let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;90	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100)?}91	// Source account is destroyed92	transfer_removing {93		bench_init!{94			owner: sub; collection: collection(owner);95			sender: cross_from_sub(owner); receiver: cross_sub;96		};97		let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;98	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200)?}99	// Source account destroyed, target created100	transfer_creating_removing {101		bench_init!{102			owner: sub; collection: collection(owner);103			sender: cross_from_sub(owner); receiver: cross_sub;104		};105		let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;106	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200)?}107108	approve {109		bench_init!{110			owner: sub; collection: collection(owner);111			owner: cross_from_sub; sender: cross_sub; spender: cross_sub;112		};113		let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;114	}: {<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?}115116	transfer_from_normal {117		bench_init!{118			owner: sub; collection: collection(owner);119			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;120		};121		let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;122		<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;123	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100)?}124	// Target account is created125	transfer_from_creating {126		bench_init!{127			owner: sub; collection: collection(owner);128			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;129		};130		let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;131		<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;132	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100)?}133	// Source account is destroyed134	transfer_from_removing {135		bench_init!{136			owner: sub; collection: collection(owner);137			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;138		};139		let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;140		<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;141	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200)?}142	// Source account destroyed, target created143	transfer_from_creating_removing {144		bench_init!{145			owner: sub; collection: collection(owner);146			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;147		};148		let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;149		<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;150	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200)?}151152	set_variable_metadata {153		let b in 0..CUSTOM_DATA_LIMIT;154		bench_init!{155			owner: sub; collection: collection(owner);156			sender: cross_from_sub(owner);157		};158		let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;159		let data = create_data(b as usize);160	}: {<Pallet<T>>::set_variable_metadata(&collection, &sender, item, data)?}161}