@@ -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.
0 commit comments