git.delta.rocks / unique-network / refs/commits / 7c4183b4cb3a

difftreelog

source

pallets/nonfungible/src/benchmarking.rs6.4 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, property_key, property_value};22use frame_benchmarking::{benchmarks, account};23use up_data_structs::{24	CollectionMode, MAX_ITEMS_PER_BATCH, MAX_PROPERTIES_PER_ITEM, CUSTOM_DATA_LIMIT,25	budget::Unlimited,26};27use pallet_common::bench_init;2829const SEED: u32 = 1;3031fn create_max_item_data<T: Config>(owner: T::CrossAccountId) -> CreateItemData<T> {32	let const_data = create_data::<CUSTOM_DATA_LIMIT>();33	CreateItemData::<T> {34		const_data,35		owner,36		properties: Default::default(),37	}38}39fn create_max_item<T: Config>(40	collection: &NonfungibleHandle<T>,41	sender: &T::CrossAccountId,42	owner: T::CrossAccountId,43) -> Result<TokenId, DispatchError> {44	<Pallet<T>>::create_item(45		&collection,46		sender,47		create_max_item_data::<T>(owner),48		&Unlimited,49	)?;50	Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))51}5253fn create_collection<T: Config>(54	owner: T::AccountId,55) -> Result<NonfungibleHandle<T>, DispatchError> {56	create_collection_raw(57		owner,58		CollectionMode::NFT,59		<Pallet<T>>::init_collection,60		NonfungibleHandle::cast,61	)62}6364benchmarks! {65	create_item {66		bench_init!{67			owner: sub; collection: collection(owner);68			sender: cross_from_sub(owner); to: cross_sub;69		};70	}: {create_max_item(&collection, &sender, to.clone())?}7172	create_multiple_items {73		let b in 0..MAX_ITEMS_PER_BATCH;74		bench_init!{75			owner: sub; collection: collection(owner);76			sender: cross_from_sub(owner); to: cross_sub;77		};78		let data = (0..b).map(|_| create_max_item_data::<T>(to.clone())).collect();79	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}8081	create_multiple_items_ex {82		let b in 0..MAX_ITEMS_PER_BATCH;83		bench_init!{84			owner: sub; collection: collection(owner);85			sender: cross_from_sub(owner);86		};87		let data = (0..b).map(|i| {88			bench_init!(to: cross_sub(i););89			create_max_item_data::<T>(to)90		}).collect();91	}: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}9293	burn_item {94		bench_init!{95			owner: sub; collection: collection(owner);96			sender: cross_from_sub(owner); burner: cross_sub;97		};98		let item = create_max_item(&collection, &sender, burner.clone())?;99	}: {<Pallet<T>>::burn(&collection, &burner, item)?}100101	transfer {102		bench_init!{103			owner: sub; collection: collection(owner);104			owner: cross_from_sub; sender: cross_sub; receiver: cross_sub;105		};106		let item = create_max_item(&collection, &owner, sender.clone())?;107	}: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, &Unlimited)?}108109	approve {110		bench_init!{111			owner: sub; collection: collection(owner);112			owner: cross_from_sub; sender: cross_sub; spender: cross_sub;113		};114		let item = create_max_item(&collection, &owner, sender.clone())?;115	}: {<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?}116117	transfer_from {118		bench_init!{119			owner: sub; collection: collection(owner);120			owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;121		};122		let item = create_max_item(&collection, &owner, sender.clone())?;123		<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?;124	}: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, &Unlimited)?}125126	burn_from {127		bench_init!{128			owner: sub; collection: collection(owner);129			owner: cross_from_sub; sender: cross_sub; burner: cross_sub;130		};131		let item = create_max_item(&collection, &owner, sender.clone())?;132		<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&burner))?;133	}: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, &Unlimited)?}134135	set_property_permissions {136		let b in 0..MAX_PROPERTIES_PER_ITEM;137		bench_init!{138			owner: sub; collection: collection(owner);139			owner: cross_from_sub;140		};141		let perms = (0..b).map(|k| PropertyKeyPermission {142			key: property_key(k as usize),143			permission: PropertyPermission {144				mutable: false,145				collection_admin: false,146				token_owner: false,147			},148		}).collect::<Vec<_>>();149	}: {<Pallet<T>>::set_property_permissions(&collection, &owner, perms)?}150151	set_token_properties {152		let b in 0..MAX_PROPERTIES_PER_ITEM;153		bench_init!{154			owner: sub; collection: collection(owner);155			owner: cross_from_sub;156		};157		let perms = (0..b).map(|k| PropertyKeyPermission {158			key: property_key(k as usize),159			permission: PropertyPermission {160				mutable: false,161				collection_admin: true,162				token_owner: true,163			},164		}).collect::<Vec<_>>();165		<Pallet<T>>::set_property_permissions(&collection, &owner, perms)?;166		let props = (0..b).map(|k| Property {167			key: property_key(k as usize),168			value: property_value(),169		}).collect::<Vec<_>>();170		let item = create_max_item(&collection, &owner, owner.clone())?;171	}: {<Pallet<T>>::set_token_properties(&collection, &owner, item, props)?}172173	delete_token_properties {174		let b in 0..MAX_PROPERTIES_PER_ITEM;175		bench_init!{176			owner: sub; collection: collection(owner);177			owner: cross_from_sub;178		};179		let perms = (0..b).map(|k| PropertyKeyPermission {180			key: property_key(k as usize),181			permission: PropertyPermission {182				mutable: true,183				collection_admin: true,184				token_owner: true,185			},186		}).collect::<Vec<_>>();187		<Pallet<T>>::set_property_permissions(&collection, &owner, perms)?;188		let props = (0..b).map(|k| Property {189			key: property_key(k as usize),190			value: property_value(),191		}).collect::<Vec<_>>();192		let item = create_max_item(&collection, &owner, owner.clone())?;193		<Pallet<T>>::set_token_properties(&collection, &owner, item, props)?;194		let to_delete = (0..b).map(|k| property_key(k as usize)).collect::<Vec<_>>();195	}: {<Pallet<T>>::delete_token_properties(&collection, &owner, item, to_delete)?}196}