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};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 let variable_data = create_data::<CUSTOM_DATA_LIMIT>();32 CreateItemData::<T> {33 const_data,34 variable_data,35 owner,36 }37}38fn create_max_item<T: Config>(39 collection: &NonfungibleHandle<T>,40 sender: &T::CrossAccountId,41 owner: T::CrossAccountId,42) -> Result<TokenId, DispatchError> {43 <Pallet<T>>::create_item(&collection, sender, create_max_item_data::<T>(owner))?;44 Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))45}4647fn create_collection<T: Config>(48 owner: T::AccountId,49) -> Result<NonfungibleHandle<T>, DispatchError> {50 create_collection_raw(51 owner,52 CollectionMode::NFT,53 <Pallet<T>>::init_collection,54 NonfungibleHandle::cast,55 )56}5758benchmarks! {59 create_item {60 bench_init!{61 owner: sub; collection: collection(owner);62 sender: cross_from_sub(owner); to: cross_sub;63 };64 }: {create_max_item(&collection, &sender, to.clone())?}6566 create_multiple_items {67 let b in 0..MAX_ITEMS_PER_BATCH;68 bench_init!{69 owner: sub; collection: collection(owner);70 sender: cross_from_sub(owner); to: cross_sub;71 };72 let data = (0..b).map(|_| create_max_item_data::<T>(to.clone())).collect();73 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}7475 create_multiple_items_ex {76 let b in 0..MAX_ITEMS_PER_BATCH;77 bench_init!{78 owner: sub; collection: collection(owner);79 sender: cross_from_sub(owner);80 };81 let data = (0..b).map(|i| {82 bench_init!(to: cross_sub(i););83 create_max_item_data::<T>(to)84 }).collect();85 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data)?}8687 burn_item {88 bench_init!{89 owner: sub; collection: collection(owner);90 sender: cross_from_sub(owner); burner: cross_sub;91 };92 let item = create_max_item(&collection, &sender, burner.clone())?;93 }: {<Pallet<T>>::burn(&collection, &burner, item)?}9495 transfer {96 bench_init!{97 owner: sub; collection: collection(owner);98 owner: cross_from_sub; sender: cross_sub; receiver: cross_sub;99 };100 let item = create_max_item(&collection, &owner, sender.clone())?;101 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item)?}102103 approve {104 bench_init!{105 owner: sub; collection: collection(owner);106 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;107 };108 let item = create_max_item(&collection, &owner, sender.clone())?;109 }: {<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?}110111 transfer_from {112 bench_init!{113 owner: sub; collection: collection(owner);114 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;115 };116 let item = create_max_item(&collection, &owner, sender.clone())?;117 <Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?;118 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item)?}119120 burn_from {121 bench_init!{122 owner: sub; collection: collection(owner);123 owner: cross_from_sub; sender: cross_sub; burner: cross_sub;124 };125 let item = create_max_item(&collection, &owner, sender.clone())?;126 <Pallet<T>>::set_allowance(&collection, &sender, item, Some(&burner))?;127 }: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item)?}128129 set_variable_metadata {130 let b in 0..CUSTOM_DATA_LIMIT;131 bench_init!{132 owner: sub; collection: collection(owner);133 owner: cross_from_sub; sender: cross_sub;134 };135 let item = create_max_item(&collection, &owner, sender.clone())?;136 let data = create_var_data(b).try_into().unwrap();137 }: {<Pallet<T>>::set_variable_metadata(&collection, &sender, item, data)?}138}