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

difftreelog

source

pallets/nonfungible/src/benchmarking.rs4.6 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};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	let variable_data = create_data::<CUSTOM_DATA_LIMIT>();32	CreateItemData::<T> {33		const_data,34		variable_data,35		owner,36	}37}38fn create_max_item<T: Config>(39	collection: &NonfungibleHandle<T>,40	sender: &T::CrossAccountId,41	owner: T::CrossAccountId,42) -> Result<TokenId, DispatchError> {43	<Pallet<T>>::create_item(&collection, sender, create_max_item_data::<T>(owner))?;44	Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))45}4647fn create_collection<T: Config>(48	owner: T::AccountId,49) -> Result<NonfungibleHandle<T>, DispatchError> {50	create_collection_raw(51		owner,52		CollectionMode::NFT,53		<Pallet<T>>::init_collection,54		NonfungibleHandle::cast,55	)56}5758benchmarks! {59	create_item {60		bench_init!{61			owner: sub; collection: collection(owner);62			sender: cross_from_sub(owner); to: cross_sub;63		};64	}: {create_max_item(&collection, &sender, to.clone())?}6566	create_multiple_items {67		let b in 0..MAX_ITEMS_PER_BATCH;68		bench_init!{69			owner: sub; collection: collection(owner);70			sender: cross_from_sub(owner); to: cross_sub;71		};72		let data = (0..b).map(|_| create_max_item_data::<T>(to.clone())).collect();73	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}7475	create_multiple_items_ex {76		let b in 0..MAX_ITEMS_PER_BATCH;77		bench_init!{78			owner: sub; collection: collection(owner);79			sender: cross_from_sub(owner);80		};81		let data = (0..b).map(|i| {82			bench_init!(to: cross_sub(i););83			create_max_item_data::<T>(to)84		}).collect();85	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}8687	burn_item {88		bench_init!{89			owner: sub; collection: collection(owner);90			sender: cross_from_sub(owner); burner: cross_sub;91		};92		let item = create_max_item(&collection, &sender, burner.clone())?;93	}: {<Pallet<T>>::burn(&collection, &burner, item)?}9495	transfer {96		bench_init!{97			owner: sub; collection: collection(owner);98			owner: cross_from_sub; sender: cross_sub; receiver: cross_sub;99		};100		let item = create_max_item(&collection, &owner, sender.clone())?;101	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item)?}102103	approve {104		bench_init!{105			owner: sub; collection: collection(owner);106			owner: cross_from_sub; sender: cross_sub; spender: cross_sub;107		};108		let item = create_max_item(&collection, &owner, sender.clone())?;109	}: {<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?}110111	transfer_from {112		bench_init!{113			owner: sub; collection: collection(owner);114			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;115		};116		let item = create_max_item(&collection, &owner, sender.clone())?;117		<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?;118	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item)?}119120	burn_from {121		bench_init!{122			owner: sub; collection: collection(owner);123			owner: cross_from_sub; sender: cross_sub; burner: cross_sub;124		};125		let item = create_max_item(&collection, &owner, sender.clone())?;126		<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&burner))?;127	}: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item)?}128129	set_variable_metadata {130		let b in 0..CUSTOM_DATA_LIMIT;131		bench_init!{132			owner: sub; collection: collection(owner);133			owner: cross_from_sub; sender: cross_sub;134		};135		let item = create_max_item(&collection, &owner, sender.clone())?;136		let data = create_var_data(b).try_into().unwrap();137	}: {<Pallet<T>>::set_variable_metadata(&collection, &sender, item, data)?}138}