Skip to content

Commit

Permalink
fix(inflation): BlockNumberProvider
Browse files Browse the repository at this point in the history
  • Loading branch information
CertainLach committed Oct 16, 2023
1 parent 750f6e1 commit 8c199c3
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 5 deletions.
6 changes: 3 additions & 3 deletions pallets/inflation/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ pub mod pallet {
+ Mutate<Self::AccountId>;
type TreasuryAccountId: Get<Self::AccountId>;

// The block number provider
type BlockNumberProvider: BlockNumberProvider<BlockNumber = BlockNumberFor<Self>>;
// The block number provider, which should be callable from `on_initialize` hook.
type OnInitializeBlockNumberProvider: BlockNumberProvider<BlockNumber = BlockNumberFor<Self>>;

/// Number of blocks that pass between treasury balance updates due to inflation
#[pallet::constant]
Expand Down Expand Up @@ -118,7 +118,7 @@ pub mod pallet {
};

let block_interval: u32 = T::InflationBlockInterval::get().try_into().unwrap_or(0);
let current_relay_block = T::BlockNumberProvider::current_block_number();
let current_relay_block = T::OnInitializeBlockNumberProvider::current_block_number();
let next_inflation: BlockNumberFor<T> = <NextInflationBlock<T>>::get();
add_weight(1, 0, Weight::from_parts(5_000_000, 0));

Expand Down
25 changes: 23 additions & 2 deletions runtime/common/config/pallets/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ use frame_support::{
traits::{ConstU32, ConstU64, Currency},
};
use sp_arithmetic::Perbill;
use sp_runtime::traits::AccountIdConversion;
use sp_runtime::traits::{BlockNumberProvider, AccountIdConversion};
use up_common::{
constants::*,
types::{AccountId, Balance, BlockNumber},
Expand Down Expand Up @@ -105,12 +105,33 @@ parameter_types! {
pub const InflationBlockInterval: BlockNumber = 100; // every time per how many blocks inflation is applied
}

/// Pallet-inflation needs block number in on_initialize, where there is no `validation_data` exists yet
pub struct OnInitializeBlockNumberProvider;
impl BlockNumberProvider for OnInitializeBlockNumberProvider {
type BlockNumber = BlockNumber;

fn current_block_number() -> Self::BlockNumber {
use parity_scale_codec::Decode;
use hex_literal::hex;
use sp_io::storage;
// TODO: Replace with the following code after https://github.com/paritytech/polkadot-sdk/commit/3ea497b5a0fdda252f9c5a3c257cfaf8685f02fd lands
// <cumulus_pallet_parachain_system::Pallet<Runtime>>::last_relay_block_number()

// ParachainSystem.LastRelayChainBlockNumber
let Some(encoded) = storage::get(&hex!("45323df7cc47150b3930e2666b0aa313a2bca190d36bd834cc73a38fc213ecbd")) else {
// First parachain block
return Default::default()
};
BlockNumber::decode(&mut encoded.as_ref()).expect("typeof(RelayBlockNumber) == typeof(BlockNumber) == u32; qed")
}
}

/// Used for the pallet inflation
impl pallet_inflation::Config for Runtime {
type Currency = Balances;
type TreasuryAccountId = TreasuryAccountId;
type InflationBlockInterval = InflationBlockInterval;
type BlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;
type OnInitializeBlockNumberProvider = OnInitializeBlockNumberProvider;
}

impl pallet_unique::Config for Runtime {
Expand Down

0 comments on commit 8c199c3

Please sign in to comment.