1#![cfg(feature = "runtime-benchmarks")]23use super::*;4use crate::Pallet;5use frame_system::RawOrigin;6use frame_benchmarking::{benchmarks, account};7use up_data_structs::*;8use core::convert::TryInto;9use sp_runtime::DispatchError;10use pallet_common::benchmarking::{create_data, create_u16_data};1112const SEED: u32 = 1;1314fn create_collection_helper<T: Config>(15 owner: T::AccountId,16 mode: CollectionMode,17) -> Result<CollectionId, DispatchError> {18 T::Currency::deposit_creating(&owner, T::CollectionCreationPrice::get());19 let col_name = create_u16_data(MAX_COLLECTION_NAME_LENGTH)20 .try_into()21 .unwrap();22 let col_desc = create_u16_data(MAX_COLLECTION_DESCRIPTION_LENGTH)23 .try_into()24 .unwrap();25 let token_prefix = create_data(MAX_TOKEN_PREFIX_LENGTH).try_into().unwrap();26 <Pallet<T>>::create_collection(27 RawOrigin::Signed(owner).into(),28 col_name,29 col_desc,30 token_prefix,31 mode,32 )?;33 Ok(<pallet_common::CreatedCollectionCount<T>>::get())34}35fn create_nft_collection<T: Config>(owner: T::AccountId) -> Result<CollectionId, DispatchError> {36 create_collection_helper::<T>(owner, CollectionMode::NFT)37}3839benchmarks! {4041 create_collection {42 let col_name: Vec<u16> = create_u16_data(MAX_COLLECTION_NAME_LENGTH);43 let col_desc: Vec<u16> = create_u16_data(MAX_COLLECTION_DESCRIPTION_LENGTH);44 let token_prefix: Vec<u8> = create_data(MAX_TOKEN_PREFIX_LENGTH);45 let mode: CollectionMode = CollectionMode::NFT;46 let caller: T::AccountId = account("caller", 0, SEED);47 T::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());48 }: _(RawOrigin::Signed(caller.clone()), col_name.clone(), col_desc.clone(), token_prefix.clone(), mode)49 verify {50 assert_eq!(<pallet_common::CollectionById<T>>::get(CollectionId(1)).unwrap().owner, caller);51 }5253 destroy_collection {54 let caller: T::AccountId = account("caller", 0, SEED);55 let collection = create_nft_collection::<T>(caller.clone())?;56 }: _(RawOrigin::Signed(caller.clone()), collection)5758 add_to_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 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(allowlist_account))6364 remove_from_allow_list {65 let caller: T::AccountId = account("caller", 0, SEED);66 let allowlist_account: T::AccountId = account("admin", 0, SEED);67 let collection = create_nft_collection::<T>(caller.clone())?;68 <Pallet<T>>::add_to_allow_list(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(allowlist_account.clone()))?;69 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(allowlist_account))7071 set_public_access_mode {72 let caller: T::AccountId = account("caller", 0, SEED);73 let collection = create_nft_collection::<T>(caller.clone())?;74 }: _(RawOrigin::Signed(caller.clone()), collection, AccessMode::AllowList)7576 set_mint_permission {77 let caller: T::AccountId = account("caller", 0, SEED);78 let collection = create_nft_collection::<T>(caller.clone())?;79 }: _(RawOrigin::Signed(caller.clone()), collection, true)8081 change_collection_owner {82 let caller: T::AccountId = account("caller", 0, SEED);83 let collection = create_nft_collection::<T>(caller.clone())?;84 let new_owner: T::AccountId = account("admin", 0, SEED);85 }: _(RawOrigin::Signed(caller.clone()), collection, new_owner)8687 add_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 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))9293 remove_collection_admin {94 let caller: T::AccountId = account("caller", 0, SEED);95 let collection = create_nft_collection::<T>(caller.clone())?;96 let new_admin: T::AccountId = account("admin", 0, SEED);97 <Pallet<T>>::add_collection_admin(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(new_admin.clone()))?;98 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))99100 set_collection_sponsor {101 let caller: T::AccountId = account("caller", 0, SEED);102 let collection = create_nft_collection::<T>(caller.clone())?;103 }: _(RawOrigin::Signed(caller.clone()), collection, caller.clone())104105 confirm_sponsorship {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 }: _(RawOrigin::Signed(caller.clone()), collection)110111 remove_collection_sponsor {112 let caller: T::AccountId = account("caller", 0, SEED);113 let collection = create_nft_collection::<T>(caller.clone())?;114 <Pallet<T>>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), collection, caller.clone())?;115 <Pallet<T>>::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), collection)?;116 }: _(RawOrigin::Signed(caller.clone()), collection)117118 set_transfers_enabled_flag {119 let caller: T::AccountId = account("caller", 0, SEED);120 let collection = create_nft_collection::<T>(caller.clone())?;121 }: _(RawOrigin::Signed(caller.clone()), collection, false)122123 set_offchain_schema {124 let b in 0..OFFCHAIN_SCHEMA_LIMIT;125126 let caller: T::AccountId = account("caller", 0, SEED);127 let collection = create_nft_collection::<T>(caller.clone())?;128 let data = create_data(b as usize);129 }: set_offchain_schema(RawOrigin::Signed(caller.clone()), collection, data)130131 set_const_on_chain_schema {132 let b in 0..CONST_ON_CHAIN_SCHEMA_LIMIT;133134 let caller: T::AccountId = account("caller", 0, SEED);135 let collection = create_nft_collection::<T>(caller.clone())?;136 let data = create_data(b as usize);137 }: set_const_on_chain_schema(RawOrigin::Signed(caller.clone()), collection, data)138139 set_variable_on_chain_schema {140 let b in 0..VARIABLE_ON_CHAIN_SCHEMA_LIMIT;141142 let caller: T::AccountId = account("caller", 0, SEED);143 let collection = create_nft_collection::<T>(caller.clone())?;144 let data = create_data(b as usize);145 }: set_variable_on_chain_schema(RawOrigin::Signed(caller.clone()), collection, data)146147 set_schema_version {148 let caller: T::AccountId = account("caller", 0, SEED);149 let collection = create_nft_collection::<T>(caller.clone())?;150 }: set_schema_version(RawOrigin::Signed(caller.clone()), collection, SchemaVersion::Unique)151152 set_collection_limits{153 let caller: T::AccountId = account("caller", 0, SEED);154 let collection = create_nft_collection::<T>(caller.clone())?;155156 let cl = CollectionLimits {157 account_token_ownership_limit: Some(0),158 sponsored_data_size: 0,159 token_limit: 1,160 sponsor_transfer_timeout: 0,161 owner_can_destroy: true,162 owner_can_transfer: true,163 sponsored_data_rate_limit: None,164 };165 }: set_collection_limits(RawOrigin::Signed(caller.clone()), collection, cl)166167 set_meta_update_permission_flag {168 let caller: T::AccountId = account("caller", 0, SEED);169 let collection = create_nft_collection::<T>(caller.clone())?;170 }: _(RawOrigin::Signed(caller.clone()), collection, MetaUpdatePermission::Admin)171}