difftreelog
feat bench bulk mints
in: master
2 files changed
pallets/nft/src/benchmarking.rsdiffbeforeafterboth1#![cfg(feature = "runtime-benchmarks")]23use super::*;4use crate::Pallet;5use frame_system::RawOrigin;6use frame_benchmarking::{benchmarks, account};7use nft_data_structs::*;8use core::convert::TryInto;9use sp_runtime::DispatchError;1011const SEED: u32 = 1;1213fn create_data(size: usize) -> Vec<u8> {14 (0..size).map(|v| (v & 0xff) as u8).collect()15}16fn create_u16_data(size: usize) -> Vec<u16> {17 (0..size).map(|v| (v & 0xffff) as u16).collect()18}1920fn default_nft_data() -> CreateItemData {21 CreateItemData::NFT(CreateNftData {22 const_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(),23 variable_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(),24 })25}2627fn default_fungible_data() -> CreateItemData {28 CreateItemData::Fungible(CreateFungibleData { value: 1000 })29}3031fn default_re_fungible_data() -> CreateItemData {32 CreateItemData::ReFungible(CreateReFungibleData {33 const_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(),34 variable_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(),35 pieces: 1000,36 })37}3839fn create_collection_helper<T: Config>(40 owner: T::AccountId,41 mode: CollectionMode,42) -> Result<CollectionId, DispatchError> {43 T::Currency::deposit_creating(&owner, T::CollectionCreationPrice::get());44 let col_name = create_u16_data(MAX_COLLECTION_NAME_LENGTH)45 .try_into()46 .unwrap();47 let col_desc = create_u16_data(MAX_COLLECTION_DESCRIPTION_LENGTH)48 .try_into()49 .unwrap();50 let token_prefix = create_data(MAX_TOKEN_PREFIX_LENGTH).try_into().unwrap();51 <Pallet<T>>::create_collection(52 RawOrigin::Signed(owner).into(),53 col_name,54 col_desc,55 token_prefix,56 mode,57 )?;58 Ok(CreatedCollectionCount::get())59}60fn create_nft_collection<T: Config>(owner: T::AccountId) -> Result<CollectionId, DispatchError> {61 create_collection_helper::<T>(owner, CollectionMode::NFT)62}63fn create_fungible_collection<T: Config>(64 owner: T::AccountId,65) -> Result<CollectionId, DispatchError> {66 create_collection_helper::<T>(owner, CollectionMode::Fungible(0))67}68fn create_refungible_collection<T: Config>(69 owner: T::AccountId,70) -> Result<CollectionId, DispatchError> {71 create_collection_helper::<T>(owner, CollectionMode::ReFungible)72}7374benchmarks! {7576 create_collection {77 let col_name: Vec<u16> = create_u16_data(MAX_COLLECTION_NAME_LENGTH);78 let col_desc: Vec<u16> = create_u16_data(MAX_COLLECTION_DESCRIPTION_LENGTH);79 let token_prefix: Vec<u8> = create_data(MAX_TOKEN_PREFIX_LENGTH);80 let mode: CollectionMode = CollectionMode::NFT;81 let caller: T::AccountId = account("caller", 0, SEED);82 T::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());83 }: _(RawOrigin::Signed(caller.clone()), col_name.clone(), col_desc.clone(), token_prefix.clone(), mode)84 verify {85 assert_eq!(<Pallet<T>>::collection_id(2).unwrap().owner, caller);86 }8788 destroy_collection {89 let caller: T::AccountId = account("caller", 0, SEED);90 let collection = create_nft_collection::<T>(caller.clone())?;91 }: _(RawOrigin::Signed(caller.clone()), collection)9293 add_to_white_list {94 let caller: T::AccountId = account("caller", 0, SEED);95 let whitelist_account: T::AccountId = account("admin", 0, SEED);96 let collection = create_nft_collection::<T>(caller.clone())?;97 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(whitelist_account))9899 remove_from_white_list {100 let caller: T::AccountId = account("caller", 0, SEED);101 let whitelist_account: T::AccountId = account("admin", 0, SEED);102 let collection = create_nft_collection::<T>(caller.clone())?;103 <Pallet<T>>::add_to_white_list(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(whitelist_account.clone()))?;104 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(whitelist_account))105106 set_public_access_mode {107 let caller: T::AccountId = account("caller", 0, SEED);108 let collection = create_nft_collection::<T>(caller.clone())?;109 }: _(RawOrigin::Signed(caller.clone()), collection, AccessMode::WhiteList)110111 set_mint_permission {112 let caller: T::AccountId = account("caller", 0, SEED);113 let collection = create_nft_collection::<T>(caller.clone())?;114 }: _(RawOrigin::Signed(caller.clone()), collection, true)115116 change_collection_owner {117 let caller: T::AccountId = account("caller", 0, SEED);118 let collection = create_nft_collection::<T>(caller.clone())?;119 let new_owner: T::AccountId = account("admin", 0, SEED);120 }: _(RawOrigin::Signed(caller.clone()), collection, new_owner)121122 add_collection_admin {123 let caller: T::AccountId = account("caller", 0, SEED);124 let collection = create_nft_collection::<T>(caller.clone())?;125 let new_admin: T::AccountId = account("admin", 0, SEED);126 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))127128 remove_collection_admin {129 let caller: T::AccountId = account("caller", 0, SEED);130 let collection = create_nft_collection::<T>(caller.clone())?;131 let new_admin: T::AccountId = account("admin", 0, SEED);132 <Pallet<T>>::add_collection_admin(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(new_admin.clone()))?;133 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))134135 set_collection_sponsor {136 let caller: T::AccountId = account("caller", 0, SEED);137 let collection = create_nft_collection::<T>(caller.clone())?;138 }: _(RawOrigin::Signed(caller.clone()), collection, caller.clone())139140 confirm_sponsorship {141 let caller: T::AccountId = account("caller", 0, SEED);142 let collection = create_nft_collection::<T>(caller.clone())?;143 <Pallet<T>>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?;144 }: _(RawOrigin::Signed(caller.clone()), collection)145146 remove_collection_sponsor {147 let caller: T::AccountId = account("caller", 0, SEED);148 let collection = create_nft_collection::<T>(caller.clone())?;149 <Pallet<T>>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?;150 <Pallet<T>>::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), 2)?;151 }: _(RawOrigin::Signed(caller.clone()), collection)152153 // nft item154 create_item_nft {155 let b in 0..(CUSTOM_DATA_LIMIT * 2);156157 let caller: T::AccountId = account("caller", 0, SEED);158 let collection = create_nft_collection::<T>(caller.clone())?;159 let data = CreateItemData::NFT(CreateNftData {160 const_data: create_data(b.min(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(),161 variable_data: create_data(b.saturating_sub(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(),162 });163 }: create_item(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data)164165 // fungible item166 create_item_fungible {167 let caller: T::AccountId = account("caller", 0, SEED);168 let collection = create_fungible_collection::<T>(caller.clone())?;169 let data = CreateItemData::Fungible(CreateFungibleData {170 value: 1000,171 });172 }: create_item(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data)173174 // refungible item175 create_item_refungible {176 let b in 0..(CUSTOM_DATA_LIMIT * 2);177178 let caller: T::AccountId = account("caller", 0, SEED);179 let collection = create_refungible_collection::<T>(caller.clone())?;180 let data = CreateItemData::ReFungible(CreateReFungibleData {181 const_data: create_data(b.min(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(),182 variable_data: create_data(b.saturating_sub(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(),183 pieces: 1000,184 });185 }: create_item(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data)186187 burn_item_nft {188 let caller: T::AccountId = account("caller", 0, SEED);189 let collection = create_nft_collection::<T>(caller.clone())?;190 let data = default_nft_data();191 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?;192 }: burn_item(RawOrigin::Signed(caller.clone()), collection, 1, 1)193194 transfer_nft {195 let caller: T::AccountId = account("caller", 0, SEED);196 let collection = create_nft_collection::<T>(caller.clone())?;197 let recipient: T::AccountId = account("recipient", 0, SEED);198 let data = default_nft_data();199 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?;200 }: transfer(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 1, 1)201202 transfer_fungible {203 let caller: T::AccountId = account("caller", 0, SEED);204 let collection = create_fungible_collection::<T>(caller.clone())?;205 let recipient: T::AccountId = account("recipient", 0, SEED);206 let data = default_fungible_data();207 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?;208 }: transfer(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 1, 1)209210 transfer_refungible {211 let caller: T::AccountId = account("caller", 0, SEED);212 let collection = create_refungible_collection::<T>(caller.clone())?;213 let recipient: T::AccountId = account("recipient", 0, SEED);214 let data = default_re_fungible_data();215 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?;216 }: transfer(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 1, 1)217218 approve_nft {219 let caller: T::AccountId = account("caller", 0, SEED);220 let collection = create_nft_collection::<T>(caller.clone())?;221 let recipient: T::AccountId = account("recipient", 0, SEED);222 let data = default_nft_data();223 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?;224 }: approve(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 1, 1)225226 // Nft227 transfer_from_nft {228 let caller: T::AccountId = account("caller", 0, SEED);229 let collection = create_nft_collection::<T>(caller.clone())?;230 let recipient: T::AccountId = account("recipient", 0, SEED);231 let data = default_nft_data();232 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?;233 <Pallet<T>>::approve(RawOrigin::Signed(caller.clone()).into(), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)?;234 }: transfer_from(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)235236 // Fungible237 transfer_from_fungible {238 let caller: T::AccountId = account("caller", 0, SEED);239 let collection = create_fungible_collection::<T>(caller.clone())?;240 let recipient: T::AccountId = account("recipient", 0, SEED);241 let data = default_fungible_data();242 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?;243 <Pallet<T>>::approve(RawOrigin::Signed(caller.clone()).into(), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)?;244 }: transfer_from(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)245246 // ReFungible247 transfer_from_refungible {248 let caller: T::AccountId = account("caller", 0, SEED);249 let collection = create_refungible_collection::<T>(caller.clone())?;250 let recipient: T::AccountId = account("recipient", 0, SEED);251 let data = default_re_fungible_data();252 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?;253 <Pallet<T>>::approve(RawOrigin::Signed(caller.clone()).into(), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)?;254 }: transfer_from(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)255256 set_offchain_schema {257 let b in 0..OFFCHAIN_SCHEMA_LIMIT;258259 let caller: T::AccountId = account("caller", 0, SEED);260 let collection = create_nft_collection::<T>(caller.clone())?;261 let data = create_data(b as usize);262 }: set_offchain_schema(RawOrigin::Signed(caller.clone()), collection, data)263264 set_const_on_chain_schema {265 let b in 0..CONST_ON_CHAIN_SCHEMA_LIMIT;266267 let caller: T::AccountId = account("caller", 0, SEED);268 let collection = create_nft_collection::<T>(caller.clone())?;269 let data = create_data(b as usize);270 }: set_const_on_chain_schema(RawOrigin::Signed(caller.clone()), collection, data)271272 set_variable_on_chain_schema {273 let b in 0..VARIABLE_ON_CHAIN_SCHEMA_LIMIT;274275 let caller: T::AccountId = account("caller", 0, SEED);276 let collection = create_nft_collection::<T>(caller.clone())?;277 let data = create_data(b as usize);278 }: set_variable_on_chain_schema(RawOrigin::Signed(caller.clone()), 2, data)279280 set_variable_meta_data_nft {281 let b in 0..CUSTOM_DATA_LIMIT;282283 let caller: T::AccountId = account("caller", 0, SEED);284 let collection = create_nft_collection::<T>(caller.clone())?;285 let data = default_nft_data();286 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?;287 let data = create_data(b as usize);288 }: set_variable_meta_data(RawOrigin::Signed(caller.clone()), collection, 1, data)289290 set_schema_version {291 let caller: T::AccountId = account("caller", 0, SEED);292 let collection = create_nft_collection::<T>(caller.clone())?;293 }: set_schema_version(RawOrigin::Signed(caller.clone()), 2, SchemaVersion::Unique)294295 set_collection_limits{296 let caller: T::AccountId = account("caller", 0, SEED);297 let collection = create_nft_collection::<T>(caller.clone())?;298299 let cl = CollectionLimits {300 account_token_ownership_limit: 0,301 sponsored_data_size: 0,302 token_limit: 1,303 sponsor_transfer_timeout: 0,304 owner_can_destroy: true,305 owner_can_transfer: true,306 sponsored_data_rate_limit: None,307 };308 }: set_collection_limits(RawOrigin::Signed(caller.clone()), 2, cl)309}1#![cfg(feature = "runtime-benchmarks")]23use super::*;4use crate::Pallet;5use frame_system::RawOrigin;6use frame_benchmarking::{benchmarks, account};7use nft_data_structs::*;8use core::convert::TryInto;9use sp_runtime::DispatchError;1011const SEED: u32 = 1;1213fn create_data(size: usize) -> Vec<u8> {14 (0..size).map(|v| (v & 0xff) as u8).collect()15}16fn create_u16_data(size: usize) -> Vec<u16> {17 (0..size).map(|v| (v & 0xffff) as u16).collect()18}1920fn default_nft_data() -> CreateItemData {21 CreateItemData::NFT(CreateNftData {22 const_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(),23 variable_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(),24 })25}2627fn default_fungible_data() -> CreateItemData {28 CreateItemData::Fungible(CreateFungibleData { value: 1000 })29}3031fn default_re_fungible_data() -> CreateItemData {32 CreateItemData::ReFungible(CreateReFungibleData {33 const_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(),34 variable_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(),35 pieces: 1000,36 })37}3839fn create_collection_helper<T: Config>(40 owner: T::AccountId,41 mode: CollectionMode,42) -> Result<CollectionId, DispatchError> {43 T::Currency::deposit_creating(&owner, T::CollectionCreationPrice::get());44 let col_name = create_u16_data(MAX_COLLECTION_NAME_LENGTH)45 .try_into()46 .unwrap();47 let col_desc = create_u16_data(MAX_COLLECTION_DESCRIPTION_LENGTH)48 .try_into()49 .unwrap();50 let token_prefix = create_data(MAX_TOKEN_PREFIX_LENGTH).try_into().unwrap();51 <Pallet<T>>::create_collection(52 RawOrigin::Signed(owner).into(),53 col_name,54 col_desc,55 token_prefix,56 mode,57 )?;58 Ok(CreatedCollectionCount::get())59}60fn create_nft_collection<T: Config>(owner: T::AccountId) -> Result<CollectionId, DispatchError> {61 create_collection_helper::<T>(owner, CollectionMode::NFT)62}63fn create_fungible_collection<T: Config>(64 owner: T::AccountId,65) -> Result<CollectionId, DispatchError> {66 create_collection_helper::<T>(owner, CollectionMode::Fungible(0))67}68fn create_refungible_collection<T: Config>(69 owner: T::AccountId,70) -> Result<CollectionId, DispatchError> {71 create_collection_helper::<T>(owner, CollectionMode::ReFungible)72}7374benchmarks! {7576 create_collection {77 let col_name: Vec<u16> = create_u16_data(MAX_COLLECTION_NAME_LENGTH);78 let col_desc: Vec<u16> = create_u16_data(MAX_COLLECTION_DESCRIPTION_LENGTH);79 let token_prefix: Vec<u8> = create_data(MAX_TOKEN_PREFIX_LENGTH);80 let mode: CollectionMode = CollectionMode::NFT;81 let caller: T::AccountId = account("caller", 0, SEED);82 T::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());83 }: _(RawOrigin::Signed(caller.clone()), col_name.clone(), col_desc.clone(), token_prefix.clone(), mode)84 verify {85 assert_eq!(<Pallet<T>>::collection_id(2).unwrap().owner, caller);86 }8788 destroy_collection {89 let caller: T::AccountId = account("caller", 0, SEED);90 let collection = create_nft_collection::<T>(caller.clone())?;91 }: _(RawOrigin::Signed(caller.clone()), collection)9293 add_to_white_list {94 let caller: T::AccountId = account("caller", 0, SEED);95 let whitelist_account: T::AccountId = account("admin", 0, SEED);96 let collection = create_nft_collection::<T>(caller.clone())?;97 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(whitelist_account))9899 remove_from_white_list {100 let caller: T::AccountId = account("caller", 0, SEED);101 let whitelist_account: T::AccountId = account("admin", 0, SEED);102 let collection = create_nft_collection::<T>(caller.clone())?;103 <Pallet<T>>::add_to_white_list(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(whitelist_account.clone()))?;104 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(whitelist_account))105106 set_public_access_mode {107 let caller: T::AccountId = account("caller", 0, SEED);108 let collection = create_nft_collection::<T>(caller.clone())?;109 }: _(RawOrigin::Signed(caller.clone()), collection, AccessMode::WhiteList)110111 set_mint_permission {112 let caller: T::AccountId = account("caller", 0, SEED);113 let collection = create_nft_collection::<T>(caller.clone())?;114 }: _(RawOrigin::Signed(caller.clone()), collection, true)115116 change_collection_owner {117 let caller: T::AccountId = account("caller", 0, SEED);118 let collection = create_nft_collection::<T>(caller.clone())?;119 let new_owner: T::AccountId = account("admin", 0, SEED);120 }: _(RawOrigin::Signed(caller.clone()), collection, new_owner)121122 add_collection_admin {123 let caller: T::AccountId = account("caller", 0, SEED);124 let collection = create_nft_collection::<T>(caller.clone())?;125 let new_admin: T::AccountId = account("admin", 0, SEED);126 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))127128 remove_collection_admin {129 let caller: T::AccountId = account("caller", 0, SEED);130 let collection = create_nft_collection::<T>(caller.clone())?;131 let new_admin: T::AccountId = account("admin", 0, SEED);132 <Pallet<T>>::add_collection_admin(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(new_admin.clone()))?;133 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))134135 set_collection_sponsor {136 let caller: T::AccountId = account("caller", 0, SEED);137 let collection = create_nft_collection::<T>(caller.clone())?;138 }: _(RawOrigin::Signed(caller.clone()), collection, caller.clone())139140 confirm_sponsorship {141 let caller: T::AccountId = account("caller", 0, SEED);142 let collection = create_nft_collection::<T>(caller.clone())?;143 <Pallet<T>>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?;144 }: _(RawOrigin::Signed(caller.clone()), collection)145146 remove_collection_sponsor {147 let caller: T::AccountId = account("caller", 0, SEED);148 let collection = create_nft_collection::<T>(caller.clone())?;149 <Pallet<T>>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?;150 <Pallet<T>>::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), 2)?;151 }: _(RawOrigin::Signed(caller.clone()), collection)152153 // nft item154 create_item_nft {155 let b in 0..(CUSTOM_DATA_LIMIT * 2);156157 let caller: T::AccountId = account("caller", 0, SEED);158 let collection = create_nft_collection::<T>(caller.clone())?;159 let data = CreateItemData::NFT(CreateNftData {160 const_data: create_data(b.min(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(),161 variable_data: create_data(b.saturating_sub(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(),162 });163 }: create_item(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data)164165 create_multiple_items_nft {166 // TODO: Take item data size into account. As create_item_nft bench shows, this parameter has no effect on execution time,167 // but it may if we increase CUSTOM_DATA_LIMIT168 let b in 1..1000;169170 let caller: T::AccountId = account("caller", 0, SEED);171 let collection = create_nft_collection::<T>(caller.clone())?;172 let data = (0..b).map(|_| default_nft_data()).collect();173 }: create_multiple_items(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data)174175 // fungible item176 create_item_fungible {177 let caller: T::AccountId = account("caller", 0, SEED);178 let collection = create_fungible_collection::<T>(caller.clone())?;179 let data = CreateItemData::Fungible(CreateFungibleData {180 value: 1000,181 });182 }: create_item(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data)183184 create_multiple_items_fungible {185 let b in 1..1000;186187 let caller: T::AccountId = account("caller", 0, SEED);188 let collection = create_fungible_collection::<T>(caller.clone())?;189 let data = (0..b).map(|_| default_fungible_data()).collect();190 }: create_multiple_items(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data)191192 // refungible item193 create_item_refungible {194 let b in 0..(CUSTOM_DATA_LIMIT * 2);195196 let caller: T::AccountId = account("caller", 0, SEED);197 let collection = create_refungible_collection::<T>(caller.clone())?;198 let data = CreateItemData::ReFungible(CreateReFungibleData {199 const_data: create_data(b.min(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(),200 variable_data: create_data(b.saturating_sub(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(),201 pieces: 1000,202 });203 }: create_item(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data)204205 create_multiple_items_refungible {206 // TODO: Take item data size into account. As create_item_nft bench shows, this parameter has no effect on execution time,207 // but it may if we increase CUSTOM_DATA_LIMIT208 let b in 1..1000;209210 let caller: T::AccountId = account("caller", 0, SEED);211 let collection = create_refungible_collection::<T>(caller.clone())?;212 let data = (0..b).map(|_| default_re_fungible_data()).collect();213 }: create_multiple_items(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data)214215 burn_item_nft {216 let caller: T::AccountId = account("caller", 0, SEED);217 let collection = create_nft_collection::<T>(caller.clone())?;218 let data = default_nft_data();219 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?;220 }: burn_item(RawOrigin::Signed(caller.clone()), collection, 1, 1)221222 transfer_nft {223 let caller: T::AccountId = account("caller", 0, SEED);224 let collection = create_nft_collection::<T>(caller.clone())?;225 let recipient: T::AccountId = account("recipient", 0, SEED);226 let data = default_nft_data();227 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?;228 }: transfer(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 1, 1)229230 transfer_fungible {231 let caller: T::AccountId = account("caller", 0, SEED);232 let collection = create_fungible_collection::<T>(caller.clone())?;233 let recipient: T::AccountId = account("recipient", 0, SEED);234 let data = default_fungible_data();235 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?;236 }: transfer(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 1, 1)237238 transfer_refungible {239 let caller: T::AccountId = account("caller", 0, SEED);240 let collection = create_refungible_collection::<T>(caller.clone())?;241 let recipient: T::AccountId = account("recipient", 0, SEED);242 let data = default_re_fungible_data();243 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?;244 }: transfer(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 1, 1)245246 set_transfers_enabled_flag {247 let caller: T::AccountId = account("caller", 0, SEED);248 let collection = create_nft_collection::<T>(caller.clone())?;249 }: _(RawOrigin::Signed(caller.clone()), collection, false)250251 approve_nft {252 let caller: T::AccountId = account("caller", 0, SEED);253 let collection = create_nft_collection::<T>(caller.clone())?;254 let recipient: T::AccountId = account("recipient", 0, SEED);255 let data = default_nft_data();256 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?;257 }: approve(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 1, 1)258259 // Nft260 transfer_from_nft {261 let caller: T::AccountId = account("caller", 0, SEED);262 let collection = create_nft_collection::<T>(caller.clone())?;263 let recipient: T::AccountId = account("recipient", 0, SEED);264 let data = default_nft_data();265 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?;266 <Pallet<T>>::approve(RawOrigin::Signed(caller.clone()).into(), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)?;267 }: transfer_from(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)268269 // Fungible270 transfer_from_fungible {271 let caller: T::AccountId = account("caller", 0, SEED);272 let collection = create_fungible_collection::<T>(caller.clone())?;273 let recipient: T::AccountId = account("recipient", 0, SEED);274 let data = default_fungible_data();275 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?;276 <Pallet<T>>::approve(RawOrigin::Signed(caller.clone()).into(), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)?;277 }: transfer_from(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)278279 // ReFungible280 transfer_from_refungible {281 let caller: T::AccountId = account("caller", 0, SEED);282 let collection = create_refungible_collection::<T>(caller.clone())?;283 let recipient: T::AccountId = account("recipient", 0, SEED);284 let data = default_re_fungible_data();285 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?;286 <Pallet<T>>::approve(RawOrigin::Signed(caller.clone()).into(), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)?;287 }: transfer_from(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)288289 set_offchain_schema {290 let b in 0..OFFCHAIN_SCHEMA_LIMIT;291292 let caller: T::AccountId = account("caller", 0, SEED);293 let collection = create_nft_collection::<T>(caller.clone())?;294 let data = create_data(b as usize);295 }: set_offchain_schema(RawOrigin::Signed(caller.clone()), collection, data)296297 set_const_on_chain_schema {298 let b in 0..CONST_ON_CHAIN_SCHEMA_LIMIT;299300 let caller: T::AccountId = account("caller", 0, SEED);301 let collection = create_nft_collection::<T>(caller.clone())?;302 let data = create_data(b as usize);303 }: set_const_on_chain_schema(RawOrigin::Signed(caller.clone()), collection, data)304305 set_variable_on_chain_schema {306 let b in 0..VARIABLE_ON_CHAIN_SCHEMA_LIMIT;307308 let caller: T::AccountId = account("caller", 0, SEED);309 let collection = create_nft_collection::<T>(caller.clone())?;310 let data = create_data(b as usize);311 }: set_variable_on_chain_schema(RawOrigin::Signed(caller.clone()), 2, data)312313 set_variable_meta_data_nft {314 let b in 0..CUSTOM_DATA_LIMIT;315316 let caller: T::AccountId = account("caller", 0, SEED);317 let collection = create_nft_collection::<T>(caller.clone())?;318 let data = default_nft_data();319 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?;320 let data = create_data(b as usize);321 }: set_variable_meta_data(RawOrigin::Signed(caller.clone()), collection, 1, data)322323 set_schema_version {324 let caller: T::AccountId = account("caller", 0, SEED);325 let collection = create_nft_collection::<T>(caller.clone())?;326 }: set_schema_version(RawOrigin::Signed(caller.clone()), 2, SchemaVersion::Unique)327328 set_collection_limits{329 let caller: T::AccountId = account("caller", 0, SEED);330 let collection = create_nft_collection::<T>(caller.clone())?;331332 let cl = CollectionLimits {333 account_token_ownership_limit: 0,334 sponsored_data_size: 0,335 token_limit: 1,336 sponsor_transfer_timeout: 0,337 owner_can_destroy: true,338 owner_can_transfer: true,339 sponsored_data_rate_limit: None,340 };341 }: set_collection_limits(RawOrigin::Signed(caller.clone()), 2, cl)342}pallets/nft/src/weights.rsdiffbeforeafterboth--- a/pallets/nft/src/weights.rs
+++ b/pallets/nft/src/weights.rs
@@ -3,7 +3,7 @@
//! Autogenerated weights for pallet_nft
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0
-//! DATE: 2021-08-30, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2021-08-31, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 128
// Executed Command:
@@ -44,12 +44,16 @@
fn confirm_sponsorship() -> Weight;
fn remove_collection_sponsor() -> Weight;
fn create_item_nft(b: u32, ) -> Weight;
+ fn create_multiple_items_nft(b: u32, ) -> Weight;
fn create_item_fungible() -> Weight;
+ fn create_multiple_items_fungible(b: u32, ) -> Weight;
fn create_item_refungible(b: u32, ) -> Weight;
+ fn create_multiple_items_refungible(b: u32, ) -> Weight;
fn burn_item_nft() -> Weight;
fn transfer_nft() -> Weight;
fn transfer_fungible() -> Weight;
fn transfer_refungible() -> Weight;
+ fn set_transfers_enabled_flag() -> Weight;
fn approve_nft() -> Weight;
fn transfer_from_nft() -> Weight;
fn transfer_from_fungible() -> Weight;
@@ -130,8 +134,23 @@
.saturating_add(T::DbWeight::get().reads(11 as Weight))
.saturating_add(T::DbWeight::get().writes(8 as Weight))
}
+ fn create_multiple_items_nft(b: u32, ) -> Weight {
+ (336_830_000 as Weight)
+ // Standard Error: 42_000
+ .saturating_add((11_627_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add(T::DbWeight::get().reads(11 as Weight))
+ .saturating_add(T::DbWeight::get().writes(7 as Weight))
+ .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
+ }
fn create_item_fungible() -> Weight {
- (22_331_000 as Weight)
+ (24_123_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(9 as Weight))
+ .saturating_add(T::DbWeight::get().writes(4 as Weight))
+ }
+ fn create_multiple_items_fungible(b: u32, ) -> Weight {
+ (48_227_000 as Weight)
+ // Standard Error: 13_000
+ .saturating_add((2_918_000 as Weight).saturating_mul(b as Weight))
.saturating_add(T::DbWeight::get().reads(9 as Weight))
.saturating_add(T::DbWeight::get().writes(4 as Weight))
}
@@ -140,6 +159,14 @@
.saturating_add(T::DbWeight::get().reads(9 as Weight))
.saturating_add(T::DbWeight::get().writes(7 as Weight))
}
+ fn create_multiple_items_refungible(b: u32, ) -> Weight {
+ (0 as Weight)
+ // Standard Error: 16_000
+ .saturating_add((8_374_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add(T::DbWeight::get().reads(9 as Weight))
+ .saturating_add(T::DbWeight::get().writes(6 as Weight))
+ .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
+ }
fn burn_item_nft() -> Weight {
(32_237_000 as Weight)
.saturating_add(T::DbWeight::get().reads(9 as Weight))
@@ -160,6 +187,11 @@
.saturating_add(T::DbWeight::get().reads(10 as Weight))
.saturating_add(T::DbWeight::get().writes(7 as Weight))
}
+ fn set_transfers_enabled_flag() -> Weight {
+ (6_376_000 as Weight)
+ .saturating_add(T::DbWeight::get().reads(1 as Weight))
+ .saturating_add(T::DbWeight::get().writes(1 as Weight))
+ }
fn approve_nft() -> Weight {
(169_825_000 as Weight)
.saturating_add(T::DbWeight::get().reads(9 as Weight))
@@ -274,13 +306,30 @@
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
- fn create_item_nft(_b: u32, ) -> Weight {
- (167_909_000 as Weight)
+ fn create_item_nft(b: u32, ) -> Weight {
+ (167_180_000 as Weight)
+ // Standard Error: 1_000
+ .saturating_add((10_000 as Weight).saturating_mul(b as Weight))
.saturating_add(RocksDbWeight::get().reads(11 as Weight))
.saturating_add(RocksDbWeight::get().writes(8 as Weight))
}
+ fn create_multiple_items_nft(b: u32, ) -> Weight {
+ (336_830_000 as Weight)
+ // Standard Error: 42_000
+ .saturating_add((11_627_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add(RocksDbWeight::get().reads(11 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(7 as Weight))
+ .saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
+ }
fn create_item_fungible() -> Weight {
- (22_331_000 as Weight)
+ (24_123_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(9 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(4 as Weight))
+ }
+ fn create_multiple_items_fungible(b: u32, ) -> Weight {
+ (13_217_000 as Weight)
+ // Standard Error: 4_000
+ .saturating_add((2_971_000 as Weight).saturating_mul(b as Weight))
.saturating_add(RocksDbWeight::get().reads(9 as Weight))
.saturating_add(RocksDbWeight::get().writes(4 as Weight))
}
@@ -289,6 +338,14 @@
.saturating_add(RocksDbWeight::get().reads(9 as Weight))
.saturating_add(RocksDbWeight::get().writes(7 as Weight))
}
+ fn create_multiple_items_refungible(b: u32, ) -> Weight {
+ (0 as Weight)
+ // Standard Error: 16_000
+ .saturating_add((8_374_000 as Weight).saturating_mul(b as Weight))
+ .saturating_add(RocksDbWeight::get().reads(9 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(6 as Weight))
+ .saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
+ }
fn burn_item_nft() -> Weight {
(32_237_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(9 as Weight))
@@ -309,6 +366,11 @@
.saturating_add(RocksDbWeight::get().reads(10 as Weight))
.saturating_add(RocksDbWeight::get().writes(7 as Weight))
}
+ fn set_transfers_enabled_flag() -> Weight {
+ (6_376_000 as Weight)
+ .saturating_add(RocksDbWeight::get().reads(1 as Weight))
+ .saturating_add(RocksDbWeight::get().writes(1 as Weight))
+ }
fn approve_nft() -> Weight {
(169_825_000 as Weight)
.saturating_add(RocksDbWeight::get().reads(9 as Weight))