add RelaychainBlockNumberProvider (#515)

* add RelaychainBlockNumberProvider

* add docs
This commit is contained in:
Xiliang Chen
2021-06-29 00:45:09 +12:00
committed by GitHub
parent 5f96d5eea8
commit 075b9beed4
@@ -51,6 +51,7 @@ use sp_runtime::{
InvalidTransaction, TransactionLongevity, TransactionSource, TransactionValidity, InvalidTransaction, TransactionLongevity, TransactionSource, TransactionValidity,
ValidTransaction, ValidTransaction,
}, },
offchain::storage_lock::BlockNumberProvider,
}; };
use sp_std::{cmp, collections::btree_map::BTreeMap, prelude::*}; use sp_std::{cmp, collections::btree_map::BTreeMap, prelude::*};
@@ -1038,3 +1039,18 @@ pub trait CheckInherents<Block: BlockT> {
validation_data: &RelayChainStateProof, validation_data: &RelayChainStateProof,
) -> frame_support::inherent::CheckInherentsResult; ) -> frame_support::inherent::CheckInherentsResult;
} }
/// Implements [`BlockNumberProvider`] that returns relaychain block number fetched from
/// validation data.
/// NTOE: When validation data is not available (e.g. within on_initialize), 0 will be returned.
pub struct RelaychainBlockNumberProvider<T>(sp_std::marker::PhantomData<T>);
impl<T: Config> BlockNumberProvider for RelaychainBlockNumberProvider<T> {
type BlockNumber = relay_chain::BlockNumber;
fn current_block_number() -> relay_chain::BlockNumber {
Pallet::<T>::validation_data()
.map(|d| d.relay_parent_number)
.unwrap_or_default()
}
}