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

difftreelog

source

pallets/nonfungible/src/benchmarking.rs3.9 KiBsourcehistory
1use super::*;2use crate::{Pallet, Config, NonfungibleHandle};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;1011const SEED: u32 = 1;1213fn create_max_item_data<T: Config>(owner: T::CrossAccountId) -> CreateItemData<T> {14	let const_data = create_data::<CUSTOM_DATA_LIMIT>();15	let variable_data = create_data::<CUSTOM_DATA_LIMIT>();16	CreateItemData::<T> {17		const_data,18		variable_data,19		owner,20	}21}22fn create_max_item<T: Config>(23	collection: &NonfungibleHandle<T>,24	sender: &T::CrossAccountId,25	owner: T::CrossAccountId,26) -> Result<TokenId, DispatchError> {27	<Pallet<T>>::create_item(&collection, sender, create_max_item_data::<T>(owner))?;28	Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))29}3031fn create_collection<T: Config>(32	owner: T::AccountId,33) -> Result<NonfungibleHandle<T>, DispatchError> {34	create_collection_raw(35		owner,36		CollectionMode::NFT,37		<Pallet<T>>::init_collection,38		NonfungibleHandle::cast,39	)40}4142benchmarks! {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())?}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::<T>(to.clone())).collect();57	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}5859	create_multiple_items_ex {60		let b in 0..MAX_ITEMS_PER_BATCH;61		bench_init!{62			owner: sub; collection: collection(owner);63			sender: cross_from_sub(owner);64		};65		let data = (0..b).map(|i| {66			bench_init!(to: cross_sub(i););67			create_max_item_data::<T>(to)68		}).collect();69	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}7071	burn_item {72		bench_init!{73			owner: sub; collection: collection(owner);74			sender: cross_from_sub(owner); burner: cross_sub;75		};76		let item = create_max_item(&collection, &sender, burner.clone())?;77	}: {<Pallet<T>>::burn(&collection, &burner, item)?}7879	transfer {80		bench_init!{81			owner: sub; collection: collection(owner);82			owner: cross_from_sub; sender: cross_sub; receiver: cross_sub;83		};84		let item = create_max_item(&collection, &owner, sender.clone())?;85	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item)?}8687	approve {88		bench_init!{89			owner: sub; collection: collection(owner);90			owner: cross_from_sub; sender: cross_sub; spender: cross_sub;91		};92		let item = create_max_item(&collection, &owner, sender.clone())?;93	}: {<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?}9495	transfer_from {96		bench_init!{97			owner: sub; collection: collection(owner);98			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;99		};100		let item = create_max_item(&collection, &owner, sender.clone())?;101		<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?;102	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item)?}103104	burn_from {105		bench_init!{106			owner: sub; collection: collection(owner);107			owner: cross_from_sub; sender: cross_sub; burner: cross_sub;108		};109		let item = create_max_item(&collection, &owner, sender.clone())?;110		<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&burner))?;111	}: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item)?}112113	set_variable_metadata {114		let b in 0..CUSTOM_DATA_LIMIT;115		bench_init!{116			owner: sub; collection: collection(owner);117			owner: cross_from_sub; sender: cross_sub;118		};119		let item = create_max_item(&collection, &owner, sender.clone())?;120		let data = create_var_data(b).try_into().unwrap();121	}: {<Pallet<T>>::set_variable_metadata(&collection, &sender, item, data)?}122}