git.delta.rocks / unique-network / refs/commits / 2b110b5d0489

difftreelog

source

pallets/refungible/src/benchmarking.rs7.5 KiBsourcehistory
1use super::*;2use crate::{Pallet, Config, RefungibleHandle};34use sp_std::prelude::*;5use pallet_common::benchmarking::{create_collection_raw, create_data, create_var_data};6use frame_benchmarking::{benchmarks, account};7use up_data_structs::{CollectionMode, MAX_ITEMS_PER_BATCH, CUSTOM_DATA_LIMIT};8use pallet_common::bench_init;9use core::convert::TryInto;10use core::iter::IntoIterator;1112const SEED: u32 = 1;1314fn create_max_item_data<CrossAccountId: Ord>(15	users: impl IntoIterator<Item = (CrossAccountId, u128)>,16) -> CreateRefungibleExData<CrossAccountId> {17	let const_data = create_data::<CUSTOM_DATA_LIMIT>();18	let variable_data = create_data::<CUSTOM_DATA_LIMIT>();19	CreateRefungibleExData {20		const_data,21		variable_data,22		users: users23			.into_iter()24			.collect::<BTreeMap<_, _>>()25			.try_into()26			.unwrap(),27	}28}29fn create_max_item<T: Config>(30	collection: &RefungibleHandle<T>,31	sender: &T::CrossAccountId,32	users: impl IntoIterator<Item = (T::CrossAccountId, u128)>,33) -> Result<TokenId, DispatchError> {34	let data: CreateRefungibleExData<T::CrossAccountId> = create_max_item_data(users);35	<Pallet<T>>::create_item(&collection, sender, data)?;36	Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))37}3839fn create_collection<T: Config>(owner: T::AccountId) -> Result<RefungibleHandle<T>, DispatchError> {40	create_collection_raw(41		owner,42		CollectionMode::NFT,43		<Pallet<T>>::init_collection,44		RefungibleHandle::cast,45	)46}47benchmarks! {48	create_item {49		bench_init!{50			owner: sub; collection: collection(owner);51			sender: cross_from_sub(owner); to: cross_sub;52		};53	}: {create_max_item(&collection, &sender, [(to.clone(), 200)])?}5455	create_multiple_items {56		let b in 0..MAX_ITEMS_PER_BATCH;57		bench_init!{58			owner: sub; collection: collection(owner);59			sender: cross_from_sub(owner); to: cross_sub;60		};61		let data = (0..b).map(|_| create_max_item_data([(to.clone(), 200)])).collect();62	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}6364	create_multiple_items_ex_multiple_items {65		let b in 0..MAX_ITEMS_PER_BATCH;66		bench_init!{67			owner: sub; collection: collection(owner);68			sender: cross_from_sub(owner);69		};70		let data = (0..b).map(|t| {71			bench_init!(to: cross_sub(t););72			create_max_item_data([(to, 200)])73		}).collect();74	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}7576	create_multiple_items_ex_multiple_owners {77		let b in 0..MAX_ITEMS_PER_BATCH;78		bench_init!{79			owner: sub; collection: collection(owner);80			sender: cross_from_sub(owner);81		};82		let data = vec![create_max_item_data((0..b).map(|u| {83			bench_init!(to: cross_sub(u););84			(to, 200)85		}))].try_into().unwrap();86	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}8788	// Other user left, token data is kept89	burn_item_partial {90		bench_init!{91			owner: sub; collection: collection(owner);92			sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;93		};94		let item = create_max_item(&collection, &sender, [(burner.clone(), 200), (another_owner, 200)])?;95	}: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}96	// No users remaining, token is destroyed97	burn_item_fully {98		bench_init!{99			owner: sub; collection: collection(owner);100			sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;101		};102		let item = create_max_item(&collection, &sender, [(burner.clone(), 200)])?;103	}: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}104105	transfer_normal {106		bench_init!{107			owner: sub; collection: collection(owner);108			sender: cross_from_sub(owner); receiver: cross_sub;109		};110		let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;111	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100)?}112	// Target account is created113	transfer_creating {114		bench_init!{115			owner: sub; collection: collection(owner);116			sender: cross_from_sub(owner); receiver: cross_sub;117		};118		let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;119	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100)?}120	// Source account is destroyed121	transfer_removing {122		bench_init!{123			owner: sub; collection: collection(owner);124			sender: cross_from_sub(owner); receiver: cross_sub;125		};126		let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;127	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200)?}128	// Source account destroyed, target created129	transfer_creating_removing {130		bench_init!{131			owner: sub; collection: collection(owner);132			sender: cross_from_sub(owner); receiver: cross_sub;133		};134		let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;135	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200)?}136137	approve {138		bench_init!{139			owner: sub; collection: collection(owner);140			owner: cross_from_sub; sender: cross_sub; spender: cross_sub;141		};142		let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;143	}: {<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?}144145	transfer_from_normal {146		bench_init!{147			owner: sub; collection: collection(owner);148			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;149		};150		let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;151		<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;152	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100)?}153	// Target account is created154	transfer_from_creating {155		bench_init!{156			owner: sub; collection: collection(owner);157			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;158		};159		let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;160		<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;161	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100)?}162	// Source account is destroyed163	transfer_from_removing {164		bench_init!{165			owner: sub; collection: collection(owner);166			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;167		};168		let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;169		<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;170	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200)?}171	// Source account destroyed, target created172	transfer_from_creating_removing {173		bench_init!{174			owner: sub; collection: collection(owner);175			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;176		};177		let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;178		<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;179	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200)?}180181	// Both source account and token is destroyed182	burn_from {183		bench_init!{184			owner: sub; collection: collection(owner);185			owner: cross_from_sub; sender: cross_sub; burner: cross_sub;186		};187		let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;188		<Pallet<T>>::set_allowance(&collection, &sender, &burner, item, 200)?;189	}: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, 200)?}190191	set_variable_metadata {192		let b in 0..CUSTOM_DATA_LIMIT;193		bench_init!{194			owner: sub; collection: collection(owner);195			sender: cross_from_sub(owner);196		};197		let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;198		let data = create_var_data(b).try_into().unwrap();199	}: {<Pallet<T>>::set_variable_metadata(&collection, &sender, item, data)?}200}