1use super::*;2use crate::{Pallet, Config, NonfungibleHandle};34use sp_std::prelude::*;5use pallet_common::benchmarking::{create_collection_raw, create_data, create_var_data};6use frame_benchmarking::{benchmarks, account};7use up_data_structs::{CollectionMode, MAX_ITEMS_PER_BATCH, CUSTOM_DATA_LIMIT};8use pallet_common::bench_init;9use core::convert::TryInto;1011const SEED: u32 = 1;1213fn create_max_item_data<T: Config>(owner: T::CrossAccountId) -> CreateItemData<T> {14 let const_data = create_data::<CUSTOM_DATA_LIMIT>();15 let variable_data = create_data::<CUSTOM_DATA_LIMIT>();16 CreateItemData::<T> {17 const_data,18 variable_data,19 owner,20 }21}22fn create_max_item<T: Config>(23 collection: &NonfungibleHandle<T>,24 sender: &T::CrossAccountId,25 owner: T::CrossAccountId,26) -> Result<TokenId, DispatchError> {27 <Pallet<T>>::create_item(&collection, sender, create_max_item_data::<T>(owner))?;28 Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))29}3031fn create_collection<T: Config>(32 owner: T::AccountId,33) -> Result<NonfungibleHandle<T>, DispatchError> {34 create_collection_raw(35 owner,36 CollectionMode::NFT,37 <Pallet<T>>::init_collection,38 NonfungibleHandle::cast,39 )40}4142benchmarks! {43 create_item {44 bench_init!{45 owner: sub; collection: collection(owner);46 sender: cross_from_sub(owner); to: cross_sub;47 };48 }: {create_max_item(&collection, &sender, to.clone())?}4950 create_multiple_items {51 let b in 0..MAX_ITEMS_PER_BATCH;52 bench_init!{53 owner: sub; collection: collection(owner);54 sender: cross_from_sub(owner); to: cross_sub;55 };56 let data = (0..b).map(|_| create_max_item_data::<T>(to.clone())).collect();57 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}5859 create_multiple_items_ex {60 let b in 0..MAX_ITEMS_PER_BATCH;61 bench_init!{62 owner: sub; collection: collection(owner);63 sender: cross_from_sub(owner);64 };65 let data = (0..b).map(|i| {66 bench_init!(to: cross_sub(i););67 create_max_item_data::<T>(to)68 }).collect();69 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}7071 burn_item {72 bench_init!{73 owner: sub; collection: collection(owner);74 sender: cross_from_sub(owner); burner: cross_sub;75 };76 let item = create_max_item(&collection, &sender, burner.clone())?;77 }: {<Pallet<T>>::burn(&collection, &burner, item)?}7879 transfer {80 bench_init!{81 owner: sub; collection: collection(owner);82 owner: cross_from_sub; sender: cross_sub; receiver: cross_sub;83 };84 let item = create_max_item(&collection, &owner, sender.clone())?;85 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item)?}8687 approve {88 bench_init!{89 owner: sub; collection: collection(owner);90 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;91 };92 let item = create_max_item(&collection, &owner, sender.clone())?;93 }: {<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?}9495 transfer_from {96 bench_init!{97 owner: sub; collection: collection(owner);98 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;99 };100 let item = create_max_item(&collection, &owner, sender.clone())?;101 <Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?;102 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item)?}103104 burn_from {105 bench_init!{106 owner: sub; collection: collection(owner);107 owner: cross_from_sub; sender: cross_sub; burner: cross_sub;108 };109 let item = create_max_item(&collection, &owner, sender.clone())?;110 <Pallet<T>>::set_allowance(&collection, &sender, item, Some(&burner))?;111 }: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item)?}112113 set_variable_metadata {114 let b in 0..CUSTOM_DATA_LIMIT;115 bench_init!{116 owner: sub; collection: collection(owner);117 owner: cross_from_sub; sender: cross_sub;118 };119 let item = create_max_item(&collection, &owner, sender.clone())?;120 let data = create_var_data(b).try_into().unwrap();121 }: {<Pallet<T>>::set_variable_metadata(&collection, &sender, item, data)?}122}