From 6608d61a61cc9c16666fddc78c7ad0d466eb5be8 Mon Sep 17 00:00:00 2001 From: Amar Singh <asinghchrony@protonmail.com> Date: Thu, 17 Mar 2022 06:02:59 -0400 Subject: [PATCH] Add babe randomness to relay state proof (#1083) * add new babe keys to relay storage proof * persist relay state proof and make pub super to expose to runtime * use sp trie StorageProof instead of sp state machine Storage Proof * fmt --- cumulus/pallets/parachain-system/src/lib.rs | 13 ++++++++++++- .../parachain-inherent/src/client_side.rs | 3 +++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/cumulus/pallets/parachain-system/src/lib.rs b/cumulus/pallets/parachain-system/src/lib.rs index 2338192da1f..2eb242e7387 100644 --- a/cumulus/pallets/parachain-system/src/lib.rs +++ b/cumulus/pallets/parachain-system/src/lib.rs @@ -310,7 +310,7 @@ pub mod pallet { let relay_state_proof = RelayChainStateProof::new( T::SelfParaId::get(), vfp.relay_parent_storage_root, - relay_chain_state, + relay_chain_state.clone(), ) .expect("Invalid relay chain state proof"); @@ -352,6 +352,7 @@ pub mod pallet { .expect("Invalid messaging state in relay chain state proof"); <ValidationData<T>>::put(&vfp); + <RelayStateProof<T>>::put(relay_chain_state); <RelevantMessagingState<T>>::put(relevant_messaging_state.clone()); <HostConfiguration<T>>::put(host_config); @@ -484,6 +485,16 @@ pub mod pallet { pub(super) type UpgradeRestrictionSignal<T: Config> = StorageValue<_, Option<relay_chain::v2::UpgradeRestriction>, ValueQuery>; + /// The state proof for the last relay parent block. + /// + /// This field is meant to be updated each block with the validation data inherent. Therefore, + /// before processing of the inherent, e.g. in `on_initialize` this data may be stale. + /// + /// This data is also absent from the genesis. + #[pallet::storage] + #[pallet::getter(fn relay_state_proof)] + pub(super) type RelayStateProof<T: Config> = StorageValue<_, sp_trie::StorageProof>; + /// The snapshot of some state related to messaging relevant to the current parachain as per /// the relay parent. /// diff --git a/cumulus/primitives/parachain-inherent/src/client_side.rs b/cumulus/primitives/parachain-inherent/src/client_side.rs index 99c27bc8241..000094f0709 100644 --- a/cumulus/primitives/parachain-inherent/src/client_side.rs +++ b/cumulus/primitives/parachain-inherent/src/client_side.rs @@ -93,6 +93,9 @@ async fn collect_relay_storage_proof( .unwrap_or_default(); let mut relevant_keys = Vec::new(); + relevant_keys.push(relay_well_known_keys::CURRENT_BLOCK_RANDOMNESS.to_vec()); + relevant_keys.push(relay_well_known_keys::ONE_EPOCH_AGO_RANDOMNESS.to_vec()); + relevant_keys.push(relay_well_known_keys::TWO_EPOCHS_AGO_RANDOMNESS.to_vec()); relevant_keys.push(relay_well_known_keys::CURRENT_SLOT.to_vec()); relevant_keys.push(relay_well_known_keys::ACTIVE_CONFIG.to_vec()); relevant_keys.push(relay_well_known_keys::dmq_mqc_head(para_id)); -- GitLab