git.delta.rocks / unique-network / refs/commits / 87c401906db8

difftreelog

feat bench bulk mints

Yaroslav Bolyukin2021-08-31parent: #c2620ab.patch.diff
in: master

2 files changed

modifiedpallets/nft/src/benchmarking.rsdiffbeforeafterboth
before · pallets/nft/src/benchmarking.rs
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	// 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}
after · pallets/nft/src/benchmarking.rs
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}
modifiedpallets/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))