difftreelog
feat(refungible) benchmarking
in: master
5 files changed
pallets/refungible/Cargo.tomldiffbeforeafterboth--- 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 = []
pallets/refungible/src/benchmarking.rsdiffbeforeafterboth--- 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<T: Config>(
+ users: impl IntoIterator<Item = (T::CrossAccountId, u128)>,
+) -> CreateItemData<T> {
+ 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<T: Config>(
+ collection: &RefungibleHandle<T>,
+ sender: &T::CrossAccountId,
+ users: impl IntoIterator<Item = (T::CrossAccountId, u128)>,
+) -> Result<TokenId, DispatchError> {
+ <Pallet<T>>::create_item(&collection, sender, create_max_item_data(users))?;
+ Ok(TokenId(<TokensMinted<T>>::get(&collection.id)))
+}
+
+fn create_collection<T: Config>(owner: T::AccountId) -> Result<RefungibleHandle<T>, DispatchError> {
+ create_collection_raw(
+ owner,
+ CollectionMode::NFT,
+ <Pallet<T>>::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();
+ }: {<Pallet<T>>::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)])?;
+ }: {<Pallet<T>>::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)])?;
+ }: {<Pallet<T>>::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)])?;
+ }: {<Pallet<T>>::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)])?;
+ }: {<Pallet<T>>::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)])?;
+ }: {<Pallet<T>>::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)])?;
+ }: {<Pallet<T>>::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)])?;
+ }: {<Pallet<T>>::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)])?;
+ <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;
+ }: {<Pallet<T>>::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)])?;
+ <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;
+ }: {<Pallet<T>>::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)])?;
+ <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;
+ }: {<Pallet<T>>::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)])?;
+ <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;
+ }: {<Pallet<T>>::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);
+ }: {<Pallet<T>>::set_variable_metadata(&collection, &sender, item, data)?}
+}
pallets/refungible/src/common.rsdiffbeforeafterboth1use core::marker::PhantomData;23use sp_std::collections::btree_map::BTreeMap;4use frame_support::{dispatch::DispatchResultWithPostInfo, fail, weights::Weight};5use nft_data_structs::TokenId;6use pallet_common::{7 CommonCollectionOperations, CommonWeightInfo, account::CrossAccountId, with_weight,8};9use sp_runtime::DispatchError;10use sp_std::vec::Vec;1112use crate::{13 AccountBalance, Allowance, Balance, Config, CreateItemData, Error, Owned, Pallet,14 RefungibleHandle, SelfWeightOf, TokenData, weights::WeightInfo, TokensMinted,15};1617pub struct CommonWeights<T: Config>(PhantomData<T>);18impl<T: Config> CommonWeightInfo for CommonWeights<T> {19 fn create_item() -> Weight {20 <SelfWeightOf<T>>::create_item()21 }2223 fn create_multiple_items(amount: u32) -> Weight {24 <SelfWeightOf<T>>::create_multiple_items(amount)25 }2627 fn burn_item() -> Weight {28 <SelfWeightOf<T>>::burn_item()29 }3031 fn transfer() -> Weight {32 <SelfWeightOf<T>>::transfer()33 }3435 fn approve() -> Weight {36 <SelfWeightOf<T>>::approve()37 }3839 fn transfer_from() -> Weight {40 <SelfWeightOf<T>>::transfer_from()41 }4243 fn set_variable_metadata(_bytes: u32) -> Weight {44 <SelfWeightOf<T>>::set_variable_metadata()45 }46}4748fn map_create_data<T: Config>(49 data: nft_data_structs::CreateItemData,50 to: &T::CrossAccountId,51) -> Result<CreateItemData<T>, DispatchError> {52 match data {53 nft_data_structs::CreateItemData::ReFungible(data) => Ok(CreateItemData {54 const_data: data.const_data,55 variable_data: data.variable_data,56 users: {57 let mut out = BTreeMap::new();58 out.insert(to.clone(), data.pieces);59 out60 },61 }),62 _ => fail!(<Error<T>>::NotRefungibleDataUsedToMintFungibleCollectionToken),63 }64}6566impl<T: Config> CommonCollectionOperations<T> for RefungibleHandle<T> {67 fn create_item(68 &self,69 sender: T::CrossAccountId,70 to: T::CrossAccountId,71 data: nft_data_structs::CreateItemData,72 ) -> DispatchResultWithPostInfo {73 with_weight(74 <Pallet<T>>::create_item(self, &sender, map_create_data(data, &to)?),75 <SelfWeightOf<T>>::create_item(),76 )77 }7879 fn create_multiple_items(80 &self,81 sender: T::CrossAccountId,82 to: T::CrossAccountId,83 data: Vec<nft_data_structs::CreateItemData>,84 ) -> DispatchResultWithPostInfo {85 let data = data86 .into_iter()87 .map(|d| map_create_data::<T>(d, &to))88 .collect::<Result<Vec<_>, DispatchError>>()?;8990 let amount = data.len();91 with_weight(92 <Pallet<T>>::create_multiple_items(self, &sender, data),93 <SelfWeightOf<T>>::create_multiple_items(amount as u32),94 )95 }9697 fn burn_item(98 &self,99 sender: T::CrossAccountId,100 token: TokenId,101 amount: u128,102 ) -> DispatchResultWithPostInfo {103 with_weight(104 <Pallet<T>>::burn(self, &sender, token, amount),105 <SelfWeightOf<T>>::burn_item(),106 )107 }108109 fn transfer(110 &self,111 from: T::CrossAccountId,112 to: T::CrossAccountId,113 token: TokenId,114 amount: u128,115 ) -> DispatchResultWithPostInfo {116 with_weight(117 <Pallet<T>>::transfer(&self, &from, &to, token, amount),118 <SelfWeightOf<T>>::transfer(),119 )120 }121122 fn approve(123 &self,124 sender: T::CrossAccountId,125 spender: T::CrossAccountId,126 token: TokenId,127 amount: u128,128 ) -> DispatchResultWithPostInfo {129 with_weight(130 <Pallet<T>>::set_allowance(&self, &sender, &spender, token, amount),131 <SelfWeightOf<T>>::approve(),132 )133 }134135 fn transfer_from(136 &self,137 sender: T::CrossAccountId,138 from: T::CrossAccountId,139 to: T::CrossAccountId,140 token: TokenId,141 amount: u128,142 ) -> DispatchResultWithPostInfo {143 with_weight(144 <Pallet<T>>::transfer_from(&self, &sender, &from, &to, token, amount),145 <SelfWeightOf<T>>::approve(),146 )147 }148149 fn set_variable_metadata(150 &self,151 sender: T::CrossAccountId,152 token: TokenId,153 data: Vec<u8>,154 ) -> DispatchResultWithPostInfo {155 with_weight(156 <Pallet<T>>::set_variable_metadata(&self, &sender, token, data),157 <SelfWeightOf<T>>::set_variable_metadata(),158 )159 }160161 fn account_tokens(&self, account: T::CrossAccountId) -> Vec<TokenId> {162 <Owned<T>>::iter_prefix((self.id, account.as_sub()))163 .map(|(id, _)| id)164 .collect()165 }166167 fn token_exists(&self, token: TokenId) -> bool {168 <Pallet<T>>::token_exists(self, token)169 }170171 fn last_token_id(&self) -> TokenId {172 TokenId(<TokensMinted<T>>::get(self.id))173 }174175 fn token_owner(&self, _token: TokenId) -> T::CrossAccountId {176 T::CrossAccountId::default()177 }178 fn const_metadata(&self, token: TokenId) -> Vec<u8> {179 <TokenData<T>>::get((self.id, token)).const_data180 }181 fn variable_metadata(&self, token: TokenId) -> Vec<u8> {182 <TokenData<T>>::get((self.id, token)).variable_data183 }184185 fn collection_tokens(&self) -> u32 {186 <Pallet<T>>::total_supply(self)187 }188189 fn account_balance(&self, account: T::CrossAccountId) -> u32 {190 <AccountBalance<T>>::get((self.id, account.as_sub()))191 }192193 fn balance(&self, account: T::CrossAccountId, token: TokenId) -> u128 {194 <Balance<T>>::get((self.id, token, account.as_sub()))195 }196197 fn allowance(198 &self,199 sender: T::CrossAccountId,200 spender: T::CrossAccountId,201 token: TokenId,202 ) -> u128 {203 <Allowance<T>>::get((self.id, token, sender.as_sub(), spender))204 }205}1use core::marker::PhantomData;23use sp_std::collections::btree_map::BTreeMap;4use frame_support::{dispatch::DispatchResultWithPostInfo, fail, weights::Weight};5use nft_data_structs::TokenId;6use pallet_common::{7 CommonCollectionOperations, CommonWeightInfo, account::CrossAccountId, with_weight,8};9use sp_runtime::DispatchError;10use sp_std::vec::Vec;1112use crate::{13 AccountBalance, Allowance, Balance, Config, CreateItemData, Error, Owned, Pallet,14 RefungibleHandle, SelfWeightOf, TokenData, weights::WeightInfo, TokensMinted,15};1617macro_rules! max_weight_of {18 ($($method:ident ($($args:tt)*)),*) => {19 020 $(21 .max(<SelfWeightOf<T>>::$method($($args)*))22 )*23 };24}2526pub struct CommonWeights<T: Config>(PhantomData<T>);27impl<T: Config> CommonWeightInfo for CommonWeights<T> {28 fn create_item() -> Weight {29 <SelfWeightOf<T>>::create_item()30 }3132 fn create_multiple_items(amount: u32) -> Weight {33 <SelfWeightOf<T>>::create_multiple_items(amount)34 }3536 fn burn_item() -> Weight {37 max_weight_of!(burn_item_partial(), burn_item_fully())38 }3940 fn transfer() -> Weight {41 max_weight_of!(42 transfer_normal(),43 transfer_creating(),44 transfer_removing(),45 transfer_creating_removing()46 )47 }4849 fn approve() -> Weight {50 <SelfWeightOf<T>>::approve()51 }5253 fn transfer_from() -> Weight {54 max_weight_of!(55 transfer_from_normal(),56 transfer_from_creating(),57 transfer_from_removing(),58 transfer_from_creating_removing()59 )60 }6162 fn set_variable_metadata(bytes: u32) -> Weight {63 <SelfWeightOf<T>>::set_variable_metadata(bytes)64 }65}6667fn map_create_data<T: Config>(68 data: nft_data_structs::CreateItemData,69 to: &T::CrossAccountId,70) -> Result<CreateItemData<T>, DispatchError> {71 match data {72 nft_data_structs::CreateItemData::ReFungible(data) => Ok(CreateItemData {73 const_data: data.const_data,74 variable_data: data.variable_data,75 users: {76 let mut out = BTreeMap::new();77 out.insert(to.clone(), data.pieces);78 out79 },80 }),81 _ => fail!(<Error<T>>::NotRefungibleDataUsedToMintFungibleCollectionToken),82 }83}8485impl<T: Config> CommonCollectionOperations<T> for RefungibleHandle<T> {86 fn create_item(87 &self,88 sender: T::CrossAccountId,89 to: T::CrossAccountId,90 data: nft_data_structs::CreateItemData,91 ) -> DispatchResultWithPostInfo {92 with_weight(93 <Pallet<T>>::create_item(self, &sender, map_create_data(data, &to)?),94 <CommonWeights<T>>::create_item(),95 )96 }9798 fn create_multiple_items(99 &self,100 sender: T::CrossAccountId,101 to: T::CrossAccountId,102 data: Vec<nft_data_structs::CreateItemData>,103 ) -> DispatchResultWithPostInfo {104 let data = data105 .into_iter()106 .map(|d| map_create_data::<T>(d, &to))107 .collect::<Result<Vec<_>, DispatchError>>()?;108109 let amount = data.len();110 with_weight(111 <Pallet<T>>::create_multiple_items(self, &sender, data),112 <CommonWeights<T>>::create_multiple_items(amount as u32),113 )114 }115116 fn burn_item(117 &self,118 sender: T::CrossAccountId,119 token: TokenId,120 amount: u128,121 ) -> DispatchResultWithPostInfo {122 with_weight(123 <Pallet<T>>::burn(self, &sender, token, amount),124 <CommonWeights<T>>::burn_item(),125 )126 }127128 fn transfer(129 &self,130 from: T::CrossAccountId,131 to: T::CrossAccountId,132 token: TokenId,133 amount: u128,134 ) -> DispatchResultWithPostInfo {135 with_weight(136 <Pallet<T>>::transfer(&self, &from, &to, token, amount),137 <CommonWeights<T>>::transfer(),138 )139 }140141 fn approve(142 &self,143 sender: T::CrossAccountId,144 spender: T::CrossAccountId,145 token: TokenId,146 amount: u128,147 ) -> DispatchResultWithPostInfo {148 with_weight(149 <Pallet<T>>::set_allowance(&self, &sender, &spender, token, amount),150 <CommonWeights<T>>::approve(),151 )152 }153154 fn transfer_from(155 &self,156 sender: T::CrossAccountId,157 from: T::CrossAccountId,158 to: T::CrossAccountId,159 token: TokenId,160 amount: u128,161 ) -> DispatchResultWithPostInfo {162 with_weight(163 <Pallet<T>>::transfer_from(&self, &sender, &from, &to, token, amount),164 <CommonWeights<T>>::approve(),165 )166 }167168 fn set_variable_metadata(169 &self,170 sender: T::CrossAccountId,171 token: TokenId,172 data: Vec<u8>,173 ) -> DispatchResultWithPostInfo {174 let len = data.len();175 with_weight(176 <Pallet<T>>::set_variable_metadata(&self, &sender, token, data),177 <CommonWeights<T>>::set_variable_metadata(len as u32),178 )179 }180181 fn account_tokens(&self, account: T::CrossAccountId) -> Vec<TokenId> {182 <Owned<T>>::iter_prefix((self.id, account.as_sub()))183 .map(|(id, _)| id)184 .collect()185 }186187 fn token_exists(&self, token: TokenId) -> bool {188 <Pallet<T>>::token_exists(self, token)189 }190191 fn last_token_id(&self) -> TokenId {192 TokenId(<TokensMinted<T>>::get(self.id))193 }194195 fn token_owner(&self, _token: TokenId) -> T::CrossAccountId {196 T::CrossAccountId::default()197 }198 fn const_metadata(&self, token: TokenId) -> Vec<u8> {199 <TokenData<T>>::get((self.id, token)).const_data200 }201 fn variable_metadata(&self, token: TokenId) -> Vec<u8> {202 <TokenData<T>>::get((self.id, token)).variable_data203 }204205 fn collection_tokens(&self) -> u32 {206 <Pallet<T>>::total_supply(self)207 }208209 fn account_balance(&self, account: T::CrossAccountId) -> u32 {210 <AccountBalance<T>>::get((self.id, account.as_sub()))211 }212213 fn balance(&self, account: T::CrossAccountId, token: TokenId) -> u128 {214 <Balance<T>>::get((self.id, token, account.as_sub()))215 }216217 fn allowance(218 &self,219 sender: T::CrossAccountId,220 spender: T::CrossAccountId,221 token: TokenId,222 ) -> u128 {223 <Allowance<T>>::get((self.id, token, sender.as_sub(), spender))224 }225}pallets/refungible/src/lib.rsdiffbeforeafterboth--- 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;
pallets/refungible/src/weights.rsdiffbeforeafterboth--- 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<T>(PhantomData<T>);
impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
- 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))
+ }
}