git.delta.rocks / unique-network / refs/commits / 02783a223963

difftreelog

source

pallets/unique/src/benchmarking.rs7.8 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/>.1617#![cfg(feature = "runtime-benchmarks")]1819use super::*;20use crate::Pallet;21use frame_system::RawOrigin;22use frame_benchmarking::{benchmarks, account};23use up_data_structs::*;24use sp_runtime::DispatchError;25use pallet_common::benchmarking::{create_data, create_var_data, create_u16_data};2627const SEED: u32 = 1;2829fn create_collection_helper<T: Config>(30	owner: T::AccountId,31	mode: CollectionMode,32) -> Result<CollectionId, DispatchError> {33	T::Currency::deposit_creating(&owner, T::CollectionCreationPrice::get());34	let col_name = create_u16_data::<MAX_COLLECTION_NAME_LENGTH>();35	let col_desc = create_u16_data::<MAX_COLLECTION_DESCRIPTION_LENGTH>();36	let token_prefix = create_data::<MAX_TOKEN_PREFIX_LENGTH>();37	<Pallet<T>>::create_collection(38		RawOrigin::Signed(owner).into(),39		col_name,40		col_desc,41		token_prefix,42		mode,43	)?;44	Ok(<pallet_common::CreatedCollectionCount<T>>::get())45}46fn create_nft_collection<T: Config>(owner: T::AccountId) -> Result<CollectionId, DispatchError> {47	create_collection_helper::<T>(owner, CollectionMode::NFT)48}4950benchmarks! {51	create_collection {52		let col_name = create_u16_data::<MAX_COLLECTION_NAME_LENGTH>();53		let col_desc = create_u16_data::<MAX_COLLECTION_DESCRIPTION_LENGTH>();54		let token_prefix = create_data::<MAX_TOKEN_PREFIX_LENGTH>();55		let mode: CollectionMode = CollectionMode::NFT;56		let caller: T::AccountId = account("caller", 0, SEED);57		T::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());58	}: _(RawOrigin::Signed(caller.clone()), col_name.clone(), col_desc.clone(), token_prefix.clone(), mode)59	verify {60		assert_eq!(<pallet_common::CollectionById<T>>::get(CollectionId(1)).unwrap().owner, caller);61	}6263	destroy_collection {64		let caller: T::AccountId = account("caller", 0, SEED);65		let collection = create_nft_collection::<T>(caller.clone())?;66	}: _(RawOrigin::Signed(caller.clone()), collection)6768	add_to_allow_list {69		let caller: T::AccountId = account("caller", 0, SEED);70		let allowlist_account: T::AccountId = account("admin", 0, SEED);71		let collection = create_nft_collection::<T>(caller.clone())?;72	}: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(allowlist_account))7374	remove_from_allow_list {75		let caller: T::AccountId = account("caller", 0, SEED);76		let allowlist_account: T::AccountId = account("admin", 0, SEED);77		let collection = create_nft_collection::<T>(caller.clone())?;78		<Pallet<T>>::add_to_allow_list(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(allowlist_account.clone()))?;79	}: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(allowlist_account))8081	set_public_access_mode {82		let caller: T::AccountId = account("caller", 0, SEED);83		let collection = create_nft_collection::<T>(caller.clone())?;84	}: _(RawOrigin::Signed(caller.clone()), collection, AccessMode::AllowList)8586	set_mint_permission {87		let caller: T::AccountId = account("caller", 0, SEED);88		let collection = create_nft_collection::<T>(caller.clone())?;89	}: _(RawOrigin::Signed(caller.clone()), collection, true)9091	change_collection_owner {92		let caller: T::AccountId = account("caller", 0, SEED);93		let collection = create_nft_collection::<T>(caller.clone())?;94		let new_owner: T::AccountId = account("admin", 0, SEED);95	}: _(RawOrigin::Signed(caller.clone()), collection, new_owner)9697	add_collection_admin {98		let caller: T::AccountId = account("caller", 0, SEED);99		let collection = create_nft_collection::<T>(caller.clone())?;100		let new_admin: T::AccountId = account("admin", 0, SEED);101	}: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))102103	remove_collection_admin {104		let caller: T::AccountId = account("caller", 0, SEED);105		let collection = create_nft_collection::<T>(caller.clone())?;106		let new_admin: T::AccountId = account("admin", 0, SEED);107		<Pallet<T>>::add_collection_admin(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(new_admin.clone()))?;108	}: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))109110	set_collection_sponsor {111		let caller: T::AccountId = account("caller", 0, SEED);112		let collection = create_nft_collection::<T>(caller.clone())?;113	}: _(RawOrigin::Signed(caller.clone()), collection, caller.clone())114115	confirm_sponsorship {116		let caller: T::AccountId = account("caller", 0, SEED);117		let collection = create_nft_collection::<T>(caller.clone())?;118		<Pallet<T>>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), collection, caller.clone())?;119	}: _(RawOrigin::Signed(caller.clone()), collection)120121	remove_collection_sponsor {122		let caller: T::AccountId = account("caller", 0, SEED);123		let collection = create_nft_collection::<T>(caller.clone())?;124		<Pallet<T>>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), collection, caller.clone())?;125		<Pallet<T>>::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), collection)?;126	}: _(RawOrigin::Signed(caller.clone()), collection)127128	set_transfers_enabled_flag {129		let caller: T::AccountId = account("caller", 0, SEED);130		let collection = create_nft_collection::<T>(caller.clone())?;131	}: _(RawOrigin::Signed(caller.clone()), collection, false)132133	set_offchain_schema {134		let b in 0..OFFCHAIN_SCHEMA_LIMIT;135136		let caller: T::AccountId = account("caller", 0, SEED);137		let collection = create_nft_collection::<T>(caller.clone())?;138		let data = create_var_data(b);139	}: set_offchain_schema(RawOrigin::Signed(caller.clone()), collection, data)140141	set_const_on_chain_schema {142		let b in 0..CONST_ON_CHAIN_SCHEMA_LIMIT;143144		let caller: T::AccountId = account("caller", 0, SEED);145		let collection = create_nft_collection::<T>(caller.clone())?;146		let data = create_var_data(b);147	}: set_const_on_chain_schema(RawOrigin::Signed(caller.clone()), collection, data)148149	set_variable_on_chain_schema {150		let b in 0..VARIABLE_ON_CHAIN_SCHEMA_LIMIT;151152		let caller: T::AccountId = account("caller", 0, SEED);153		let collection = create_nft_collection::<T>(caller.clone())?;154		let data = create_var_data(b);155	}: set_variable_on_chain_schema(RawOrigin::Signed(caller.clone()), collection, data)156157	set_schema_version {158		let caller: T::AccountId = account("caller", 0, SEED);159		let collection = create_nft_collection::<T>(caller.clone())?;160	}: set_schema_version(RawOrigin::Signed(caller.clone()), collection, SchemaVersion::Unique)161162	set_collection_limits{163		let caller: T::AccountId = account("caller", 0, SEED);164		let collection = create_nft_collection::<T>(caller.clone())?;165166		let cl = CollectionLimits {167			account_token_ownership_limit: Some(0),168			sponsored_data_size: Some(0),169			token_limit: Some(1),170			sponsor_transfer_timeout: Some(0),171			sponsor_approve_timeout: None,172			owner_can_destroy: Some(true),173			owner_can_transfer: Some(true),174			sponsored_data_rate_limit: None,175			transfers_enabled: Some(true),176		};177	}: set_collection_limits(RawOrigin::Signed(caller.clone()), collection, cl)178179	set_meta_update_permission_flag {180		let caller: T::AccountId = account("caller", 0, SEED);181		let collection = create_nft_collection::<T>(caller.clone())?;182	}: _(RawOrigin::Signed(caller.clone()), collection, MetaUpdatePermission::Admin)183}