git.delta.rocks / unique-network / refs/commits / 73817f448a72

difftreelog

source

pallets/refungible/src/benchmarking.rs6.7 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	<Pallet<T>>::create_item(&collection, sender, create_max_item_data(users))?;35	Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))36}3738fn create_collection<T: Config>(owner: T::AccountId) -> Result<RefungibleHandle<T>, DispatchError> {39	create_collection_raw(40		owner,41		CollectionMode::NFT,42		<Pallet<T>>::init_collection,43		RefungibleHandle::cast,44	)45}46benchmarks! {47	create_item {48		bench_init!{49			owner: sub; collection: collection(owner);50			sender: cross_from_sub(owner); to: cross_sub;51		};52	}: {create_max_item(&collection, &sender, [(to.clone(), 200)])?}5354	create_multiple_items {55		let b in 0..MAX_ITEMS_PER_BATCH;56		bench_init!{57			owner: sub; collection: collection(owner);58			sender: cross_from_sub(owner); to: cross_sub;59		};60		let data = (0..b).map(|_| create_max_item_data([(to.clone(), 200)])).collect();61	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}6263	// Other user left, token data is kept64	burn_item_partial {65		bench_init!{66			owner: sub; collection: collection(owner);67			sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;68		};69		let item = create_max_item(&collection, &sender, [(burner.clone(), 200), (another_owner, 200)])?;70	}: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}71	// No users remaining, token is destroyed72	burn_item_fully {73		bench_init!{74			owner: sub; collection: collection(owner);75			sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;76		};77		let item = create_max_item(&collection, &sender, [(burner.clone(), 200)])?;78	}: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}7980	transfer_normal {81		bench_init!{82			owner: sub; collection: collection(owner);83			sender: cross_from_sub(owner); receiver: cross_sub;84		};85		let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;86	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100)?}87	// Target account is created88	transfer_creating {89		bench_init!{90			owner: sub; collection: collection(owner);91			sender: cross_from_sub(owner); receiver: cross_sub;92		};93		let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;94	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100)?}95	// Source account is destroyed96	transfer_removing {97		bench_init!{98			owner: sub; collection: collection(owner);99			sender: cross_from_sub(owner); receiver: cross_sub;100		};101		let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;102	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200)?}103	// Source account destroyed, target created104	transfer_creating_removing {105		bench_init!{106			owner: sub; collection: collection(owner);107			sender: cross_from_sub(owner); receiver: cross_sub;108		};109		let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;110	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200)?}111112	approve {113		bench_init!{114			owner: sub; collection: collection(owner);115			owner: cross_from_sub; sender: cross_sub; spender: cross_sub;116		};117		let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;118	}: {<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?}119120	transfer_from_normal {121		bench_init!{122			owner: sub; collection: collection(owner);123			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;124		};125		let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;126		<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;127	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100)?}128	// Target account is created129	transfer_from_creating {130		bench_init!{131			owner: sub; collection: collection(owner);132			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;133		};134		let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;135		<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;136	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100)?}137	// Source account is destroyed138	transfer_from_removing {139		bench_init!{140			owner: sub; collection: collection(owner);141			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;142		};143		let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;144		<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;145	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200)?}146	// Source account destroyed, target created147	transfer_from_creating_removing {148		bench_init!{149			owner: sub; collection: collection(owner);150			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;151		};152		let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;153		<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;154	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200)?}155156	// Both source account and token is destroyed157	burn_from {158		bench_init!{159			owner: sub; collection: collection(owner);160			owner: cross_from_sub; sender: cross_sub; burner: cross_sub;161		};162		let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;163		<Pallet<T>>::set_allowance(&collection, &sender, &burner, item, 200)?;164	}: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, 200)?}165166	set_variable_metadata {167		let b in 0..CUSTOM_DATA_LIMIT;168		bench_init!{169			owner: sub; collection: collection(owner);170			sender: cross_from_sub(owner);171		};172		let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;173		let data = create_data(b as usize);174	}: {<Pallet<T>>::set_variable_metadata(&collection, &sender, item, data)?}175}