mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-08 14:48:01 +00:00
df818d2974
Cumulus test-parachain node and test runtime were still using relay chain consensus and 12s blocktimes. With async backing around the corner on the major chains we should switch our tests too. Also needed to nicely test the changes coming to collators in #3168. ### Changes Overview - Followed the [migration guide](https://wiki.polkadot.network/docs/maintain-guides-async-backing) for async backing for the cumulus-test-runtime - Adjusted the cumulus-test-service to use the correct import-queue, lookahead collator etc. - The block validation function now uses the Aura Ext Executor so that the seal of the block is validated - Previous point requires that we seal block before calling into `validate_block`, I introduced a helper function for that - Test client adjusted to provide a slot to the relay chain proof and the aura pre-digest
151 lines
4.6 KiB
Rust
151 lines
4.6 KiB
Rust
// Copyright (C) Parity Technologies (UK) Ltd.
|
|
// This file is part of Cumulus.
|
|
|
|
// Cumulus is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
// Cumulus is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Cumulus. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
mod cli;
|
|
|
|
use std::sync::Arc;
|
|
|
|
use cli::{RelayChainCli, Subcommand, TestCollatorCli};
|
|
use cumulus_primitives_core::relay_chain::CollatorPair;
|
|
use cumulus_test_service::{chain_spec, new_partial, AnnounceBlockFn};
|
|
use sc_cli::{CliConfiguration, SubstrateCli};
|
|
use sp_core::Pair;
|
|
|
|
pub fn wrap_announce_block() -> Box<dyn FnOnce(AnnounceBlockFn) -> AnnounceBlockFn> {
|
|
tracing::info!("Block announcements disabled.");
|
|
Box::new(|_| {
|
|
// Never announce any block
|
|
Arc::new(|_, _| {})
|
|
})
|
|
}
|
|
|
|
fn main() -> Result<(), sc_cli::Error> {
|
|
let cli = TestCollatorCli::from_args();
|
|
|
|
match &cli.subcommand {
|
|
Some(Subcommand::BuildSpec(cmd)) => {
|
|
let runner = cli.create_runner(cmd)?;
|
|
runner.sync_run(|config| cmd.run(config.chain_spec, config.network))
|
|
},
|
|
|
|
Some(Subcommand::ExportGenesisHead(cmd)) => {
|
|
let runner = cli.create_runner(cmd)?;
|
|
runner.sync_run(|mut config| {
|
|
let partial = new_partial(&mut config, false)?;
|
|
cmd.run(partial.client)
|
|
})
|
|
},
|
|
Some(Subcommand::ExportGenesisWasm(cmd)) => {
|
|
let runner = cli.create_runner(cmd)?;
|
|
runner.sync_run(|config| cmd.run(&*config.chain_spec))
|
|
},
|
|
None => {
|
|
let log_filters = cli.run.normalize().log_filters();
|
|
let mut builder = sc_cli::LoggerBuilder::new(log_filters.unwrap_or_default());
|
|
builder.with_colors(true);
|
|
let _ = builder.init();
|
|
|
|
let collator_options = cli.run.collator_options();
|
|
let tokio_runtime = sc_cli::build_runtime()?;
|
|
let tokio_handle = tokio_runtime.handle();
|
|
let config = cli
|
|
.run
|
|
.normalize()
|
|
.create_configuration(&cli, tokio_handle.clone())
|
|
.expect("Should be able to generate config");
|
|
|
|
let polkadot_cli = RelayChainCli::new(
|
|
&config,
|
|
[RelayChainCli::executable_name()].iter().chain(cli.relaychain_args.iter()),
|
|
);
|
|
|
|
let tokio_handle = config.tokio_handle.clone();
|
|
let polkadot_config =
|
|
SubstrateCli::create_configuration(&polkadot_cli, &polkadot_cli, tokio_handle)
|
|
.map_err(|err| format!("Relay chain argument error: {}", err))?;
|
|
|
|
let parachain_id = chain_spec::Extensions::try_get(&*config.chain_spec)
|
|
.map(|e| e.para_id)
|
|
.ok_or("Could not find parachain extension in chain-spec.")?;
|
|
|
|
tracing::info!("Parachain id: {:?}", parachain_id);
|
|
tracing::info!(
|
|
"Is collating: {}",
|
|
if config.role.is_authority() { "yes" } else { "no" }
|
|
);
|
|
if cli.fail_pov_recovery {
|
|
tracing::info!("PoV recovery failure enabled");
|
|
}
|
|
|
|
let collator_key = config.role.is_authority().then(|| CollatorPair::generate().0);
|
|
|
|
let consensus = cli
|
|
.use_null_consensus
|
|
.then(|| {
|
|
tracing::info!("Using null consensus.");
|
|
cumulus_test_service::Consensus::Null
|
|
})
|
|
.unwrap_or(cumulus_test_service::Consensus::Aura);
|
|
|
|
let (mut task_manager, _, _, _, _, _) = tokio_runtime
|
|
.block_on(async move {
|
|
match polkadot_config.network.network_backend {
|
|
sc_network::config::NetworkBackendType::Libp2p =>
|
|
cumulus_test_service::start_node_impl::<
|
|
_,
|
|
sc_network::NetworkWorker<_, _>,
|
|
>(
|
|
config,
|
|
collator_key,
|
|
polkadot_config,
|
|
parachain_id.into(),
|
|
cli.disable_block_announcements.then(wrap_announce_block),
|
|
cli.fail_pov_recovery,
|
|
|_| Ok(jsonrpsee::RpcModule::new(())),
|
|
consensus,
|
|
collator_options,
|
|
true,
|
|
)
|
|
.await,
|
|
sc_network::config::NetworkBackendType::Litep2p =>
|
|
cumulus_test_service::start_node_impl::<
|
|
_,
|
|
sc_network::Litep2pNetworkBackend,
|
|
>(
|
|
config,
|
|
collator_key,
|
|
polkadot_config,
|
|
parachain_id.into(),
|
|
cli.disable_block_announcements.then(wrap_announce_block),
|
|
cli.fail_pov_recovery,
|
|
|_| Ok(jsonrpsee::RpcModule::new(())),
|
|
consensus,
|
|
collator_options,
|
|
true,
|
|
)
|
|
.await,
|
|
}
|
|
})
|
|
.expect("could not create Cumulus test service");
|
|
|
|
tokio_runtime
|
|
.block_on(task_manager.future())
|
|
.expect("Could not run service to completion");
|
|
Ok(())
|
|
},
|
|
}
|
|
}
|