From a071ba58f5a26132e75da500473e4452ff6bc975 Mon Sep 17 00:00:00 2001 From: notlesh Date: Fri, 2 Sep 2022 19:55:08 +0000 Subject: [PATCH 1/5] Impl GenesisConfig with NextFeeMultplier support --- frame/transaction-payment/src/lib.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/frame/transaction-payment/src/lib.rs b/frame/transaction-payment/src/lib.rs index 8fe58dbf03d2b..3c0dc59532ec1 100644 --- a/frame/transaction-payment/src/lib.rs +++ b/frame/transaction-payment/src/lib.rs @@ -312,12 +312,16 @@ pub mod pallet { pub(super) type StorageVersion = StorageValue<_, Releases, ValueQuery>; #[pallet::genesis_config] - pub struct GenesisConfig; + pub struct GenesisConfig { + multiplier: Multiplier, + } #[cfg(feature = "std")] impl Default for GenesisConfig { fn default() -> Self { - Self + Self { + multiplier: Multiplier::saturating_from_integer(1), + } } } @@ -325,6 +329,7 @@ pub mod pallet { impl GenesisBuild for GenesisConfig { fn build(&self) { StorageVersion::::put(Releases::V2); + NextFeeMultiplier::::put(self.multiplier); } } From 5ed0add33d8e97bdfdc15559309e0cfde332e1ed Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Sun, 4 Sep 2022 14:45:51 +0100 Subject: [PATCH 2/5] Update lib.rs --- frame/transaction-payment/src/lib.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/frame/transaction-payment/src/lib.rs b/frame/transaction-payment/src/lib.rs index 3c0dc59532ec1..51f0afceb3cc6 100644 --- a/frame/transaction-payment/src/lib.rs +++ b/frame/transaction-payment/src/lib.rs @@ -319,9 +319,7 @@ pub mod pallet { #[cfg(feature = "std")] impl Default for GenesisConfig { fn default() -> Self { - Self { - multiplier: Multiplier::saturating_from_integer(1), - } + Self { multiplier: Multiplier::saturating_from_integer(1) } } } From 20f034e3f90fad466a848d23b8ecc5b2c02cbd1d Mon Sep 17 00:00:00 2001 From: notlesh Date: Sun, 4 Sep 2022 16:28:46 +0000 Subject: [PATCH 3/5] Use documented const --- frame/transaction-payment/src/lib.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/frame/transaction-payment/src/lib.rs b/frame/transaction-payment/src/lib.rs index 51f0afceb3cc6..f211e23f166ce 100644 --- a/frame/transaction-payment/src/lib.rs +++ b/frame/transaction-payment/src/lib.rs @@ -241,6 +241,10 @@ impl Default for Releases { } } +/// Default value for NextFeeMultiplier. This is used in genesis and is also used in +/// NextFeeMultiplierOnEmpty() to provide a value when none exists in storage. +const MULTIPLIER_DEFAULT_VALUE: Multiplier = Multiplier::from_u32(1); + #[frame_support::pallet] pub mod pallet { use super::*; @@ -300,7 +304,7 @@ pub mod pallet { #[pallet::type_value] pub fn NextFeeMultiplierOnEmpty() -> Multiplier { - Multiplier::saturating_from_integer(1) + MULTIPLIER_DEFAULT_VALUE } #[pallet::storage] @@ -319,7 +323,7 @@ pub mod pallet { #[cfg(feature = "std")] impl Default for GenesisConfig { fn default() -> Self { - Self { multiplier: Multiplier::saturating_from_integer(1) } + Self { multiplier: MULTIPLIER_DEFAULT_VALUE } } } From 9fc448c3af8af6e2803b33763ef86811c8d3ff34 Mon Sep 17 00:00:00 2001 From: notlesh Date: Sun, 4 Sep 2022 16:29:23 +0000 Subject: [PATCH 4/5] Unit test multiplier genesis --- frame/transaction-payment/src/lib.rs | 45 ++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/frame/transaction-payment/src/lib.rs b/frame/transaction-payment/src/lib.rs index f211e23f166ce..cbfaa363d6a10 100644 --- a/frame/transaction-payment/src/lib.rs +++ b/frame/transaction-payment/src/lib.rs @@ -317,7 +317,7 @@ pub mod pallet { #[pallet::genesis_config] pub struct GenesisConfig { - multiplier: Multiplier, + pub multiplier: Multiplier, } #[cfg(feature = "std")] @@ -823,7 +823,7 @@ mod tests { use frame_support::{ assert_noop, assert_ok, parameter_types, - traits::{ConstU32, ConstU64, Currency, Imbalance, OnUnbalanced}, + traits::{ConstU32, ConstU64, Currency, GenesisBuild, Imbalance, OnUnbalanced}, weights::{ DispatchClass, DispatchInfo, GetDispatchInfo, PostDispatchInfo, Weight, WeightToFee as WeightToFeeT, @@ -965,11 +965,13 @@ mod tests { base_weight: Weight, byte_fee: u64, weight_to_fee: u64, + initial_multiplier: Option, } impl Default for ExtBuilder { fn default() -> Self { - Self { balance_factor: 1, base_weight: Weight::zero(), byte_fee: 1, weight_to_fee: 1 } + Self { balance_factor: 1, base_weight: Weight::zero(), byte_fee: 1, weight_to_fee: 1, + initial_multiplier: None } } } @@ -990,6 +992,10 @@ mod tests { self.balance_factor = factor; self } + pub fn with_initial_multiplier(mut self, multiplier: Multiplier) -> Self { + self.initial_multiplier = Some(multiplier); + self + } fn set_constants(&self) { EXTRINSIC_BASE_WEIGHT.with(|v| *v.borrow_mut() = self.base_weight); TRANSACTION_BYTE_FEE.with(|v| *v.borrow_mut() = self.byte_fee); @@ -1014,6 +1020,14 @@ mod tests { } .assimilate_storage(&mut t) .unwrap(); + + if let Some(multiplier) = self.initial_multiplier { + let genesis = pallet::GenesisConfig { + multiplier + }; + GenesisBuild::::assimilate_storage(&genesis, &mut t).unwrap(); + } + t.into() } } @@ -1727,4 +1741,29 @@ mod tests { assert_eq!(refund_based_fee, actual_fee); }); } + + #[test] + fn genesis_config_works() { + ExtBuilder::default() + .with_initial_multiplier(Multiplier::from_u32(100)) + .build() + .execute_with(|| { + assert_eq!( + >::get(), + Multiplier::saturating_from_integer(100) + ); + }); + } + + #[test] + fn genesis_default_works() { + ExtBuilder::default() + .build() + .execute_with(|| { + assert_eq!( + >::get(), + Multiplier::saturating_from_integer(1) + ); + }); + } } From 394ab1f7fdf4dd5d62d78f6e8d5b198892f3b83e Mon Sep 17 00:00:00 2001 From: notlesh Date: Sun, 4 Sep 2022 16:30:28 +0000 Subject: [PATCH 5/5] fmt --- frame/transaction-payment/src/lib.rs | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/frame/transaction-payment/src/lib.rs b/frame/transaction-payment/src/lib.rs index cbfaa363d6a10..21d516cda1aa6 100644 --- a/frame/transaction-payment/src/lib.rs +++ b/frame/transaction-payment/src/lib.rs @@ -970,8 +970,13 @@ mod tests { impl Default for ExtBuilder { fn default() -> Self { - Self { balance_factor: 1, base_weight: Weight::zero(), byte_fee: 1, weight_to_fee: 1, - initial_multiplier: None } + Self { + balance_factor: 1, + base_weight: Weight::zero(), + byte_fee: 1, + weight_to_fee: 1, + initial_multiplier: None, + } } } @@ -1022,9 +1027,7 @@ mod tests { .unwrap(); if let Some(multiplier) = self.initial_multiplier { - let genesis = pallet::GenesisConfig { - multiplier - }; + let genesis = pallet::GenesisConfig { multiplier }; GenesisBuild::::assimilate_storage(&genesis, &mut t).unwrap(); } @@ -1757,13 +1760,8 @@ mod tests { #[test] fn genesis_default_works() { - ExtBuilder::default() - .build() - .execute_with(|| { - assert_eq!( - >::get(), - Multiplier::saturating_from_integer(1) - ); - }); + ExtBuilder::default().build().execute_with(|| { + assert_eq!(>::get(), Multiplier::saturating_from_integer(1)); + }); } }