Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DNM] Elastic polkadot-parachain mvp ready for testnet deployment #4101

Closed
wants to merge 64 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
9248cd1
Refactor block building and import in collator service
skunert Apr 3, 2024
70afa25
Remove unused SyncOracle, light reformat
skunert Apr 3, 2024
7e01dca
Add slot-based collator
skunert Apr 3, 2024
08ec3e7
Prepare cumulus test node & runtime
skunert Apr 3, 2024
3848239
Prepare cumulus test node & runtime
skunert Apr 3, 2024
7a057ed
Add zombienet test
skunert Apr 3, 2024
3f4a260
Misc
skunert Apr 3, 2024
c049f50
Nits
skunert Apr 3, 2024
c1c96bc
Remove unused dep, add issues to todos
skunert Apr 3, 2024
7af20a6
Remove unused dep, add issues to todos
skunert Apr 3, 2024
245a11a
Enable "elastic-scaling-experimental" for cumulus test node
skunert Apr 3, 2024
560a907
Adjust parent search to allow for pending blocks with depth > 1
skunert Apr 5, 2024
734bdcb
Merge fixes
skunert Apr 9, 2024
c439d21
Modernize zombienet test:
skunert Apr 11, 2024
fb9f383
Unify core schedule fetching methods
skunert Apr 11, 2024
06f8fc7
Remove overseer_handle from parameters
skunert Apr 11, 2024
cf64247
Improve logging
skunert Apr 11, 2024
aa7fba9
Merge branch 'master' into slot-based-mvp
skunert Apr 12, 2024
44b489f
Do not return potential_parents that are not available locally
skunert Apr 12, 2024
8df558f
Use commong async backing params fetching methods
skunert Apr 16, 2024
7705314
Assign cores during block building
skunert Apr 16, 2024
1553d40
Merge branch 'master' into slot-based-mvp
skunert Apr 16, 2024
f84a6f3
Add more comments, cleanup
skunert Apr 16, 2024
e1a5879
Refactor `find_potential_parent`
skunert Apr 16, 2024
576605b
Merge branch 'master' into slot-based-mvp
skunert Apr 17, 2024
1b184da
Make expected cores work when para slot duration > relay slot duration
skunert Apr 17, 2024
e95e5df
Review comments
skunert Apr 23, 2024
e4edbe4
Extract parent search into module
skunert Apr 23, 2024
53869a0
More code reuse between lookahead and slot-based
skunert Apr 23, 2024
4240cc1
Merge branch 'master' into slot-based-mvp
skunert Apr 23, 2024
c790fb8
fmt
skunert Apr 23, 2024
61be48b
Merge branch 'master' into slot-based-mvp
skunert Apr 25, 2024
a06bf79
Merge branch 'master' into slot-based-mvp
skunert Apr 29, 2024
169479a
Add slot drift for testing
skunert Apr 30, 2024
ac3e9ed
Merge branch 'master' into slot-based-mvp
skunert Apr 30, 2024
3f8e0be
hack rococo parachain for 2s blocks
sandreim Apr 12, 2024
36c93cd
enable Parent HeadData
sandreim Apr 15, 2024
7fdee72
UNINCLUDED_SEGMENT_CAPACITY is now 9
sandreim Apr 24, 2024
d1270c3
elastic glutton
sandreim Apr 25, 2024
fe5a894
feeless glutton
sandreim Apr 26, 2024
6a9955d
Remove duplicate comment
skunert May 6, 2024
9760e81
Expose slot_drift parameter
skunert May 7, 2024
42c0135
Do not assumed fixed slot_duration
skunert May 7, 2024
44bc8e7
Apply suggestions from code review
skunert May 29, 2024
a23d5a9
Address comments
skunert May 29, 2024
07478dc
Remove unused parameters from zombienet
skunert May 29, 2024
15c36a9
Introduce experimental CLI option
skunert May 29, 2024
2c8cc0d
Merge branch 'master' into slot-based-mvp
skunert May 29, 2024
65cdc01
fmt
skunert May 29, 2024
5dcea6c
Adjust zombienet parameter
skunert May 29, 2024
46bd385
Merge branch 'master' into slot-based-mvp
skunert May 31, 2024
27eb643
Remove +1 on velocity
skunert May 31, 2024
99e5741
Reduce number of relay chain fetches
skunert May 31, 2024
944044d
Add comments to `RelayChainCachingFetcher`
skunert Jun 4, 2024
41dba02
More comment adjustments
skunert Jun 4, 2024
33243a2
Merge branch 'master' into slot-based-mvp
skunert Jun 4, 2024
0b061f6
Fix template build
skunert Jun 4, 2024
ffc80cb
Merge branch 'slot-based-mvp' of github.com:paritytech/polkadot-sdk i…
sandreim Jun 5, 2024
a50c8d0
Implement parachain block bloat
sandreim Jun 6, 2024
52f453a
fix build
sandreim Jun 6, 2024
127da66
Use BlockLength
sandreim Jun 7, 2024
fe180d4
Introduce block_length
sandreim Jun 10, 2024
3d7f45e
redundant
sandreim Jun 10, 2024
736100a
weight += extrinsic_len
sandreim Jun 10, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .gitlab/pipeline/zombienet/cumulus.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,3 +149,15 @@ zombienet-cumulus-0007-full_node_warp_sync:
--local-dir="${LOCAL_DIR}"
--concurrency=1
--test="0007-full_node_warp_sync.zndsl"

zombienet-cumulus-0008-elastic_authoring:
extends:
- .zombienet-cumulus-common
- .zombienet-refs
- .zombienet-before-script
- .zombienet-after-script
script:
- /home/nonroot/zombie-net/scripts/ci/run-test-local-env-manager.sh
--local-dir="${LOCAL_DIR}"
--concurrency=1
--test="0008-elastic_authoring.zndsl"
7 changes: 4 additions & 3 deletions Cargo.lock

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

9 changes: 8 additions & 1 deletion cumulus/client/cli/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,11 @@ pub struct RunCmd {
/// Will use the specified relay chain chainspec.
#[arg(long, conflicts_with_all = ["relay_chain_rpc_urls", "collator"])]
pub relay_chain_light_client: bool,

/// EXPERIMENTAL: Use slot-based collator which can handle elastic scaling. Use with care, this
/// flag is unstable and subject to change.
#[arg(long)]
pub experimental_use_slot_based: bool,
}

impl RunCmd {
Expand All @@ -329,7 +334,7 @@ impl RunCmd {
_ => RelayChainMode::Embedded,
};

CollatorOptions { relay_chain_mode }
CollatorOptions { relay_chain_mode, use_slot_based: self.experimental_use_slot_based }
}
}

Expand All @@ -349,6 +354,8 @@ pub enum RelayChainMode {
pub struct CollatorOptions {
/// How this collator retrieves relay chain information
pub relay_chain_mode: RelayChainMode,
/// Use slot based collator
pub use_slot_based: bool,
}

/// A non-redundant version of the `RunCmd` that sets the `validator` field when the
Expand Down
3 changes: 3 additions & 0 deletions cumulus/client/consensus/aura/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ codec = { package = "parity-scale-codec", version = "3.6.12", features = ["deriv
futures = "0.3.28"
tracing = "0.1.37"
schnellru = "0.2.1"
tokio = { version = "1.36.0", features = ["sync"] }

# Substrate
sc-client-api = { path = "../../../../substrate/client/api" }
Expand All @@ -35,6 +36,7 @@ sp-keystore = { path = "../../../../substrate/primitives/keystore" }
sp-runtime = { path = "../../../../substrate/primitives/runtime" }
sp-timestamp = { path = "../../../../substrate/primitives/timestamp" }
sp-state-machine = { path = "../../../../substrate/primitives/state-machine" }
sc-service = { path = "../../../../substrate/client/service" }
substrate-prometheus-endpoint = { path = "../../../../substrate/utils/prometheus" }

# Cumulus
Expand All @@ -51,3 +53,4 @@ polkadot-primitives = { path = "../../../../polkadot/primitives" }
polkadot-node-primitives = { path = "../../../../polkadot/node/primitives" }
polkadot-node-subsystem = { path = "../../../../polkadot/node/subsystem" }
polkadot-overseer = { path = "../../../../polkadot/node/overseer" }
sc-utils = { version = "14.0.0", path = "../../../../substrate/client/utils" }
64 changes: 44 additions & 20 deletions cumulus/client/consensus/aura/src/collator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -156,26 +156,16 @@ where
Ok((paras_inherent_data, other_inherent_data))
}

/// Propose, seal, and import a block, packaging it into a collation.
///
/// Provide the slot to build at as well as any other necessary pre-digest logs,
/// the inherent data, and the proposal duration and PoV size limits.
///
/// The Aura pre-digest should not be explicitly provided and is set internally.
///
/// This does not announce the collation to the parachain network or the relay chain.
pub async fn collate(
/// Build and import a parachain block on the given parent header, using the given slot claim.
pub async fn build_block_and_import(
&mut self,
parent_header: &Block::Header,
slot_claim: &SlotClaim<P::Public>,
additional_pre_digest: impl Into<Option<Vec<DigestItem>>>,
inherent_data: (ParachainInherentData, InherentData),
proposal_duration: Duration,
max_pov_size: usize,
) -> Result<
Option<(Collation, ParachainBlockData<Block>, Block::Hash)>,
Box<dyn Error + Send + 'static>,
> {
) -> Result<Option<ParachainCandidate<Block>>, Box<dyn Error + Send + 'static>> {
let mut digest = additional_pre_digest.into().unwrap_or_default();
digest.push(slot_claim.pre_digest.clone());

Expand Down Expand Up @@ -205,7 +195,6 @@ where
)
.map_err(|e| e as Box<dyn Error + Send>)?;

let post_hash = sealed_importable.post_hash();
let block = Block::new(
sealed_importable.post_header(),
sealed_importable
Expand All @@ -220,11 +209,46 @@ where
.map_err(|e| Box::new(e) as Box<dyn Error + Send>)
.await?;

if let Some((collation, block_data)) = self.collator_service.build_collation(
parent_header,
post_hash,
ParachainCandidate { block, proof: proposal.proof },
) {
Ok(Some(ParachainCandidate { block, proof: proposal.proof }))
}

/// Propose, seal, and import a block, packaging it into a collation.
///
/// Provide the slot to build at as well as any other necessary pre-digest logs,
/// the inherent data, and the proposal duration and PoV size limits.
///
/// The Aura pre-digest should not be explicitly provided and is set internally.
///
/// This does not announce the collation to the parachain network or the relay chain.
pub async fn collate(
&mut self,
parent_header: &Block::Header,
slot_claim: &SlotClaim<P::Public>,
additional_pre_digest: impl Into<Option<Vec<DigestItem>>>,
inherent_data: (ParachainInherentData, InherentData),
proposal_duration: Duration,
max_pov_size: usize,
) -> Result<
Option<(Collation, ParachainBlockData<Block>, Block::Hash)>,
Box<dyn Error + Send + 'static>,
> {
let maybe_candidate = self
.build_block_and_import(
parent_header,
slot_claim,
additional_pre_digest,
inherent_data,
proposal_duration,
max_pov_size,
)
.await?;

let Some(candidate) = maybe_candidate else { return Ok(None) };

let hash = candidate.block.header().hash();
if let Some((collation, block_data)) =
self.collator_service.build_collation(parent_header, hash, candidate)
{
tracing::info!(
target: crate::LOG_TARGET,
"PoV size {{ header: {}kb, extrinsics: {}kb, storage_proof: {}kb }}",
Expand All @@ -241,7 +265,7 @@ where
);
}

Ok(Some((collation, block_data, post_hash)))
Ok(Some((collation, block_data, hash)))
} else {
Err(Box::<dyn Error + Send + Sync>::from("Unable to produce collation")
as Box<dyn Error + Send>)
Expand Down
10 changes: 3 additions & 7 deletions cumulus/client/consensus/aura/src/collators/basic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ use sc_consensus::BlockImport;
use sp_api::{CallApiAt, ProvideRuntimeApi};
use sp_application_crypto::AppPublic;
use sp_blockchain::HeaderBackend;
use sp_consensus::SyncOracle;
use sp_consensus_aura::AuraApi;
use sp_core::crypto::Pair;
use sp_inherents::CreateInherentDataProviders;
Expand All @@ -53,7 +52,7 @@ use std::{sync::Arc, time::Duration};
use crate::collator as collator_util;

/// Parameters for [`run`].
pub struct Params<BI, CIDP, Client, RClient, SO, Proposer, CS> {
pub struct Params<BI, CIDP, Client, RClient, Proposer, CS> {
/// Inherent data providers. Only non-consensus inherent data should be provided, i.e.
/// the timestamp, slot, and paras inherents should be omitted, as they are set by this
/// collator.
Expand All @@ -64,8 +63,6 @@ pub struct Params<BI, CIDP, Client, RClient, SO, Proposer, CS> {
pub para_client: Arc<Client>,
/// A handle to the relay-chain client.
pub relay_client: RClient,
/// A chain synchronization oracle.
pub sync_oracle: SO,
/// The underlying keystore, which should contain Aura consensus keys.
pub keystore: KeystorePtr,
/// The collator key used to sign collations before submitting to validators.
Expand All @@ -89,8 +86,8 @@ pub struct Params<BI, CIDP, Client, RClient, SO, Proposer, CS> {
}

/// Run bare Aura consensus as a relay-chain-driven collator.
pub fn run<Block, P, BI, CIDP, Client, RClient, SO, Proposer, CS>(
params: Params<BI, CIDP, Client, RClient, SO, Proposer, CS>,
pub fn run<Block, P, BI, CIDP, Client, RClient, Proposer, CS>(
params: Params<BI, CIDP, Client, RClient, Proposer, CS>,
) -> impl Future<Output = ()> + Send + 'static
where
Block: BlockT + Send,
Expand All @@ -108,7 +105,6 @@ where
CIDP: CreateInherentDataProviders<Block, ()> + Send + 'static,
CIDP::InherentDataProviders: Send,
BI: BlockImport<Block> + ParachainBlockImportMarker + Send + Sync + 'static,
SO: SyncOracle + Send + Sync + Clone + 'static,
Proposer: ProposerInterface<Block> + Send + Sync + 'static,
CS: CollatorServiceInterface<Block> + Send + Sync + 'static,
P: Pair,
Expand Down
Loading
Loading