-
Notifications
You must be signed in to change notification settings - Fork 690
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
beefy: put not only lease parachain heads into mmr (#4751)
Short-term addresses #4737. - [x] Resolve benchmarking I've digged into benchmarking mentioned #4737 (comment), but it seemed to me that this code is different proof/path. @acatangiu could you confirm? (btw, in this [bench](https://github.com/paritytech/polkadot-sdk/blob/b65313e81465dd730e48d4ce00deb76922618375/bridges/modules/parachains/src/benchmarking.rs#L57), where do you actually set the `fn parachains()` to a reasonable number? i've only seen 1) - [ ] Communicate to Snowfork team: This seems to be the relevant code: https://github.com/Snowfork/snowbridge/blob/1e18e010331777042aa7e8fff3c118094af856ba/relayer/cmd/parachain_head_proof.go#L95-L120 - [x] Is it preferred to iter() in some random order as suggested in #4737 (comment) or take lowest para ids instead as implemented here currently? - [x] PRDoc ## Updating Polkadot and Kusama runtimes: New weights need to be generated (`pallet_mmr`) and configs updated similar to Rococo/Westend: ```patch diff --git a/polkadot/runtime/rococo/src/lib.rs b/polkadot/runtime/rococo/src/lib.rs index 5adffbd7422..c7da339b981 100644 --- a/polkadot/runtime/rococo/src/lib.rs +++ b/polkadot/runtime/rococo/src/lib.rs @@ -1307,9 +1307,11 @@ impl pallet_mmr::Config for Runtime { const INDEXING_PREFIX: &'static [u8] = mmr::INDEXING_PREFIX; type Hashing = Keccak256; type OnNewRoot = pallet_beefy_mmr::DepositBeefyDigest<Runtime>; - type WeightInfo = (); type LeafData = pallet_beefy_mmr::Pallet<Runtime>; type BlockHashProvider = pallet_mmr::DefaultBlockHashProvider<Runtime>; + type WeightInfo = weights::pallet_mmr::WeightInfo<Runtime>; + #[cfg(feature = "runtime-benchmarks")] + type BenchmarkHelper = parachains_paras::benchmarking::mmr_setup::MmrSetup<Runtime>; } parameter_types! { @@ -1319,13 +1321,8 @@ parameter_types! { pub struct ParaHeadsRootProvider; impl BeefyDataProvider<H256> for ParaHeadsRootProvider { fn extra_data() -> H256 { - let mut para_heads: Vec<(u32, Vec<u8>)> = parachains_paras::Parachains::<Runtime>::get() - .into_iter() - .filter_map(|id| { - parachains_paras::Heads::<Runtime>::get(&id).map(|head| (id.into(), head.0)) - }) - .collect(); - para_heads.sort(); + let para_heads: Vec<(u32, Vec<u8>)> = + parachains_paras::Pallet::<Runtime>::sorted_para_heads(); binary_merkle_tree::merkle_root::<mmr::Hashing, _>( para_heads.into_iter().map(|pair| pair.encode()), ) @@ -1746,6 +1743,7 @@ mod benches { [pallet_identity, Identity] [pallet_indices, Indices] [pallet_message_queue, MessageQueue] + [pallet_mmr, Mmr] [pallet_multisig, Multisig] [pallet_parameters, Parameters] [pallet_preimage, Preimage] ``` --------- Co-authored-by: Adrian Catangiu <adrian@parity.io>
- Loading branch information
Showing
22 changed files
with
311 additions
and
27 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
40 changes: 40 additions & 0 deletions
40
polkadot/runtime/parachains/src/paras/benchmarking/mmr_setup.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
// Copyright (C) Parity Technologies (UK) Ltd. | ||
// This file is part of Polkadot. | ||
|
||
// Polkadot is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU General Public License as published by | ||
// the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
|
||
// Polkadot is distributed in the hope that it will be useful, | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
// GNU General Public License for more details. | ||
|
||
// You should have received a copy of the GNU General Public License | ||
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>. | ||
|
||
//! Implements benchmarking setup for the `merkle-mountain-range` pallet. | ||
|
||
use crate::paras::*; | ||
use pallet_mmr::BenchmarkHelper; | ||
use sp_std::vec; | ||
|
||
/// Struct to setup benchmarks for the `merkle-mountain-range` pallet. | ||
pub struct MmrSetup<T>(core::marker::PhantomData<T>); | ||
|
||
impl<T> BenchmarkHelper for MmrSetup<T> | ||
where | ||
T: Config, | ||
{ | ||
fn setup() { | ||
// Create a head with 1024 bytes of data. | ||
let head = vec![42u8; 1024]; | ||
|
||
for para in 0..MAX_PARA_HEADS { | ||
let id = (para as u32).into(); | ||
let h = head.clone().into(); | ||
Pallet::<T>::heads_insert(&id, h); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
// Copyright (C) Parity Technologies (UK) Ltd. | ||
// This file is part of Polkadot. | ||
|
||
// Polkadot is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU General Public License as published by | ||
// the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
|
||
// Polkadot is distributed in the hope that it will be useful, | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
// GNU General Public License for more details. | ||
|
||
// You should have received a copy of the GNU General Public License | ||
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>. | ||
|
||
//! Autogenerated weights for `pallet_mmr` | ||
//! | ||
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0 | ||
//! DATE: 2024-07-15, STEPS: `5`, REPEAT: `1`, LOW RANGE: `[]`, HIGH RANGE: `[]` | ||
//! WORST CASE MAP SIZE: `1000000` | ||
//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("westend-dev")`, DB CACHE: 1024 | ||
|
||
// Executed Command: | ||
// target/testnet/polkadot | ||
// benchmark | ||
// pallet | ||
// --steps=5 | ||
// --repeat=1 | ||
// --extrinsic=* | ||
// --wasm-execution=compiled | ||
// --heap-pages=4096 | ||
// --pallet=pallet_mmr | ||
// --chain=westend-dev | ||
// --header=./polkadot/file_header.txt | ||
// --output=./polkadot/runtime/westend/src/weights/ | ||
|
||
#![cfg_attr(rustfmt, rustfmt_skip)] | ||
#![allow(unused_parens)] | ||
#![allow(unused_imports)] | ||
#![allow(missing_docs)] | ||
|
||
use frame_support::{traits::Get, weights::Weight}; | ||
use core::marker::PhantomData; | ||
|
||
/// Weight functions for `pallet_mmr`. | ||
pub struct WeightInfo<T>(PhantomData<T>); | ||
impl<T: frame_system::Config> pallet_mmr::WeightInfo for WeightInfo<T> { | ||
/// Storage: `Mmr::NumberOfLeaves` (r:1 w:1) | ||
/// Proof: `Mmr::NumberOfLeaves` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) | ||
/// Storage: `System::ParentHash` (r:1 w:0) | ||
/// Proof: `System::ParentHash` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) | ||
/// Storage: `Paras::Heads` (r:2049 w:0) | ||
/// Proof: `Paras::Heads` (`max_values`: None, `max_size`: None, mode: `Measured`) | ||
/// Storage: `BeefyMmrLeaf::BeefyNextAuthorities` (r:1 w:0) | ||
/// Proof: `BeefyMmrLeaf::BeefyNextAuthorities` (`max_values`: Some(1), `max_size`: Some(44), added: 539, mode: `MaxEncodedLen`) | ||
/// Storage: `System::Digest` (r:1 w:1) | ||
/// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) | ||
/// Storage: `Mmr::Nodes` (r:0 w:1000) | ||
/// Proof: `Mmr::Nodes` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) | ||
/// Storage: `Mmr::RootHash` (r:0 w:1) | ||
/// Proof: `Mmr::RootHash` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) | ||
/// The range of component `x` is `[1, 1000]`. | ||
fn on_initialize(x: u32) -> Weight { | ||
// Proof Size summary in bytes: | ||
// Measured: `2140817` | ||
// Estimated: `7213082` | ||
// Minimum execution time: 20_387_000_000 picoseconds. | ||
Weight::from_parts(223_625_477_528, 0) | ||
.saturating_add(Weight::from_parts(0, 7213082)) | ||
// Standard Error: 310_550_970 | ||
.saturating_add(Weight::from_parts(16_906_397_286, 0).saturating_mul(x.into())) | ||
.saturating_add(T::DbWeight::get().reads(2053)) | ||
.saturating_add(T::DbWeight::get().writes(3)) | ||
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(x.into()))) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.