Companion PR for Various small improvements to service construction.. (#1472)

* Initial commit

Forked at: 1ed17cd467
Parent branch: origin/master

* Refactor

* Refactor

* Remove macro

* WIP

Forked at: 1ed17cd467
Parent branch: origin/master

* CLEANUP

Forked at: 1ed17cd467
Parent branch: origin/master

* small fix

* fix for browser

* Switch branch

* Rewrite service builds

* Update branch

* Fix sp-core branch

* Switch branch back and update

Co-authored-by: Cecile Tonglet <cecile.tonglet@cecton.com>
This commit is contained in:
Ashley
2020-07-28 20:18:11 +02:00
committed by GitHub
parent c8cdfbfd17
commit 7c7b02ece0
5 changed files with 345 additions and 286 deletions
+140 -146
View File
File diff suppressed because it is too large Load Diff
@@ -26,4 +26,4 @@ maplit = "1.0.2"
smol = "0.2.0" smol = "0.2.0"
smol-timeout = "0.1.0" smol-timeout = "0.1.0"
env_logger = "0.7.1" env_logger = "0.7.1"
assert_matches = "1.3.0" assert_matches = "1.3.0"
+102 -69
View File
@@ -36,7 +36,7 @@ use sp_core::traits::SpawnNamed;
pub use service::{ pub use service::{
Role, PruningMode, TransactionPoolOptions, Error, RuntimeGenesis, Role, PruningMode, TransactionPoolOptions, Error, RuntimeGenesis,
TFullClient, TLightClient, TFullBackend, TLightBackend, TFullCallExecutor, TLightCallExecutor, TFullClient, TLightClient, TFullBackend, TLightBackend, TFullCallExecutor, TLightCallExecutor,
Configuration, ChainSpec, ServiceComponents, TaskManager, Configuration, ChainSpec, TaskManager,
}; };
pub use service::config::{DatabaseConfig, PrometheusConfig}; pub use service::config::{DatabaseConfig, PrometheusConfig};
pub use sc_executor::NativeExecutionDispatch; pub use sc_executor::NativeExecutionDispatch;
@@ -157,26 +157,25 @@ type LightClient<RuntimeApi, Executor> =
service::TLightClientWithBackend<Block, RuntimeApi, Executor, LightBackend>; service::TLightClientWithBackend<Block, RuntimeApi, Executor, LightBackend>;
#[cfg(feature = "full-node")] #[cfg(feature = "full-node")]
fn full_params<RuntimeApi, Executor, Extrinsic>(mut config: Configuration) -> Result<( fn new_partial<RuntimeApi, Executor, Extrinsic>(config: &mut Configuration) -> Result<
service::ServiceParams< service::PartialComponents<
Block, FullClient<RuntimeApi, Executor>, FullBackend, FullSelectChain,
FullClient<RuntimeApi, Executor>,
babe::BabeImportQueue<Block, FullClient<RuntimeApi, Executor>>, babe::BabeImportQueue<Block, FullClient<RuntimeApi, Executor>>,
sc_transaction_pool::FullPool<Block, FullClient<RuntimeApi, Executor>>, sc_transaction_pool::FullPool<Block, FullClient<RuntimeApi, Executor>>,
polkadot_rpc::RpcExtension, (
FullBackend, impl Fn(polkadot_rpc::DenyUnsafe) -> polkadot_rpc::RpcExtension,
(
babe::BabeBlockImport<
Block, FullClient<RuntimeApi, Executor>, FullGrandpaBlockImport<RuntimeApi, Executor>
>,
grandpa::LinkHalf<Block, FullClient<RuntimeApi, Executor>, FullSelectChain>,
babe::BabeLink<Block>
),
grandpa::SharedVoterState,
)
>, >,
FullSelectChain, Error
( >
babe::BabeBlockImport<
Block, FullClient<RuntimeApi, Executor>, FullGrandpaBlockImport<RuntimeApi, Executor>
>,
grandpa::LinkHalf<Block, FullClient<RuntimeApi, Executor>, FullSelectChain>,
babe::BabeLink<Block>
),
inherents::InherentDataProviders,
grandpa::SharedVoterState,
), Error>
where where
RuntimeApi: ConstructRuntimeApi<Block, FullClient<RuntimeApi, Executor>> + Send + Sync + 'static, RuntimeApi: ConstructRuntimeApi<Block, FullClient<RuntimeApi, Executor>> + Send + Sync + 'static,
RuntimeApi::RuntimeApi: RuntimeApi::RuntimeApi:
@@ -184,23 +183,18 @@ fn full_params<RuntimeApi, Executor, Extrinsic>(mut config: Configuration) -> Re
Executor: NativeExecutionDispatch + 'static, Executor: NativeExecutionDispatch + 'static,
Extrinsic: RuntimeExtrinsic, Extrinsic: RuntimeExtrinsic,
{ {
set_prometheus_registry(&mut config)?; set_prometheus_registry(config)?;
let inherent_data_providers = inherents::InherentDataProviders::new(); let inherent_data_providers = inherents::InherentDataProviders::new();
let (client, backend, keystore, task_manager) = let (client, backend, keystore, task_manager) =
service::new_full_parts::<Block, RuntimeApi, Executor>(&config)?; service::new_full_parts::<Block, RuntimeApi, Executor>(&config)?;
let client = Arc::new(client); let client = Arc::new(client);
let select_chain = sc_consensus::LongestChain::new(backend.clone()); let select_chain = sc_consensus::LongestChain::new(backend.clone());
let pool_api = sc_transaction_pool::FullChainApi::new(
client.clone(), config.prometheus_registry(),
);
let transaction_pool = sc_transaction_pool::BasicPool::new_full( let transaction_pool = sc_transaction_pool::BasicPool::new_full(
config.transaction_pool.clone(), config.transaction_pool.clone(),
std::sync::Arc::new(pool_api),
config.prometheus_registry(), config.prometheus_registry(),
task_manager.spawn_handle(), task_manager.spawn_handle(),
client.clone(), client.clone(),
@@ -255,7 +249,7 @@ fn full_params<RuntimeApi, Executor, Extrinsic>(mut config: Configuration) -> Re
let transaction_pool = transaction_pool.clone(); let transaction_pool = transaction_pool.clone();
let select_chain = select_chain.clone(); let select_chain = select_chain.clone();
Box::new(move |deny_unsafe| -> polkadot_rpc::RpcExtension { move |deny_unsafe| -> polkadot_rpc::RpcExtension {
let deps = polkadot_rpc::FullDeps { let deps = polkadot_rpc::FullDeps {
client: client.clone(), client: client.clone(),
pool: transaction_pool.clone(), pool: transaction_pool.clone(),
@@ -273,23 +267,14 @@ fn full_params<RuntimeApi, Executor, Extrinsic>(mut config: Configuration) -> Re
}; };
polkadot_rpc::create_full(deps) polkadot_rpc::create_full(deps)
}) }
}; };
let provider = client.clone() as Arc<dyn grandpa::StorageAndProofProvider<_, _>>; Ok(service::PartialComponents {
let finality_proof_provider = Arc::new(GrandpaFinalityProofProvider::new(backend.clone(), provider)) as _; client, backend, task_manager, keystore, select_chain, import_queue, transaction_pool,
inherent_data_providers,
let params = service::ServiceParams { other: (rpc_extensions_builder, import_setup, rpc_setup)
config, backend, client, import_queue, keystore, task_manager, rpc_extensions_builder, })
transaction_pool,
block_announce_validator_builder: None,
finality_proof_provider: Some(finality_proof_provider),
finality_proof_request_builder: None,
on_demand: None,
remote_blockchain: None,
};
Ok((params, select_chain, import_setup, inherent_data_providers, rpc_setup))
} }
fn real_overseer<S: SpawnNamed>( fn real_overseer<S: SpawnNamed>(
@@ -319,7 +304,7 @@ fn real_overseer<S: SpawnNamed>(
#[cfg(feature = "full-node")] #[cfg(feature = "full-node")]
fn new_full<RuntimeApi, Executor, Extrinsic>( fn new_full<RuntimeApi, Executor, Extrinsic>(
config: Configuration, mut config: Configuration,
collating_for: Option<(CollatorId, ParaId)>, collating_for: Option<(CollatorId, ParaId)>,
_max_block_data_size: Option<u64>, _max_block_data_size: Option<u64>,
_authority_discovery_disabled: bool, _authority_discovery_disabled: bool,
@@ -346,17 +331,52 @@ fn new_full<RuntimeApi, Executor, Extrinsic>(
let disable_grandpa = config.disable_grandpa; let disable_grandpa = config.disable_grandpa;
let name = config.network.node_name.clone(); let name = config.network.node_name.clone();
let (params, select_chain, import_setup, inherent_data_providers, rpc_setup) let service::PartialComponents {
= full_params::<RuntimeApi, Executor, Extrinsic>(config)?; client, backend, mut task_manager, keystore, select_chain, import_queue, transaction_pool,
inherent_data_providers,
other: (rpc_extensions_builder, import_setup, rpc_setup)
} = new_partial::<RuntimeApi, Executor, Extrinsic>(&mut config)?;
let prometheus_registry = config.prometheus_registry().cloned();
let client = params.client.clone(); let finality_proof_provider =
let keystore = params.keystore.clone(); GrandpaFinalityProofProvider::new_for_service(backend.clone(), client.clone());
let transaction_pool = params.transaction_pool.clone();
let prometheus_registry = params.config.prometheus_registry().cloned();
let ServiceComponents { let (network, network_status_sinks, system_rpc_tx) =
network, task_manager, telemetry_on_connect_sinks, .. service::build_network(service::BuildNetworkParams {
} = service::build(params)?; config: &config,
client: client.clone(),
transaction_pool: transaction_pool.clone(),
spawn_handle: task_manager.spawn_handle(),
import_queue,
on_demand: None,
block_announce_validator_builder: None,
finality_proof_request_builder: None,
finality_proof_provider: Some(finality_proof_provider.clone()),
})?;
if config.offchain_worker.enabled {
service::build_offchain_workers(
&config, backend.clone(), task_manager.spawn_handle(), client.clone(), network.clone(),
);
}
let telemetry_connection_sinks = service::TelemetryConnectionSinks::default();
service::spawn_tasks(service::SpawnTasksParams {
config,
backend: backend.clone(),
client: client.clone(),
keystore: keystore.clone(),
network: network.clone(),
rpc_extensions_builder: Box::new(rpc_extensions_builder),
transaction_pool: transaction_pool.clone(),
task_manager: &mut task_manager,
on_demand: None,
remote_blockchain: None,
telemetry_connection_sinks: telemetry_connection_sinks.clone(),
network_status_sinks, system_rpc_tx,
})?;
let (block_import, link_half, babe_link) = import_setup; let (block_import, link_half, babe_link) = import_setup;
@@ -481,7 +501,7 @@ fn new_full<RuntimeApi, Executor, Extrinsic>(
link: link_half, link: link_half,
network: network.clone(), network: network.clone(),
inherent_data_providers: inherent_data_providers.clone(), inherent_data_providers: inherent_data_providers.clone(),
telemetry_on_connect: Some(telemetry_on_connect_sinks.on_connect_stream()), telemetry_on_connect: Some(telemetry_connection_sinks.on_connect_stream()),
voting_rule, voting_rule,
prometheus_registry: prometheus_registry, prometheus_registry: prometheus_registry,
shared_voter_state, shared_voter_state,
@@ -516,20 +536,17 @@ fn new_light<Runtime, Dispatch, Extrinsic>(mut config: Configuration) -> Result<
crate::set_prometheus_registry(&mut config)?; crate::set_prometheus_registry(&mut config)?;
use sc_client_api::backend::RemoteBackend; use sc_client_api::backend::RemoteBackend;
let (client, backend, keystore, task_manager, on_demand) = let (client, backend, keystore, mut task_manager, on_demand) =
service::new_light_parts::<Block, Runtime, Dispatch>(&config)?; service::new_light_parts::<Block, Runtime, Dispatch>(&config)?;
let select_chain = sc_consensus::LongestChain::new(backend.clone()); let select_chain = sc_consensus::LongestChain::new(backend.clone());
let pool_api = sc_transaction_pool::LightChainApi::new(
client.clone(),
on_demand.clone(),
);
let transaction_pool = Arc::new(sc_transaction_pool::BasicPool::new_light( let transaction_pool = Arc::new(sc_transaction_pool::BasicPool::new_light(
config.transaction_pool.clone(), config.transaction_pool.clone(),
Arc::new(pool_api),
config.prometheus_registry(), config.prometheus_registry(),
task_manager.spawn_handle(), task_manager.spawn_handle(),
client.clone(),
on_demand.clone(),
)); ));
let grandpa_block_import = grandpa::light_block_import( let grandpa_block_import = grandpa::light_block_import(
@@ -562,8 +579,27 @@ fn new_light<Runtime, Dispatch, Extrinsic>(mut config: Configuration) -> Result<
config.prometheus_registry(), config.prometheus_registry(),
)?; )?;
let provider = client.clone() as Arc<dyn grandpa::StorageAndProofProvider<_, _>>; let finality_proof_provider =
let finality_proof_provider = Arc::new(GrandpaFinalityProofProvider::new(backend.clone(), provider)); GrandpaFinalityProofProvider::new_for_service(backend.clone(), client.clone());
let (network, network_status_sinks, system_rpc_tx) =
service::build_network(service::BuildNetworkParams {
config: &config,
client: client.clone(),
transaction_pool: transaction_pool.clone(),
spawn_handle: task_manager.spawn_handle(),
import_queue,
on_demand: Some(on_demand.clone()),
block_announce_validator_builder: None,
finality_proof_request_builder: Some(finality_proof_request_builder),
finality_proof_provider: Some(finality_proof_provider),
})?;
if config.offchain_worker.enabled {
service::build_offchain_workers(
&config, backend.clone(), task_manager.spawn_handle(), client.clone(), network.clone(),
);
}
let light_deps = polkadot_rpc::LightDeps { let light_deps = polkadot_rpc::LightDeps {
remote_blockchain: backend.remote_blockchain(), remote_blockchain: backend.remote_blockchain(),
@@ -574,17 +610,14 @@ fn new_light<Runtime, Dispatch, Extrinsic>(mut config: Configuration) -> Result<
let rpc_extensions = polkadot_rpc::create_light(light_deps); let rpc_extensions = polkadot_rpc::create_light(light_deps);
let ServiceComponents { task_manager, .. } = service::build(service::ServiceParams { service::spawn_tasks(service::SpawnTasksParams {
config,
block_announce_validator_builder: None,
finality_proof_request_builder: Some(finality_proof_request_builder),
finality_proof_provider: Some(finality_proof_provider),
on_demand: Some(on_demand), on_demand: Some(on_demand),
remote_blockchain: Some(backend.remote_blockchain()), remote_blockchain: Some(backend.remote_blockchain()),
rpc_extensions_builder: Box::new(service::NoopRpcExtensionBuilder(rpc_extensions)), rpc_extensions_builder: Box::new(service::NoopRpcExtensionBuilder(rpc_extensions)),
client: client.clone(), task_manager: &mut task_manager,
transaction_pool: transaction_pool.clone(), telemetry_connection_sinks: service::TelemetryConnectionSinks::default(),
import_queue, keystore, backend, task_manager, config, keystore, backend, transaction_pool, client, network, network_status_sinks,
system_rpc_tx,
})?; })?;
Ok(task_manager) Ok(task_manager)
@@ -609,8 +642,8 @@ where
Extrinsic: RuntimeExtrinsic, Extrinsic: RuntimeExtrinsic,
{ {
config.keystore = service::config::KeystoreConfig::InMemory; config.keystore = service::config::KeystoreConfig::InMemory;
let (service::ServiceParams { client, backend, import_queue, task_manager, .. }, ..) let service::PartialComponents { client, backend, import_queue, task_manager, .. }
= full_params::<Runtime, Dispatch, Extrinsic>(config)?; = new_partial::<Runtime, Dispatch, Extrinsic>(&mut config)?;
Ok((client, backend, import_queue, task_manager)) Ok((client, backend, import_queue, task_manager))
} }
+1 -1
View File
@@ -28,8 +28,8 @@ use sp_consensus::SelectChain;
use sp_consensus_babe::BabeApi; use sp_consensus_babe::BabeApi;
use sc_client_api::light::{Fetcher, RemoteBlockchain}; use sc_client_api::light::{Fetcher, RemoteBlockchain};
use sc_consensus_babe::Epoch; use sc_consensus_babe::Epoch;
use sc_rpc::DenyUnsafe;
use sp_block_builder::BlockBuilder; use sp_block_builder::BlockBuilder;
pub use sc_rpc::DenyUnsafe;
/// A type representing all RPC extensions. /// A type representing all RPC extensions.
pub type RpcExtension = jsonrpc_core::IoHandler<sc_rpc::Metadata>; pub type RpcExtension = jsonrpc_core::IoHandler<sc_rpc::Metadata>;
+101 -69
View File
@@ -33,7 +33,7 @@ use sp_trie::PrefixedMemoryDB;
pub use service::{ pub use service::{
Role, PruningMode, TransactionPoolOptions, Error, RuntimeGenesis, RpcHandlers, Role, PruningMode, TransactionPoolOptions, Error, RuntimeGenesis, RpcHandlers,
TFullClient, TLightClient, TFullBackend, TLightBackend, TFullCallExecutor, TLightCallExecutor, TFullClient, TLightClient, TFullBackend, TLightBackend, TFullCallExecutor, TLightCallExecutor,
Configuration, ChainSpec, ServiceComponents, TaskManager, Configuration, ChainSpec, TaskManager,
}; };
pub use service::config::{DatabaseConfig, PrometheusConfig}; pub use service::config::{DatabaseConfig, PrometheusConfig};
pub use sc_executor::NativeExecutionDispatch; pub use sc_executor::NativeExecutionDispatch;
@@ -148,26 +148,25 @@ type LightClient<RuntimeApi, Executor> =
service::TLightClientWithBackend<Block, RuntimeApi, Executor, LightBackend>; service::TLightClientWithBackend<Block, RuntimeApi, Executor, LightBackend>;
#[cfg(feature = "full-node")] #[cfg(feature = "full-node")]
pub fn full_params<RuntimeApi, Executor, Extrinsic>(mut config: Configuration, test: bool) -> Result<( pub fn new_partial<RuntimeApi, Executor, Extrinsic>(config: &mut Configuration, test: bool) -> Result<
service::ServiceParams< service::PartialComponents<
Block, FullClient<RuntimeApi, Executor>, FullBackend, FullSelectChain,
FullClient<RuntimeApi, Executor>,
babe::BabeImportQueue<Block, FullClient<RuntimeApi, Executor>>, babe::BabeImportQueue<Block, FullClient<RuntimeApi, Executor>>,
sc_transaction_pool::FullPool<Block, FullClient<RuntimeApi, Executor>>, sc_transaction_pool::FullPool<Block, FullClient<RuntimeApi, Executor>>,
polkadot_rpc::RpcExtension, (
FullBackend, impl Fn(polkadot_rpc::DenyUnsafe) -> polkadot_rpc::RpcExtension,
(
babe::BabeBlockImport<
Block, FullClient<RuntimeApi, Executor>, FullGrandpaBlockImport<RuntimeApi, Executor>
>,
grandpa::LinkHalf<Block, FullClient<RuntimeApi, Executor>, FullSelectChain>,
babe::BabeLink<Block>
),
grandpa::SharedVoterState,
)
>, >,
FullSelectChain, Error
( >
babe::BabeBlockImport<
Block, FullClient<RuntimeApi, Executor>, FullGrandpaBlockImport<RuntimeApi, Executor>
>,
grandpa::LinkHalf<Block, FullClient<RuntimeApi, Executor>, FullSelectChain>,
babe::BabeLink<Block>
),
inherents::InherentDataProviders,
grandpa::SharedVoterState,
), Error>
where where
RuntimeApi: ConstructRuntimeApi<Block, FullClient<RuntimeApi, Executor>> + Send + Sync + 'static, RuntimeApi: ConstructRuntimeApi<Block, FullClient<RuntimeApi, Executor>> + Send + Sync + 'static,
RuntimeApi::RuntimeApi: RuntimeApi::RuntimeApi:
@@ -184,19 +183,14 @@ pub fn full_params<RuntimeApi, Executor, Extrinsic>(mut config: Configuration, t
let inherent_data_providers = inherents::InherentDataProviders::new(); let inherent_data_providers = inherents::InherentDataProviders::new();
let (client, backend, keystore, task_manager) = let (client, backend, keystore, task_manager) =
service::new_full_parts::<Block, RuntimeApi, Executor>(&config)?; service::new_full_parts::<Block, RuntimeApi, Executor>(&config)?;
let client = Arc::new(client); let client = Arc::new(client);
let select_chain = sc_consensus::LongestChain::new(backend.clone()); let select_chain = sc_consensus::LongestChain::new(backend.clone());
let pool_api = sc_transaction_pool::FullChainApi::new(
client.clone(), config.prometheus_registry(),
);
let transaction_pool = sc_transaction_pool::BasicPool::new_full( let transaction_pool = sc_transaction_pool::BasicPool::new_full(
config.transaction_pool.clone(), config.transaction_pool.clone(),
std::sync::Arc::new(pool_api),
config.prometheus_registry(), config.prometheus_registry(),
task_manager.spawn_handle(), task_manager.spawn_handle(),
client.clone(), client.clone(),
@@ -251,7 +245,7 @@ pub fn full_params<RuntimeApi, Executor, Extrinsic>(mut config: Configuration, t
let transaction_pool = transaction_pool.clone(); let transaction_pool = transaction_pool.clone();
let select_chain = select_chain.clone(); let select_chain = select_chain.clone();
Box::new(move |deny_unsafe| -> polkadot_rpc::RpcExtension { move |deny_unsafe| -> polkadot_rpc::RpcExtension {
let deps = polkadot_rpc::FullDeps { let deps = polkadot_rpc::FullDeps {
client: client.clone(), client: client.clone(),
pool: transaction_pool.clone(), pool: transaction_pool.clone(),
@@ -269,28 +263,19 @@ pub fn full_params<RuntimeApi, Executor, Extrinsic>(mut config: Configuration, t
}; };
polkadot_rpc::create_full(deps) polkadot_rpc::create_full(deps)
}) }
}; };
let provider = client.clone() as Arc<dyn grandpa::StorageAndProofProvider<_, _>>; Ok(service::PartialComponents {
let finality_proof_provider = Arc::new(GrandpaFinalityProofProvider::new(backend.clone(), provider)) as _; client, backend, task_manager, keystore, select_chain, import_queue, transaction_pool,
inherent_data_providers,
let params = service::ServiceParams { other: (rpc_extensions_builder, import_setup, rpc_setup)
config, backend, client, import_queue, keystore, task_manager, rpc_extensions_builder, })
transaction_pool,
block_announce_validator_builder: None,
finality_proof_provider: Some(finality_proof_provider),
finality_proof_request_builder: None,
on_demand: None,
remote_blockchain: None,
};
Ok((params, select_chain, import_setup, inherent_data_providers, rpc_setup))
} }
#[cfg(feature = "full-node")] #[cfg(feature = "full-node")]
pub fn new_full<RuntimeApi, Executor, Extrinsic>( pub fn new_full<RuntimeApi, Executor, Extrinsic>(
config: Configuration, mut config: Configuration,
collating_for: Option<(CollatorId, parachain::Id)>, collating_for: Option<(CollatorId, parachain::Id)>,
max_block_data_size: Option<u64>, max_block_data_size: Option<u64>,
authority_discovery_disabled: bool, authority_discovery_disabled: bool,
@@ -327,18 +312,52 @@ pub fn new_full<RuntimeApi, Executor, Extrinsic>(
let disable_grandpa = config.disable_grandpa; let disable_grandpa = config.disable_grandpa;
let name = config.network.node_name.clone(); let name = config.network.node_name.clone();
let (params, select_chain, import_setup, inherent_data_providers, rpc_setup) let service::PartialComponents {
= full_params::<RuntimeApi, Executor, Extrinsic>(config, test)?; client, backend, mut task_manager, keystore, select_chain, import_queue, transaction_pool,
inherent_data_providers,
other: (rpc_extensions_builder, import_setup, rpc_setup)
} = new_partial::<RuntimeApi, Executor, Extrinsic>(&mut config, test)?;
let client = params.client.clone(); let prometheus_registry = config.prometheus_registry().cloned();
let keystore = params.keystore.clone();
let transaction_pool = params.transaction_pool.clone();
let prometheus_registry = params.config.prometheus_registry().cloned();
let ServiceComponents { let finality_proof_provider =
network, GrandpaFinalityProofProvider::new_for_service(backend.clone(), client.clone());
task_manager, telemetry_on_connect_sinks, rpc_handlers, ..
} = service::build(params)?; let (network, network_status_sinks, system_rpc_tx) =
service::build_network(service::BuildNetworkParams {
config: &config,
client: client.clone(),
transaction_pool: transaction_pool.clone(),
spawn_handle: task_manager.spawn_handle(),
import_queue,
on_demand: None,
block_announce_validator_builder: None,
finality_proof_request_builder: None,
finality_proof_provider: Some(finality_proof_provider.clone()),
})?;
if config.offchain_worker.enabled {
service::build_offchain_workers(
&config, backend.clone(), task_manager.spawn_handle(), client.clone(), network.clone(),
);
}
let telemetry_connection_sinks = service::TelemetryConnectionSinks::default();
let rpc_handlers = service::spawn_tasks(service::SpawnTasksParams {
config,
backend: backend.clone(),
client: client.clone(),
keystore: keystore.clone(),
network: network.clone(),
rpc_extensions_builder: Box::new(rpc_extensions_builder),
transaction_pool: transaction_pool.clone(),
task_manager: &mut task_manager,
on_demand: None,
remote_blockchain: None,
telemetry_connection_sinks: telemetry_connection_sinks.clone(),
network_status_sinks, system_rpc_tx,
})?;
let (block_import, link_half, babe_link) = import_setup; let (block_import, link_half, babe_link) = import_setup;
@@ -547,7 +566,7 @@ pub fn new_full<RuntimeApi, Executor, Extrinsic>(
link: link_half, link: link_half,
network: network.clone(), network: network.clone(),
inherent_data_providers: inherent_data_providers.clone(), inherent_data_providers: inherent_data_providers.clone(),
telemetry_on_connect: Some(telemetry_on_connect_sinks.on_connect_stream()), telemetry_on_connect: Some(telemetry_connection_sinks.on_connect_stream()),
voting_rule, voting_rule,
prometheus_registry: prometheus_registry.clone(), prometheus_registry: prometheus_registry.clone(),
shared_voter_state, shared_voter_state,
@@ -585,20 +604,17 @@ fn new_light<Runtime, Dispatch, Extrinsic>(mut config: Configuration) -> Result<
*registry = Registry::new_custom(Some("polkadot".into()), None)?; *registry = Registry::new_custom(Some("polkadot".into()), None)?;
} }
let (client, backend, keystore, task_manager, on_demand) = let (client, backend, keystore, mut task_manager, on_demand) =
service::new_light_parts::<Block, Runtime, Dispatch>(&config)?; service::new_light_parts::<Block, Runtime, Dispatch>(&config)?;
let select_chain = sc_consensus::LongestChain::new(backend.clone()); let select_chain = sc_consensus::LongestChain::new(backend.clone());
let pool_api = sc_transaction_pool::LightChainApi::new(
client.clone(),
on_demand.clone(),
);
let transaction_pool = Arc::new(sc_transaction_pool::BasicPool::new_light( let transaction_pool = Arc::new(sc_transaction_pool::BasicPool::new_light(
config.transaction_pool.clone(), config.transaction_pool.clone(),
Arc::new(pool_api),
config.prometheus_registry(), config.prometheus_registry(),
task_manager.spawn_handle(), task_manager.spawn_handle(),
client.clone(),
on_demand.clone(),
)); ));
let grandpa_block_import = grandpa::light_block_import( let grandpa_block_import = grandpa::light_block_import(
@@ -631,8 +647,27 @@ fn new_light<Runtime, Dispatch, Extrinsic>(mut config: Configuration) -> Result<
config.prometheus_registry(), config.prometheus_registry(),
)?; )?;
let provider = client.clone() as Arc<dyn grandpa::StorageAndProofProvider<_, _>>; let finality_proof_provider =
let finality_proof_provider = Arc::new(GrandpaFinalityProofProvider::new(backend.clone(), provider)); GrandpaFinalityProofProvider::new_for_service(backend.clone(), client.clone());
let (network, network_status_sinks, system_rpc_tx) =
service::build_network(service::BuildNetworkParams {
config: &config,
client: client.clone(),
transaction_pool: transaction_pool.clone(),
spawn_handle: task_manager.spawn_handle(),
import_queue,
on_demand: Some(on_demand.clone()),
block_announce_validator_builder: None,
finality_proof_request_builder: Some(finality_proof_request_builder),
finality_proof_provider: Some(finality_proof_provider),
})?;
if config.offchain_worker.enabled {
service::build_offchain_workers(
&config, backend.clone(), task_manager.spawn_handle(), client.clone(), network.clone(),
);
}
let light_deps = polkadot_rpc::LightDeps { let light_deps = polkadot_rpc::LightDeps {
remote_blockchain: backend.remote_blockchain(), remote_blockchain: backend.remote_blockchain(),
@@ -643,17 +678,14 @@ fn new_light<Runtime, Dispatch, Extrinsic>(mut config: Configuration) -> Result<
let rpc_extensions = polkadot_rpc::create_light(light_deps); let rpc_extensions = polkadot_rpc::create_light(light_deps);
let ServiceComponents { task_manager, rpc_handlers, .. } = service::build(service::ServiceParams { let rpc_handlers = service::spawn_tasks(service::SpawnTasksParams {
config,
block_announce_validator_builder: None,
finality_proof_request_builder: Some(finality_proof_request_builder),
finality_proof_provider: Some(finality_proof_provider),
on_demand: Some(on_demand), on_demand: Some(on_demand),
remote_blockchain: Some(backend.remote_blockchain()), remote_blockchain: Some(backend.remote_blockchain()),
rpc_extensions_builder: Box::new(service::NoopRpcExtensionBuilder(rpc_extensions)), rpc_extensions_builder: Box::new(service::NoopRpcExtensionBuilder(rpc_extensions)),
client: client.clone(), task_manager: &mut task_manager,
transaction_pool: transaction_pool.clone(), telemetry_connection_sinks: service::TelemetryConnectionSinks::default(),
import_queue, keystore, backend, task_manager, config, keystore, backend, transaction_pool, client, network, network_status_sinks,
system_rpc_tx,
})?; })?;
Ok((task_manager, rpc_handlers)) Ok((task_manager, rpc_handlers))
@@ -678,8 +710,8 @@ where
Extrinsic: RuntimeExtrinsic, Extrinsic: RuntimeExtrinsic,
{ {
config.keystore = service::config::KeystoreConfig::InMemory; config.keystore = service::config::KeystoreConfig::InMemory;
let (service::ServiceParams { client, backend, import_queue, task_manager, .. }, ..) let service::PartialComponents { client, backend, import_queue, task_manager, .. }
= full_params::<Runtime, Dispatch, Extrinsic>(config, false)?; = new_partial::<Runtime, Dispatch, Extrinsic>(&mut config, false)?;
Ok((client, backend, import_queue, task_manager)) Ok((client, backend, import_queue, task_manager))
} }