Enable async backing on all testnet system chains (#2949)

Built on top of https://github.com/paritytech/polkadot-sdk/pull/2826/
which was a trial run.

Guide:
https://github.com/w3f/polkadot-wiki/blob/master/docs/maintain/maintain-guides-async-backing.md

---------

Signed-off-by: georgepisaltu <george.pisaltu@parity.io>
Co-authored-by: Branislav Kontur <bkontur@gmail.com>
Co-authored-by: Dónal Murray <donal.murray@parity.io>
Co-authored-by: Dmitry Sinyavin <dmitry.sinyavin@parity.io>
Co-authored-by: s0me0ne-unkn0wn <48632512+s0me0ne-unkn0wn@users.noreply.github.com>
Co-authored-by: Svyatoslav Nikolsky <svyatonik@gmail.com>
Co-authored-by: Bastian Köcher <info@kchr.de>
Co-authored-by: georgepisaltu <52418509+georgepisaltu@users.noreply.github.com>
This commit is contained in:
Marcin S
2024-02-02 14:58:21 +01:00
committed by GitHub
parent 74b597fcaf
commit 700d5f85b7
38 changed files with 536 additions and 210 deletions
Generated
+10
View File
@@ -978,6 +978,7 @@ dependencies = [
"cumulus-pallet-session-benchmarking", "cumulus-pallet-session-benchmarking",
"cumulus-pallet-xcm", "cumulus-pallet-xcm",
"cumulus-pallet-xcmp-queue", "cumulus-pallet-xcmp-queue",
"cumulus-primitives-aura",
"cumulus-primitives-core", "cumulus-primitives-core",
"cumulus-primitives-utility", "cumulus-primitives-utility",
"frame-benchmarking", "frame-benchmarking",
@@ -1993,6 +1994,7 @@ dependencies = [
"cumulus-pallet-session-benchmarking", "cumulus-pallet-session-benchmarking",
"cumulus-pallet-xcm", "cumulus-pallet-xcm",
"cumulus-pallet-xcmp-queue", "cumulus-pallet-xcmp-queue",
"cumulus-primitives-aura",
"cumulus-primitives-core", "cumulus-primitives-core",
"cumulus-primitives-utility", "cumulus-primitives-utility",
"frame-benchmarking", "frame-benchmarking",
@@ -2161,6 +2163,7 @@ dependencies = [
"cumulus-pallet-session-benchmarking", "cumulus-pallet-session-benchmarking",
"cumulus-pallet-xcm", "cumulus-pallet-xcm",
"cumulus-pallet-xcmp-queue", "cumulus-pallet-xcmp-queue",
"cumulus-primitives-aura",
"cumulus-primitives-core", "cumulus-primitives-core",
"cumulus-primitives-utility", "cumulus-primitives-utility",
"frame-benchmarking", "frame-benchmarking",
@@ -2718,6 +2721,7 @@ dependencies = [
"cumulus-pallet-session-benchmarking", "cumulus-pallet-session-benchmarking",
"cumulus-pallet-xcm", "cumulus-pallet-xcm",
"cumulus-pallet-xcmp-queue", "cumulus-pallet-xcmp-queue",
"cumulus-primitives-aura",
"cumulus-primitives-core", "cumulus-primitives-core",
"cumulus-primitives-utility", "cumulus-primitives-utility",
"frame-benchmarking", "frame-benchmarking",
@@ -2972,6 +2976,7 @@ dependencies = [
"cumulus-pallet-session-benchmarking", "cumulus-pallet-session-benchmarking",
"cumulus-pallet-xcm", "cumulus-pallet-xcm",
"cumulus-pallet-xcmp-queue", "cumulus-pallet-xcmp-queue",
"cumulus-primitives-aura",
"cumulus-primitives-core", "cumulus-primitives-core",
"cumulus-primitives-utility", "cumulus-primitives-utility",
"frame-benchmarking", "frame-benchmarking",
@@ -3065,6 +3070,7 @@ dependencies = [
"cumulus-pallet-session-benchmarking", "cumulus-pallet-session-benchmarking",
"cumulus-pallet-xcm", "cumulus-pallet-xcm",
"cumulus-pallet-xcmp-queue", "cumulus-pallet-xcmp-queue",
"cumulus-primitives-aura",
"cumulus-primitives-core", "cumulus-primitives-core",
"cumulus-primitives-utility", "cumulus-primitives-utility",
"frame-benchmarking", "frame-benchmarking",
@@ -3129,6 +3135,7 @@ dependencies = [
"cumulus-pallet-session-benchmarking", "cumulus-pallet-session-benchmarking",
"cumulus-pallet-xcm", "cumulus-pallet-xcm",
"cumulus-pallet-xcmp-queue", "cumulus-pallet-xcmp-queue",
"cumulus-primitives-aura",
"cumulus-primitives-core", "cumulus-primitives-core",
"cumulus-primitives-utility", "cumulus-primitives-utility",
"frame-benchmarking", "frame-benchmarking",
@@ -11660,6 +11667,7 @@ dependencies = [
"cumulus-pallet-session-benchmarking", "cumulus-pallet-session-benchmarking",
"cumulus-pallet-xcm", "cumulus-pallet-xcm",
"cumulus-pallet-xcmp-queue", "cumulus-pallet-xcmp-queue",
"cumulus-primitives-aura",
"cumulus-primitives-core", "cumulus-primitives-core",
"cumulus-primitives-utility", "cumulus-primitives-utility",
"enumflags2", "enumflags2",
@@ -11758,6 +11766,7 @@ dependencies = [
"cumulus-pallet-session-benchmarking", "cumulus-pallet-session-benchmarking",
"cumulus-pallet-xcm", "cumulus-pallet-xcm",
"cumulus-pallet-xcmp-queue", "cumulus-pallet-xcmp-queue",
"cumulus-primitives-aura",
"cumulus-primitives-core", "cumulus-primitives-core",
"cumulus-primitives-utility", "cumulus-primitives-utility",
"enumflags2", "enumflags2",
@@ -19998,6 +20007,7 @@ dependencies = [
name = "testnet-parachains-constants" name = "testnet-parachains-constants"
version = "1.0.0" version = "1.0.0"
dependencies = [ dependencies = [
"cumulus-primitives-core",
"frame-support", "frame-support",
"polkadot-core-primitives", "polkadot-core-primitives",
"rococo-runtime-constants", "rococo-runtime-constants",
@@ -57,6 +57,12 @@ const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts(constants::WEIGHT_REF_TI
.saturating_div(2) .saturating_div(2)
.set_proof_size(polkadot_primitives::MAX_POV_SIZE as u64); .set_proof_size(polkadot_primitives::MAX_POV_SIZE as u64);
/// We allow for 2 seconds of compute with a 6 second average block.
const MAXIMUM_BLOCK_WEIGHT_FOR_ASYNC_BACKING: Weight = Weight::from_parts(
constants::WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2),
polkadot_primitives::MAX_POV_SIZE as u64,
);
/// All cumulus bridge hubs assume that about 5 percent of the block weight is consumed by /// All cumulus bridge hubs assume that about 5 percent of the block weight is consumed by
/// `on_initialize` handlers. This is used to limit the maximal weight of a single extrinsic. /// `on_initialize` handlers. This is used to limit the maximal weight of a single extrinsic.
/// ///
@@ -96,6 +102,26 @@ parameter_types! {
}) })
.avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO)
.build_or_panic(); .build_or_panic();
/// Weight limit of the Cumulus-based bridge hub blocks when async backing is enabled.
pub BlockWeightsForAsyncBacking: limits::BlockWeights = limits::BlockWeights::builder()
.base_block(BlockExecutionWeight::get())
.for_class(DispatchClass::all(), |weights| {
weights.base_extrinsic = ExtrinsicBaseWeight::get();
})
.for_class(DispatchClass::Normal, |weights| {
weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT_FOR_ASYNC_BACKING);
})
.for_class(DispatchClass::Operational, |weights| {
weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT_FOR_ASYNC_BACKING);
// Operational transactions have an extra reserved space, so that they
// are included even if block reached `MAXIMUM_BLOCK_WEIGHT_FOR_ASYNC_BACKING`.
weights.reserved = Some(
MAXIMUM_BLOCK_WEIGHT_FOR_ASYNC_BACKING - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT_FOR_ASYNC_BACKING,
);
})
.avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO)
.build_or_panic();
} }
/// Public key of the chain account that may be used to verify signatures. /// Public key of the chain account that may be used to verify signatures.
@@ -50,7 +50,7 @@ impl Chain for BridgeHubRococo {
} }
fn max_extrinsic_weight() -> Weight { fn max_extrinsic_weight() -> Weight {
BlockWeights::get() BlockWeightsForAsyncBacking::get()
.get(DispatchClass::Normal) .get(DispatchClass::Normal)
.max_extrinsic .max_extrinsic
.unwrap_or(Weight::MAX) .unwrap_or(Weight::MAX)
@@ -49,7 +49,7 @@ impl Chain for BridgeHubWestend {
} }
fn max_extrinsic_weight() -> Weight { fn max_extrinsic_weight() -> Weight {
BlockWeights::get() BlockWeightsForAsyncBacking::get()
.get(DispatchClass::Normal) .get(DispatchClass::Normal)
.max_extrinsic .max_extrinsic
.unwrap_or(Weight::MAX) .unwrap_or(Weight::MAX)
@@ -394,7 +394,7 @@ mod benchmarks {
register_validators::<T>(c); register_validators::<T>(c);
register_candidates::<T>(c); register_candidates::<T>(c);
let new_block: BlockNumberFor<T> = 1800u32.into(); let new_block: BlockNumberFor<T> = T::KickThreshold::get();
let zero_block: BlockNumberFor<T> = 0u32.into(); let zero_block: BlockNumberFor<T> = 0u32.into();
let candidates: Vec<T::AccountId> = <CandidateList<T>>::get() let candidates: Vec<T::AccountId> = <CandidateList<T>>::get()
.iter() .iter()
@@ -62,7 +62,7 @@ use frame_support::{
ConstU128, ConstU32, ConstU64, ConstU8, EitherOfDiverse, Equals, InstanceFilter, ConstU128, ConstU32, ConstU64, ConstU8, EitherOfDiverse, Equals, InstanceFilter,
TransformOrigin, TransformOrigin,
}, },
weights::{constants::WEIGHT_REF_TIME_PER_SECOND, ConstantMultiplier, Weight}, weights::{ConstantMultiplier, Weight},
BoundedVec, PalletId, BoundedVec, PalletId,
}; };
use frame_system::{ use frame_system::{
@@ -75,11 +75,10 @@ use parachains_common::{
impls::DealWithFees, impls::DealWithFees,
message_queue::{NarrowOriginToSibling, ParaIdToSibling}, message_queue::{NarrowOriginToSibling, ParaIdToSibling},
AccountId, AssetIdForTrustBackedAssets, AuraId, Balance, BlockNumber, CollectionId, Hash, AccountId, AssetIdForTrustBackedAssets, AuraId, Balance, BlockNumber, CollectionId, Hash,
Header, ItemId, Nonce, Signature, AVERAGE_ON_INITIALIZE_RATIO, DAYS, HOURS, Header, ItemId, Nonce, Signature, AVERAGE_ON_INITIALIZE_RATIO, NORMAL_DISPATCH_RATIO,
NORMAL_DISPATCH_RATIO,
}; };
use sp_runtime::{Perbill, RuntimeDebug}; use sp_runtime::{Perbill, RuntimeDebug};
use testnet_parachains_constants::rococo::{consensus::*, currency::*, fee::WeightToFee}; use testnet_parachains_constants::rococo::{consensus::*, currency::*, fee::WeightToFee, time::*};
use xcm_config::{ use xcm_config::{
ForeignAssetsConvertedConcreteId, ForeignCreatorsSovereignAccountOf, GovernanceLocation, ForeignAssetsConvertedConcreteId, ForeignCreatorsSovereignAccountOf, GovernanceLocation,
PoolAssetsConvertedConcreteId, TokenLocation, TokenLocationV3, PoolAssetsConvertedConcreteId, TokenLocation, TokenLocationV3,
@@ -140,28 +139,6 @@ pub fn native_version() -> NativeVersion {
NativeVersion { runtime_version: VERSION, can_author_with: Default::default() } NativeVersion { runtime_version: VERSION, can_author_with: Default::default() }
} }
/// We allow for 2 seconds of compute with a 6 second average block.
const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts(
WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2),
cumulus_primitives_core::relay_chain::MAX_POV_SIZE as u64,
);
/// Maximum number of blocks simultaneously accepted by the Runtime, not yet included
/// into the relay chain.
const UNINCLUDED_SEGMENT_CAPACITY: u32 = 3;
/// How many parachain blocks are processed by the relay chain per parent. Limits the
/// number of blocks authored per slot.
const BLOCK_PROCESSING_VELOCITY: u32 = 1;
/// This determines the average expected block time that we are targeting.
/// Blocks will be produced at a minimum duration defined by `SLOT_DURATION`.
/// `SLOT_DURATION` is picked up by `pallet_timestamp` which is in turn picked
/// up by `pallet_aura` to implement `fn slot_duration()`.
///
/// Change this to adjust the block time.
pub const MILLISECS_PER_BLOCK: u64 = 6000;
pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK;
parameter_types! { parameter_types! {
pub const Version: RuntimeVersion = VERSION; pub const Version: RuntimeVersion = VERSION;
pub RuntimeBlockLength: BlockLength = pub RuntimeBlockLength: BlockLength =
@@ -28,7 +28,7 @@ use asset_hub_rococo_runtime::{
AllPalletsWithoutSystem, AssetConversion, AssetDeposit, Assets, Balances, CollatorSelection, AllPalletsWithoutSystem, AssetConversion, AssetDeposit, Assets, Balances, CollatorSelection,
ExistentialDeposit, ForeignAssets, ForeignAssetsInstance, MetadataDepositBase, ExistentialDeposit, ForeignAssets, ForeignAssetsInstance, MetadataDepositBase,
MetadataDepositPerByte, ParachainSystem, Runtime, RuntimeCall, RuntimeEvent, SessionKeys, MetadataDepositPerByte, ParachainSystem, Runtime, RuntimeCall, RuntimeEvent, SessionKeys,
ToWestendXcmRouterInstance, TrustBackedAssetsInstance, XcmpQueue, SLOT_DURATION, ToWestendXcmRouterInstance, TrustBackedAssetsInstance, XcmpQueue,
}; };
use asset_test_utils::{ use asset_test_utils::{
test_cases_over_bridge::TestBridgingConfig, CollatorSessionKey, CollatorSessionKeys, test_cases_over_bridge::TestBridgingConfig, CollatorSessionKey, CollatorSessionKeys,
@@ -50,9 +50,7 @@ use parachains_common::{AccountId, AssetIdForTrustBackedAssets, AuraId, Balance}
use sp_consensus_aura::SlotDuration; use sp_consensus_aura::SlotDuration;
use sp_runtime::traits::MaybeEquivalence; use sp_runtime::traits::MaybeEquivalence;
use std::convert::Into; use std::convert::Into;
use testnet_parachains_constants::rococo::{ use testnet_parachains_constants::rococo::{consensus::*, currency::UNITS, fee::WeightToFee};
consensus::RELAY_CHAIN_SLOT_DURATION_MILLIS, currency::UNITS, fee::WeightToFee,
};
use xcm::latest::prelude::{Assets as XcmAssets, *}; use xcm::latest::prelude::{Assets as XcmAssets, *};
use xcm_builder::V4V3LocationConverter; use xcm_builder::V4V3LocationConverter;
use xcm_executor::traits::{JustTry, WeightTrader}; use xcm_executor::traits::{JustTry, WeightTrader};
@@ -73,6 +73,7 @@ cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system
cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false } cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false }
cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false }
cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false, features = ["bridging"] } cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false, features = ["bridging"] }
cumulus-primitives-aura = { path = "../../../../primitives/aura", default-features = false }
cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false }
cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false }
pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false }
@@ -175,6 +176,7 @@ std = [
"cumulus-pallet-session-benchmarking/std", "cumulus-pallet-session-benchmarking/std",
"cumulus-pallet-xcm/std", "cumulus-pallet-xcm/std",
"cumulus-pallet-xcmp-queue/std", "cumulus-pallet-xcmp-queue/std",
"cumulus-primitives-aura/std",
"cumulus-primitives-core/std", "cumulus-primitives-core/std",
"cumulus-primitives-utility/std", "cumulus-primitives-utility/std",
"frame-benchmarking?/std", "frame-benchmarking?/std",
@@ -32,7 +32,7 @@ use assets_common::{
AssetIdForTrustBackedAssetsConvert, AssetIdForTrustBackedAssetsConvert,
}; };
use codec::{Decode, Encode, MaxEncodedLen}; use codec::{Decode, Encode, MaxEncodedLen};
use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases;
use cumulus_primitives_core::{AggregateMessageOrigin, ParaId}; use cumulus_primitives_core::{AggregateMessageOrigin, ParaId};
use frame_support::{ use frame_support::{
construct_runtime, derive_impl, construct_runtime, derive_impl,
@@ -58,7 +58,7 @@ use pallet_xcm::EnsureXcm;
use parachains_common::{ use parachains_common::{
impls::DealWithFees, message_queue::*, AccountId, AssetIdForTrustBackedAssets, AuraId, Balance, impls::DealWithFees, message_queue::*, AccountId, AssetIdForTrustBackedAssets, AuraId, Balance,
BlockNumber, CollectionId, Hash, Header, ItemId, Nonce, Signature, AVERAGE_ON_INITIALIZE_RATIO, BlockNumber, CollectionId, Hash, Header, ItemId, Nonce, Signature, AVERAGE_ON_INITIALIZE_RATIO,
DAYS, HOURS, MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, NORMAL_DISPATCH_RATIO,
}; };
use sp_api::impl_runtime_apis; use sp_api::impl_runtime_apis;
use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; use sp_core::{crypto::KeyTypeId, OpaqueMetadata};
@@ -72,7 +72,7 @@ use sp_std::prelude::*;
#[cfg(feature = "std")] #[cfg(feature = "std")]
use sp_version::NativeVersion; use sp_version::NativeVersion;
use sp_version::RuntimeVersion; use sp_version::RuntimeVersion;
use testnet_parachains_constants::westend::{consensus::*, currency::*, fee::WeightToFee}; use testnet_parachains_constants::westend::{consensus::*, currency::*, fee::WeightToFee, time::*};
use xcm_config::{ use xcm_config::{
ForeignAssetsConvertedConcreteId, PoolAssetsConvertedConcreteId, ForeignAssetsConvertedConcreteId, PoolAssetsConvertedConcreteId,
TrustBackedAssetsConvertedConcreteId, TrustBackedAssetsPalletLocationV3, WestendLocation, TrustBackedAssetsConvertedConcreteId, TrustBackedAssetsPalletLocationV3, WestendLocation,
@@ -171,6 +171,9 @@ impl pallet_timestamp::Config for Runtime {
/// A timestamp: milliseconds since the unix epoch. /// A timestamp: milliseconds since the unix epoch.
type Moment = u64; type Moment = u64;
type OnTimestampSet = Aura; type OnTimestampSet = Aura;
#[cfg(feature = "experimental")]
type MinimumPeriod = ConstU64<0>;
#[cfg(not(feature = "experimental"))]
type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>;
type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>; type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>;
} }
@@ -604,15 +607,17 @@ impl cumulus_pallet_parachain_system::Config for Runtime {
type OutboundXcmpMessageSource = XcmpQueue; type OutboundXcmpMessageSource = XcmpQueue;
type XcmpMessageHandler = XcmpQueue; type XcmpMessageHandler = XcmpQueue;
type ReservedXcmpWeight = ReservedXcmpWeight; type ReservedXcmpWeight = ReservedXcmpWeight;
type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; type CheckAssociatedRelayNumber = RelayNumberMonotonicallyIncreases;
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< type ConsensusHook = ConsensusHook;
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
} }
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook<
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
impl parachain_info::Config for Runtime {} impl parachain_info::Config for Runtime {}
parameter_types! { parameter_types! {
@@ -697,9 +702,9 @@ impl pallet_aura::Config for Runtime {
type AuthorityId = AuraId; type AuthorityId = AuraId;
type DisabledValidators = (); type DisabledValidators = ();
type MaxAuthorities = ConstU32<100_000>; type MaxAuthorities = ConstU32<100_000>;
type AllowMultipleBlocksPerSlot = ConstBool<false>; type AllowMultipleBlocksPerSlot = ConstBool<true>;
#[cfg(feature = "experimental")] #[cfg(feature = "experimental")]
type SlotDuration = pallet_aura::MinimumPeriodTimesTwo<Self>; type SlotDuration = ConstU64<SLOT_DURATION>;
} }
parameter_types! { parameter_types! {
@@ -980,7 +985,7 @@ impl frame_support::traits::OnRuntimeUpgrade for DeleteUndecodableStorage {
}, },
Err(e) => { Err(e) => {
log::error!("Failed to destroy undecodable NFT item: {:?}", e); log::error!("Failed to destroy undecodable NFT item: {:?}", e);
return <Runtime as frame_system::Config>::DbWeight::get().reads_writes(0, writes) return <Runtime as frame_system::Config>::DbWeight::get().reads_writes(0, writes);
}, },
} }
@@ -992,7 +997,7 @@ impl frame_support::traits::OnRuntimeUpgrade for DeleteUndecodableStorage {
}, },
Err(e) => { Err(e) => {
log::error!("Failed to destroy undecodable NFT item: {:?}", e); log::error!("Failed to destroy undecodable NFT item: {:?}", e);
return <Runtime as frame_system::Config>::DbWeight::get().reads_writes(0, writes) return <Runtime as frame_system::Config>::DbWeight::get().reads_writes(0, writes);
}, },
} }
@@ -1090,7 +1095,7 @@ mod benches {
impl_runtime_apis! { impl_runtime_apis! {
impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime { impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime {
fn slot_duration() -> sp_consensus_aura::SlotDuration { fn slot_duration() -> sp_consensus_aura::SlotDuration {
sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) sp_consensus_aura::SlotDuration::from_millis(SLOT_DURATION)
} }
fn authorities() -> Vec<AuraId> { fn authorities() -> Vec<AuraId> {
@@ -1098,6 +1103,15 @@ impl_runtime_apis! {
} }
} }
impl cumulus_primitives_aura::AuraUnincludedSegmentApi<Block> for Runtime {
fn can_build_upon(
included_hash: <Block as BlockT>::Hash,
slot: cumulus_primitives_aura::Slot,
) -> bool {
ConsensusHook::can_build_upon(included_hash, slot)
}
}
impl sp_api::Core<Block> for Runtime { impl sp_api::Core<Block> for Runtime {
fn version() -> RuntimeVersion { fn version() -> RuntimeVersion {
VERSION VERSION
@@ -47,13 +47,11 @@ use frame_support::{
}, },
weights::{Weight, WeightToFee as WeightToFeeT}, weights::{Weight, WeightToFee as WeightToFeeT},
}; };
use parachains_common::{AccountId, AssetIdForTrustBackedAssets, AuraId, Balance, SLOT_DURATION}; use parachains_common::{AccountId, AssetIdForTrustBackedAssets, AuraId, Balance};
use sp_consensus_aura::SlotDuration; use sp_consensus_aura::SlotDuration;
use sp_runtime::traits::MaybeEquivalence; use sp_runtime::traits::MaybeEquivalence;
use std::convert::Into; use std::convert::Into;
use testnet_parachains_constants::westend::{ use testnet_parachains_constants::westend::{consensus::*, currency::UNITS, fee::WeightToFee};
consensus::RELAY_CHAIN_SLOT_DURATION_MILLIS, currency::UNITS, fee::WeightToFee,
};
use xcm::latest::prelude::{Assets as XcmAssets, *}; use xcm::latest::prelude::{Assets as XcmAssets, *};
use xcm_builder::V4V3LocationConverter; use xcm_builder::V4V3LocationConverter;
use xcm_executor::traits::{JustTry, WeightTrader}; use xcm_executor::traits::{JustTry, WeightTrader};
@@ -76,6 +76,7 @@ cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = fals
cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false, features = [ cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false, features = [
"bridging", "bridging",
] } ] }
cumulus-primitives-aura = { path = "../../../../primitives/aura", default-features = false }
cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false }
cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false }
pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false }
@@ -153,6 +154,7 @@ std = [
"cumulus-pallet-session-benchmarking/std", "cumulus-pallet-session-benchmarking/std",
"cumulus-pallet-xcm/std", "cumulus-pallet-xcm/std",
"cumulus-pallet-xcmp-queue/std", "cumulus-pallet-xcmp-queue/std",
"cumulus-primitives-aura/std",
"cumulus-primitives-core/std", "cumulus-primitives-core/std",
"cumulus-primitives-utility/std", "cumulus-primitives-utility/std",
"frame-benchmarking/std", "frame-benchmarking/std",
@@ -299,7 +299,7 @@ mod tests {
>(AssertCompleteBridgeConstants { >(AssertCompleteBridgeConstants {
this_chain_constants: AssertChainConstants { this_chain_constants: AssertChainConstants {
block_length: bp_bridge_hub_rococo::BlockLength::get(), block_length: bp_bridge_hub_rococo::BlockLength::get(),
block_weights: bp_bridge_hub_rococo::BlockWeights::get(), block_weights: bp_bridge_hub_rococo::BlockWeightsForAsyncBacking::get(),
}, },
messages_pallet_constants: AssertBridgeMessagesPalletConstants { messages_pallet_constants: AssertBridgeMessagesPalletConstants {
max_unrewarded_relayers_in_bridged_confirmation_tx: max_unrewarded_relayers_in_bridged_confirmation_tx:
@@ -35,7 +35,7 @@ pub mod bridge_to_westend_config;
mod weights; mod weights;
pub mod xcm_config; pub mod xcm_config;
use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases;
use snowbridge_beacon_primitives::{Fork, ForkVersions}; use snowbridge_beacon_primitives::{Fork, ForkVersions};
use snowbridge_core::{ use snowbridge_core::{
gwei, meth, outbound::Message, AgentId, AllowSiblingsOnly, PricingParameters, Rewards, gwei, meth, outbound::Message, AgentId, AllowSiblingsOnly, PricingParameters, Rewards,
@@ -69,6 +69,9 @@ use frame_system::{
limits::{BlockLength, BlockWeights}, limits::{BlockLength, BlockWeights},
EnsureRoot, EnsureRoot,
}; };
use testnet_parachains_constants::rococo::{
consensus::*, currency::*, fee::WeightToFee, snowbridge::INBOUND_QUEUE_PALLET_INDEX, time::*,
};
#[cfg(feature = "runtime-benchmarks")] #[cfg(feature = "runtime-benchmarks")]
use bp_runtime::Chain; use bp_runtime::Chain;
@@ -94,10 +97,7 @@ use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight};
use parachains_common::{ use parachains_common::{
impls::DealWithFees, AccountId, Balance, BlockNumber, Hash, Header, Nonce, Signature, impls::DealWithFees, AccountId, Balance, BlockNumber, Hash, Header, Nonce, Signature,
AVERAGE_ON_INITIALIZE_RATIO, HOURS, MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, AVERAGE_ON_INITIALIZE_RATIO, NORMAL_DISPATCH_RATIO,
};
use testnet_parachains_constants::rococo::{
consensus::*, currency::*, fee::WeightToFee, snowbridge::INBOUND_QUEUE_PALLET_INDEX,
}; };
use polkadot_runtime_common::prod_or_fast; use polkadot_runtime_common::prod_or_fast;
@@ -279,6 +279,9 @@ impl pallet_timestamp::Config for Runtime {
/// A timestamp: milliseconds since the unix epoch. /// A timestamp: milliseconds since the unix epoch.
type Moment = u64; type Moment = u64;
type OnTimestampSet = Aura; type OnTimestampSet = Aura;
#[cfg(feature = "experimental")]
type MinimumPeriod = ConstU64<0>;
#[cfg(not(feature = "experimental"))]
type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>;
type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>; type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>;
} }
@@ -340,15 +343,17 @@ impl cumulus_pallet_parachain_system::Config for Runtime {
type ReservedDmpWeight = ReservedDmpWeight; type ReservedDmpWeight = ReservedDmpWeight;
type XcmpMessageHandler = XcmpQueue; type XcmpMessageHandler = XcmpQueue;
type ReservedXcmpWeight = ReservedXcmpWeight; type ReservedXcmpWeight = ReservedXcmpWeight;
type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; type CheckAssociatedRelayNumber = RelayNumberMonotonicallyIncreases;
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< type ConsensusHook = ConsensusHook;
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
} }
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook<
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
impl parachain_info::Config for Runtime {} impl parachain_info::Config for Runtime {}
parameter_types! { parameter_types! {
@@ -437,9 +442,9 @@ impl pallet_aura::Config for Runtime {
type AuthorityId = AuraId; type AuthorityId = AuraId;
type DisabledValidators = (); type DisabledValidators = ();
type MaxAuthorities = ConstU32<100_000>; type MaxAuthorities = ConstU32<100_000>;
type AllowMultipleBlocksPerSlot = ConstBool<false>; type AllowMultipleBlocksPerSlot = ConstBool<true>;
#[cfg(feature = "experimental")] #[cfg(feature = "experimental")]
type SlotDuration = pallet_aura::MinimumPeriodTimesTwo<Self>; type SlotDuration = ConstU64<SLOT_DURATION>;
} }
parameter_types! { parameter_types! {
@@ -783,7 +788,7 @@ mod benches {
impl_runtime_apis! { impl_runtime_apis! {
impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime { impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime {
fn slot_duration() -> sp_consensus_aura::SlotDuration { fn slot_duration() -> sp_consensus_aura::SlotDuration {
sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) sp_consensus_aura::SlotDuration::from_millis(SLOT_DURATION)
} }
fn authorities() -> Vec<AuraId> { fn authorities() -> Vec<AuraId> {
@@ -791,6 +796,15 @@ impl_runtime_apis! {
} }
} }
impl cumulus_primitives_aura::AuraUnincludedSegmentApi<Block> for Runtime {
fn can_build_upon(
included_hash: <Block as BlockT>::Hash,
slot: cumulus_primitives_aura::Slot,
) -> bool {
ConsensusHook::can_build_upon(included_hash, slot)
}
}
impl sp_api::Core<Block> for Runtime { impl sp_api::Core<Block> for Runtime {
fn version() -> RuntimeVersion { fn version() -> RuntimeVersion {
VERSION VERSION
@@ -27,7 +27,7 @@ use bridge_hub_rococo_runtime::{
use bridge_hub_test_utils::SlotDurations; use bridge_hub_test_utils::SlotDurations;
use codec::{Decode, Encode}; use codec::{Decode, Encode};
use frame_support::{dispatch::GetDispatchInfo, parameter_types, traits::ConstU8}; use frame_support::{dispatch::GetDispatchInfo, parameter_types, traits::ConstU8};
use parachains_common::{AccountId, AuraId, Balance, SLOT_DURATION}; use parachains_common::{AccountId, AuraId, Balance};
use snowbridge_core::ChannelId; use snowbridge_core::ChannelId;
use sp_consensus_aura::SlotDuration; use sp_consensus_aura::SlotDuration;
use sp_core::H160; use sp_core::H160;
@@ -36,9 +36,7 @@ use sp_runtime::{
generic::{Era, SignedPayload}, generic::{Era, SignedPayload},
AccountId32, Perbill, AccountId32, Perbill,
}; };
use testnet_parachains_constants::rococo::{ use testnet_parachains_constants::rococo::{consensus::*, fee::WeightToFee};
consensus::RELAY_CHAIN_SLOT_DURATION_MILLIS, fee::WeightToFee,
};
use xcm::latest::prelude::*; use xcm::latest::prelude::*;
parameter_types! { parameter_types! {
@@ -68,6 +68,7 @@ cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system
cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false } cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false }
cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false }
cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false, features = ["bridging"] } cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false, features = ["bridging"] }
cumulus-primitives-aura = { path = "../../../../primitives/aura", default-features = false }
cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false }
cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false }
pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false }
@@ -125,6 +126,7 @@ std = [
"cumulus-pallet-session-benchmarking/std", "cumulus-pallet-session-benchmarking/std",
"cumulus-pallet-xcm/std", "cumulus-pallet-xcm/std",
"cumulus-pallet-xcmp-queue/std", "cumulus-pallet-xcmp-queue/std",
"cumulus-primitives-aura/std",
"cumulus-primitives-core/std", "cumulus-primitives-core/std",
"cumulus-primitives-utility/std", "cumulus-primitives-utility/std",
"frame-benchmarking/std", "frame-benchmarking/std",
@@ -334,7 +334,7 @@ mod tests {
>(AssertCompleteBridgeConstants { >(AssertCompleteBridgeConstants {
this_chain_constants: AssertChainConstants { this_chain_constants: AssertChainConstants {
block_length: bp_bridge_hub_westend::BlockLength::get(), block_length: bp_bridge_hub_westend::BlockLength::get(),
block_weights: bp_bridge_hub_westend::BlockWeights::get(), block_weights: bp_bridge_hub_westend::BlockWeightsForAsyncBacking::get(),
}, },
messages_pallet_constants: AssertBridgeMessagesPalletConstants { messages_pallet_constants: AssertBridgeMessagesPalletConstants {
max_unrewarded_relayers_in_bridged_confirmation_tx: max_unrewarded_relayers_in_bridged_confirmation_tx:
@@ -32,7 +32,7 @@ pub mod bridge_to_rococo_config;
mod weights; mod weights;
pub mod xcm_config; pub mod xcm_config;
use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases;
use cumulus_primitives_core::ParaId; use cumulus_primitives_core::ParaId;
use sp_api::impl_runtime_apis; use sp_api::impl_runtime_apis;
use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; use sp_core::{crypto::KeyTypeId, OpaqueMetadata};
@@ -83,9 +83,9 @@ use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight};
use parachains_common::{ use parachains_common::{
impls::DealWithFees, AccountId, Balance, BlockNumber, Hash, Header, Nonce, Signature, impls::DealWithFees, AccountId, Balance, BlockNumber, Hash, Header, Nonce, Signature,
AVERAGE_ON_INITIALIZE_RATIO, HOURS, MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, AVERAGE_ON_INITIALIZE_RATIO, NORMAL_DISPATCH_RATIO,
}; };
use testnet_parachains_constants::westend::{consensus::*, currency::*, fee::WeightToFee}; use testnet_parachains_constants::westend::{consensus::*, currency::*, fee::WeightToFee, time::*};
/// The address format for describing accounts. /// The address format for describing accounts.
pub type Address = MultiAddress<AccountId, ()>; pub type Address = MultiAddress<AccountId, ()>;
@@ -251,6 +251,9 @@ impl pallet_timestamp::Config for Runtime {
/// A timestamp: milliseconds since the unix epoch. /// A timestamp: milliseconds since the unix epoch.
type Moment = u64; type Moment = u64;
type OnTimestampSet = Aura; type OnTimestampSet = Aura;
#[cfg(feature = "experimental")]
type MinimumPeriod = ConstU64<0>;
#[cfg(not(feature = "experimental"))]
type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>;
type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>; type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>;
} }
@@ -312,15 +315,17 @@ impl cumulus_pallet_parachain_system::Config for Runtime {
type ReservedDmpWeight = ReservedDmpWeight; type ReservedDmpWeight = ReservedDmpWeight;
type XcmpMessageHandler = XcmpQueue; type XcmpMessageHandler = XcmpQueue;
type ReservedXcmpWeight = ReservedXcmpWeight; type ReservedXcmpWeight = ReservedXcmpWeight;
type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; type CheckAssociatedRelayNumber = RelayNumberMonotonicallyIncreases;
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< type ConsensusHook = ConsensusHook;
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
} }
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook<
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
impl parachain_info::Config for Runtime {} impl parachain_info::Config for Runtime {}
parameter_types! { parameter_types! {
@@ -401,9 +406,9 @@ impl pallet_aura::Config for Runtime {
type AuthorityId = AuraId; type AuthorityId = AuraId;
type DisabledValidators = (); type DisabledValidators = ();
type MaxAuthorities = ConstU32<100_000>; type MaxAuthorities = ConstU32<100_000>;
type AllowMultipleBlocksPerSlot = ConstBool<false>; type AllowMultipleBlocksPerSlot = ConstBool<true>;
#[cfg(feature = "experimental")] #[cfg(feature = "experimental")]
type SlotDuration = pallet_aura::MinimumPeriodTimesTwo<Self>; type SlotDuration = ConstU64<SLOT_DURATION>;
} }
parameter_types! { parameter_types! {
@@ -534,7 +539,7 @@ mod benches {
impl_runtime_apis! { impl_runtime_apis! {
impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime { impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime {
fn slot_duration() -> sp_consensus_aura::SlotDuration { fn slot_duration() -> sp_consensus_aura::SlotDuration {
sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) sp_consensus_aura::SlotDuration::from_millis(SLOT_DURATION)
} }
fn authorities() -> Vec<AuraId> { fn authorities() -> Vec<AuraId> {
@@ -542,6 +547,15 @@ impl_runtime_apis! {
} }
} }
impl cumulus_primitives_aura::AuraUnincludedSegmentApi<Block> for Runtime {
fn can_build_upon(
included_hash: <Block as BlockT>::Hash,
slot: cumulus_primitives_aura::Slot,
) -> bool {
ConsensusHook::can_build_upon(included_hash, slot)
}
}
impl sp_api::Core<Block> for Runtime { impl sp_api::Core<Block> for Runtime {
fn version() -> RuntimeVersion { fn version() -> RuntimeVersion {
VERSION VERSION
@@ -33,16 +33,14 @@ use bridge_to_rococo_config::{
}; };
use codec::{Decode, Encode}; use codec::{Decode, Encode};
use frame_support::{dispatch::GetDispatchInfo, parameter_types, traits::ConstU8}; use frame_support::{dispatch::GetDispatchInfo, parameter_types, traits::ConstU8};
use parachains_common::{AccountId, AuraId, Balance, SLOT_DURATION}; use parachains_common::{AccountId, AuraId, Balance};
use sp_consensus_aura::SlotDuration; use sp_consensus_aura::SlotDuration;
use sp_keyring::AccountKeyring::Alice; use sp_keyring::AccountKeyring::Alice;
use sp_runtime::{ use sp_runtime::{
generic::{Era, SignedPayload}, generic::{Era, SignedPayload},
AccountId32, Perbill, AccountId32, Perbill,
}; };
use testnet_parachains_constants::westend::{ use testnet_parachains_constants::westend::{consensus::*, fee::WeightToFee};
consensus::RELAY_CHAIN_SLOT_DURATION_MILLIS, fee::WeightToFee,
};
use xcm::latest::prelude::*; use xcm::latest::prelude::*;
// Para id of sibling chain used in tests. // Para id of sibling chain used in tests.
@@ -74,6 +74,7 @@ cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system
cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false } cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false }
cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false }
cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false }
cumulus-primitives-aura = { path = "../../../../primitives/aura", default-features = false }
cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false }
cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false }
pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false }
@@ -169,6 +170,7 @@ std = [
"cumulus-pallet-session-benchmarking/std", "cumulus-pallet-session-benchmarking/std",
"cumulus-pallet-xcm/std", "cumulus-pallet-xcm/std",
"cumulus-pallet-xcmp-queue/std", "cumulus-pallet-xcmp-queue/std",
"cumulus-primitives-aura/std",
"cumulus-primitives-core/std", "cumulus-primitives-core/std",
"cumulus-primitives-utility/std", "cumulus-primitives-utility/std",
"frame-benchmarking?/std", "frame-benchmarking?/std",
@@ -44,7 +44,7 @@ pub mod xcm_config;
pub mod fellowship; pub mod fellowship;
pub use ambassador::pallet_ambassador_origins; pub use ambassador::pallet_ambassador_origins;
use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases;
use fellowship::{pallet_fellowship_origins, Fellows}; use fellowship::{pallet_fellowship_origins, Fellows};
use impls::{AllianceProposalProvider, EqualOrGreatestRootCmp}; use impls::{AllianceProposalProvider, EqualOrGreatestRootCmp};
use sp_api::impl_runtime_apis; use sp_api::impl_runtime_apis;
@@ -84,12 +84,11 @@ use parachains_common::{
impls::{DealWithFees, ToParentTreasury}, impls::{DealWithFees, ToParentTreasury},
message_queue::*, message_queue::*,
AccountId, AuraId, Balance, BlockNumber, Hash, Header, Nonce, Signature, AccountId, AuraId, Balance, BlockNumber, Hash, Header, Nonce, Signature,
AVERAGE_ON_INITIALIZE_RATIO, DAYS, HOURS, MAXIMUM_BLOCK_WEIGHT, MINUTES, NORMAL_DISPATCH_RATIO, AVERAGE_ON_INITIALIZE_RATIO, NORMAL_DISPATCH_RATIO,
SLOT_DURATION,
}; };
use sp_runtime::RuntimeDebug; use sp_runtime::RuntimeDebug;
use testnet_parachains_constants::westend::{ use testnet_parachains_constants::westend::{
account::*, consensus::*, currency::*, fee::WeightToFee, account::*, consensus::*, currency::*, fee::WeightToFee, time::*,
}; };
use xcm_config::{ use xcm_config::{
GovernanceLocation, LocationToAccountId, TreasurerBodyId, XcmOriginToTransactDispatchOrigin, GovernanceLocation, LocationToAccountId, TreasurerBodyId, XcmOriginToTransactDispatchOrigin,
@@ -185,6 +184,9 @@ impl pallet_timestamp::Config for Runtime {
/// A timestamp: milliseconds since the unix epoch. /// A timestamp: milliseconds since the unix epoch.
type Moment = u64; type Moment = u64;
type OnTimestampSet = Aura; type OnTimestampSet = Aura;
#[cfg(feature = "experimental")]
type MinimumPeriod = ConstU64<0>;
#[cfg(not(feature = "experimental"))]
type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>;
type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>; type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>;
} }
@@ -387,15 +389,17 @@ impl cumulus_pallet_parachain_system::Config for Runtime {
type OutboundXcmpMessageSource = XcmpQueue; type OutboundXcmpMessageSource = XcmpQueue;
type XcmpMessageHandler = XcmpQueue; type XcmpMessageHandler = XcmpQueue;
type ReservedXcmpWeight = ReservedXcmpWeight; type ReservedXcmpWeight = ReservedXcmpWeight;
type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; type CheckAssociatedRelayNumber = RelayNumberMonotonicallyIncreases;
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< type ConsensusHook = ConsensusHook;
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
} }
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook<
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
impl parachain_info::Config for Runtime {} impl parachain_info::Config for Runtime {}
parameter_types! { parameter_types! {
@@ -478,9 +482,9 @@ impl pallet_aura::Config for Runtime {
type AuthorityId = AuraId; type AuthorityId = AuraId;
type DisabledValidators = (); type DisabledValidators = ();
type MaxAuthorities = ConstU32<100_000>; type MaxAuthorities = ConstU32<100_000>;
type AllowMultipleBlocksPerSlot = ConstBool<false>; type AllowMultipleBlocksPerSlot = ConstBool<true>;
#[cfg(feature = "experimental")] #[cfg(feature = "experimental")]
type SlotDuration = pallet_aura::MinimumPeriodTimesTwo<Self>; type SlotDuration = ConstU64<SLOT_DURATION>;
} }
parameter_types! { parameter_types! {
@@ -771,7 +775,7 @@ mod benches {
impl_runtime_apis! { impl_runtime_apis! {
impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime { impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime {
fn slot_duration() -> sp_consensus_aura::SlotDuration { fn slot_duration() -> sp_consensus_aura::SlotDuration {
sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) sp_consensus_aura::SlotDuration::from_millis(SLOT_DURATION)
} }
fn authorities() -> Vec<AuraId> { fn authorities() -> Vec<AuraId> {
@@ -779,6 +783,15 @@ impl_runtime_apis! {
} }
} }
impl cumulus_primitives_aura::AuraUnincludedSegmentApi<Block> for Runtime {
fn can_build_upon(
included_hash: <Block as BlockT>::Hash,
slot: cumulus_primitives_aura::Slot,
) -> bool {
ConsensusHook::can_build_upon(included_hash, slot)
}
}
impl sp_api::Core<Block> for Runtime { impl sp_api::Core<Block> for Runtime {
fn version() -> RuntimeVersion { fn version() -> RuntimeVersion {
VERSION VERSION
@@ -25,9 +25,13 @@ rococo-runtime-constants = { path = "../../../../polkadot/runtime/rococo/constan
westend-runtime-constants = { path = "../../../../polkadot/runtime/westend/constants", default-features = false, optional = true } westend-runtime-constants = { path = "../../../../polkadot/runtime/westend/constants", default-features = false, optional = true }
xcm = { package = "staging-xcm", path = "../../../../polkadot/xcm", default-features = false } xcm = { package = "staging-xcm", path = "../../../../polkadot/xcm", default-features = false }
# Cumulus
cumulus-primitives-core = { path = "../../../primitives/core", default-features = false }
[features] [features]
default = ["std"] default = ["std"]
std = [ std = [
"cumulus-primitives-core/std",
"frame-support/std", "frame-support/std",
"polkadot-core-primitives/std", "polkadot-core-primitives/std",
"rococo-runtime-constants?/std", "rococo-runtime-constants?/std",
@@ -108,14 +108,42 @@ pub mod fee {
/// Consensus-related. /// Consensus-related.
pub mod consensus { pub mod consensus {
use frame_support::weights::{constants::WEIGHT_REF_TIME_PER_SECOND, Weight};
/// Maximum number of blocks simultaneously accepted by the Runtime, not yet included /// Maximum number of blocks simultaneously accepted by the Runtime, not yet included
/// into the relay chain. /// into the relay chain.
pub const UNINCLUDED_SEGMENT_CAPACITY: u32 = 1; pub const UNINCLUDED_SEGMENT_CAPACITY: u32 = 3;
/// How many parachain blocks are processed by the relay chain per parent. Limits the /// How many parachain blocks are processed by the relay chain per parent. Limits the
/// number of blocks authored per slot. /// number of blocks authored per slot.
pub const BLOCK_PROCESSING_VELOCITY: u32 = 1; pub const BLOCK_PROCESSING_VELOCITY: u32 = 1;
/// Relay chain slot duration, in milliseconds. /// Relay chain slot duration, in milliseconds.
pub const RELAY_CHAIN_SLOT_DURATION_MILLIS: u32 = 6000; pub const RELAY_CHAIN_SLOT_DURATION_MILLIS: u32 = 6000;
/// We allow for 2 seconds of compute with a 6 second average block.
pub const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts(
WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2),
cumulus_primitives_core::relay_chain::MAX_POV_SIZE as u64,
);
/// This determines the average expected block time that we are targeting.
/// Blocks will be produced at a minimum duration defined by `SLOT_DURATION`.
/// `SLOT_DURATION` is picked up by `pallet_timestamp` which is in turn picked
/// up by `pallet_aura` to implement `fn slot_duration()`.
///
/// Change this to adjust the block time.
pub const MILLISECS_PER_BLOCK: u64 = 6000;
pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK;
}
/// Time-related
pub mod time {
use polkadot_core_primitives::BlockNumber;
// Time is measured by number of blocks.
pub const MINUTES: BlockNumber =
60_000 / (super::consensus::MILLISECS_PER_BLOCK as BlockNumber);
pub const HOURS: BlockNumber = MINUTES * 60;
pub const DAYS: BlockNumber = HOURS * 24;
} }
pub mod snowbridge { pub mod snowbridge {
@@ -131,12 +131,40 @@ pub mod fee {
/// Consensus-related. /// Consensus-related.
pub mod consensus { pub mod consensus {
use frame_support::weights::{constants::WEIGHT_REF_TIME_PER_SECOND, Weight};
/// Maximum number of blocks simultaneously accepted by the Runtime, not yet included into the /// Maximum number of blocks simultaneously accepted by the Runtime, not yet included into the
/// relay chain. /// relay chain.
pub const UNINCLUDED_SEGMENT_CAPACITY: u32 = 1; pub const UNINCLUDED_SEGMENT_CAPACITY: u32 = 3;
/// How many parachain blocks are processed by the relay chain per parent. Limits the number of /// How many parachain blocks are processed by the relay chain per parent. Limits the number of
/// blocks authored per slot. /// blocks authored per slot.
pub const BLOCK_PROCESSING_VELOCITY: u32 = 1; pub const BLOCK_PROCESSING_VELOCITY: u32 = 1;
/// Relay chain slot duration, in milliseconds. /// Relay chain slot duration, in milliseconds.
pub const RELAY_CHAIN_SLOT_DURATION_MILLIS: u32 = 6000; pub const RELAY_CHAIN_SLOT_DURATION_MILLIS: u32 = 6000;
/// We allow for 2 seconds of compute with a 6 second average block.
pub const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts(
WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2),
cumulus_primitives_core::relay_chain::MAX_POV_SIZE as u64,
);
/// This determines the average expected block time that we are targeting.
/// Blocks will be produced at a minimum duration defined by `SLOT_DURATION`.
/// `SLOT_DURATION` is picked up by `pallet_timestamp` which is in turn picked
/// up by `pallet_aura` to implement `fn slot_duration()`.
///
/// Change this to adjust the block time.
pub const MILLISECS_PER_BLOCK: u64 = 6000;
pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK;
}
/// Time-related
pub mod time {
use polkadot_core_primitives::BlockNumber;
// Time is measured by number of blocks.
pub const MINUTES: BlockNumber =
60_000 / (super::consensus::MILLISECS_PER_BLOCK as BlockNumber);
pub const HOURS: BlockNumber = MINUTES * 60;
pub const DAYS: BlockNumber = HOURS * 24;
} }
@@ -71,6 +71,7 @@ cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system
cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false } cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false }
cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false }
cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false }
cumulus-primitives-aura = { path = "../../../../primitives/aura", default-features = false }
cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false }
cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false }
pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false }
@@ -87,6 +88,7 @@ std = [
"cumulus-pallet-session-benchmarking/std", "cumulus-pallet-session-benchmarking/std",
"cumulus-pallet-xcm/std", "cumulus-pallet-xcm/std",
"cumulus-pallet-xcmp-queue/std", "cumulus-pallet-xcmp-queue/std",
"cumulus-primitives-aura/std",
"cumulus-primitives-core/std", "cumulus-primitives-core/std",
"cumulus-primitives-utility/std", "cumulus-primitives-utility/std",
"frame-benchmarking?/std", "frame-benchmarking?/std",
@@ -29,7 +29,7 @@ mod contracts;
mod weights; mod weights;
mod xcm_config; mod xcm_config;
use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases;
use cumulus_primitives_core::AggregateMessageOrigin; use cumulus_primitives_core::AggregateMessageOrigin;
use sp_api::impl_runtime_apis; use sp_api::impl_runtime_apis;
use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; use sp_core::{crypto::KeyTypeId, OpaqueMetadata};
@@ -58,8 +58,7 @@ use frame_system::limits::{BlockLength, BlockWeights};
pub use parachains_common as common; pub use parachains_common as common;
use parachains_common::{ use parachains_common::{
impls::DealWithFees, message_queue::*, AccountId, BlockNumber, Hash, Header, Nonce, Signature, impls::DealWithFees, message_queue::*, AccountId, BlockNumber, Hash, Header, Nonce, Signature,
AVERAGE_ON_INITIALIZE_RATIO, MAXIMUM_BLOCK_WEIGHT, MINUTES, NORMAL_DISPATCH_RATIO, AVERAGE_ON_INITIALIZE_RATIO, MINUTES, NORMAL_DISPATCH_RATIO,
SLOT_DURATION,
}; };
pub use parachains_common::{AuraId, Balance}; pub use parachains_common::{AuraId, Balance};
use testnet_parachains_constants::rococo::{consensus::*, currency::*, fee::WeightToFee}; use testnet_parachains_constants::rococo::{consensus::*, currency::*, fee::WeightToFee};
@@ -192,6 +191,9 @@ impl pallet_timestamp::Config for Runtime {
/// A timestamp: milliseconds since the unix epoch. /// A timestamp: milliseconds since the unix epoch.
type Moment = u64; type Moment = u64;
type OnTimestampSet = Aura; type OnTimestampSet = Aura;
#[cfg(feature = "experimental")]
type MinimumPeriod = ConstU64<0>;
#[cfg(not(feature = "experimental"))]
type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>;
type WeightInfo = pallet_timestamp::weights::SubstrateWeight<Runtime>; type WeightInfo = pallet_timestamp::weights::SubstrateWeight<Runtime>;
} }
@@ -274,15 +276,17 @@ impl cumulus_pallet_parachain_system::Config for Runtime {
type OutboundXcmpMessageSource = XcmpQueue; type OutboundXcmpMessageSource = XcmpQueue;
type XcmpMessageHandler = XcmpQueue; type XcmpMessageHandler = XcmpQueue;
type ReservedXcmpWeight = ReservedXcmpWeight; type ReservedXcmpWeight = ReservedXcmpWeight;
type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; type CheckAssociatedRelayNumber = RelayNumberMonotonicallyIncreases;
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< type ConsensusHook = ConsensusHook;
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
} }
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook<
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
impl pallet_insecure_randomness_collective_flip::Config for Runtime {} impl pallet_insecure_randomness_collective_flip::Config for Runtime {}
impl parachain_info::Config for Runtime {} impl parachain_info::Config for Runtime {}
@@ -338,9 +342,9 @@ impl pallet_aura::Config for Runtime {
type AuthorityId = AuraId; type AuthorityId = AuraId;
type DisabledValidators = (); type DisabledValidators = ();
type MaxAuthorities = ConstU32<100_000>; type MaxAuthorities = ConstU32<100_000>;
type AllowMultipleBlocksPerSlot = ConstBool<false>; type AllowMultipleBlocksPerSlot = ConstBool<true>;
#[cfg(feature = "experimental")] #[cfg(feature = "experimental")]
type SlotDuration = pallet_aura::MinimumPeriodTimesTwo<Self>; type SlotDuration = ConstU64<SLOT_DURATION>;
} }
parameter_types! { parameter_types! {
@@ -429,7 +433,7 @@ mod benches {
impl_runtime_apis! { impl_runtime_apis! {
impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime { impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime {
fn slot_duration() -> sp_consensus_aura::SlotDuration { fn slot_duration() -> sp_consensus_aura::SlotDuration {
sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) sp_consensus_aura::SlotDuration::from_millis(SLOT_DURATION)
} }
fn authorities() -> Vec<AuraId> { fn authorities() -> Vec<AuraId> {
@@ -437,6 +441,15 @@ impl_runtime_apis! {
} }
} }
impl cumulus_primitives_aura::AuraUnincludedSegmentApi<Block> for Runtime {
fn can_build_upon(
included_hash: <Block as BlockT>::Hash,
slot: cumulus_primitives_aura::Slot,
) -> bool {
ConsensusHook::can_build_upon(included_hash, slot)
}
}
impl sp_api::Core<Block> for Runtime { impl sp_api::Core<Block> for Runtime {
fn version() -> RuntimeVersion { fn version() -> RuntimeVersion {
VERSION VERSION
@@ -70,6 +70,7 @@ cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system
cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false } cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false }
cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false }
cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false }
cumulus-primitives-aura = { path = "../../../../primitives/aura", default-features = false }
cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false }
cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false }
pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false }
@@ -86,6 +87,7 @@ std = [
"cumulus-pallet-session-benchmarking/std", "cumulus-pallet-session-benchmarking/std",
"cumulus-pallet-xcm/std", "cumulus-pallet-xcm/std",
"cumulus-pallet-xcmp-queue/std", "cumulus-pallet-xcmp-queue/std",
"cumulus-primitives-aura/std",
"cumulus-primitives-core/std", "cumulus-primitives-core/std",
"cumulus-primitives-utility/std", "cumulus-primitives-utility/std",
"frame-benchmarking?/std", "frame-benchmarking?/std",
@@ -33,7 +33,7 @@ mod coretime;
mod weights; mod weights;
pub mod xcm_config; pub mod xcm_config;
use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases;
use cumulus_primitives_core::{AggregateMessageOrigin, ParaId}; use cumulus_primitives_core::{AggregateMessageOrigin, ParaId};
use frame_support::{ use frame_support::{
construct_runtime, derive_impl, construct_runtime, derive_impl,
@@ -53,7 +53,7 @@ use parachains_common::{
impls::DealWithFees, impls::DealWithFees,
message_queue::{NarrowOriginToSibling, ParaIdToSibling}, message_queue::{NarrowOriginToSibling, ParaIdToSibling},
AccountId, AuraId, Balance, BlockNumber, Hash, Header, Nonce, Signature, AccountId, AuraId, Balance, BlockNumber, Hash, Header, Nonce, Signature,
AVERAGE_ON_INITIALIZE_RATIO, HOURS, MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, AVERAGE_ON_INITIALIZE_RATIO, NORMAL_DISPATCH_RATIO,
}; };
use polkadot_runtime_common::{BlockHashCount, SlowAdjustingFeeUpdate}; use polkadot_runtime_common::{BlockHashCount, SlowAdjustingFeeUpdate};
use sp_api::impl_runtime_apis; use sp_api::impl_runtime_apis;
@@ -70,7 +70,7 @@ use sp_std::prelude::*;
#[cfg(feature = "std")] #[cfg(feature = "std")]
use sp_version::NativeVersion; use sp_version::NativeVersion;
use sp_version::RuntimeVersion; use sp_version::RuntimeVersion;
use testnet_parachains_constants::rococo::{consensus::*, currency::*, fee::WeightToFee}; use testnet_parachains_constants::rococo::{consensus::*, currency::*, fee::WeightToFee, time::*};
use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}; use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight};
use xcm::latest::prelude::*; use xcm::latest::prelude::*;
use xcm_config::{ use xcm_config::{
@@ -202,6 +202,9 @@ impl pallet_timestamp::Config for Runtime {
/// A timestamp: milliseconds since the unix epoch. /// A timestamp: milliseconds since the unix epoch.
type Moment = u64; type Moment = u64;
type OnTimestampSet = Aura; type OnTimestampSet = Aura;
#[cfg(feature = "experimental")]
type MinimumPeriod = ConstU64<0>;
#[cfg(not(feature = "experimental"))]
type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>;
type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>; type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>;
} }
@@ -262,15 +265,17 @@ impl cumulus_pallet_parachain_system::Config for Runtime {
type ReservedDmpWeight = ReservedDmpWeight; type ReservedDmpWeight = ReservedDmpWeight;
type XcmpMessageHandler = XcmpQueue; type XcmpMessageHandler = XcmpQueue;
type ReservedXcmpWeight = ReservedXcmpWeight; type ReservedXcmpWeight = ReservedXcmpWeight;
type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; type CheckAssociatedRelayNumber = RelayNumberMonotonicallyIncreases;
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< type ConsensusHook = ConsensusHook;
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
} }
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook<
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
parameter_types! { parameter_types! {
pub MessageQueueServiceWeight: Weight = Perbill::from_percent(35) * RuntimeBlockWeights::get().max_block; pub MessageQueueServiceWeight: Weight = Perbill::from_percent(35) * RuntimeBlockWeights::get().max_block;
} }
@@ -359,9 +364,9 @@ impl pallet_aura::Config for Runtime {
type AuthorityId = AuraId; type AuthorityId = AuraId;
type DisabledValidators = (); type DisabledValidators = ();
type MaxAuthorities = ConstU32<100_000>; type MaxAuthorities = ConstU32<100_000>;
type AllowMultipleBlocksPerSlot = ConstBool<false>; type AllowMultipleBlocksPerSlot = ConstBool<true>;
#[cfg(feature = "experimental")] #[cfg(feature = "experimental")]
type SlotDuration = pallet_aura::MinimumPeriodTimesTwo<Self>; type SlotDuration = ConstU64<SLOT_DURATION>;
} }
parameter_types! { parameter_types! {
@@ -486,7 +491,7 @@ mod benches {
impl_runtime_apis! { impl_runtime_apis! {
impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime { impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime {
fn slot_duration() -> sp_consensus_aura::SlotDuration { fn slot_duration() -> sp_consensus_aura::SlotDuration {
sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) sp_consensus_aura::SlotDuration::from_millis(SLOT_DURATION)
} }
fn authorities() -> Vec<AuraId> { fn authorities() -> Vec<AuraId> {
@@ -494,6 +499,15 @@ impl_runtime_apis! {
} }
} }
impl cumulus_primitives_aura::AuraUnincludedSegmentApi<Block> for Runtime {
fn can_build_upon(
included_hash: <Block as BlockT>::Hash,
slot: cumulus_primitives_aura::Slot,
) -> bool {
ConsensusHook::can_build_upon(included_hash, slot)
}
}
impl sp_api::Core<Block> for Runtime { impl sp_api::Core<Block> for Runtime {
fn version() -> RuntimeVersion { fn version() -> RuntimeVersion {
VERSION VERSION
@@ -69,6 +69,7 @@ cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system
cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false } cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false }
cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false }
cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false }
cumulus-primitives-aura = { path = "../../../../primitives/aura", default-features = false }
cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false }
cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false }
pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false }
@@ -85,6 +86,7 @@ std = [
"cumulus-pallet-session-benchmarking/std", "cumulus-pallet-session-benchmarking/std",
"cumulus-pallet-xcm/std", "cumulus-pallet-xcm/std",
"cumulus-pallet-xcmp-queue/std", "cumulus-pallet-xcmp-queue/std",
"cumulus-primitives-aura/std",
"cumulus-primitives-core/std", "cumulus-primitives-core/std",
"cumulus-primitives-utility/std", "cumulus-primitives-utility/std",
"frame-benchmarking?/std", "frame-benchmarking?/std",
@@ -24,7 +24,7 @@ include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));
mod weights; mod weights;
pub mod xcm_config; pub mod xcm_config;
use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases;
use cumulus_primitives_core::{AggregateMessageOrigin, ParaId}; use cumulus_primitives_core::{AggregateMessageOrigin, ParaId};
use frame_support::{ use frame_support::{
construct_runtime, derive_impl, construct_runtime, derive_impl,
@@ -44,7 +44,7 @@ use parachains_common::{
impls::DealWithFees, impls::DealWithFees,
message_queue::{NarrowOriginToSibling, ParaIdToSibling}, message_queue::{NarrowOriginToSibling, ParaIdToSibling},
AccountId, AuraId, Balance, BlockNumber, Hash, Header, Nonce, Signature, AccountId, AuraId, Balance, BlockNumber, Hash, Header, Nonce, Signature,
AVERAGE_ON_INITIALIZE_RATIO, HOURS, MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, AVERAGE_ON_INITIALIZE_RATIO, NORMAL_DISPATCH_RATIO,
}; };
use polkadot_runtime_common::{BlockHashCount, SlowAdjustingFeeUpdate}; use polkadot_runtime_common::{BlockHashCount, SlowAdjustingFeeUpdate};
use sp_api::impl_runtime_apis; use sp_api::impl_runtime_apis;
@@ -61,7 +61,7 @@ use sp_std::prelude::*;
#[cfg(feature = "std")] #[cfg(feature = "std")]
use sp_version::NativeVersion; use sp_version::NativeVersion;
use sp_version::RuntimeVersion; use sp_version::RuntimeVersion;
use testnet_parachains_constants::westend::{consensus::*, currency::*, fee::WeightToFee}; use testnet_parachains_constants::westend::{consensus::*, currency::*, fee::WeightToFee, time::*};
use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}; use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight};
use xcm::latest::prelude::*; use xcm::latest::prelude::*;
use xcm_config::{ use xcm_config::{
@@ -193,6 +193,9 @@ impl pallet_timestamp::Config for Runtime {
/// A timestamp: milliseconds since the unix epoch. /// A timestamp: milliseconds since the unix epoch.
type Moment = u64; type Moment = u64;
type OnTimestampSet = Aura; type OnTimestampSet = Aura;
#[cfg(feature = "experimental")]
type MinimumPeriod = ConstU64<0>;
#[cfg(not(feature = "experimental"))]
type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>;
type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>; type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>;
} }
@@ -253,15 +256,17 @@ impl cumulus_pallet_parachain_system::Config for Runtime {
type ReservedDmpWeight = ReservedDmpWeight; type ReservedDmpWeight = ReservedDmpWeight;
type XcmpMessageHandler = XcmpQueue; type XcmpMessageHandler = XcmpQueue;
type ReservedXcmpWeight = ReservedXcmpWeight; type ReservedXcmpWeight = ReservedXcmpWeight;
type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; type CheckAssociatedRelayNumber = RelayNumberMonotonicallyIncreases;
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< type ConsensusHook = ConsensusHook;
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
} }
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook<
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
impl parachain_info::Config for Runtime {} impl parachain_info::Config for Runtime {}
parameter_types! { parameter_types! {
@@ -350,9 +355,9 @@ impl pallet_aura::Config for Runtime {
type AuthorityId = AuraId; type AuthorityId = AuraId;
type DisabledValidators = (); type DisabledValidators = ();
type MaxAuthorities = ConstU32<100_000>; type MaxAuthorities = ConstU32<100_000>;
type AllowMultipleBlocksPerSlot = ConstBool<false>; type AllowMultipleBlocksPerSlot = ConstBool<true>;
#[cfg(feature = "experimental")] #[cfg(feature = "experimental")]
type SlotDuration = pallet_aura::MinimumPeriodTimesTwo<Self>; type SlotDuration = ConstU64<SLOT_DURATION>;
} }
parameter_types! { parameter_types! {
@@ -473,7 +478,7 @@ mod benches {
impl_runtime_apis! { impl_runtime_apis! {
impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime { impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime {
fn slot_duration() -> sp_consensus_aura::SlotDuration { fn slot_duration() -> sp_consensus_aura::SlotDuration {
sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) sp_consensus_aura::SlotDuration::from_millis(SLOT_DURATION)
} }
fn authorities() -> Vec<AuraId> { fn authorities() -> Vec<AuraId> {
@@ -481,6 +486,15 @@ impl_runtime_apis! {
} }
} }
impl cumulus_primitives_aura::AuraUnincludedSegmentApi<Block> for Runtime {
fn can_build_upon(
included_hash: <Block as BlockT>::Hash,
slot: cumulus_primitives_aura::Slot,
) -> bool {
ConsensusHook::can_build_upon(included_hash, slot)
}
}
impl sp_api::Core<Block> for Runtime { impl sp_api::Core<Block> for Runtime {
fn version() -> RuntimeVersion { fn version() -> RuntimeVersion {
VERSION VERSION
@@ -87,6 +87,7 @@ use parachains_common::{AccountId, Signature};
#[cfg(any(feature = "std", test))] #[cfg(any(feature = "std", test))]
pub use sp_runtime::BuildStorage; pub use sp_runtime::BuildStorage;
pub use sp_runtime::{Perbill, Permill}; pub use sp_runtime::{Perbill, Permill};
use testnet_parachains_constants::westend::consensus::*;
impl_opaque_keys! { impl_opaque_keys! {
pub struct SessionKeys { pub struct SessionKeys {
@@ -118,29 +119,6 @@ const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10);
/// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used /// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used
/// by Operational extrinsics. /// by Operational extrinsics.
const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75);
/// We allow for .5 seconds of compute with a 12 second average block time.
const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts(
WEIGHT_REF_TIME_PER_SECOND.saturating_mul(2),
cumulus_primitives_core::relay_chain::MAX_POV_SIZE as u64,
);
/// Maximum number of blocks simultaneously accepted by the Runtime, not yet included
/// into the relay chain.
const UNINCLUDED_SEGMENT_CAPACITY: u32 = 3;
/// How many parachain blocks are processed by the relay chain per parent. Limits the
/// number of blocks authored per slot.
const BLOCK_PROCESSING_VELOCITY: u32 = 2;
/// Relay chain slot duration, in milliseconds.
const RELAY_CHAIN_SLOT_DURATION_MILLIS: u32 = 6000;
/// This determines the average expected block time that we are targeting.
/// Blocks will be produced at a minimum duration defined by `SLOT_DURATION`.
/// `SLOT_DURATION` is picked up by `pallet_timestamp` which is in turn picked
/// up by `pallet_aura` to implement `fn slot_duration()`.
///
/// Change this to adjust the block time.
pub const MILLISECS_PER_BLOCK: u64 = 6000;
pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK;
parameter_types! { parameter_types! {
pub const BlockHashCount: BlockNumber = 4096; pub const BlockHashCount: BlockNumber = 4096;
@@ -66,6 +66,7 @@ cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system
cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false } cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false }
cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false }
cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false }
cumulus-primitives-aura = { path = "../../../../primitives/aura", default-features = false }
cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false }
cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false }
pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false }
@@ -82,6 +83,7 @@ std = [
"cumulus-pallet-session-benchmarking/std", "cumulus-pallet-session-benchmarking/std",
"cumulus-pallet-xcm/std", "cumulus-pallet-xcm/std",
"cumulus-pallet-xcmp-queue/std", "cumulus-pallet-xcmp-queue/std",
"cumulus-primitives-aura/std",
"cumulus-primitives-core/std", "cumulus-primitives-core/std",
"cumulus-primitives-utility/std", "cumulus-primitives-utility/std",
"enumflags2/std", "enumflags2/std",
@@ -22,7 +22,7 @@ pub mod people;
mod weights; mod weights;
pub mod xcm_config; pub mod xcm_config;
use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases;
use cumulus_primitives_core::{AggregateMessageOrigin, ParaId}; use cumulus_primitives_core::{AggregateMessageOrigin, ParaId};
use frame_support::{ use frame_support::{
construct_runtime, derive_impl, construct_runtime, derive_impl,
@@ -44,7 +44,7 @@ use parachains_common::{
impls::DealWithFees, impls::DealWithFees,
message_queue::{NarrowOriginToSibling, ParaIdToSibling}, message_queue::{NarrowOriginToSibling, ParaIdToSibling},
AccountId, Balance, BlockNumber, Hash, Header, Nonce, Signature, AVERAGE_ON_INITIALIZE_RATIO, AccountId, Balance, BlockNumber, Hash, Header, Nonce, Signature, AVERAGE_ON_INITIALIZE_RATIO,
HOURS, MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, HOURS, NORMAL_DISPATCH_RATIO,
}; };
use polkadot_runtime_common::{identity_migrator, BlockHashCount, SlowAdjustingFeeUpdate}; use polkadot_runtime_common::{identity_migrator, BlockHashCount, SlowAdjustingFeeUpdate};
use sp_api::impl_runtime_apis; use sp_api::impl_runtime_apis;
@@ -184,6 +184,9 @@ impl pallet_timestamp::Config for Runtime {
/// A timestamp: milliseconds since the unix epoch. /// A timestamp: milliseconds since the unix epoch.
type Moment = u64; type Moment = u64;
type OnTimestampSet = Aura; type OnTimestampSet = Aura;
#[cfg(feature = "experimental")]
type MinimumPeriod = ConstU64<0>;
#[cfg(not(feature = "experimental"))]
type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>;
type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>; type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>;
} }
@@ -243,16 +246,18 @@ impl cumulus_pallet_parachain_system::Config for Runtime {
type ReservedDmpWeight = ReservedDmpWeight; type ReservedDmpWeight = ReservedDmpWeight;
type XcmpMessageHandler = XcmpQueue; type XcmpMessageHandler = XcmpQueue;
type ReservedXcmpWeight = ReservedXcmpWeight; type ReservedXcmpWeight = ReservedXcmpWeight;
type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; type CheckAssociatedRelayNumber = RelayNumberMonotonicallyIncreases;
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< type ConsensusHook = ConsensusHook;
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
type WeightInfo = weights::cumulus_pallet_parachain_system::WeightInfo<Runtime>; type WeightInfo = weights::cumulus_pallet_parachain_system::WeightInfo<Runtime>;
} }
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook<
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
parameter_types! { parameter_types! {
pub MessageQueueServiceWeight: Weight = pub MessageQueueServiceWeight: Weight =
Perbill::from_percent(35) * RuntimeBlockWeights::get().max_block; Perbill::from_percent(35) * RuntimeBlockWeights::get().max_block;
@@ -328,9 +333,9 @@ impl pallet_aura::Config for Runtime {
type AuthorityId = AuraId; type AuthorityId = AuraId;
type DisabledValidators = (); type DisabledValidators = ();
type MaxAuthorities = ConstU32<100_000>; type MaxAuthorities = ConstU32<100_000>;
type AllowMultipleBlocksPerSlot = ConstBool<false>; type AllowMultipleBlocksPerSlot = ConstBool<true>;
#[cfg(feature = "experimental")] #[cfg(feature = "experimental")]
type SlotDuration = pallet_aura::MinimumPeriodTimesTwo<Self>; type SlotDuration = ConstU64<SLOT_DURATION>;
} }
parameter_types! { parameter_types! {
@@ -459,7 +464,7 @@ mod benches {
impl_runtime_apis! { impl_runtime_apis! {
impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime { impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime {
fn slot_duration() -> sp_consensus_aura::SlotDuration { fn slot_duration() -> sp_consensus_aura::SlotDuration {
sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) sp_consensus_aura::SlotDuration::from_millis(SLOT_DURATION)
} }
fn authorities() -> Vec<AuraId> { fn authorities() -> Vec<AuraId> {
@@ -467,6 +472,15 @@ impl_runtime_apis! {
} }
} }
impl cumulus_primitives_aura::AuraUnincludedSegmentApi<Block> for Runtime {
fn can_build_upon(
included_hash: <Block as BlockT>::Hash,
slot: cumulus_primitives_aura::Slot,
) -> bool {
ConsensusHook::can_build_upon(included_hash, slot)
}
}
impl sp_api::Core<Block> for Runtime { impl sp_api::Core<Block> for Runtime {
fn version() -> RuntimeVersion { fn version() -> RuntimeVersion {
VERSION VERSION
@@ -66,6 +66,7 @@ cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system
cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false } cumulus-pallet-session-benchmarking = { path = "../../../../pallets/session-benchmarking", default-features = false }
cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false } cumulus-pallet-xcm = { path = "../../../../pallets/xcm", default-features = false }
cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false } cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false }
cumulus-primitives-aura = { path = "../../../../primitives/aura", default-features = false }
cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false } cumulus-primitives-core = { path = "../../../../primitives/core", default-features = false }
cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false } cumulus-primitives-utility = { path = "../../../../primitives/utility", default-features = false }
pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false } pallet-collator-selection = { path = "../../../../pallets/collator-selection", default-features = false }
@@ -82,6 +83,7 @@ std = [
"cumulus-pallet-session-benchmarking/std", "cumulus-pallet-session-benchmarking/std",
"cumulus-pallet-xcm/std", "cumulus-pallet-xcm/std",
"cumulus-pallet-xcmp-queue/std", "cumulus-pallet-xcmp-queue/std",
"cumulus-primitives-aura/std",
"cumulus-primitives-core/std", "cumulus-primitives-core/std",
"cumulus-primitives-utility/std", "cumulus-primitives-utility/std",
"enumflags2/std", "enumflags2/std",
@@ -22,7 +22,7 @@ pub mod people;
mod weights; mod weights;
pub mod xcm_config; pub mod xcm_config;
use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases;
use cumulus_primitives_core::{AggregateMessageOrigin, ParaId}; use cumulus_primitives_core::{AggregateMessageOrigin, ParaId};
use frame_support::{ use frame_support::{
construct_runtime, derive_impl, construct_runtime, derive_impl,
@@ -44,7 +44,7 @@ use parachains_common::{
impls::DealWithFees, impls::DealWithFees,
message_queue::{NarrowOriginToSibling, ParaIdToSibling}, message_queue::{NarrowOriginToSibling, ParaIdToSibling},
AccountId, Balance, BlockNumber, Hash, Header, Nonce, Signature, AVERAGE_ON_INITIALIZE_RATIO, AccountId, Balance, BlockNumber, Hash, Header, Nonce, Signature, AVERAGE_ON_INITIALIZE_RATIO,
HOURS, MAXIMUM_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, NORMAL_DISPATCH_RATIO,
}; };
use polkadot_runtime_common::{identity_migrator, BlockHashCount, SlowAdjustingFeeUpdate}; use polkadot_runtime_common::{identity_migrator, BlockHashCount, SlowAdjustingFeeUpdate};
use sp_api::impl_runtime_apis; use sp_api::impl_runtime_apis;
@@ -63,7 +63,7 @@ use sp_std::prelude::*;
#[cfg(feature = "std")] #[cfg(feature = "std")]
use sp_version::NativeVersion; use sp_version::NativeVersion;
use sp_version::RuntimeVersion; use sp_version::RuntimeVersion;
use testnet_parachains_constants::westend::{consensus::*, currency::*, fee::WeightToFee}; use testnet_parachains_constants::westend::{consensus::*, currency::*, fee::WeightToFee, time::*};
use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}; use weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight};
use xcm::latest::prelude::BodyId; use xcm::latest::prelude::BodyId;
use xcm_config::{ use xcm_config::{
@@ -184,6 +184,9 @@ impl pallet_timestamp::Config for Runtime {
/// A timestamp: milliseconds since the unix epoch. /// A timestamp: milliseconds since the unix epoch.
type Moment = u64; type Moment = u64;
type OnTimestampSet = Aura; type OnTimestampSet = Aura;
#[cfg(feature = "experimental")]
type MinimumPeriod = ConstU64<0>;
#[cfg(not(feature = "experimental"))]
type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>;
type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>; type WeightInfo = weights::pallet_timestamp::WeightInfo<Runtime>;
} }
@@ -243,16 +246,18 @@ impl cumulus_pallet_parachain_system::Config for Runtime {
type ReservedDmpWeight = ReservedDmpWeight; type ReservedDmpWeight = ReservedDmpWeight;
type XcmpMessageHandler = XcmpQueue; type XcmpMessageHandler = XcmpQueue;
type ReservedXcmpWeight = ReservedXcmpWeight; type ReservedXcmpWeight = ReservedXcmpWeight;
type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; type CheckAssociatedRelayNumber = RelayNumberMonotonicallyIncreases;
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< type ConsensusHook = ConsensusHook;
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
type WeightInfo = weights::cumulus_pallet_parachain_system::WeightInfo<Runtime>; type WeightInfo = weights::cumulus_pallet_parachain_system::WeightInfo<Runtime>;
} }
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook<
Runtime,
RELAY_CHAIN_SLOT_DURATION_MILLIS,
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
parameter_types! { parameter_types! {
pub MessageQueueServiceWeight: Weight = pub MessageQueueServiceWeight: Weight =
Perbill::from_percent(35) * RuntimeBlockWeights::get().max_block; Perbill::from_percent(35) * RuntimeBlockWeights::get().max_block;
@@ -328,9 +333,9 @@ impl pallet_aura::Config for Runtime {
type AuthorityId = AuraId; type AuthorityId = AuraId;
type DisabledValidators = (); type DisabledValidators = ();
type MaxAuthorities = ConstU32<100_000>; type MaxAuthorities = ConstU32<100_000>;
type AllowMultipleBlocksPerSlot = ConstBool<false>; type AllowMultipleBlocksPerSlot = ConstBool<true>;
#[cfg(feature = "experimental")] #[cfg(feature = "experimental")]
type SlotDuration = pallet_aura::MinimumPeriodTimesTwo<Self>; type SlotDuration = ConstU64<SLOT_DURATION>;
} }
parameter_types! { parameter_types! {
@@ -459,7 +464,7 @@ mod benches {
impl_runtime_apis! { impl_runtime_apis! {
impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime { impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime {
fn slot_duration() -> sp_consensus_aura::SlotDuration { fn slot_duration() -> sp_consensus_aura::SlotDuration {
sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) sp_consensus_aura::SlotDuration::from_millis(SLOT_DURATION)
} }
fn authorities() -> Vec<AuraId> { fn authorities() -> Vec<AuraId> {
@@ -467,6 +472,15 @@ impl_runtime_apis! {
} }
} }
impl cumulus_primitives_aura::AuraUnincludedSegmentApi<Block> for Runtime {
fn can_build_upon(
included_hash: <Block as BlockT>::Hash,
slot: cumulus_primitives_aura::Slot,
) -> bool {
ConsensusHook::can_build_upon(included_hash, slot)
}
}
impl sp_api::Core<Block> for Runtime { impl sp_api::Core<Block> for Runtime {
fn version() -> RuntimeVersion { fn version() -> RuntimeVersion {
VERSION VERSION
+16 -7
View File
@@ -695,7 +695,7 @@ pub fn run() -> Result<()> {
.map(|r| r.0) .map(|r| r.0)
.map_err(Into::into), .map_err(Into::into),
AssetHubKusama | AssetHubWestend => AssetHubKusama =>
crate::service::start_asset_hub_node::< crate::service::start_asset_hub_node::<
RuntimeApi, RuntimeApi,
AuraId, AuraId,
@@ -704,7 +704,7 @@ pub fn run() -> Result<()> {
.map(|r| r.0) .map(|r| r.0)
.map_err(Into::into), .map_err(Into::into),
AssetHubRococo => AssetHubRococo | AssetHubWestend =>
crate::service::start_asset_hub_lookahead_node::< crate::service::start_asset_hub_lookahead_node::<
RuntimeApi, RuntimeApi,
AuraId, AuraId,
@@ -713,7 +713,7 @@ pub fn run() -> Result<()> {
.map(|r| r.0) .map(|r| r.0)
.map_err(Into::into), .map_err(Into::into),
CollectivesPolkadot | CollectivesWestend => CollectivesPolkadot =>
crate::service::start_generic_aura_node::< crate::service::start_generic_aura_node::<
RuntimeApi, RuntimeApi,
AuraId, AuraId,
@@ -722,6 +722,15 @@ pub fn run() -> Result<()> {
.map(|r| r.0) .map(|r| r.0)
.map_err(Into::into), .map_err(Into::into),
CollectivesWestend =>
crate::service::start_generic_aura_lookahead_node::<
RuntimeApi,
AuraId,
>(config, polkadot_config, collator_options, id, hwbench)
.await
.map(|r| r.0)
.map_err(Into::into),
Seedling | Shell => Seedling | Shell =>
crate::service::start_shell_node::<RuntimeApi>( crate::service::start_shell_node::<RuntimeApi>(
config, config,
@@ -763,7 +772,7 @@ pub fn run() -> Result<()> {
chain_spec::bridge_hubs::BridgeHubRuntimeType::Westend | chain_spec::bridge_hubs::BridgeHubRuntimeType::Westend |
chain_spec::bridge_hubs::BridgeHubRuntimeType::WestendLocal | chain_spec::bridge_hubs::BridgeHubRuntimeType::WestendLocal |
chain_spec::bridge_hubs::BridgeHubRuntimeType::WestendDevelopment => chain_spec::bridge_hubs::BridgeHubRuntimeType::WestendDevelopment =>
crate::service::start_generic_aura_node::< crate::service::start_generic_aura_lookahead_node::<
RuntimeApi, RuntimeApi,
AuraId, AuraId,
>(config, polkadot_config, collator_options, id, hwbench) >(config, polkadot_config, collator_options, id, hwbench)
@@ -772,7 +781,7 @@ pub fn run() -> Result<()> {
chain_spec::bridge_hubs::BridgeHubRuntimeType::Rococo | chain_spec::bridge_hubs::BridgeHubRuntimeType::Rococo |
chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoLocal | chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoLocal |
chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoDevelopment => chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoDevelopment =>
crate::service::start_generic_aura_node::< crate::service::start_generic_aura_lookahead_node::<
RuntimeApi, RuntimeApi,
AuraId, AuraId,
>(config, polkadot_config, collator_options, id, hwbench) >(config, polkadot_config, collator_options, id, hwbench)
@@ -787,7 +796,7 @@ pub fn run() -> Result<()> {
chain_spec::coretime::CoretimeRuntimeType::RococoDevelopment | chain_spec::coretime::CoretimeRuntimeType::RococoDevelopment |
chain_spec::coretime::CoretimeRuntimeType::WestendLocal | chain_spec::coretime::CoretimeRuntimeType::WestendLocal |
chain_spec::coretime::CoretimeRuntimeType::WestendDevelopment => chain_spec::coretime::CoretimeRuntimeType::WestendDevelopment =>
crate::service::start_generic_aura_node::< crate::service::start_generic_aura_lookahead_node::<
RuntimeApi, RuntimeApi,
AuraId, AuraId,
>(config, polkadot_config, collator_options, id, hwbench) >(config, polkadot_config, collator_options, id, hwbench)
@@ -824,7 +833,7 @@ pub fn run() -> Result<()> {
chain_spec::people::PeopleRuntimeType::Westend | chain_spec::people::PeopleRuntimeType::Westend |
chain_spec::people::PeopleRuntimeType::WestendLocal | chain_spec::people::PeopleRuntimeType::WestendLocal |
chain_spec::people::PeopleRuntimeType::WestendDevelopment => chain_spec::people::PeopleRuntimeType::WestendDevelopment =>
crate::service::start_generic_aura_node::< crate::service::start_generic_aura_lookahead_node::<
RuntimeApi, RuntimeApi,
AuraId, AuraId,
>(config, polkadot_config, collator_options, id, hwbench) >(config, polkadot_config, collator_options, id, hwbench)
+115 -8
View File
@@ -1292,7 +1292,7 @@ where
Ok(BasicQueue::new(verifier, Box::new(block_import), None, &spawner, registry)) Ok(BasicQueue::new(verifier, Box::new(block_import), None, &spawner, registry))
} }
/// Start an aura powered parachain node. Collectives uses this. /// Start an aura powered parachain node. Some system chains use this.
pub async fn start_generic_aura_node<RuntimeApi, AuraId: AppCrypto>( pub async fn start_generic_aura_node<RuntimeApi, AuraId: AppCrypto>(
parachain_config: Configuration, parachain_config: Configuration,
polkadot_config: Configuration, polkadot_config: Configuration,
@@ -1386,6 +1386,106 @@ where
.await .await
} }
/// Uses the lookahead collator to support async backing.
///
/// Start an aura powered parachain node. Some system chains use this.
pub async fn start_generic_aura_lookahead_node<RuntimeApi, AuraId: AppCrypto>(
parachain_config: Configuration,
polkadot_config: Configuration,
collator_options: CollatorOptions,
para_id: ParaId,
hwbench: Option<sc_sysinfo::HwBench>,
) -> sc_service::error::Result<(TaskManager, Arc<ParachainClient<RuntimeApi>>)>
where
RuntimeApi: ConstructRuntimeApi<Block, ParachainClient<RuntimeApi>> + Send + Sync + 'static,
RuntimeApi::RuntimeApi: sp_transaction_pool::runtime_api::TaggedTransactionQueue<Block>
+ sp_api::Metadata<Block>
+ sp_session::SessionKeys<Block>
+ sp_api::ApiExt<Block>
+ sp_offchain::OffchainWorkerApi<Block>
+ sp_block_builder::BlockBuilder<Block>
+ cumulus_primitives_core::CollectCollationInfo<Block>
+ sp_consensus_aura::AuraApi<Block, <<AuraId as AppCrypto>::Pair as Pair>::Public>
+ pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi<Block, Balance>
+ frame_rpc_system::AccountNonceApi<Block, AccountId, Nonce>
+ cumulus_primitives_aura::AuraUnincludedSegmentApi<Block>,
<<AuraId as AppCrypto>::Pair as Pair>::Signature:
TryFrom<Vec<u8>> + std::hash::Hash + sp_runtime::traits::Member + Codec,
{
start_node_impl::<RuntimeApi, _, _, _>(
parachain_config,
polkadot_config,
collator_options,
CollatorSybilResistance::Resistant, // Aura
para_id,
|_| Ok(RpcModule::new(())),
aura_build_import_queue::<_, AuraId>,
|client,
block_import,
prometheus_registry,
telemetry,
task_manager,
relay_chain_interface,
transaction_pool,
sync_oracle,
keystore,
relay_chain_slot_duration,
para_id,
collator_key,
overseer_handle,
announce_block,
backend| {
let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?;
let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording(
task_manager.spawn_handle(),
client.clone(),
transaction_pool,
prometheus_registry,
telemetry.clone(),
);
let proposer = Proposer::new(proposer_factory);
let collator_service = CollatorService::new(
client.clone(),
Arc::new(task_manager.spawn_handle()),
announce_block,
client.clone(),
);
let params = AuraParams {
create_inherent_data_providers: move |_, ()| async move { Ok(()) },
block_import,
para_client: client.clone(),
para_backend: backend,
relay_client: relay_chain_interface,
code_hash_provider: move |block_hash| {
client.code_at(block_hash).ok().map(|c| ValidationCode::from(c).hash())
},
sync_oracle,
keystore,
collator_key,
para_id,
overseer_handle,
slot_duration,
relay_chain_slot_duration,
proposer,
collator_service,
authoring_duration: Duration::from_millis(1500),
reinitialize: false,
};
let fut =
aura::run::<Block, <AuraId as AppCrypto>::Pair, _, _, _, _, _, _, _, _, _>(params);
task_manager.spawn_essential_handle().spawn("aura", None, fut);
Ok(())
},
hwbench,
)
.await
}
/// Start a shell node which should later transition into an Aura powered parachain node. Asset Hub /// Start a shell node which should later transition into an Aura powered parachain node. Asset Hub
/// uses this because at genesis, Asset Hub was on the `shell` runtime which didn't have Aura and /// uses this because at genesis, Asset Hub was on the `shell` runtime which didn't have Aura and
/// needs to sync and upgrade before it can run `AuraApi` functions. /// needs to sync and upgrade before it can run `AuraApi` functions.
@@ -1805,7 +1905,8 @@ where
+ sp_block_builder::BlockBuilder<Block> + sp_block_builder::BlockBuilder<Block>
+ cumulus_primitives_core::CollectCollationInfo<Block> + cumulus_primitives_core::CollectCollationInfo<Block>
+ pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi<Block, Balance> + pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi<Block, Balance>
+ frame_rpc_system::AccountNonceApi<Block, AccountId, Nonce>, + frame_rpc_system::AccountNonceApi<Block, AccountId, Nonce>
+ cumulus_primitives_aura::AuraUnincludedSegmentApi<Block>,
RB: Fn(Arc<ParachainClient<RuntimeApi>>) -> Result<jsonrpsee::RpcModule<()>, sc_service::Error>, RB: Fn(Arc<ParachainClient<RuntimeApi>>) -> Result<jsonrpsee::RpcModule<()>, sc_service::Error>,
BIQ: FnOnce( BIQ: FnOnce(
Arc<ParachainClient<RuntimeApi>>, Arc<ParachainClient<RuntimeApi>>,
@@ -2039,7 +2140,7 @@ pub async fn start_contracts_rococo_node(
collator_key, collator_key,
overseer_handle, overseer_handle,
announce_block, announce_block,
_backend| { backend| {
let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?; let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?;
let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording(
@@ -2058,11 +2159,15 @@ pub async fn start_contracts_rococo_node(
client.clone(), client.clone(),
); );
let params = BasicAuraParams { let params = AuraParams {
create_inherent_data_providers: move |_, ()| async move { Ok(()) }, create_inherent_data_providers: move |_, ()| async move { Ok(()) },
block_import, block_import,
para_client: client, para_client: client.clone(),
para_backend: backend.clone(),
relay_client: relay_chain_interface, relay_client: relay_chain_interface,
code_hash_provider: move |block_hash| {
client.code_at(block_hash).ok().map(|c| ValidationCode::from(c).hash())
},
sync_oracle, sync_oracle,
keystore, keystore,
collator_key, collator_key,
@@ -2073,11 +2178,11 @@ pub async fn start_contracts_rococo_node(
proposer, proposer,
collator_service, collator_service,
// Very limited proposal time. // Very limited proposal time.
authoring_duration: Duration::from_millis(500), authoring_duration: Duration::from_millis(1500),
collation_request_receiver: None, reinitialize: false,
}; };
let fut = basic_aura::run::< let fut = aura::run::<
Block, Block,
sp_consensus_aura::sr25519::AuthorityPair, sp_consensus_aura::sr25519::AuthorityPair,
_, _,
@@ -2087,6 +2192,8 @@ pub async fn start_contracts_rococo_node(
_, _,
_, _,
_, _,
_,
_,
>(params); >(params);
task_manager.spawn_essential_handle().spawn("aura", None, fut); task_manager.spawn_essential_handle().spawn("aura", None, fut);
@@ -54,9 +54,11 @@ async function run(nodeName, networkInfo, _jsArgs) {
unsub(); unsub();
return resolve(); return resolve();
} else if (result.isError) { } else if (result.isError) {
console.log(`Transaction Error`); // Probably happens because of: https://github.com/paritytech/polkadot-sdk/issues/1202.
console.log(`Transaction error`);
// We ignore the error because it is very likely misleading, because of the issue mentioned above.
unsub(); unsub();
return reject(); return resolve();
} }
}); });
}); });
@@ -0,0 +1,23 @@
title: Enable async backing on all testnet system chains
doc:
- audience: Runtime User
description: |
Async backing has been enabled on all testnet system chains: asset-hub-westend,
bridge-hub-westend, bridge-hub-rococo, collectives-westend, contracts-rococo,
coretime-westend, coretime-rococo, people-westend, and people-rococo. These now target 6s
block times.
For the running coretime chains, that requires updating the configuration after the runtime
upgrade but before the end of the current region.
crates:
- name: asset-hub-westend-runtime
- name: bridge-hub-westend-runtime
- name: bridge-hub-rococo-runtime
- name: collectives-westend-runtime
- name: contracts-rococo-runtime
- name: coretime-westend-runtime
- name: coretime-rococo-runtime
- name: people-westend-runtime
- name: people-rococo-runtime
- name: polkadot-parachain-bin