Skip to content

Commit 496259c

Browse files
committed
remove unnecessary storage item in length fee adjustment
1 parent cc341ff commit 496259c

File tree

5 files changed

+66
-23
lines changed

5 files changed

+66
-23
lines changed

sugondat/chain/pallets/length-fee-adjustment/src/lib.rs

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,25 @@ pub mod pallet {
5454
use frame_support::pallet_prelude::*;
5555
use frame_system::pallet_prelude::*;
5656
use pallet_transaction_payment::{Multiplier, OnChargeTransaction};
57-
use polkadot_primitives::v6::PersistedValidationData;
57+
use polkadot_primitives::v6::{BlockNumber as RelayChainBlockNumber, PersistedValidationData};
5858
use sp_runtime::{
5959
traits::{Get, One, Zero},
6060
FixedPointNumber, Perquintill, SaturatedConversion, Saturating,
6161
};
6262

63+
/// A provider for the last relay-chain block number, i.e. the relay-parent number of the
64+
/// previous block from _this_ chain.
65+
pub trait LastRelayBlockNumberProvider {
66+
/// Get the last relay chain block number.
67+
fn last_relay_block_number() -> RelayChainBlockNumber;
68+
}
69+
70+
impl<T: cumulus_pallet_parachain_system::Config> LastRelayBlockNumberProvider for T {
71+
fn last_relay_block_number() -> RelayChainBlockNumber {
72+
cumulus_pallet_parachain_system::Pallet::<T>::last_relay_block_number()
73+
}
74+
}
75+
6376
/// Configure the pallet by specifying the parameters and types on which it depends.
6477
#[pallet::config]
6578
pub trait Config: frame_system::Config + pallet_transaction_payment::Config {
@@ -92,6 +105,8 @@ pub mod pallet {
92105
/// This means that producing a block at most every n skipped blocks should be enforced to avoid falling into this error.
93106
#[pallet::constant]
94107
type SkippedBlocksNumberTerms: Get<u32>;
108+
109+
type LastRelayBlockNumberProvider: LastRelayBlockNumberProvider;
95110
}
96111

97112
#[pallet::pallet]
@@ -119,9 +134,6 @@ pub mod pallet {
119134
pub type TargetBlockSize<T: Config> =
120135
StorageValue<_, Perquintill, ValueQuery, TargetBlockSizeDefault>;
121136

122-
#[pallet::storage]
123-
pub type PrevRelayBlockNumber<T: Config> = StorageValue<_, u32, OptionQuery>;
124-
125137
#[pallet::hooks]
126138
impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {
127139
fn on_initialize(_: BlockNumberFor<T>) -> Weight {
@@ -217,16 +229,14 @@ pub mod pallet {
217229
impl<T: Config> OnSystemEvent for Pallet<T> {
218230
fn on_validation_data(data: &PersistedValidationData) {
219231
let relay_block_number = data.relay_parent_number;
232+
let prev_relay_block_number =
233+
T::LastRelayBlockNumberProvider::last_relay_block_number();
220234

221-
let prev_relay_block_number = PrevRelayBlockNumber::<T>::get();
222-
PrevRelayBlockNumber::<T>::put(relay_block_number);
223-
224-
// if nothing was already present then this is the first block to
225-
// be executed with the fee adjustment so nothing should be done
226-
let prev_relay_block_number = match prev_relay_block_number {
227-
Some(prev) => prev,
228-
None => return,
229-
};
235+
// a value of zero here implies this is the first block of the parachain. no need
236+
// to do a massive fee update.
237+
if prev_relay_block_number == RelayChainBlockNumber::zero() {
238+
return;
239+
}
230240

231241
// It should never be negative because the relay_block_number is surely
232242
// greater than the para_block_number.

sugondat/chain/pallets/length-fee-adjustment/src/mock.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ use sp_runtime::{
1111
FixedPointNumber, SaturatedConversion,
1212
};
1313

14+
use pallet_sugondat_length_fee_adjustment::LastRelayBlockNumberProvider;
15+
use polkadot_primitives::v6::BlockNumber as RelayChainBlockNumber;
16+
1417
type Block = frame_system::mocking::MockBlock<Test>;
1518
type Balance = u64;
1619

@@ -87,6 +90,19 @@ parameter_types! {
8790

8891
pub static WeightToFee: u64 = 1;
8992
pub static OperationalFeeMultiplier: u8 = 5;
93+
pub static LastRelayBlockNumber: RelayChainBlockNumber = 0;
94+
}
95+
96+
pub struct MockLastRelayBlockNumberProvider;
97+
98+
impl LastRelayBlockNumberProvider for MockLastRelayBlockNumberProvider {
99+
fn last_relay_block_number() -> RelayChainBlockNumber {
100+
LastRelayBlockNumber::get()
101+
}
102+
}
103+
104+
pub fn set_last_relay_block_number(n: RelayChainBlockNumber) {
105+
LastRelayBlockNumber::mutate(|x| *x = n);
90106
}
91107

92108
impl WeightToFeeT for WeightToFee {
@@ -114,4 +130,5 @@ impl pallet_sugondat_length_fee_adjustment::Config for Test {
114130
type MinimumMultiplierBlockSize = MinimumMultiplierBlockSize;
115131
type MaximumMultiplierBlockSize = MaximumMultiplierBlockSize;
116132
type SkippedBlocksNumberTerms = SkippedBlocksNumberTerms;
133+
type LastRelayBlockNumberProvider = MockLastRelayBlockNumberProvider;
117134
}

sugondat/chain/pallets/length-fee-adjustment/src/tests.rs

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::{
2-
mock::{LengthFeeAdjustment, Test},
2+
mock::{self, LengthFeeAdjustment, Test},
33
*,
44
};
55
use cumulus_pallet_parachain_system::OnSystemEvent;
@@ -66,6 +66,27 @@ fn test_default_target_block_size() {
6666
});
6767
}
6868

69+
#[test]
70+
fn test_no_update_when_prev_is_zero() {
71+
new_test_ext().execute_with(|| {
72+
// using Multiplier::one() only e^(-vnt) is tested
73+
NextLengthMultiplier::<Test>::put(Multiplier::one());
74+
mock::set_last_relay_block_number(0);
75+
76+
let relay_data = PersistedValidationData {
77+
parent_head: HeadData(vec![]),
78+
relay_parent_number: 100_000_000,
79+
relay_parent_storage_root: sp_core::H256::zero(),
80+
max_pov_size: 0,
81+
};
82+
83+
LengthFeeAdjustment::on_validation_data(&relay_data);
84+
85+
let mul = NextLengthMultiplier::<Test>::get();
86+
assert_eq!(mul, Multiplier::one());
87+
});
88+
}
89+
6990
#[test]
7091
fn test_skipped_block_multiplier_update() {
7192
// TODO: change max_skipped_blocks to 7200
@@ -76,14 +97,14 @@ fn test_skipped_block_multiplier_update() {
7697
for d in (0..max_skipped_blocks).step_by(max_skipped_blocks as usize / 1000) {
7798
// using Multiplier::one() only e^(-vnt) is tested
7899
NextLengthMultiplier::<Test>::put(Multiplier::one());
79-
PrevRelayBlockNumber::<Test>::put(0);
100+
mock::set_last_relay_block_number(1);
80101

81102
// TODO: update with `1 + d`
82103
// when updating to asynchronous backing
83104
// https://github.com/thrumdev/blobs/issues/166
84105
let relay_data = PersistedValidationData {
85106
parent_head: HeadData(vec![]),
86-
relay_parent_number: 2 + d * 2,
107+
relay_parent_number: 1 + 2 + d * 2, // extra 1 is because last rp was 1
87108
relay_parent_storage_root: sp_core::H256::zero(),
88109
max_pov_size: 0,
89110
};
@@ -119,13 +140,6 @@ fn test_skipped_block_no_prev_data() {
119140
};
120141

121142
LengthFeeAdjustment::on_validation_data(&relay_data);
122-
123-
// PrevRelayBlockNumber should be set to what passed in the argument
124-
// as relay_parent_number and NextLengthMultiplier should remain the same
125-
assert_eq!(
126-
PrevRelayBlockNumber::<Test>::get(),
127-
Some(relay_parent_number)
128-
);
129143
assert_eq!(NextLengthMultiplier::<Test>::get(), prev_multiplier);
130144
});
131145
}

sugondat/chain/runtimes/sugondat-kusama/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,7 @@ impl pallet_sugondat_length_fee_adjustment::Config for Runtime {
312312
type MaximumMultiplierBlockSize = MaximumMultiplierBlockSize;
313313
type MinimumMultiplierBlockSize = MinimumMultiplierBlockSize;
314314
type SkippedBlocksNumberTerms = SkippedBlocksNumberTerms;
315+
type LastRelayBlockNumberProvider = Runtime;
315316
}
316317

317318
pub type SlowAdjustingFeeUpdate<R> = TargetedFeeAdjustment<

sugondat/chain/runtimes/test/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,7 @@ impl pallet_sugondat_length_fee_adjustment::Config for Runtime {
379379
type MaximumMultiplierBlockSize = MaximumMultiplierBlockSize;
380380
type MinimumMultiplierBlockSize = MinimumMultiplierBlockSize;
381381
type SkippedBlocksNumberTerms = SkippedBlocksNumberTerms;
382+
type LastRelayBlockNumberProvider = Runtime;
382383
}
383384

384385
pub type SlowAdjustingFeeUpdate<R> = TargetedFeeAdjustment<

0 commit comments

Comments
 (0)