1234567891011121314151617#![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::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_schema_version {150 let caller: T::AccountId = account("caller", 0, SEED);151 let collection = create_nft_collection::<T>(caller.clone())?;152 }: set_schema_version(RawOrigin::Signed(caller.clone()), collection, SchemaVersion::Unique)153154 set_collection_limits{155 let caller: T::AccountId = account("caller", 0, SEED);156 let collection = create_nft_collection::<T>(caller.clone())?;157158 let cl = CollectionLimits {159 account_token_ownership_limit: Some(0),160 sponsored_data_size: Some(0),161 token_limit: Some(1),162 sponsor_transfer_timeout: Some(0),163 sponsor_approve_timeout: None,164 owner_can_destroy: Some(true),165 owner_can_transfer: Some(true),166 sponsored_data_rate_limit: None,167 transfers_enabled: Some(true),168 nesting_rule: None,169 };170 }: set_collection_limits(RawOrigin::Signed(caller.clone()), collection, cl)171172 set_meta_update_permission_flag {173 let caller: T::AccountId = account("caller", 0, SEED);174 let collection = create_nft_collection::<T>(caller.clone())?;175 }: _(RawOrigin::Signed(caller.clone()), collection, MetaUpdatePermission::Admin)176}