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

difftreelog

source

pallets/unique/src/benchmarking.rs6.5 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};29use up_data_structs::{30	CollectionId, CollectionMode, MAX_COLLECTION_NAME_LENGTH, MAX_TOKEN_PREFIX_LENGTH,31	MAX_COLLECTION_DESCRIPTION_LENGTH, CollectionLimits,32};33use pallet_common::erc::CrossAccountId;3435const SEED: u32 = 1;3637fn create_collection_helper<T: Config>(38	owner: T::AccountId,39	mode: CollectionMode,40) -> Result<CollectionId, DispatchError> {41	<T as CommonConfig>::Currency::deposit_creating(&owner, T::CollectionCreationPrice::get());42	let col_name = create_u16_data::<{ MAX_COLLECTION_NAME_LENGTH }>();43	let col_desc = create_u16_data::<{ MAX_COLLECTION_DESCRIPTION_LENGTH }>();44	let token_prefix = create_data::<{ MAX_TOKEN_PREFIX_LENGTH }>();45	<Pallet<T>>::create_collection(46		RawOrigin::Signed(owner).into(),47		col_name,48		col_desc,49		token_prefix,50		mode,51	)?;52	Ok(<pallet_common::CreatedCollectionCount<T>>::get())53}54pub fn create_nft_collection<T: Config>(55	owner: T::AccountId,56) -> Result<CollectionId, DispatchError> {57	create_collection_helper::<T>(owner, CollectionMode::NFT)58}5960benchmarks! {61	create_collection {62		let col_name = create_u16_data::<{MAX_COLLECTION_NAME_LENGTH}>();63		let col_desc = create_u16_data::<{MAX_COLLECTION_DESCRIPTION_LENGTH}>();64		let token_prefix = create_data::<{MAX_TOKEN_PREFIX_LENGTH}>();65		let mode: CollectionMode = CollectionMode::NFT;66		let caller: T::AccountId = account("caller", 0, SEED);67		<T as CommonConfig>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());68	}: _(RawOrigin::Signed(caller.clone()), col_name.clone(), col_desc.clone(), token_prefix.clone(), mode)69	verify {70		assert_eq!(<pallet_common::CollectionById<T>>::get(CollectionId(1)).unwrap().owner, caller);71	}7273	destroy_collection {74		let caller: T::AccountId = account("caller", 0, SEED);75		let collection = create_nft_collection::<T>(caller.clone())?;76	}: _(RawOrigin::Signed(caller.clone()), collection)7778	add_to_allow_list {79		let caller: T::AccountId = account("caller", 0, SEED);80		let allowlist_account: T::AccountId = account("admin", 0, SEED);81		let collection = create_nft_collection::<T>(caller.clone())?;82	}: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(allowlist_account))8384	remove_from_allow_list {85		let caller: T::AccountId = account("caller", 0, SEED);86		let allowlist_account: T::AccountId = account("admin", 0, SEED);87		let collection = create_nft_collection::<T>(caller.clone())?;88		<Pallet<T>>::add_to_allow_list(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(allowlist_account.clone()))?;89	}: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(allowlist_account))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)132133134	set_collection_limits {135		let caller: T::AccountId = account("caller", 0, SEED);136		let collection = create_nft_collection::<T>(caller.clone())?;137138		let cl = CollectionLimits {139			account_token_ownership_limit: Some(0),140			sponsored_data_size: Some(0),141			token_limit: Some(1),142			sponsor_transfer_timeout: Some(0),143			sponsor_approve_timeout: None,144			owner_can_destroy: Some(true),145			owner_can_transfer: Some(true),146			sponsored_data_rate_limit: None,147			transfers_enabled: Some(true),148		};149	}: set_collection_limits(RawOrigin::Signed(caller.clone()), collection, cl)150151	force_repair_collection {152		let caller: T::AccountId = account("caller", 0, SEED);153		let collection = create_nft_collection::<T>(caller.clone())?;154	}: _(RawOrigin::Root, collection)155}