Skip to content

Commit

Permalink
Merge pull request #1012 from UniqueNetwork/feature/lookahead-leftovers
Browse files Browse the repository at this point in the history
Fix lookahead collator build
  • Loading branch information
CertainLach authored Oct 16, 2023
2 parents 0a49946 + 700b0c8 commit d0d6ce4
Show file tree
Hide file tree
Showing 11 changed files with 103 additions and 9 deletions.
4 changes: 4 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ cumulus-pallet-dmp-queue = { default-features = false, git = "https://github.com
cumulus-pallet-parachain-system = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
cumulus-pallet-xcm = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
cumulus-pallet-xcmp-queue = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
cumulus-primitives-aura = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
cumulus-primitives-core = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
cumulus-primitives-parachain-inherent = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
cumulus-primitives-timestamp = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
Expand Down
5 changes: 4 additions & 1 deletion node/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ cumulus-client-consensus-common = { workspace = true }
cumulus-client-consensus-proposer = { workspace = true }
cumulus-client-network = { workspace = true }
cumulus-client-service = { workspace = true }
cumulus-primitives-aura = { workspace = true }
cumulus-primitives-core = { workspace = true }
cumulus-primitives-parachain-inherent = { features = ["std"], workspace = true }
cumulus-relay-chain-inprocess-interface = { workspace = true }
Expand Down Expand Up @@ -113,7 +114,9 @@ gov-test-timings = [
'quartz-runtime?/gov-test-timings',
'unique-runtime?/gov-test-timings',
]
lookahead = []
lookahead = [
'opal-runtime/lookahead'
]
pov-estimate = [
'opal-runtime/pov-estimate',
'quartz-runtime?/pov-estimate',
Expand Down
2 changes: 2 additions & 0 deletions node/cli/src/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -396,6 +396,8 @@ pub fn run() -> Result<()> {
}
}
#[cfg(feature = "try-runtime")]
// embedded try-runtime cli will be removed soon.
#[allow(deprecated)]
Some(Subcommand::TryRuntime(cmd)) => {
use std::{future::Future, pin::Pin};

Expand Down
30 changes: 27 additions & 3 deletions node/cli/src/service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,14 @@ ez_bounds!(
{
}
);
#[cfg(not(feature = "lookahead"))]
ez_bounds!(
pub trait LookaheadApiDep {}
);
#[cfg(feature = "lookahead")]
ez_bounds!(
pub trait LookaheadApiDep: cumulus_primitives_aura::AuraUnincludedSegmentApi<Block> {}
);

/// Starts a `ServiceBuilder` for a full service.
///
Expand Down Expand Up @@ -358,6 +366,7 @@ where
+ Sync
+ 'static,
RuntimeApi::RuntimeApi: RuntimeApiDep<Runtime> + 'static,
RuntimeApi::RuntimeApi: LookaheadApiDep,
Runtime: RuntimeInstance,
ExecutorDispatch: NativeExecutionDispatch + 'static,
{
Expand Down Expand Up @@ -687,6 +696,8 @@ pub struct StartConsensusParameters<'a> {
announce_block: Arc<dyn Fn(Hash, Option<Vec<u8>>) + Send + Sync>,
}

// Clones ignored for optional lookahead collator
#[allow(clippy::redundant_clone)]
pub fn start_consensus<ExecutorDispatch, RuntimeApi, Runtime>(
client: Arc<FullClient<RuntimeApi, ExecutorDispatch>>,
transaction_pool: Arc<
Expand All @@ -701,6 +712,7 @@ where
+ Sync
+ 'static,
RuntimeApi::RuntimeApi: RuntimeApiDep<Runtime> + 'static,
RuntimeApi::RuntimeApi: LookaheadApiDep,
Runtime: RuntimeInstance,
{
let StartConsensusParameters {
Expand Down Expand Up @@ -735,12 +747,12 @@ where
client.clone(),
);

let block_import = ParachainBlockImport::new(client.clone(), backend);
let block_import = ParachainBlockImport::new(client.clone(), backend.clone());

let params = BuildAuraConsensusParams {
create_inherent_data_providers: move |_, ()| async move { Ok(()) },
block_import,
para_client: client,
para_client: client.clone(),
#[cfg(feature = "lookahead")]
para_backend: backend,
para_id,
Expand All @@ -751,18 +763,30 @@ where
proposer,
collator_service,
// With async-baking, we allowed to be both slower (longer authoring) and faster (multiple para blocks per relay block)
#[cfg(not(feature = "lookahead"))]
authoring_duration: Duration::from_millis(500),
#[cfg(feature = "lookahead")]
authoring_duration: Duration::from_millis(1500),
overseer_handle,
#[cfg(feature = "lookahead")]
code_hash_provider: || {},
code_hash_provider: move |block_hash| {
client
.code_at(block_hash)
.ok()
.map(cumulus_primitives_core::relay_chain::ValidationCode)
.map(|c| c.hash())
},
collator_key,
relay_chain_slot_duration,
};

task_manager.spawn_essential_handle().spawn(
"aura",
None,
#[cfg(not(feature = "lookahead"))]
run_aura::<_, AuraAuthorityPair, _, _, _, _, _, _, _>(params),
#[cfg(feature = "lookahead")]
run_aura::<_, AuraAuthorityPair, _, _, _, _, _, _, _, _, _>(params),
);
Ok(())
}
Expand Down
8 changes: 5 additions & 3 deletions pallets/inflation/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,10 @@ pub mod pallet {
+ Mutate<Self::AccountId>;
type TreasuryAccountId: Get<Self::AccountId>;

// The block number provider
type BlockNumberProvider: BlockNumberProvider<BlockNumber = BlockNumberFor<Self>>;
// The block number provider, which should be callable from `on_initialize` hook.
type OnInitializeBlockNumberProvider: BlockNumberProvider<
BlockNumber = BlockNumberFor<Self>,
>;

/// Number of blocks that pass between treasury balance updates due to inflation
#[pallet::constant]
Expand Down Expand Up @@ -118,7 +120,7 @@ pub mod pallet {
};

let block_interval: u32 = T::InflationBlockInterval::get().try_into().unwrap_or(0);
let current_relay_block = T::BlockNumberProvider::current_block_number();
let current_relay_block = T::OnInitializeBlockNumberProvider::current_block_number();
let next_inflation: BlockNumberFor<T> = <NextInflationBlock<T>>::get();
add_weight(1, 0, Weight::from_parts(5_000_000, 0));

Expand Down
3 changes: 3 additions & 0 deletions primitives/common/src/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@ use sp_runtime::Perbill;

use crate::types::{Balance, BlockNumber};

#[cfg(not(feature = "lookahead"))]
pub const MILLISECS_PER_BLOCK: u64 = 12000;
#[cfg(feature = "lookahead")]
pub const MILLISECS_PER_BLOCK: u64 = 3000;
pub const MILLISECS_PER_RELAY_BLOCK: u64 = 6000;

pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK;
Expand Down
26 changes: 24 additions & 2 deletions runtime/common/config/pallets/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ use frame_support::{
traits::{ConstU32, ConstU64, Currency},
};
use sp_arithmetic::Perbill;
use sp_runtime::traits::AccountIdConversion;
use sp_runtime::traits::{AccountIdConversion, BlockNumberProvider};
use up_common::{
constants::*,
types::{AccountId, Balance, BlockNumber},
Expand Down Expand Up @@ -105,12 +105,34 @@ parameter_types! {
pub const InflationBlockInterval: BlockNumber = 100; // every time per how many blocks inflation is applied
}

/// Pallet-inflation needs block number in on_initialize, where there is no `validation_data` exists yet
pub struct OnInitializeBlockNumberProvider;
impl BlockNumberProvider for OnInitializeBlockNumberProvider {
type BlockNumber = BlockNumber;

fn current_block_number() -> Self::BlockNumber {
use hex_literal::hex;
use parity_scale_codec::Decode;
use sp_io::storage;
// TODO: Replace with the following code after https://github.com/paritytech/polkadot-sdk/commit/3ea497b5a0fdda252f9c5a3c257cfaf8685f02fd lands
// <cumulus_pallet_parachain_system::Pallet<Runtime>>::last_relay_block_number()

// ParachainSystem.LastRelayChainBlockNumber
let Some(encoded) = storage::get(&hex!("45323df7cc47150b3930e2666b0aa313a2bca190d36bd834cc73a38fc213ecbd")) else {
// First parachain block
return Default::default()
};
BlockNumber::decode(&mut encoded.as_ref())
.expect("typeof(RelayBlockNumber) == typeof(BlockNumber) == u32; qed")
}
}

/// Used for the pallet inflation
impl pallet_inflation::Config for Runtime {
type Currency = Balances;
type TreasuryAccountId = TreasuryAccountId;
type InflationBlockInterval = InflationBlockInterval;
type BlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;
type OnInitializeBlockNumberProvider = OnInitializeBlockNumberProvider;
}

impl pallet_unique::Config for Runtime {
Expand Down
20 changes: 20 additions & 0 deletions runtime/common/config/parachain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,29 @@ impl cumulus_pallet_parachain_system::Config for Runtime {
type ReservedDmpWeight = ReservedDmpWeight;
type ReservedXcmpWeight = ReservedXcmpWeight;
type XcmpMessageHandler = XcmpQueue;
#[cfg(not(feature = "lookahead"))]
type CheckAssociatedRelayNumber = cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases;
#[cfg(feature = "lookahead")]
type CheckAssociatedRelayNumber =
cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases;
}

impl parachain_info::Config for Runtime {}

impl cumulus_pallet_aura_ext::Config for Runtime {}

/// Maximum number of blocks simultaneously accepted by the Runtime, not yet included
/// into the relay chain.
#[cfg(feature = "lookahead")]
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.
#[cfg(feature = "lookahead")]
const BLOCK_PROCESSING_VELOCITY: u32 = 2;
#[cfg(feature = "lookahead")]
pub type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook<
Runtime,
{ MILLISECS_PER_RELAY_BLOCK as u32 },
BLOCK_PROCESSING_VELOCITY,
UNINCLUDED_SEGMENT_CAPACITY,
>;
10 changes: 10 additions & 0 deletions runtime/common/runtime_apis.rs
Original file line number Diff line number Diff line change
Expand Up @@ -679,6 +679,16 @@ macro_rules! impl_common_runtime_apis {
}
}

#[cfg(feature = "lookahead")]
impl cumulus_primitives_aura::AuraUnincludedSegmentApi<Block> for Runtime {
fn can_build_upon(
included_hash: <Block as BlockT>::Hash,
slot: cumulus_primitives_aura::Slot,
) -> bool {
$crate::config::parachain::ConsensusHook::can_build_upon(included_hash, slot)
}
}

/// Should never be used, yet still required because of https://github.com/paritytech/polkadot-sdk/issues/27
/// Not allowed to panic, because rpc may be called using native runtime, thus causing thread panic.
impl fp_rpc::ConvertTransactionRuntimeApi<Block> for Runtime {
Expand Down
3 changes: 3 additions & 0 deletions runtime/opal/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ std = [
'cumulus-pallet-parachain-system/std',
'cumulus-pallet-xcm/std',
'cumulus-pallet-xcmp-queue/std',
'cumulus-primitives-aura/std',
'cumulus-primitives-core/std',
'cumulus-primitives-utility/std',
'frame-executive/std',
Expand Down Expand Up @@ -230,6 +231,7 @@ governance = []
preimage = []
refungible = []
session-test-timings = []
lookahead = []

################################################################################
# local dependencies
Expand All @@ -240,6 +242,7 @@ cumulus-pallet-dmp-queue = { workspace = true }
cumulus-pallet-parachain-system = { workspace = true }
cumulus-pallet-xcm = { workspace = true }
cumulus-pallet-xcmp-queue = { workspace = true }
cumulus-primitives-aura = { workspace = true }
cumulus-primitives-core = { workspace = true }
cumulus-primitives-timestamp = { workspace = true }
cumulus-primitives-utility = { workspace = true }
Expand Down

0 comments on commit d0d6ce4

Please sign in to comment.