From 28fa5cc5f8a2c88f3c570aa81ece52673eb3521f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89lo=C3=AFs?= Date: Tue, 14 May 2024 00:03:24 +0200 Subject: [PATCH] improve MockValidationDataInherentDataProvider to support async backing (#4442) Support async backing in `--dev` mode This PR improve the relay mock `MockValidationDataInherentDataProvider` to mach expectations of async backing runtimes. * Add para_head in the mock relay proof * Add relay slot in the mock relay proof fix https://github.com/paritytech/polkadot-sdk/issues/4437 --- .../primitives/parachain-inherent/src/mock.rs | 22 +++++++++++++++---- prdoc/pr_4442.prdoc | 13 +++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 prdoc/pr_4442.prdoc diff --git a/cumulus/primitives/parachain-inherent/src/mock.rs b/cumulus/primitives/parachain-inherent/src/mock.rs index 5168b46a14d03..cd493c63aab9c 100644 --- a/cumulus/primitives/parachain-inherent/src/mock.rs +++ b/cumulus/primitives/parachain-inherent/src/mock.rs @@ -27,6 +27,9 @@ use std::collections::BTreeMap; use cumulus_test_relay_sproof_builder::RelayStateSproofBuilder; +/// Relay chain slot duration, in milliseconds. +pub const RELAY_CHAIN_SLOT_DURATION_MILLIS: u32 = 6000; + /// Inherent data provider that supplies mocked validation data. /// /// This is useful when running a node that is not actually backed by any relay chain. @@ -44,6 +47,8 @@ use cumulus_test_relay_sproof_builder::RelayStateSproofBuilder; pub struct MockValidationDataInherentDataProvider { /// The current block number of the local block chain (the parachain) pub current_para_block: u32, + /// The current block head data of the local block chain (the parachain) + pub current_para_block_head: Option, /// The relay block in which this parachain appeared to start. This will be the relay block /// number in para block #P1 pub relay_offset: u32, @@ -156,14 +161,16 @@ impl> InherentDataProvider &self, inherent_data: &mut InherentData, ) -> Result<(), sp_inherents::Error> { - // Calculate the mocked relay block based on the current para block - let relay_parent_number = - self.relay_offset + self.relay_blocks_per_para_block * self.current_para_block; - // Use the "sproof" (spoof proof) builder to build valid mock state root and proof. let mut sproof_builder = RelayStateSproofBuilder { para_id: self.xcm_config.para_id, ..Default::default() }; + // Calculate the mocked relay block based on the current para block + let relay_parent_number = + self.relay_offset + self.relay_blocks_per_para_block * self.current_para_block; + sproof_builder.current_slot = + ((relay_parent_number / RELAY_CHAIN_SLOT_DURATION_MILLIS) as u64).into(); + // Process the downward messages and set up the correct head let mut downward_messages = Vec::new(); let mut dmq_mqc = crate::MessageQueueChain(self.xcm_config.starting_dmq_mqc_head); @@ -210,6 +217,13 @@ impl> InherentDataProvider sproof_builder.randomness = self.relay_randomness_config.generate_randomness(self.current_para_block.into()); + if let Some(key_values) = &self.additional_key_values { + sproof_builder.additional_key_values = key_values.clone() + } + + // Inject current para block head, if any + sproof_builder.included_para_head = self.current_para_block_head.clone(); + let (relay_parent_storage_root, proof) = sproof_builder.into_state_root_and_proof(); inherent_data.put_data( diff --git a/prdoc/pr_4442.prdoc b/prdoc/pr_4442.prdoc new file mode 100644 index 0000000000000..ee6ac29e1a104 --- /dev/null +++ b/prdoc/pr_4442.prdoc @@ -0,0 +1,13 @@ +# Schema: Polkadot SDK PRDoc Schema (prdoc) v1.0.0 +# See doc at https://raw.githubusercontent.com/paritytech/polkadot-sdk/master/prdoc/schema_user.json + +title: Improve mock relay in --dev mode to support async backing + +doc: + - audience: Node Dev + description: | + Support async backing in --dev mode. Improve the relay mock MockValidationDataInherentDataProvider to mach expectations of async backing runtimes. + +crates: + - name: cumulus-client-parachain-inherent + bump: patch