1234567891011121314151617use super::*;18use crate::{Pallet, Config, NonfungibleHandle};1920use sp_std::prelude::*;21use pallet_common::benchmarking::{create_collection_raw, create_data, create_var_data};22use frame_benchmarking::{benchmarks, account};23use up_data_structs::{CollectionMode, MAX_ITEMS_PER_BATCH, CUSTOM_DATA_LIMIT, budget::Unlimited};24use pallet_common::bench_init;25use core::convert::TryInto;2627const SEED: u32 = 1;2829fn create_max_item_data<T: Config>(owner: T::CrossAccountId) -> CreateItemData<T> {30 let const_data = create_data::<CUSTOM_DATA_LIMIT>();31 CreateItemData::<T> {32 const_data,33 owner,34 }35}36fn create_max_item<T: Config>(37 collection: &NonfungibleHandle<T>,38 sender: &T::CrossAccountId,39 owner: T::CrossAccountId,40) -> Result<TokenId, DispatchError> {41 <Pallet<T>>::create_item(&collection, sender, create_max_item_data::<T>(owner))?;42 Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))43}4445fn create_collection<T: Config>(46 owner: T::AccountId,47) -> Result<NonfungibleHandle<T>, DispatchError> {48 create_collection_raw(49 owner,50 CollectionMode::NFT,51 <Pallet<T>>::init_collection,52 NonfungibleHandle::cast,53 )54}5556benchmarks! {57 create_item {58 bench_init!{59 owner: sub; collection: collection(owner);60 sender: cross_from_sub(owner); to: cross_sub;61 };62 }: {create_max_item(&collection, &sender, to.clone())?}6364 create_multiple_items {65 let b in 0..MAX_ITEMS_PER_BATCH;66 bench_init!{67 owner: sub; collection: collection(owner);68 sender: cross_from_sub(owner); to: cross_sub;69 };70 let data = (0..b).map(|_| create_max_item_data::<T>(to.clone())).collect();71 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}7273 create_multiple_items_ex {74 let b in 0..MAX_ITEMS_PER_BATCH;75 bench_init!{76 owner: sub; collection: collection(owner);77 sender: cross_from_sub(owner);78 };79 let data = (0..b).map(|i| {80 bench_init!(to: cross_sub(i););81 create_max_item_data::<T>(to)82 }).collect();83 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}8485 burn_item {86 bench_init!{87 owner: sub; collection: collection(owner);88 sender: cross_from_sub(owner); burner: cross_sub;89 };90 let item = create_max_item(&collection, &sender, burner.clone())?;91 }: {<Pallet<T>>::burn(&collection, &burner, item)?}9293 transfer {94 bench_init!{95 owner: sub; collection: collection(owner);96 owner: cross_from_sub; sender: cross_sub; receiver: cross_sub;97 };98 let item = create_max_item(&collection, &owner, sender.clone())?;99 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item)?}100101 approve {102 bench_init!{103 owner: sub; collection: collection(owner);104 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;105 };106 let item = create_max_item(&collection, &owner, sender.clone())?;107 }: {<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?}108109 transfer_from {110 bench_init!{111 owner: sub; collection: collection(owner);112 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;113 };114 let item = create_max_item(&collection, &owner, sender.clone())?;115 <Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?;116 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, &Unlimited)?}117118 burn_from {119 bench_init!{120 owner: sub; collection: collection(owner);121 owner: cross_from_sub; sender: cross_sub; burner: cross_sub;122 };123 let item = create_max_item(&collection, &owner, sender.clone())?;124 <Pallet<T>>::set_allowance(&collection, &sender, item, Some(&burner))?;125 }: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, &Unlimited)?}126}