Do not require the collator key to be passed (#459)

This commit is contained in:
Bastian Köcher
2021-06-02 11:43:45 +02:00
committed by GitHub
parent 3a06a47aa7
commit ba81b0b56c
5 changed files with 61 additions and 48 deletions
+51 -25
View File
@@ -34,17 +34,30 @@ use sp_consensus::{
import_queue::{ImportQueue, IncomingBlock, Link, Origin}, import_queue::{ImportQueue, IncomingBlock, Link, Origin},
BlockImport, BlockOrigin, BlockImport, BlockOrigin,
}; };
use sp_core::traits::SpawnNamed; use sp_core::{traits::SpawnNamed, Pair};
use sp_runtime::{ use sp_runtime::{
traits::{BlakeTwo256, Block as BlockT, NumberFor}, traits::{BlakeTwo256, Block as BlockT, NumberFor},
Justifications, Justifications,
}; };
use std::{marker::PhantomData, sync::Arc}; use std::{marker::PhantomData, ops::Deref, sync::Arc};
pub mod genesis; pub mod genesis;
/// Relay chain full node handles. /// The relay chain full node handle.
type RFullNode<C> = polkadot_service::NewFull<C>; pub struct RFullNode<C> {
/// The relay chain full node handles.
pub relay_chain_full_node: polkadot_service::NewFull<C>,
/// The collator key used by the node.
pub collator_key: CollatorPair,
}
impl<C> Deref for RFullNode<C> {
type Target = polkadot_service::NewFull<C>;
fn deref(&self) -> &Self::Target {
&self.relay_chain_full_node
}
}
/// Parameters given to [`start_collator`]. /// Parameters given to [`start_collator`].
pub struct StartCollatorParams<'a, Block: BlockT, BS, Client, Spawner, RClient, IQ> { pub struct StartCollatorParams<'a, Block: BlockT, BS, Client, Spawner, RClient, IQ> {
@@ -53,7 +66,6 @@ pub struct StartCollatorParams<'a, Block: BlockT, BS, Client, Spawner, RClient,
pub announce_block: Arc<dyn Fn(Block::Hash, Option<Vec<u8>>) + Send + Sync>, pub announce_block: Arc<dyn Fn(Block::Hash, Option<Vec<u8>>) + Send + Sync>,
pub spawner: Spawner, pub spawner: Spawner,
pub para_id: ParaId, pub para_id: ParaId,
pub collator_key: CollatorPair,
pub relay_chain_full_node: RFullNode<RClient>, pub relay_chain_full_node: RFullNode<RClient>,
pub task_manager: &'a mut TaskManager, pub task_manager: &'a mut TaskManager,
pub parachain_consensus: Box<dyn ParachainConsensus<Block>>, pub parachain_consensus: Box<dyn ParachainConsensus<Block>>,
@@ -72,7 +84,6 @@ pub async fn start_collator<'a, Block, BS, Client, Backend, Spawner, RClient, IQ
announce_block, announce_block,
spawner, spawner,
para_id, para_id,
collator_key,
task_manager, task_manager,
relay_chain_full_node, relay_chain_full_node,
parachain_consensus, parachain_consensus,
@@ -106,17 +117,19 @@ where
_phantom: PhantomData, _phantom: PhantomData,
}); });
relay_chain_full_node.client.execute_with(StartPoVRecovery { relay_chain_full_node
para_id, .client
client: client.clone(), .execute_with(StartPoVRecovery {
import_queue, para_id,
task_manager, client: client.clone(),
overseer_handler: relay_chain_full_node import_queue,
.overseer_handler task_manager,
.clone() overseer_handler: relay_chain_full_node
.ok_or_else(|| "Polkadot full node did not provided an `OverseerHandler`!")?, .overseer_handler
_phantom: PhantomData, .clone()
})?; .ok_or_else(|| "Polkadot full node did not provided an `OverseerHandler`!")?,
_phantom: PhantomData,
})?;
cumulus_client_collator::start_collator(cumulus_client_collator::StartCollatorParams { cumulus_client_collator::start_collator(cumulus_client_collator::StartCollatorParams {
runtime_api: client.clone(), runtime_api: client.clone(),
@@ -124,15 +137,16 @@ where
announce_block, announce_block,
overseer_handler: relay_chain_full_node overseer_handler: relay_chain_full_node
.overseer_handler .overseer_handler
.clone()
.ok_or_else(|| "Polkadot full node did not provided an `OverseerHandler`!")?, .ok_or_else(|| "Polkadot full node did not provided an `OverseerHandler`!")?,
spawner, spawner,
para_id, para_id,
key: collator_key, key: relay_chain_full_node.collator_key.clone(),
parachain_consensus, parachain_consensus,
}) })
.await; .await;
task_manager.add_child(relay_chain_full_node.task_manager); task_manager.add_child(relay_chain_full_node.relay_chain_full_node.task_manager);
Ok(()) Ok(())
} }
@@ -180,7 +194,7 @@ where
_phantom: PhantomData, _phantom: PhantomData,
}); });
task_manager.add_child(relay_chain_full_node.task_manager); task_manager.add_child(relay_chain_full_node.relay_chain_full_node.task_manager);
Ok(()) Ok(())
} }
@@ -234,12 +248,17 @@ struct StartPoVRecovery<'a, Block: BlockT, Client, IQ> {
para_id: ParaId, para_id: ParaId,
client: Arc<Client>, client: Arc<Client>,
task_manager: &'a mut TaskManager, task_manager: &'a mut TaskManager,
overseer_handler: OverseerHandler, overseer_handler: OverseerHandler,
import_queue: IQ, import_queue: IQ,
_phantom: PhantomData<Block>, _phantom: PhantomData<Block>,
} }
impl<'a, Block, Client, IQ> polkadot_service::ExecuteWithClient for StartPoVRecovery<'a, Block, Client, IQ> impl<'a, Block, Client, IQ> polkadot_service::ExecuteWithClient
for StartPoVRecovery<'a, Block, Client, IQ>
where where
Block: BlockT, Block: BlockT,
Client: UsageProvider<Block> Client: UsageProvider<Block>
@@ -291,7 +310,6 @@ pub fn prepare_node_config(mut parachain_config: Configuration) -> Configuration
#[sc_tracing::logging::prefix_logs_with("Relaychain")] #[sc_tracing::logging::prefix_logs_with("Relaychain")]
pub fn build_polkadot_full_node( pub fn build_polkadot_full_node(
config: Configuration, config: Configuration,
collator_pair: CollatorPair,
telemetry_worker_handle: Option<TelemetryWorkerHandle>, telemetry_worker_handle: Option<TelemetryWorkerHandle>,
) -> Result<RFullNode<PClient>, polkadot_service::Error> { ) -> Result<RFullNode<PClient>, polkadot_service::Error> {
let is_light = matches!(config.role, Role::Light); let is_light = matches!(config.role, Role::Light);
@@ -300,14 +318,22 @@ pub fn build_polkadot_full_node(
"Light client not supported.".into(), "Light client not supported.".into(),
)) ))
} else { } else {
polkadot_service::build_full( let collator_key = CollatorPair::generate().0;
let relay_chain_full_node = polkadot_service::build_full(
config, config,
polkadot_service::IsCollator::Yes(collator_pair), polkadot_service::IsCollator::Yes(collator_key.clone()),
None, None,
true, true,
None, None,
telemetry_worker_handle, telemetry_worker_handle,
) )?;
Ok(RFullNode {
relay_chain_full_node,
collator_key,
})
} }
} }
-2
View File
@@ -82,8 +82,6 @@ polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "m
polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "master" } polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "master" }
polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "master" } polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "master" }
[build-dependencies] [build-dependencies]
substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "master" } substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "master" }
+2 -8
View File
@@ -391,9 +391,6 @@ pub fn run() -> Result<()> {
let runner = cli.create_runner(&cli.run.normalize())?; let runner = cli.create_runner(&cli.run.normalize())?;
runner.run_node_until_exit(|config| async move { runner.run_node_until_exit(|config| async move {
// TODO
let key = sp_core::Pair::generate().0;
let para_id = let para_id =
chain_spec::Extensions::try_get(&*config.chain_spec).map(|e| e.para_id); chain_spec::Extensions::try_get(&*config.chain_spec).map(|e| e.para_id);
@@ -433,7 +430,6 @@ pub fn run() -> Result<()> {
if config.chain_spec.is_statemint() { if config.chain_spec.is_statemint() {
crate::service::start_statemint_node::<statemint_runtime::RuntimeApi, StatemintRuntimeExecutor>( crate::service::start_statemint_node::<statemint_runtime::RuntimeApi, StatemintRuntimeExecutor>(
config, config,
key,
polkadot_config, polkadot_config,
id, id,
) )
@@ -443,7 +439,6 @@ pub fn run() -> Result<()> {
} else if config.chain_spec.is_statemine() { } else if config.chain_spec.is_statemine() {
crate::service::start_statemint_node::<statemine_runtime::RuntimeApi, StatemineRuntimeExecutor>( crate::service::start_statemint_node::<statemine_runtime::RuntimeApi, StatemineRuntimeExecutor>(
config, config,
key,
polkadot_config, polkadot_config,
id, id,
) )
@@ -453,7 +448,6 @@ pub fn run() -> Result<()> {
} else if config.chain_spec.is_westmint() { } else if config.chain_spec.is_westmint() {
crate::service::start_statemint_node::<westmint_runtime::RuntimeApi, WestmintRuntimeExecutor>( crate::service::start_statemint_node::<westmint_runtime::RuntimeApi, WestmintRuntimeExecutor>(
config, config,
key,
polkadot_config, polkadot_config,
id, id,
) )
@@ -461,12 +455,12 @@ pub fn run() -> Result<()> {
.map(|r| r.0) .map(|r| r.0)
.map_err(Into::into) .map_err(Into::into)
} else if config.chain_spec.is_shell() { } else if config.chain_spec.is_shell() {
crate::service::start_shell_node(config, key, polkadot_config, id) crate::service::start_shell_node(config, polkadot_config, id)
.await .await
.map(|r| r.0) .map(|r| r.0)
.map_err(Into::into) .map_err(Into::into)
} else { } else {
crate::service::start_rococo_parachain_node(config, key, polkadot_config, id) crate::service::start_rococo_parachain_node(config, polkadot_config, id)
.await .await
.map(|r| r.0) .map(|r| r.0)
.map_err(Into::into) .map_err(Into::into)
@@ -27,7 +27,6 @@ use cumulus_client_service::{
use cumulus_primitives_core::{ use cumulus_primitives_core::{
ParaId, relay_chain::v1::{Hash as PHash, PersistedValidationData}, ParaId, relay_chain::v1::{Hash as PHash, PersistedValidationData},
}; };
use polkadot_primitives::v1::CollatorPair;
use sc_client_api::ExecutorProvider; use sc_client_api::ExecutorProvider;
use sc_executor::native_executor_instance; use sc_executor::native_executor_instance;
@@ -195,7 +194,6 @@ where
#[sc_tracing::logging::prefix_logs_with("Parachain")] #[sc_tracing::logging::prefix_logs_with("Parachain")]
async fn start_node_impl<RuntimeApi, Executor, RB, BIQ, BIC>( async fn start_node_impl<RuntimeApi, Executor, RB, BIQ, BIC>(
parachain_config: Configuration, parachain_config: Configuration,
collator_key: CollatorPair,
polkadot_config: Configuration, polkadot_config: Configuration,
id: ParaId, id: ParaId,
rpc_ext_builder: RB, rpc_ext_builder: RB,
@@ -255,7 +253,6 @@ where
let relay_chain_full_node = cumulus_client_service::build_polkadot_full_node( let relay_chain_full_node = cumulus_client_service::build_polkadot_full_node(
polkadot_config, polkadot_config,
collator_key.clone(),
telemetry_worker_handle, telemetry_worker_handle,
) )
.map_err(|e| match e { .map_err(|e| match e {
@@ -333,7 +330,6 @@ where
announce_block, announce_block,
client: client.clone(), client: client.clone(),
task_manager: &mut task_manager, task_manager: &mut task_manager,
collator_key,
relay_chain_full_node, relay_chain_full_node,
spawner, spawner,
parachain_consensus, parachain_consensus,
@@ -404,7 +400,6 @@ pub fn rococo_parachain_build_import_queue(
/// Start a rococo parachain node. /// Start a rococo parachain node.
pub async fn start_rococo_parachain_node( pub async fn start_rococo_parachain_node(
parachain_config: Configuration, parachain_config: Configuration,
collator_key: CollatorPair,
polkadot_config: Configuration, polkadot_config: Configuration,
id: ParaId, id: ParaId,
) -> sc_service::error::Result<( ) -> sc_service::error::Result<(
@@ -413,7 +408,6 @@ pub async fn start_rococo_parachain_node(
)> { )> {
start_node_impl::<rococo_parachain_runtime::RuntimeApi, RococoParachainRuntimeExecutor, _, _, _>( start_node_impl::<rococo_parachain_runtime::RuntimeApi, RococoParachainRuntimeExecutor, _, _, _>(
parachain_config, parachain_config,
collator_key,
polkadot_config, polkadot_config,
id, id,
|_| Default::default(), |_| Default::default(),
@@ -522,7 +516,6 @@ pub fn shell_build_import_queue(
/// Start a polkadot-shell parachain node. /// Start a polkadot-shell parachain node.
pub async fn start_shell_node( pub async fn start_shell_node(
parachain_config: Configuration, parachain_config: Configuration,
collator_key: CollatorPair,
polkadot_config: Configuration, polkadot_config: Configuration,
id: ParaId, id: ParaId,
) -> sc_service::error::Result<( ) -> sc_service::error::Result<(
@@ -531,7 +524,6 @@ pub async fn start_shell_node(
)> { )> {
start_node_impl::<shell_runtime::RuntimeApi, ShellRuntimeExecutor, _, _, _>( start_node_impl::<shell_runtime::RuntimeApi, ShellRuntimeExecutor, _, _, _>(
parachain_config, parachain_config,
collator_key,
polkadot_config, polkadot_config,
id, id,
|_| Default::default(), |_| Default::default(),
@@ -790,7 +782,6 @@ where
/// Start a statemint/statemine/westmint parachain node. /// Start a statemint/statemine/westmint parachain node.
pub async fn start_statemint_node<RuntimeApi, Executor>( pub async fn start_statemint_node<RuntimeApi, Executor>(
parachain_config: Configuration, parachain_config: Configuration,
collator_key: CollatorPair,
polkadot_config: Configuration, polkadot_config: Configuration,
id: ParaId, id: ParaId,
) -> sc_service::error::Result<( ) -> sc_service::error::Result<(
@@ -817,7 +808,6 @@ where
{ {
start_node_impl::<RuntimeApi, Executor, _, _, _>( start_node_impl::<RuntimeApi, Executor, _, _, _>(
parachain_config, parachain_config,
collator_key,
polkadot_config, polkadot_config,
id, id,
|_| Default::default(), |_| Default::default(),
+8 -3
View File
@@ -303,9 +303,11 @@ where
spawner: task_manager.spawn_handle(), spawner: task_manager.spawn_handle(),
task_manager: &mut task_manager, task_manager: &mut task_manager,
para_id, para_id,
collator_key,
parachain_consensus, parachain_consensus,
relay_chain_full_node, relay_chain_full_node: cumulus_client_service::RFullNode {
relay_chain_full_node,
collator_key,
},
import_queue, import_queue,
}; };
@@ -319,7 +321,10 @@ where
announce_block, announce_block,
task_manager: &mut task_manager, task_manager: &mut task_manager,
para_id, para_id,
relay_chain_full_node, relay_chain_full_node: cumulus_client_service::RFullNode {
relay_chain_full_node,
collator_key: CollatorPair::generate().0,
},
}; };
start_full_node(params)?; start_full_node(params)?;