MaxValues for maps in parachain maps (#1868)

* MaxValues for maps in parachain maps

* fix compilation
This commit is contained in:
Svyatoslav Nikolsky
2023-02-09 14:09:45 +03:00
committed by Bastian Köcher
parent bae329c66e
commit 4982d1c2e5
5 changed files with 153 additions and 84 deletions
+6
View File
@@ -662,6 +662,7 @@ mod tests {
assert_err, assert_noop, assert_ok, dispatch::PostDispatchInfo, assert_err, assert_noop, assert_ok, dispatch::PostDispatchInfo,
storage::generator::StorageValue, storage::generator::StorageValue,
}; };
use sp_core::Get;
use sp_runtime::{Digest, DigestItem, DispatchError}; use sp_runtime::{Digest, DigestItem, DispatchError};
fn initialize_substrate_bridge() { fn initialize_substrate_bridge() {
@@ -1242,4 +1243,9 @@ mod tests {
} }
generate_owned_bridge_module_tests!(BasicOperatingMode::Normal, BasicOperatingMode::Halted); generate_owned_bridge_module_tests!(BasicOperatingMode::Normal, BasicOperatingMode::Halted);
#[test]
fn maybe_headers_to_keep_returns_correct_value() {
assert_eq!(MaybeHeadersToKeep::<TestRuntime, ()>::get(), Some(mock::HeadersToKeep::get()));
}
} }
+58 -12
View File
@@ -221,27 +221,39 @@ pub mod pallet {
/// - the head of the `ImportedParaHashes` ring buffer /// - the head of the `ImportedParaHashes` ring buffer
#[pallet::storage] #[pallet::storage]
pub type ParasInfo<T: Config<I>, I: 'static = ()> = StorageMap< pub type ParasInfo<T: Config<I>, I: 'static = ()> = StorageMap<
_, Hasher = <ParasInfoKeyProvider as StorageMapKeyProvider>::Hasher,
<ParasInfoKeyProvider as StorageMapKeyProvider>::Hasher, Key = <ParasInfoKeyProvider as StorageMapKeyProvider>::Key,
<ParasInfoKeyProvider as StorageMapKeyProvider>::Key, Value = <ParasInfoKeyProvider as StorageMapKeyProvider>::Value,
<ParasInfoKeyProvider as StorageMapKeyProvider>::Value, QueryKind = OptionQuery,
OnEmpty = GetDefault,
MaxValues = MaybeMaxParachains<T, I>,
>; >;
/// State roots of parachain heads which have been imported into the pallet. /// State roots of parachain heads which have been imported into the pallet.
#[pallet::storage] #[pallet::storage]
pub type ImportedParaHeads<T: Config<I>, I: 'static = ()> = StorageDoubleMap< pub type ImportedParaHeads<T: Config<I>, I: 'static = ()> = StorageDoubleMap<
_, Hasher1 = <ImportedParaHeadsKeyProvider as StorageDoubleMapKeyProvider>::Hasher1,
<ImportedParaHeadsKeyProvider as StorageDoubleMapKeyProvider>::Hasher1, Key1 = <ImportedParaHeadsKeyProvider as StorageDoubleMapKeyProvider>::Key1,
<ImportedParaHeadsKeyProvider as StorageDoubleMapKeyProvider>::Key1, Hasher2 = <ImportedParaHeadsKeyProvider as StorageDoubleMapKeyProvider>::Hasher2,
<ImportedParaHeadsKeyProvider as StorageDoubleMapKeyProvider>::Hasher2, Key2 = <ImportedParaHeadsKeyProvider as StorageDoubleMapKeyProvider>::Key2,
<ImportedParaHeadsKeyProvider as StorageDoubleMapKeyProvider>::Key2, Value = StoredParaHeadDataOf<T, I>,
StoredParaHeadDataOf<T, I>, QueryKind = OptionQuery,
OnEmpty = GetDefault,
MaxValues = MaybeMaxTotalParachainHashes<T, I>,
>; >;
/// A ring buffer of imported parachain head hashes. Ordered by the insertion time. /// A ring buffer of imported parachain head hashes. Ordered by the insertion time.
#[pallet::storage] #[pallet::storage]
pub(super) type ImportedParaHashes<T: Config<I>, I: 'static = ()> = pub(super) type ImportedParaHashes<T: Config<I>, I: 'static = ()> = StorageDoubleMap<
StorageDoubleMap<_, Blake2_128Concat, ParaId, Twox64Concat, u32, ParaHash>; Hasher1 = Blake2_128Concat,
Key1 = ParaId,
Hasher2 = Twox64Concat,
Key2 = u32,
Value = ParaHash,
QueryKind = OptionQuery,
OnEmpty = GetDefault,
MaxValues = MaybeMaxTotalParachainHashes<T, I>,
>;
#[pallet::pallet] #[pallet::pallet]
#[pallet::generate_store(pub(super) trait Store)] #[pallet::generate_store(pub(super) trait Store)]
@@ -646,6 +658,27 @@ pub mod pallet {
} }
} }
} }
/// Returns maximal number of parachains, supported by the pallet.
pub struct MaybeMaxParachains<T, I>(PhantomData<(T, I)>);
impl<T: Config<I>, I: 'static> Get<Option<u32>> for MaybeMaxParachains<T, I> {
fn get() -> Option<u32> {
Some(T::ParaStoredHeaderDataBuilder::supported_parachains())
}
}
/// Returns total number of all parachains hashes/heads, stored by the pallet.
pub struct MaybeMaxTotalParachainHashes<T, I>(PhantomData<(T, I)>);
impl<T: Config<I>, I: 'static> Get<Option<u32>> for MaybeMaxTotalParachainHashes<T, I> {
fn get() -> Option<u32> {
Some(
T::ParaStoredHeaderDataBuilder::supported_parachains()
.saturating_mul(T::HeadsToKeep::get()),
)
}
}
} }
/// Single parachain header chain adapter. /// Single parachain header chain adapter.
@@ -1525,4 +1558,17 @@ mod tests {
} }
generate_owned_bridge_module_tests!(BasicOperatingMode::Normal, BasicOperatingMode::Halted); generate_owned_bridge_module_tests!(BasicOperatingMode::Normal, BasicOperatingMode::Halted);
#[test]
fn maybe_max_parachains_returns_correct_value() {
assert_eq!(MaybeMaxParachains::<TestRuntime, ()>::get(), Some(mock::TOTAL_PARACHAINS));
}
#[test]
fn maybe_max_total_parachain_hashes_returns_correct_value() {
assert_eq!(
MaybeMaxTotalParachainHashes::<TestRuntime, ()>::get(),
Some(mock::TOTAL_PARACHAINS * mock::HeadsToKeep::get()),
);
}
} }
+2
View File
@@ -38,6 +38,8 @@ pub const PARAS_PALLET_NAME: &str = "Paras";
pub const UNTRACKED_PARACHAIN_ID: u32 = 10; pub const UNTRACKED_PARACHAIN_ID: u32 = 10;
// use exact expected encoded size: `vec_len_size + header_number_size + state_root_hash_size` // use exact expected encoded size: `vec_len_size + header_number_size + state_root_hash_size`
pub const MAXIMAL_PARACHAIN_HEAD_DATA_SIZE: u32 = 1 + 8 + 32; pub const MAXIMAL_PARACHAIN_HEAD_DATA_SIZE: u32 = 1 + 8 + 32;
// total parachains that we use in tests
pub const TOTAL_PARACHAINS: u32 = 4;
pub type RegularParachainHeader = sp_runtime::testing::Header; pub type RegularParachainHeader = sp_runtime::testing::Header;
pub type RegularParachainHasher = BlakeTwo256; pub type RegularParachainHasher = BlakeTwo256;
+71 -71
View File
@@ -17,7 +17,7 @@
//! Autogenerated weights for pallet_bridge_parachains //! Autogenerated weights for pallet_bridge_parachains
//! //!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
//! DATE: 2023-02-06, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! DATE: 2023-02-09, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000` //! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `covid`, CPU: `11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz` //! HOSTNAME: `covid`, CPU: `11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz`
//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
@@ -67,33 +67,33 @@ impl<T: frame_system::Config> WeightInfo for BridgeWeight<T> {
/// ///
/// Storage: BridgeRialtoGrandpa ImportedHeaders (r:1 w:0) /// Storage: BridgeRialtoGrandpa ImportedHeaders (r:1 w:0)
/// ///
/// Proof: BridgeRialtoGrandpa ImportedHeaders (max_values: None, max_size: Some(68), added: /// Proof: BridgeRialtoGrandpa ImportedHeaders (max_values: Some(14400), max_size: Some(68),
/// 2543, mode: MaxEncodedLen) /// added: 2048, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ParasInfo (r:1 w:1) /// Storage: BridgeRialtoParachains ParasInfo (r:1 w:1)
/// ///
/// Proof: BridgeRialtoParachains ParasInfo (max_values: None, max_size: Some(60), added: 2535, /// Proof: BridgeRialtoParachains ParasInfo (max_values: Some(1), max_size: Some(60), added:
/// mode: MaxEncodedLen) /// 555, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ImportedParaHashes (r:1 w:1) /// Storage: BridgeRialtoParachains ImportedParaHashes (r:1 w:1)
/// ///
/// Proof: BridgeRialtoParachains ImportedParaHashes (max_values: None, max_size: Some(64), /// Proof: BridgeRialtoParachains ImportedParaHashes (max_values: Some(14400), max_size:
/// added: 2539, mode: MaxEncodedLen) /// Some(64), added: 2044, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ImportedParaHeads (r:0 w:1) /// Storage: BridgeRialtoParachains ImportedParaHeads (r:0 w:1)
/// ///
/// Proof: BridgeRialtoParachains ImportedParaHeads (max_values: None, max_size: Some(196), /// Proof: BridgeRialtoParachains ImportedParaHeads (max_values: Some(14400), max_size:
/// added: 2671, mode: MaxEncodedLen) /// Some(196), added: 2176, mode: MaxEncodedLen)
/// ///
/// The range of component `p` is `[1, 2]`. /// The range of component `p` is `[1, 2]`.
fn submit_parachain_heads_with_n_parachains(p: u32) -> Weight { fn submit_parachain_heads_with_n_parachains(p: u32) -> Weight {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `366` // Measured: `366`
// Estimated: `8113` // Estimated: `5143`
// Minimum execution time: 35_348 nanoseconds. // Minimum execution time: 35_160 nanoseconds.
Weight::from_parts(36_906_961, 8113) Weight::from_parts(36_951_585, 5143)
// Standard Error: 136_143 // Standard Error: 336_932
.saturating_add(Weight::from_ref_time(148_169).saturating_mul(p.into())) .saturating_add(Weight::from_ref_time(407_557).saturating_mul(p.into()))
.saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64))
} }
@@ -104,29 +104,29 @@ impl<T: frame_system::Config> WeightInfo for BridgeWeight<T> {
/// ///
/// Storage: BridgeRialtoGrandpa ImportedHeaders (r:1 w:0) /// Storage: BridgeRialtoGrandpa ImportedHeaders (r:1 w:0)
/// ///
/// Proof: BridgeRialtoGrandpa ImportedHeaders (max_values: None, max_size: Some(68), added: /// Proof: BridgeRialtoGrandpa ImportedHeaders (max_values: Some(14400), max_size: Some(68),
/// 2543, mode: MaxEncodedLen) /// added: 2048, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ParasInfo (r:1 w:1) /// Storage: BridgeRialtoParachains ParasInfo (r:1 w:1)
/// ///
/// Proof: BridgeRialtoParachains ParasInfo (max_values: None, max_size: Some(60), added: 2535, /// Proof: BridgeRialtoParachains ParasInfo (max_values: Some(1), max_size: Some(60), added:
/// mode: MaxEncodedLen) /// 555, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ImportedParaHashes (r:1 w:1) /// Storage: BridgeRialtoParachains ImportedParaHashes (r:1 w:1)
/// ///
/// Proof: BridgeRialtoParachains ImportedParaHashes (max_values: None, max_size: Some(64), /// Proof: BridgeRialtoParachains ImportedParaHashes (max_values: Some(14400), max_size:
/// added: 2539, mode: MaxEncodedLen) /// Some(64), added: 2044, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ImportedParaHeads (r:0 w:1) /// Storage: BridgeRialtoParachains ImportedParaHeads (r:0 w:1)
/// ///
/// Proof: BridgeRialtoParachains ImportedParaHeads (max_values: None, max_size: Some(196), /// Proof: BridgeRialtoParachains ImportedParaHeads (max_values: Some(14400), max_size:
/// added: 2671, mode: MaxEncodedLen) /// Some(196), added: 2176, mode: MaxEncodedLen)
fn submit_parachain_heads_with_1kb_proof() -> Weight { fn submit_parachain_heads_with_1kb_proof() -> Weight {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `366` // Measured: `366`
// Estimated: `8113` // Estimated: `5143`
// Minimum execution time: 43_295 nanoseconds. // Minimum execution time: 42_276 nanoseconds.
Weight::from_parts(48_018_000, 8113) Weight::from_parts(43_525_000, 5143)
.saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64))
} }
@@ -137,29 +137,29 @@ impl<T: frame_system::Config> WeightInfo for BridgeWeight<T> {
/// ///
/// Storage: BridgeRialtoGrandpa ImportedHeaders (r:1 w:0) /// Storage: BridgeRialtoGrandpa ImportedHeaders (r:1 w:0)
/// ///
/// Proof: BridgeRialtoGrandpa ImportedHeaders (max_values: None, max_size: Some(68), added: /// Proof: BridgeRialtoGrandpa ImportedHeaders (max_values: Some(14400), max_size: Some(68),
/// 2543, mode: MaxEncodedLen) /// added: 2048, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ParasInfo (r:1 w:1) /// Storage: BridgeRialtoParachains ParasInfo (r:1 w:1)
/// ///
/// Proof: BridgeRialtoParachains ParasInfo (max_values: None, max_size: Some(60), added: 2535, /// Proof: BridgeRialtoParachains ParasInfo (max_values: Some(1), max_size: Some(60), added:
/// mode: MaxEncodedLen) /// 555, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ImportedParaHashes (r:1 w:1) /// Storage: BridgeRialtoParachains ImportedParaHashes (r:1 w:1)
/// ///
/// Proof: BridgeRialtoParachains ImportedParaHashes (max_values: None, max_size: Some(64), /// Proof: BridgeRialtoParachains ImportedParaHashes (max_values: Some(14400), max_size:
/// added: 2539, mode: MaxEncodedLen) /// Some(64), added: 2044, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ImportedParaHeads (r:0 w:1) /// Storage: BridgeRialtoParachains ImportedParaHeads (r:0 w:1)
/// ///
/// Proof: BridgeRialtoParachains ImportedParaHeads (max_values: None, max_size: Some(196), /// Proof: BridgeRialtoParachains ImportedParaHeads (max_values: Some(14400), max_size:
/// added: 2671, mode: MaxEncodedLen) /// Some(196), added: 2176, mode: MaxEncodedLen)
fn submit_parachain_heads_with_16kb_proof() -> Weight { fn submit_parachain_heads_with_16kb_proof() -> Weight {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `366` // Measured: `366`
// Estimated: `8113` // Estimated: `5143`
// Minimum execution time: 86_112 nanoseconds. // Minimum execution time: 85_824 nanoseconds.
Weight::from_parts(88_901_000, 8113) Weight::from_parts(87_335_000, 5143)
.saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64))
} }
@@ -174,33 +174,33 @@ impl WeightInfo for () {
/// ///
/// Storage: BridgeRialtoGrandpa ImportedHeaders (r:1 w:0) /// Storage: BridgeRialtoGrandpa ImportedHeaders (r:1 w:0)
/// ///
/// Proof: BridgeRialtoGrandpa ImportedHeaders (max_values: None, max_size: Some(68), added: /// Proof: BridgeRialtoGrandpa ImportedHeaders (max_values: Some(14400), max_size: Some(68),
/// 2543, mode: MaxEncodedLen) /// added: 2048, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ParasInfo (r:1 w:1) /// Storage: BridgeRialtoParachains ParasInfo (r:1 w:1)
/// ///
/// Proof: BridgeRialtoParachains ParasInfo (max_values: None, max_size: Some(60), added: 2535, /// Proof: BridgeRialtoParachains ParasInfo (max_values: Some(1), max_size: Some(60), added:
/// mode: MaxEncodedLen) /// 555, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ImportedParaHashes (r:1 w:1) /// Storage: BridgeRialtoParachains ImportedParaHashes (r:1 w:1)
/// ///
/// Proof: BridgeRialtoParachains ImportedParaHashes (max_values: None, max_size: Some(64), /// Proof: BridgeRialtoParachains ImportedParaHashes (max_values: Some(14400), max_size:
/// added: 2539, mode: MaxEncodedLen) /// Some(64), added: 2044, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ImportedParaHeads (r:0 w:1) /// Storage: BridgeRialtoParachains ImportedParaHeads (r:0 w:1)
/// ///
/// Proof: BridgeRialtoParachains ImportedParaHeads (max_values: None, max_size: Some(196), /// Proof: BridgeRialtoParachains ImportedParaHeads (max_values: Some(14400), max_size:
/// added: 2671, mode: MaxEncodedLen) /// Some(196), added: 2176, mode: MaxEncodedLen)
/// ///
/// The range of component `p` is `[1, 2]`. /// The range of component `p` is `[1, 2]`.
fn submit_parachain_heads_with_n_parachains(p: u32) -> Weight { fn submit_parachain_heads_with_n_parachains(p: u32) -> Weight {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `366` // Measured: `366`
// Estimated: `8113` // Estimated: `5143`
// Minimum execution time: 35_348 nanoseconds. // Minimum execution time: 35_160 nanoseconds.
Weight::from_parts(36_906_961, 8113) Weight::from_parts(36_951_585, 5143)
// Standard Error: 136_143 // Standard Error: 336_932
.saturating_add(Weight::from_ref_time(148_169).saturating_mul(p.into())) .saturating_add(Weight::from_ref_time(407_557).saturating_mul(p.into()))
.saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().reads(4_u64))
.saturating_add(RocksDbWeight::get().writes(3_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64))
} }
@@ -211,29 +211,29 @@ impl WeightInfo for () {
/// ///
/// Storage: BridgeRialtoGrandpa ImportedHeaders (r:1 w:0) /// Storage: BridgeRialtoGrandpa ImportedHeaders (r:1 w:0)
/// ///
/// Proof: BridgeRialtoGrandpa ImportedHeaders (max_values: None, max_size: Some(68), added: /// Proof: BridgeRialtoGrandpa ImportedHeaders (max_values: Some(14400), max_size: Some(68),
/// 2543, mode: MaxEncodedLen) /// added: 2048, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ParasInfo (r:1 w:1) /// Storage: BridgeRialtoParachains ParasInfo (r:1 w:1)
/// ///
/// Proof: BridgeRialtoParachains ParasInfo (max_values: None, max_size: Some(60), added: 2535, /// Proof: BridgeRialtoParachains ParasInfo (max_values: Some(1), max_size: Some(60), added:
/// mode: MaxEncodedLen) /// 555, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ImportedParaHashes (r:1 w:1) /// Storage: BridgeRialtoParachains ImportedParaHashes (r:1 w:1)
/// ///
/// Proof: BridgeRialtoParachains ImportedParaHashes (max_values: None, max_size: Some(64), /// Proof: BridgeRialtoParachains ImportedParaHashes (max_values: Some(14400), max_size:
/// added: 2539, mode: MaxEncodedLen) /// Some(64), added: 2044, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ImportedParaHeads (r:0 w:1) /// Storage: BridgeRialtoParachains ImportedParaHeads (r:0 w:1)
/// ///
/// Proof: BridgeRialtoParachains ImportedParaHeads (max_values: None, max_size: Some(196), /// Proof: BridgeRialtoParachains ImportedParaHeads (max_values: Some(14400), max_size:
/// added: 2671, mode: MaxEncodedLen) /// Some(196), added: 2176, mode: MaxEncodedLen)
fn submit_parachain_heads_with_1kb_proof() -> Weight { fn submit_parachain_heads_with_1kb_proof() -> Weight {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `366` // Measured: `366`
// Estimated: `8113` // Estimated: `5143`
// Minimum execution time: 43_295 nanoseconds. // Minimum execution time: 42_276 nanoseconds.
Weight::from_parts(48_018_000, 8113) Weight::from_parts(43_525_000, 5143)
.saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().reads(4_u64))
.saturating_add(RocksDbWeight::get().writes(3_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64))
} }
@@ -244,29 +244,29 @@ impl WeightInfo for () {
/// ///
/// Storage: BridgeRialtoGrandpa ImportedHeaders (r:1 w:0) /// Storage: BridgeRialtoGrandpa ImportedHeaders (r:1 w:0)
/// ///
/// Proof: BridgeRialtoGrandpa ImportedHeaders (max_values: None, max_size: Some(68), added: /// Proof: BridgeRialtoGrandpa ImportedHeaders (max_values: Some(14400), max_size: Some(68),
/// 2543, mode: MaxEncodedLen) /// added: 2048, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ParasInfo (r:1 w:1) /// Storage: BridgeRialtoParachains ParasInfo (r:1 w:1)
/// ///
/// Proof: BridgeRialtoParachains ParasInfo (max_values: None, max_size: Some(60), added: 2535, /// Proof: BridgeRialtoParachains ParasInfo (max_values: Some(1), max_size: Some(60), added:
/// mode: MaxEncodedLen) /// 555, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ImportedParaHashes (r:1 w:1) /// Storage: BridgeRialtoParachains ImportedParaHashes (r:1 w:1)
/// ///
/// Proof: BridgeRialtoParachains ImportedParaHashes (max_values: None, max_size: Some(64), /// Proof: BridgeRialtoParachains ImportedParaHashes (max_values: Some(14400), max_size:
/// added: 2539, mode: MaxEncodedLen) /// Some(64), added: 2044, mode: MaxEncodedLen)
/// ///
/// Storage: BridgeRialtoParachains ImportedParaHeads (r:0 w:1) /// Storage: BridgeRialtoParachains ImportedParaHeads (r:0 w:1)
/// ///
/// Proof: BridgeRialtoParachains ImportedParaHeads (max_values: None, max_size: Some(196), /// Proof: BridgeRialtoParachains ImportedParaHeads (max_values: Some(14400), max_size:
/// added: 2671, mode: MaxEncodedLen) /// Some(196), added: 2176, mode: MaxEncodedLen)
fn submit_parachain_heads_with_16kb_proof() -> Weight { fn submit_parachain_heads_with_16kb_proof() -> Weight {
// Proof Size summary in bytes: // Proof Size summary in bytes:
// Measured: `366` // Measured: `366`
// Estimated: `8113` // Estimated: `5143`
// Minimum execution time: 86_112 nanoseconds. // Minimum execution time: 85_824 nanoseconds.
Weight::from_parts(88_901_000, 8113) Weight::from_parts(87_335_000, 5143)
.saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().reads(4_u64))
.saturating_add(RocksDbWeight::get().writes(3_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64))
} }
+16 -1
View File
@@ -115,7 +115,10 @@ impl ParaStoredHeaderData {
/// Stored parachain head data builder. /// Stored parachain head data builder.
pub trait ParaStoredHeaderDataBuilder { pub trait ParaStoredHeaderDataBuilder {
/// Try to build head data from self. /// Return number of parachains that are supported by this builder.
fn supported_parachains() -> u32;
/// Try to build head data from encoded head of parachain with given id.
fn try_build(para_id: ParaId, para_head: &ParaHead) -> Option<ParaStoredHeaderData>; fn try_build(para_id: ParaId, para_head: &ParaHead) -> Option<ParaStoredHeaderData>;
} }
@@ -123,6 +126,10 @@ pub trait ParaStoredHeaderDataBuilder {
pub struct SingleParaStoredHeaderDataBuilder<C: Parachain>(PhantomData<C>); pub struct SingleParaStoredHeaderDataBuilder<C: Parachain>(PhantomData<C>);
impl<C: Parachain> ParaStoredHeaderDataBuilder for SingleParaStoredHeaderDataBuilder<C> { impl<C: Parachain> ParaStoredHeaderDataBuilder for SingleParaStoredHeaderDataBuilder<C> {
fn supported_parachains() -> u32 {
1
}
fn try_build(para_id: ParaId, para_head: &ParaHead) -> Option<ParaStoredHeaderData> { fn try_build(para_id: ParaId, para_head: &ParaHead) -> Option<ParaStoredHeaderData> {
if para_id == ParaId(C::PARACHAIN_ID) { if para_id == ParaId(C::PARACHAIN_ID) {
let header = HeaderOf::<C>::decode(&mut &para_head.0[..]).ok()?; let header = HeaderOf::<C>::decode(&mut &para_head.0[..]).ok()?;
@@ -139,6 +146,14 @@ impl<C: Parachain> ParaStoredHeaderDataBuilder for SingleParaStoredHeaderDataBui
#[impl_trait_for_tuples::impl_for_tuples(1, 30)] #[impl_trait_for_tuples::impl_for_tuples(1, 30)]
#[tuple_types_custom_trait_bound(Parachain)] #[tuple_types_custom_trait_bound(Parachain)]
impl ParaStoredHeaderDataBuilder for C { impl ParaStoredHeaderDataBuilder for C {
fn supported_parachains() -> u32 {
let mut result = 0;
for_tuples!( #(
result += SingleParaStoredHeaderDataBuilder::<C>::supported_parachains();
)* );
result
}
fn try_build(para_id: ParaId, para_head: &ParaHead) -> Option<ParaStoredHeaderData> { fn try_build(para_id: ParaId, para_head: &ParaHead) -> Option<ParaStoredHeaderData> {
for_tuples!( #( for_tuples!( #(
let maybe_para_head = SingleParaStoredHeaderDataBuilder::<C>::try_build(para_id, para_head); let maybe_para_head = SingleParaStoredHeaderDataBuilder::<C>::try_build(para_id, para_head);