Fix tx-payment integrity-test (#6633)

* Fix tx-payment integrity-test

* Better error message.

* Apply suggestions from code review

Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>

* Fix line width

* Apply suggestions from code review

Co-authored-by: Alexander Popiak <alexander.popiak@parity.io>

* Fix grumble

Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
Co-authored-by: Alexander Popiak <alexander.popiak@parity.io>
This commit is contained in:
Kian Paimani
2020-07-20 09:57:51 +02:00
committed by GitHub
parent 0d2a794d48
commit 42eb3f0695
3 changed files with 70 additions and 4 deletions
+2
View File
@@ -1302,6 +1302,7 @@ macro_rules! decl_module {
$(#[doc = $doc_attr:tt])*
fn integrity_test() { $( $impl:tt )* }
) => {
#[cfg(feature = "std")]
impl<$trait_instance: $trait_name$(<I>, $instance: $instantiable)?>
$crate::traits::IntegrityTest
for $module<$trait_instance$(, $instance)?> where $( $other_where_bounds )*
@@ -1317,6 +1318,7 @@ macro_rules! decl_module {
$module:ident<$trait_instance:ident: $trait_name:ident$(<I>, $instance:ident: $instantiable:path)?>;
{ $( $other_where_bounds:tt )* }
) => {
#[cfg(feature = "std")]
impl<$trait_instance: $trait_name$(<I>, $instance: $instantiable)?>
$crate::traits::IntegrityTest
for $module<$trait_instance$(, $instance)?> where $( $other_where_bounds )*
@@ -20,10 +20,10 @@ frame-support = { version = "2.0.0-rc4", default-features = false, path = "../su
frame-system = { version = "2.0.0-rc4", default-features = false, path = "../system" }
pallet-transaction-payment-rpc-runtime-api = { version = "2.0.0-rc4", default-features = false, path = "./rpc/runtime-api" }
smallvec = "1.4.1"
sp-io = { version = "2.0.0-rc4", path = "../../primitives/io", default-features = false }
sp-core = { version = "2.0.0-rc4", path = "../../primitives/core", default-features = false }
[dev-dependencies]
sp-io = { version = "2.0.0-rc4", path = "../../primitives/io" }
sp-core = { version = "2.0.0-rc4", path = "../../primitives/core" }
pallet-balances = { version = "2.0.0-rc4", path = "../balances" }
sp-storage = { version = "2.0.0-rc4", path = "../../primitives/storage" }
@@ -36,5 +36,7 @@ std = [
"sp-runtime/std",
"frame-support/std",
"frame-system/std",
"pallet-transaction-payment-rpc-runtime-api/std"
"pallet-transaction-payment-rpc-runtime-api/std",
"sp-io/std",
"sp-core/std",
]
+63 -1
View File
@@ -111,6 +111,42 @@ type NegativeImbalanceOf<T> =
/// https://w3f-research.readthedocs.io/en/latest/polkadot/Token%20Economics.html
pub struct TargetedFeeAdjustment<T, S, V, M>(sp_std::marker::PhantomData<(T, S, V, M)>);
/// Something that can convert the current multiplier to the next one.
pub trait MultiplierUpdate: Convert<Multiplier, Multiplier> {
/// Minimum multiplier
fn min() -> Multiplier;
/// Target block saturation level
fn target() -> Perquintill;
/// Variability factor
fn variability() -> Multiplier;
}
impl MultiplierUpdate for () {
fn min() -> Multiplier {
Default::default()
}
fn target() -> Perquintill {
Default::default()
}
fn variability() -> Multiplier {
Default::default()
}
}
impl<T, S, V, M> MultiplierUpdate for TargetedFeeAdjustment<T, S, V, M>
where T: frame_system::Trait, S: Get<Perquintill>, V: Get<Multiplier>, M: Get<Multiplier>,
{
fn min() -> Multiplier {
M::get()
}
fn target() -> Perquintill {
S::get()
}
fn variability() -> Multiplier {
V::get()
}
}
impl<T, S, V, M> Convert<Multiplier, Multiplier> for TargetedFeeAdjustment<T, S, V, M>
where T: frame_system::Trait, S: Get<Perquintill>, V: Get<Multiplier>, M: Get<Multiplier>,
{
@@ -192,7 +228,7 @@ pub trait Trait: frame_system::Trait {
type WeightToFee: WeightToFeePolynomial<Balance=BalanceOf<Self>>;
/// Update the multiplier of the next block, based on the previous block's weight.
type FeeMultiplierUpdate: Convert<Multiplier, Multiplier>;
type FeeMultiplierUpdate: MultiplierUpdate;
}
decl_storage! {
@@ -229,6 +265,32 @@ decl_module! {
<T as frame_system::Trait>::MaximumBlockWeight::get().try_into().unwrap()
).unwrap(),
);
// This is the minimum value of the multiplier. Make sure that if we collapse to this
// value, we can recover with a reasonable amount of traffic. For this test we assert
// that if we collapse to minimum, the trend will be positive with a weight value
// which is 1% more than the target.
let min_value = T::FeeMultiplierUpdate::min();
let mut target =
T::FeeMultiplierUpdate::target() *
(T::AvailableBlockRatio::get() * T::MaximumBlockWeight::get());
// add 1 percent;
let addition = target / 100;
if addition == 0 {
// this is most likely because in a test setup we set everything to ().
return;
}
target += addition;
sp_io::TestExternalities::new_empty().execute_with(|| {
<frame_system::Module<T>>::set_block_limits(target, 0);
let next = T::FeeMultiplierUpdate::convert(min_value);
assert!(next > min_value, "The minimum bound of the multiplier is too low. When \
block saturation is more than target by 1% and multiplier is minimal then \
the multiplier doesn't increase."
);
})
}
}
}