From 1d469f4695cf49a05a7cb9526d4a43c5632cedac Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 22 Oct 2021 07:03:59 +0000 Subject: [PATCH] feat(refungible): benchmarking --- --- a/pallets/refungible/Cargo.toml +++ b/pallets/refungible/Cargo.toml @@ -17,6 +17,7 @@ sp-core = { default-features = false, version = '4.0.0-dev', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.10' } pallet-common = { default-features = false, path = '../common' } nft-data-structs = { default-features = false, path = '../../primitives/nft' } +frame-benchmarking = { default-features = false, optional = true, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.10' } [features] default = ["std"] @@ -27,5 +28,10 @@ "sp-std/std", "nft-data-structs/std", "pallet-common/std", + 'frame-benchmarking/std', +] +runtime-benchmarks = [ + 'frame-benchmarking', + 'frame-support/runtime-benchmarks', + 'frame-system/runtime-benchmarks', ] -runtime-benchmarks = [] --- a/pallets/refungible/src/benchmarking.rs +++ b/pallets/refungible/src/benchmarking.rs @@ -1 +1,161 @@ -#![cfg(feature = "runtime-benchmarking")] +use super::*; +use crate::{Pallet, Config, RefungibleHandle}; + +use sp_std::prelude::*; +use pallet_common::benchmarking::{create_collection_raw, create_data}; +use frame_benchmarking::{benchmarks, account}; +use nft_data_structs::{CollectionMode, MAX_ITEMS_PER_BATCH}; +use pallet_common::bench_init; +use core::convert::TryInto; +use core::iter::IntoIterator; + +const SEED: u32 = 1; + +fn create_max_item_data( + users: impl IntoIterator, +) -> CreateItemData { + let const_data = create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(); + let variable_data = create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(); + CreateItemData { + const_data, + variable_data, + users: users.into_iter().collect(), + } +} +fn create_max_item( + collection: &RefungibleHandle, + sender: &T::CrossAccountId, + users: impl IntoIterator, +) -> Result { + >::create_item(&collection, sender, create_max_item_data(users))?; + Ok(TokenId(>::get(&collection.id))) +} + +fn create_collection(owner: T::AccountId) -> Result, DispatchError> { + create_collection_raw( + owner, + CollectionMode::NFT, + >::init_collection, + RefungibleHandle::cast, + ) +} +benchmarks! { + create_item { + bench_init!{ + owner: sub; collection: collection(owner); + sender: cross_from_sub(owner); to: cross_sub; + }; + }: {create_max_item(&collection, &sender, [(to.clone(), 200)])?} + + create_multiple_items { + let b in 0..MAX_ITEMS_PER_BATCH; + bench_init!{ + owner: sub; collection: collection(owner); + sender: cross_from_sub(owner); to: cross_sub; + }; + let data = (0..b).map(|_| create_max_item_data([(to.clone(), 200)])).collect(); + }: {>::create_multiple_items(&collection, &sender, data)?} + + // Other user left, token data is kept + burn_item_partial { + bench_init!{ + owner: sub; collection: collection(owner); + sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub; + }; + let item = create_max_item(&collection, &sender, [(burner.clone(), 200), (another_owner, 200)])?; + }: {>::burn(&collection, &burner, item, 200)?} + // No users remaining, token is destroyed + burn_item_fully { + bench_init!{ + owner: sub; collection: collection(owner); + sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub; + }; + let item = create_max_item(&collection, &sender, [(burner.clone(), 200)])?; + }: {>::burn(&collection, &burner, item, 200)?} + + transfer_normal { + bench_init!{ + owner: sub; collection: collection(owner); + sender: cross_from_sub(owner); receiver: cross_sub; + }; + let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?; + }: {>::transfer(&collection, &sender, &receiver, item, 100)?} + // Target account is created + transfer_creating { + bench_init!{ + owner: sub; collection: collection(owner); + sender: cross_from_sub(owner); receiver: cross_sub; + }; + let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?; + }: {>::transfer(&collection, &sender, &receiver, item, 100)?} + // Source account is destroyed + transfer_removing { + bench_init!{ + owner: sub; collection: collection(owner); + sender: cross_from_sub(owner); receiver: cross_sub; + }; + let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?; + }: {>::transfer(&collection, &sender, &receiver, item, 200)?} + // Source account destroyed, target created + transfer_creating_removing { + bench_init!{ + owner: sub; collection: collection(owner); + sender: cross_from_sub(owner); receiver: cross_sub; + }; + let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?; + }: {>::transfer(&collection, &sender, &receiver, item, 200)?} + + approve { + bench_init!{ + owner: sub; collection: collection(owner); + owner: cross_from_sub; sender: cross_sub; spender: cross_sub; + }; + let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?; + }: {>::set_allowance(&collection, &sender, &spender, item, 100)?} + + transfer_from_normal { + bench_init!{ + owner: sub; collection: collection(owner); + owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub; + }; + let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?; + >::set_allowance(&collection, &sender, &spender, item, 100)?; + }: {>::transfer_from(&collection, &spender, &sender, &receiver, item, 100)?} + // Target account is created + transfer_from_creating { + bench_init!{ + owner: sub; collection: collection(owner); + owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub; + }; + let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?; + >::set_allowance(&collection, &sender, &spender, item, 100)?; + }: {>::transfer_from(&collection, &spender, &sender, &receiver, item, 100)?} + // Source account is destroyed + transfer_from_removing { + bench_init!{ + owner: sub; collection: collection(owner); + owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub; + }; + let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?; + >::set_allowance(&collection, &sender, &spender, item, 200)?; + }: {>::transfer_from(&collection, &spender, &sender, &receiver, item, 200)?} + // Source account destroyed, target created + transfer_from_creating_removing { + bench_init!{ + owner: sub; collection: collection(owner); + owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub; + }; + let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?; + >::set_allowance(&collection, &sender, &spender, item, 200)?; + }: {>::transfer_from(&collection, &spender, &sender, &receiver, item, 200)?} + + set_variable_metadata { + let b in 0..CUSTOM_DATA_LIMIT; + bench_init!{ + owner: sub; collection: collection(owner); + sender: cross_from_sub(owner); + }; + let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?; + let data = create_data(b as usize); + }: {>::set_variable_metadata(&collection, &sender, item, data)?} +} --- a/pallets/refungible/src/common.rs +++ b/pallets/refungible/src/common.rs @@ -14,6 +14,15 @@ RefungibleHandle, SelfWeightOf, TokenData, weights::WeightInfo, TokensMinted, }; +macro_rules! max_weight_of { + ($($method:ident ($($args:tt)*)),*) => { + 0 + $( + .max(>::$method($($args)*)) + )* + }; +} + pub struct CommonWeights(PhantomData); impl CommonWeightInfo for CommonWeights { fn create_item() -> Weight { @@ -25,11 +34,16 @@ } fn burn_item() -> Weight { - >::burn_item() + max_weight_of!(burn_item_partial(), burn_item_fully()) } fn transfer() -> Weight { - >::transfer() + max_weight_of!( + transfer_normal(), + transfer_creating(), + transfer_removing(), + transfer_creating_removing() + ) } fn approve() -> Weight { @@ -37,11 +51,16 @@ } fn transfer_from() -> Weight { - >::transfer_from() + max_weight_of!( + transfer_from_normal(), + transfer_from_creating(), + transfer_from_removing(), + transfer_from_creating_removing() + ) } - fn set_variable_metadata(_bytes: u32) -> Weight { - >::set_variable_metadata() + fn set_variable_metadata(bytes: u32) -> Weight { + >::set_variable_metadata(bytes) } } @@ -72,7 +91,7 @@ ) -> DispatchResultWithPostInfo { with_weight( >::create_item(self, &sender, map_create_data(data, &to)?), - >::create_item(), + >::create_item(), ) } @@ -90,7 +109,7 @@ let amount = data.len(); with_weight( >::create_multiple_items(self, &sender, data), - >::create_multiple_items(amount as u32), + >::create_multiple_items(amount as u32), ) } @@ -102,7 +121,7 @@ ) -> DispatchResultWithPostInfo { with_weight( >::burn(self, &sender, token, amount), - >::burn_item(), + >::burn_item(), ) } @@ -115,7 +134,7 @@ ) -> DispatchResultWithPostInfo { with_weight( >::transfer(&self, &from, &to, token, amount), - >::transfer(), + >::transfer(), ) } @@ -128,7 +147,7 @@ ) -> DispatchResultWithPostInfo { with_weight( >::set_allowance(&self, &sender, &spender, token, amount), - >::approve(), + >::approve(), ) } @@ -142,7 +161,7 @@ ) -> DispatchResultWithPostInfo { with_weight( >::transfer_from(&self, &sender, &from, &to, token, amount), - >::approve(), + >::approve(), ) } @@ -152,9 +171,10 @@ token: TokenId, data: Vec, ) -> DispatchResultWithPostInfo { + let len = data.len(); with_weight( >::set_variable_metadata(&self, &sender, token, data), - >::set_variable_metadata(), + >::set_variable_metadata(len as u32), ) } --- a/pallets/refungible/src/lib.rs +++ b/pallets/refungible/src/lib.rs @@ -14,6 +14,7 @@ use codec::{Encode, Decode}; pub use pallet::*; +#[cfg(feature = "runtime-benchmarks")] pub mod benchmarking; pub mod common; pub mod erc; --- a/pallets/refungible/src/weights.rs +++ b/pallets/refungible/src/weights.rs @@ -1,3 +1,27 @@ +// Template adopted from https://github.com/paritytech/substrate/blob/master/.maintain/frame-weight-template.hbs + +//! Autogenerated weights for pallet_refungible +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-10-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 128 + +// Executed Command: +// target/release/nft +// benchmark +// --pallet +// pallet-refungible +// --wasm-execution +// compiled +// --extrinsic +// * +// --template +// .maintain/frame-weight-template.hbs +// --steps=50 +// --repeat=20 +// --output=./pallets/refungible/src/weights.rs + + #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] @@ -5,33 +29,273 @@ use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; use sp_std::marker::PhantomData; +/// Weight functions needed for pallet_refungible. pub trait WeightInfo { fn create_item() -> Weight; - fn create_multiple_items(b: u32) -> Weight; - fn burn_item() -> Weight; - fn transfer() -> Weight; + fn create_multiple_items(b: u32, ) -> Weight; + fn burn_item_partial() -> Weight; + fn burn_item_fully() -> Weight; + fn transfer_normal() -> Weight; + fn transfer_creating() -> Weight; + fn transfer_removing() -> Weight; + fn transfer_creating_removing() -> Weight; fn approve() -> Weight; - fn transfer_from() -> Weight; - fn set_variable_metadata() -> Weight; + fn transfer_from_normal() -> Weight; + fn transfer_from_creating() -> Weight; + fn transfer_from_removing() -> Weight; + fn transfer_from_creating_removing() -> Weight; + fn set_variable_metadata(b: u32, ) -> Weight; } +/// Weights for pallet_refungible using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { - fn create_item() -> Weight {0} - fn create_multiple_items(_b: u32) -> Weight {0} - fn burn_item() -> Weight {0} - fn transfer() -> Weight {0} - fn approve() -> Weight {0} - fn transfer_from() -> Weight {0} - fn set_variable_metadata() -> Weight {0} + // Storage: Refungible TokensMinted (r:1 w:1) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible Balance (r:0 w:1) + // Storage: Refungible TotalSupply (r:0 w:1) + // Storage: Refungible TokenData (r:0 w:1) + // Storage: Refungible Owned (r:0 w:1) + fn create_item() -> Weight { + (18_681_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(6 as Weight)) + } + // Storage: Refungible TokensMinted (r:1 w:1) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible Balance (r:0 w:4) + // Storage: Refungible TotalSupply (r:0 w:4) + // Storage: Refungible TokenData (r:0 w:4) + // Storage: Refungible Owned (r:0 w:4) + fn create_multiple_items(b: u32, ) -> Weight { + (13_869_000 as Weight) + // Standard Error: 28_000 + .saturating_add((5_611_000 as Weight).saturating_mul(b as Weight)) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(T::DbWeight::get().writes((4 as Weight).saturating_mul(b as Weight))) + } + // Storage: Refungible TotalSupply (r:1 w:1) + // Storage: Refungible Balance (r:1 w:1) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible Owned (r:0 w:1) + fn burn_item_partial() -> Weight { + (21_591_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + // Storage: Refungible TotalSupply (r:1 w:1) + // Storage: Refungible Balance (r:1 w:1) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible TokensBurnt (r:1 w:1) + // Storage: Refungible TokenData (r:0 w:1) + // Storage: Refungible Owned (r:0 w:1) + fn burn_item_fully() -> Weight { + (29_257_000 as Weight) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(6 as Weight)) + } + // Storage: Refungible Balance (r:2 w:2) + fn transfer_normal() -> Weight { + (17_733_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + // Storage: Refungible Balance (r:2 w:2) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible Owned (r:0 w:1) + fn transfer_creating() -> Weight { + (20_943_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + // Storage: Refungible Balance (r:2 w:2) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible Owned (r:0 w:1) + fn transfer_removing() -> Weight { + (22_406_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + // Storage: Refungible Balance (r:2 w:2) + // Storage: Refungible AccountBalance (r:2 w:2) + // Storage: Refungible Owned (r:0 w:2) + fn transfer_creating_removing() -> Weight { + (24_762_000 as Weight) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(6 as Weight)) + } + // Storage: Refungible Balance (r:1 w:0) + // Storage: Refungible Allowance (r:0 w:1) + fn approve() -> Weight { + (14_109_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: Refungible Allowance (r:1 w:1) + // Storage: Refungible Balance (r:2 w:2) + fn transfer_from_normal() -> Weight { + (25_348_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) + } + // Storage: Refungible Allowance (r:1 w:1) + // Storage: Refungible Balance (r:2 w:2) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible Owned (r:0 w:1) + fn transfer_from_creating() -> Weight { + (28_647_000 as Weight) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(5 as Weight)) + } + // Storage: Refungible Allowance (r:1 w:1) + // Storage: Refungible Balance (r:2 w:2) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible Owned (r:0 w:1) + fn transfer_from_removing() -> Weight { + (30_472_000 as Weight) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(5 as Weight)) + } + // Storage: Refungible Allowance (r:1 w:1) + // Storage: Refungible Balance (r:2 w:2) + // Storage: Refungible AccountBalance (r:2 w:2) + // Storage: Refungible Owned (r:0 w:2) + fn transfer_from_creating_removing() -> Weight { + (32_362_000 as Weight) + .saturating_add(T::DbWeight::get().reads(5 as Weight)) + .saturating_add(T::DbWeight::get().writes(7 as Weight)) + } + // Storage: Refungible TokenData (r:1 w:1) + fn set_variable_metadata(_b: u32, ) -> Weight { + (6_801_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } } +// For backwards compatibility and tests impl WeightInfo for () { - fn create_item() -> Weight {0} - fn create_multiple_items(_b: u32) -> Weight {0} - fn burn_item() -> Weight {0} - fn transfer() -> Weight {0} - fn approve() -> Weight {0} - fn transfer_from() -> Weight {0} - fn set_variable_metadata() -> Weight {0} + // Storage: Refungible TokensMinted (r:1 w:1) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible Balance (r:0 w:1) + // Storage: Refungible TotalSupply (r:0 w:1) + // Storage: Refungible TokenData (r:0 w:1) + // Storage: Refungible Owned (r:0 w:1) + fn create_item() -> Weight { + (18_681_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(6 as Weight)) + } + // Storage: Refungible TokensMinted (r:1 w:1) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible Balance (r:0 w:4) + // Storage: Refungible TotalSupply (r:0 w:4) + // Storage: Refungible TokenData (r:0 w:4) + // Storage: Refungible Owned (r:0 w:4) + fn create_multiple_items(b: u32, ) -> Weight { + (13_869_000 as Weight) + // Standard Error: 28_000 + .saturating_add((5_611_000 as Weight).saturating_mul(b as Weight)) + .saturating_add(RocksDbWeight::get().reads(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes((4 as Weight).saturating_mul(b as Weight))) + } + // Storage: Refungible TotalSupply (r:1 w:1) + // Storage: Refungible Balance (r:1 w:1) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible Owned (r:0 w:1) + fn burn_item_partial() -> Weight { + (21_591_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(4 as Weight)) + } + // Storage: Refungible TotalSupply (r:1 w:1) + // Storage: Refungible Balance (r:1 w:1) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible TokensBurnt (r:1 w:1) + // Storage: Refungible TokenData (r:0 w:1) + // Storage: Refungible Owned (r:0 w:1) + fn burn_item_fully() -> Weight { + (29_257_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(4 as Weight)) + .saturating_add(RocksDbWeight::get().writes(6 as Weight)) + } + // Storage: Refungible Balance (r:2 w:2) + fn transfer_normal() -> Weight { + (17_733_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(2 as Weight)) + } + // Storage: Refungible Balance (r:2 w:2) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible Owned (r:0 w:1) + fn transfer_creating() -> Weight { + (20_943_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(4 as Weight)) + } + // Storage: Refungible Balance (r:2 w:2) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible Owned (r:0 w:1) + fn transfer_removing() -> Weight { + (22_406_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(4 as Weight)) + } + // Storage: Refungible Balance (r:2 w:2) + // Storage: Refungible AccountBalance (r:2 w:2) + // Storage: Refungible Owned (r:0 w:2) + fn transfer_creating_removing() -> Weight { + (24_762_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(4 as Weight)) + .saturating_add(RocksDbWeight::get().writes(6 as Weight)) + } + // Storage: Refungible Balance (r:1 w:0) + // Storage: Refungible Allowance (r:0 w:1) + fn approve() -> Weight { + (14_109_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + // Storage: Refungible Allowance (r:1 w:1) + // Storage: Refungible Balance (r:2 w:2) + fn transfer_from_normal() -> Weight { + (25_348_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(3 as Weight)) + } + // Storage: Refungible Allowance (r:1 w:1) + // Storage: Refungible Balance (r:2 w:2) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible Owned (r:0 w:1) + fn transfer_from_creating() -> Weight { + (28_647_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(4 as Weight)) + .saturating_add(RocksDbWeight::get().writes(5 as Weight)) + } + // Storage: Refungible Allowance (r:1 w:1) + // Storage: Refungible Balance (r:2 w:2) + // Storage: Refungible AccountBalance (r:1 w:1) + // Storage: Refungible Owned (r:0 w:1) + fn transfer_from_removing() -> Weight { + (30_472_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(4 as Weight)) + .saturating_add(RocksDbWeight::get().writes(5 as Weight)) + } + // Storage: Refungible Allowance (r:1 w:1) + // Storage: Refungible Balance (r:2 w:2) + // Storage: Refungible AccountBalance (r:2 w:2) + // Storage: Refungible Owned (r:0 w:2) + fn transfer_from_creating_removing() -> Weight { + (32_362_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(5 as Weight)) + .saturating_add(RocksDbWeight::get().writes(7 as Weight)) + } + // Storage: Refungible TokenData (r:1 w:1) + fn set_variable_metadata(_b: u32, ) -> Weight { + (6_801_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } } -- gitstuff