git.delta.rocks / unique-network / refs/commits / 55c4d052d75c

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> { const_data, owner }32}33fn create_max_item<T: Config>(34	collection: &NonfungibleHandle<T>,35	sender: &T::CrossAccountId,36	owner: T::CrossAccountId,37) -> Result<TokenId, DispatchError> {38	<Pallet<T>>::create_item(&collection, sender, create_max_item_data::<T>(owner))?;39	Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))40}4142fn create_collection<T: Config>(43	owner: T::AccountId,44) -> Result<NonfungibleHandle<T>, DispatchError> {45	create_collection_raw(46		owner,47		CollectionMode::NFT,48		<Pallet<T>>::init_collection,49		NonfungibleHandle::cast,50	)51}5253benchmarks! {54	create_item {55		bench_init!{56			owner: sub; collection: collection(owner);57			sender: cross_from_sub(owner); to: cross_sub;58		};59	}: {create_max_item(&collection, &sender, to.clone())?}6061	create_multiple_items {62		let b in 0..MAX_ITEMS_PER_BATCH;63		bench_init!{64			owner: sub; collection: collection(owner);65			sender: cross_from_sub(owner); to: cross_sub;66		};67		let data = (0..b).map(|_| create_max_item_data::<T>(to.clone())).collect();68	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}6970	create_multiple_items_ex {71		let b in 0..MAX_ITEMS_PER_BATCH;72		bench_init!{73			owner: sub; collection: collection(owner);74			sender: cross_from_sub(owner);75		};76		let data = (0..b).map(|i| {77			bench_init!(to: cross_sub(i););78			create_max_item_data::<T>(to)79		}).collect();80	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}8182	burn_item {83		bench_init!{84			owner: sub; collection: collection(owner);85			sender: cross_from_sub(owner); burner: cross_sub;86		};87		let item = create_max_item(&collection, &sender, burner.clone())?;88	}: {<Pallet<T>>::burn(&collection, &burner, item)?}8990	transfer {91		bench_init!{92			owner: sub; collection: collection(owner);93			owner: cross_from_sub; sender: cross_sub; receiver: cross_sub;94		};95		let item = create_max_item(&collection, &owner, sender.clone())?;96	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item)?}9798	approve {99		bench_init!{100			owner: sub; collection: collection(owner);101			owner: cross_from_sub; sender: cross_sub; spender: cross_sub;102		};103		let item = create_max_item(&collection, &owner, sender.clone())?;104	}: {<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?}105106	transfer_from {107		bench_init!{108			owner: sub; collection: collection(owner);109			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;110		};111		let item = create_max_item(&collection, &owner, sender.clone())?;112		<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?;113	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, &Unlimited)?}114115	burn_from {116		bench_init!{117			owner: sub; collection: collection(owner);118			owner: cross_from_sub; sender: cross_sub; burner: cross_sub;119		};120		let item = create_max_item(&collection, &owner, sender.clone())?;121		<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&burner))?;122	}: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, &Unlimited)?}123}