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

difftreelog

source

pallets/nonfungible/src/benchmarking.rs4.2 KiBsourcehistory
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617use super::*;18use crate::{Pallet, Config, NonfungibleHandle};1920use sp_std::prelude::*;21use pallet_common::benchmarking::{create_collection_raw, create_data, create_var_data};22use frame_benchmarking::{benchmarks, account};23use up_data_structs::{CollectionMode, MAX_ITEMS_PER_BATCH, CUSTOM_DATA_LIMIT, budget::Unlimited};24use pallet_common::bench_init;25use core::convert::TryInto;2627const SEED: u32 = 1;2829fn create_max_item_data<T: Config>(owner: T::CrossAccountId) -> CreateItemData<T> {30	let const_data = create_data::<CUSTOM_DATA_LIMIT>();31	CreateItemData::<T> {32		const_data,33		owner,34	}35}36fn create_max_item<T: Config>(37	collection: &NonfungibleHandle<T>,38	sender: &T::CrossAccountId,39	owner: T::CrossAccountId,40) -> Result<TokenId, DispatchError> {41	<Pallet<T>>::create_item(&collection, sender, create_max_item_data::<T>(owner))?;42	Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))43}4445fn create_collection<T: Config>(46	owner: T::AccountId,47) -> Result<NonfungibleHandle<T>, DispatchError> {48	create_collection_raw(49		owner,50		CollectionMode::NFT,51		<Pallet<T>>::init_collection,52		NonfungibleHandle::cast,53	)54}5556benchmarks! {57	create_item {58		bench_init!{59			owner: sub; collection: collection(owner);60			sender: cross_from_sub(owner); to: cross_sub;61		};62	}: {create_max_item(&collection, &sender, to.clone())?}6364	create_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); to: cross_sub;69		};70		let data = (0..b).map(|_| create_max_item_data::<T>(to.clone())).collect();71	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}7273	create_multiple_items_ex {74		let b in 0..MAX_ITEMS_PER_BATCH;75		bench_init!{76			owner: sub; collection: collection(owner);77			sender: cross_from_sub(owner);78		};79		let data = (0..b).map(|i| {80			bench_init!(to: cross_sub(i););81			create_max_item_data::<T>(to)82		}).collect();83	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}8485	burn_item {86		bench_init!{87			owner: sub; collection: collection(owner);88			sender: cross_from_sub(owner); burner: cross_sub;89		};90		let item = create_max_item(&collection, &sender, burner.clone())?;91	}: {<Pallet<T>>::burn(&collection, &burner, item)?}9293	transfer {94		bench_init!{95			owner: sub; collection: collection(owner);96			owner: cross_from_sub; sender: cross_sub; receiver: cross_sub;97		};98		let item = create_max_item(&collection, &owner, sender.clone())?;99	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item)?}100101	approve {102		bench_init!{103			owner: sub; collection: collection(owner);104			owner: cross_from_sub; sender: cross_sub; spender: cross_sub;105		};106		let item = create_max_item(&collection, &owner, sender.clone())?;107	}: {<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?}108109	transfer_from {110		bench_init!{111			owner: sub; collection: collection(owner);112			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;113		};114		let item = create_max_item(&collection, &owner, sender.clone())?;115		<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?;116	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, &Unlimited)?}117118	burn_from {119		bench_init!{120			owner: sub; collection: collection(owner);121			owner: cross_from_sub; sender: cross_sub; burner: cross_sub;122		};123		let item = create_max_item(&collection, &owner, sender.clone())?;124		<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&burner))?;125	}: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, &Unlimited)?}126}