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

difftreelog

source

pallets/unique/src/benchmarking.rs6.1 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_support::traits::{tokens::currency::Currency, Get};23use frame_benchmarking::{benchmarks, account};24use sp_runtime::DispatchError;25use pallet_common::{26	Config as CommonConfig,27	benchmarking::{create_data, create_u16_data},28};2930const SEED: u32 = 1;3132fn create_collection_helper<T: Config>(33	owner: T::AccountId,34	mode: CollectionMode,35) -> Result<CollectionId, DispatchError> {36	<T as CommonConfig>::Currency::deposit_creating(&owner, T::CollectionCreationPrice::get());37	let col_name = create_u16_data::<MAX_COLLECTION_NAME_LENGTH>();38	let col_desc = create_u16_data::<MAX_COLLECTION_DESCRIPTION_LENGTH>();39	let token_prefix = create_data::<MAX_TOKEN_PREFIX_LENGTH>();40	<Pallet<T>>::create_collection(41		RawOrigin::Signed(owner).into(),42		col_name,43		col_desc,44		token_prefix,45		mode,46	)?;47	Ok(<pallet_common::CreatedCollectionCount<T>>::get())48}49pub fn create_nft_collection<T: Config>(50	owner: T::AccountId,51) -> Result<CollectionId, DispatchError> {52	create_collection_helper::<T>(owner, CollectionMode::NFT)53}5455benchmarks! {56	create_collection {57		let col_name = create_u16_data::<MAX_COLLECTION_NAME_LENGTH>();58		let col_desc = create_u16_data::<MAX_COLLECTION_DESCRIPTION_LENGTH>();59		let token_prefix = create_data::<MAX_TOKEN_PREFIX_LENGTH>();60		let mode: CollectionMode = CollectionMode::NFT;61		let caller: T::AccountId = account("caller", 0, SEED);62		<T as CommonConfig>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());63	}: _(RawOrigin::Signed(caller.clone()), col_name.clone(), col_desc.clone(), token_prefix.clone(), mode)64	verify {65		assert_eq!(<pallet_common::CollectionById<T>>::get(CollectionId(1)).unwrap().owner, caller);66	}6768	destroy_collection {69		let caller: T::AccountId = account("caller", 0, SEED);70		let collection = create_nft_collection::<T>(caller.clone())?;71	}: _(RawOrigin::Signed(caller.clone()), collection)7273	add_to_allow_list {74		let caller: T::AccountId = account("caller", 0, SEED);75		let allowlist_account: T::AccountId = account("admin", 0, SEED);76		let collection = create_nft_collection::<T>(caller.clone())?;77	}: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(allowlist_account))7879	remove_from_allow_list {80		let caller: T::AccountId = account("caller", 0, SEED);81		let allowlist_account: T::AccountId = account("admin", 0, SEED);82		let collection = create_nft_collection::<T>(caller.clone())?;83		<Pallet<T>>::add_to_allow_list(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(allowlist_account.clone()))?;84	}: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(allowlist_account))8586	change_collection_owner {87		let caller: T::AccountId = account("caller", 0, SEED);88		let collection = create_nft_collection::<T>(caller.clone())?;89		let new_owner: T::AccountId = account("admin", 0, SEED);90	}: _(RawOrigin::Signed(caller.clone()), collection, new_owner)9192	add_collection_admin {93		let caller: T::AccountId = account("caller", 0, SEED);94		let collection = create_nft_collection::<T>(caller.clone())?;95		let new_admin: T::AccountId = account("admin", 0, SEED);96	}: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))9798	remove_collection_admin {99		let caller: T::AccountId = account("caller", 0, SEED);100		let collection = create_nft_collection::<T>(caller.clone())?;101		let new_admin: T::AccountId = account("admin", 0, SEED);102		<Pallet<T>>::add_collection_admin(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(new_admin.clone()))?;103	}: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))104105	set_collection_sponsor {106		let caller: T::AccountId = account("caller", 0, SEED);107		let collection = create_nft_collection::<T>(caller.clone())?;108	}: _(RawOrigin::Signed(caller.clone()), collection, caller.clone())109110	confirm_sponsorship {111		let caller: T::AccountId = account("caller", 0, SEED);112		let collection = create_nft_collection::<T>(caller.clone())?;113		<Pallet<T>>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), collection, caller.clone())?;114	}: _(RawOrigin::Signed(caller.clone()), collection)115116	remove_collection_sponsor {117		let caller: T::AccountId = account("caller", 0, SEED);118		let collection = create_nft_collection::<T>(caller.clone())?;119		<Pallet<T>>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), collection, caller.clone())?;120		<Pallet<T>>::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), collection)?;121	}: _(RawOrigin::Signed(caller.clone()), collection)122123	set_transfers_enabled_flag {124		let caller: T::AccountId = account("caller", 0, SEED);125		let collection = create_nft_collection::<T>(caller.clone())?;126	}: _(RawOrigin::Signed(caller.clone()), collection, false)127128129	set_collection_limits{130		let caller: T::AccountId = account("caller", 0, SEED);131		let collection = create_nft_collection::<T>(caller.clone())?;132133		let cl = CollectionLimits {134			account_token_ownership_limit: Some(0),135			sponsored_data_size: Some(0),136			token_limit: Some(1),137			sponsor_transfer_timeout: Some(0),138			sponsor_approve_timeout: None,139			owner_can_destroy: Some(true),140			owner_can_transfer: Some(true),141			sponsored_data_rate_limit: None,142			transfers_enabled: Some(true),143		};144	}: set_collection_limits(RawOrigin::Signed(caller.clone()), collection, cl)145}