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> { const_data, owner }32}33fn create_max_item<T: Config>(34 collection: &NonfungibleHandle<T>,35 sender: &T::CrossAccountId,36 owner: T::CrossAccountId,37) -> Result<TokenId, DispatchError> {38 <Pallet<T>>::create_item(&collection, sender, create_max_item_data::<T>(owner))?;39 Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))40}4142fn create_collection<T: Config>(43 owner: T::AccountId,44) -> Result<NonfungibleHandle<T>, DispatchError> {45 create_collection_raw(46 owner,47 CollectionMode::NFT,48 <Pallet<T>>::init_collection,49 NonfungibleHandle::cast,50 )51}5253benchmarks! {54 create_item {55 bench_init!{56 owner: sub; collection: collection(owner);57 sender: cross_from_sub(owner); to: cross_sub;58 };59 }: {create_max_item(&collection, &sender, to.clone())?}6061 create_multiple_items {62 let b in 0..MAX_ITEMS_PER_BATCH;63 bench_init!{64 owner: sub; collection: collection(owner);65 sender: cross_from_sub(owner); to: cross_sub;66 };67 let data = (0..b).map(|_| create_max_item_data::<T>(to.clone())).collect();68 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}6970 create_multiple_items_ex {71 let b in 0..MAX_ITEMS_PER_BATCH;72 bench_init!{73 owner: sub; collection: collection(owner);74 sender: cross_from_sub(owner);75 };76 let data = (0..b).map(|i| {77 bench_init!(to: cross_sub(i););78 create_max_item_data::<T>(to)79 }).collect();80 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}8182 burn_item {83 bench_init!{84 owner: sub; collection: collection(owner);85 sender: cross_from_sub(owner); burner: cross_sub;86 };87 let item = create_max_item(&collection, &sender, burner.clone())?;88 }: {<Pallet<T>>::burn(&collection, &burner, item)?}8990 transfer {91 bench_init!{92 owner: sub; collection: collection(owner);93 owner: cross_from_sub; sender: cross_sub; receiver: cross_sub;94 };95 let item = create_max_item(&collection, &owner, sender.clone())?;96 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item)?}9798 approve {99 bench_init!{100 owner: sub; collection: collection(owner);101 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;102 };103 let item = create_max_item(&collection, &owner, sender.clone())?;104 }: {<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?}105106 transfer_from {107 bench_init!{108 owner: sub; collection: collection(owner);109 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;110 };111 let item = create_max_item(&collection, &owner, sender.clone())?;112 <Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?;113 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, &Unlimited)?}114115 burn_from {116 bench_init!{117 owner: sub; collection: collection(owner);118 owner: cross_from_sub; sender: cross_sub; burner: cross_sub;119 };120 let item = create_max_item(&collection, &owner, sender.clone())?;121 <Pallet<T>>::set_allowance(&collection, &sender, item, Some(&burner))?;122 }: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, &Unlimited)?}123}