From 3288148aa768f4a6cf8bb579057550612d8624e3 Mon Sep 17 00:00:00 2001 From: tmpolaczyk <44604217+tmpolaczyk@users.noreply.github.com> Date: Sat, 19 Aug 2023 00:42:46 +0200 Subject: [PATCH] Add set_current_relay_chain_state method for benchmarks (#2731) --- cumulus/pallets/parachain-system/src/lib.rs | 22 +++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/cumulus/pallets/parachain-system/src/lib.rs b/cumulus/pallets/parachain-system/src/lib.rs index c0ed35041c..17933df403 100644 --- a/cumulus/pallets/parachain-system/src/lib.rs +++ b/cumulus/pallets/parachain-system/src/lib.rs @@ -1568,6 +1568,13 @@ pub trait RelaychainStateProvider { /// /// **NOTE**: This is not guaranteed to return monotonically increasing relay parents. fn current_relay_chain_state() -> RelayChainState; + + /// Utility function only to be used in benchmarking scenarios, to be implemented optionally, + /// else a noop. + /// + /// It allows for setting a custom RelayChainState. + #[cfg(feature = "runtime-benchmarks")] + fn set_current_relay_chain_state(_state: RelayChainState) {} } /// Implements [`BlockNumberProvider`] that returns relay chain block number fetched from validation @@ -1611,6 +1618,21 @@ impl RelaychainStateProvider for RelaychainDataProvider { }) .unwrap_or_default() } + + #[cfg(feature = "runtime-benchmarks")] + fn set_current_relay_chain_state(state: RelayChainState) { + let mut validation_data = Pallet::::validation_data().unwrap_or_else(|| + // PersistedValidationData does not impl default in non-std + PersistedValidationData { + parent_head: vec![].into(), + relay_parent_number: Default::default(), + max_pov_size: Default::default(), + relay_parent_storage_root: Default::default(), + }); + validation_data.relay_parent_number = state.number; + validation_data.relay_parent_storage_root = state.state_root; + ValidationData::::put(validation_data) + } } /// Implements [`BlockNumberProvider`] and [`RelaychainStateProvider`] that returns relevant relay