1#![cfg(feature = "runtime-benchmarks")]23use super::*;4use crate::Pallet;5use frame_system::RawOrigin;6use frame_benchmarking::{benchmarks, account};7use up_data_structs::*;8use sp_runtime::DispatchError;9use pallet_common::benchmarking::{create_data, create_var_data, create_u16_data};1011const SEED: u32 = 1;1213fn create_collection_helper<T: Config>(14 owner: T::AccountId,15 mode: CollectionMode,16) -> Result<CollectionId, DispatchError> {17 T::Currency::deposit_creating(&owner, T::CollectionCreationPrice::get());18 let col_name = create_u16_data::<MAX_COLLECTION_NAME_LENGTH>();19 let col_desc = create_u16_data::<MAX_COLLECTION_DESCRIPTION_LENGTH>();20 let token_prefix = create_data::<MAX_TOKEN_PREFIX_LENGTH>();21 <Pallet<T>>::create_collection(22 RawOrigin::Signed(owner).into(),23 col_name,24 col_desc,25 token_prefix,26 mode,27 )?;28 Ok(<pallet_common::CreatedCollectionCount<T>>::get())29}30fn create_nft_collection<T: Config>(owner: T::AccountId) -> Result<CollectionId, DispatchError> {31 create_collection_helper::<T>(owner, CollectionMode::NFT)32}3334benchmarks! {35 create_collection {36 let col_name = create_u16_data::<MAX_COLLECTION_NAME_LENGTH>();37 let col_desc = create_u16_data::<MAX_COLLECTION_DESCRIPTION_LENGTH>();38 let token_prefix = create_data::<MAX_TOKEN_PREFIX_LENGTH>();39 let mode: CollectionMode = CollectionMode::NFT;40 let caller: T::AccountId = account("caller", 0, SEED);41 T::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());42 }: _(RawOrigin::Signed(caller.clone()), col_name.clone(), col_desc.clone(), token_prefix.clone(), mode)43 verify {44 assert_eq!(<pallet_common::CollectionById<T>>::get(CollectionId(1)).unwrap().owner, caller);45 }4647 destroy_collection {48 let caller: T::AccountId = account("caller", 0, SEED);49 let collection = create_nft_collection::<T>(caller.clone())?;50 }: _(RawOrigin::Signed(caller.clone()), collection)5152 add_to_allow_list {53 let caller: T::AccountId = account("caller", 0, SEED);54 let allowlist_account: T::AccountId = account("admin", 0, SEED);55 let collection = create_nft_collection::<T>(caller.clone())?;56 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(allowlist_account))5758 remove_from_allow_list {59 let caller: T::AccountId = account("caller", 0, SEED);60 let allowlist_account: T::AccountId = account("admin", 0, SEED);61 let collection = create_nft_collection::<T>(caller.clone())?;62 <Pallet<T>>::add_to_allow_list(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(allowlist_account.clone()))?;63 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(allowlist_account))6465 set_public_access_mode {66 let caller: T::AccountId = account("caller", 0, SEED);67 let collection = create_nft_collection::<T>(caller.clone())?;68 }: _(RawOrigin::Signed(caller.clone()), collection, AccessMode::AllowList)6970 set_mint_permission {71 let caller: T::AccountId = account("caller", 0, SEED);72 let collection = create_nft_collection::<T>(caller.clone())?;73 }: _(RawOrigin::Signed(caller.clone()), collection, true)7475 change_collection_owner {76 let caller: T::AccountId = account("caller", 0, SEED);77 let collection = create_nft_collection::<T>(caller.clone())?;78 let new_owner: T::AccountId = account("admin", 0, SEED);79 }: _(RawOrigin::Signed(caller.clone()), collection, new_owner)8081 add_collection_admin {82 let caller: T::AccountId = account("caller", 0, SEED);83 let collection = create_nft_collection::<T>(caller.clone())?;84 let new_admin: T::AccountId = account("admin", 0, SEED);85 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))8687 remove_collection_admin {88 let caller: T::AccountId = account("caller", 0, SEED);89 let collection = create_nft_collection::<T>(caller.clone())?;90 let new_admin: T::AccountId = account("admin", 0, SEED);91 <Pallet<T>>::add_collection_admin(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(new_admin.clone()))?;92 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))9394 set_collection_sponsor {95 let caller: T::AccountId = account("caller", 0, SEED);96 let collection = create_nft_collection::<T>(caller.clone())?;97 }: _(RawOrigin::Signed(caller.clone()), collection, caller.clone())9899 confirm_sponsorship {100 let caller: T::AccountId = account("caller", 0, SEED);101 let collection = create_nft_collection::<T>(caller.clone())?;102 <Pallet<T>>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), collection, caller.clone())?;103 }: _(RawOrigin::Signed(caller.clone()), collection)104105 remove_collection_sponsor {106 let caller: T::AccountId = account("caller", 0, SEED);107 let collection = create_nft_collection::<T>(caller.clone())?;108 <Pallet<T>>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), collection, caller.clone())?;109 <Pallet<T>>::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), collection)?;110 }: _(RawOrigin::Signed(caller.clone()), collection)111112 set_transfers_enabled_flag {113 let caller: T::AccountId = account("caller", 0, SEED);114 let collection = create_nft_collection::<T>(caller.clone())?;115 }: _(RawOrigin::Signed(caller.clone()), collection, false)116117 set_offchain_schema {118 let b in 0..OFFCHAIN_SCHEMA_LIMIT;119120 let caller: T::AccountId = account("caller", 0, SEED);121 let collection = create_nft_collection::<T>(caller.clone())?;122 let data = create_var_data(b);123 }: set_offchain_schema(RawOrigin::Signed(caller.clone()), collection, data)124125 set_const_on_chain_schema {126 let b in 0..CONST_ON_CHAIN_SCHEMA_LIMIT;127128 let caller: T::AccountId = account("caller", 0, SEED);129 let collection = create_nft_collection::<T>(caller.clone())?;130 let data = create_var_data(b);131 }: set_const_on_chain_schema(RawOrigin::Signed(caller.clone()), collection, data)132133 set_variable_on_chain_schema {134 let b in 0..VARIABLE_ON_CHAIN_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_variable_on_chain_schema(RawOrigin::Signed(caller.clone()), collection, data)140141 set_schema_version {142 let caller: T::AccountId = account("caller", 0, SEED);143 let collection = create_nft_collection::<T>(caller.clone())?;144 }: set_schema_version(RawOrigin::Signed(caller.clone()), collection, SchemaVersion::Unique)145146 set_collection_limits{147 let caller: T::AccountId = account("caller", 0, SEED);148 let collection = create_nft_collection::<T>(caller.clone())?;149150 let cl = CollectionLimits {151 account_token_ownership_limit: Some(0),152 sponsored_data_size: Some(0),153 token_limit: Some(1),154 sponsor_transfer_timeout: Some(0),155 sponsor_approve_timeout: None,156 owner_can_destroy: Some(true),157 owner_can_transfer: Some(true),158 sponsored_data_rate_limit: None,159 transfers_enabled: Some(true),160 };161 }: set_collection_limits(RawOrigin::Signed(caller.clone()), collection, cl)162163 set_meta_update_permission_flag {164 let caller: T::AccountId = account("caller", 0, SEED);165 let collection = create_nft_collection::<T>(caller.clone())?;166 }: _(RawOrigin::Signed(caller.clone()), collection, MetaUpdatePermission::Admin)167}