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::{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}