From 075b9beed4b1fb613ccd4331f89147558ace6948 Mon Sep 17 00:00:00 2001 From: Xiliang Chen <xlchen1291@gmail.com> Date: Tue, 29 Jun 2021 00:45:09 +1200 Subject: [PATCH] add RelaychainBlockNumberProvider (#515) * add RelaychainBlockNumberProvider * add docs --- cumulus/pallets/parachain-system/src/lib.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/cumulus/pallets/parachain-system/src/lib.rs b/cumulus/pallets/parachain-system/src/lib.rs index 9e658b90da2..3deb45d42f5 100644 --- a/cumulus/pallets/parachain-system/src/lib.rs +++ b/cumulus/pallets/parachain-system/src/lib.rs @@ -51,6 +51,7 @@ use sp_runtime::{ InvalidTransaction, TransactionLongevity, TransactionSource, TransactionValidity, ValidTransaction, }, + offchain::storage_lock::BlockNumberProvider, }; use sp_std::{cmp, collections::btree_map::BTreeMap, prelude::*}; @@ -1038,3 +1039,18 @@ pub trait CheckInherents<Block: BlockT> { validation_data: &RelayChainStateProof, ) -> 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() + } +} -- GitLab