Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Commit 3d257b7

Browse files
authored
Single ParachainBlockImport instance (#1782)
1 parent 73a53d9 commit 3d257b7

File tree

9 files changed

+154
-121
lines changed

9 files changed

+154
-121
lines changed

client/consensus/aura/src/import_queue.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
//! Parachain specific wrapper for the AuRa import queue.
1818
1919
use codec::Codec;
20+
use cumulus_client_consensus_common::ParachainBlockImport;
2021
use sc_client_api::{backend::AuxStore, BlockOf, UsageProvider};
2122
use sc_consensus::{import_queue::DefaultImportQueue, BlockImport};
2223
use sc_consensus_aura::AuraVerifier;
@@ -33,10 +34,10 @@ use sp_runtime::traits::Block as BlockT;
3334
use std::{fmt::Debug, hash::Hash, sync::Arc};
3435
use substrate_prometheus_endpoint::Registry;
3536

36-
/// Parameters of [`import_queue`].
37+
/// Parameters for [`import_queue`].
3738
pub struct ImportQueueParams<'a, I, C, CIDP, S> {
3839
/// The block import to use.
39-
pub block_import: I,
40+
pub block_import: ParachainBlockImport<I>,
4041
/// The client to interact with the chain.
4142
pub client: Arc<C>,
4243
/// The inherent data providers, to create the inherent data.
@@ -83,7 +84,7 @@ where
8384
CIDP::InherentDataProviders: InherentDataProviderExt + Send + Sync,
8485
{
8586
sc_consensus_aura::import_queue::<P, _, _, _, _, _>(sc_consensus_aura::ImportQueueParams {
86-
block_import: cumulus_client_consensus_common::ParachainBlockImport::new(block_import),
87+
block_import,
8788
justification_import: None,
8889
client,
8990
create_inherent_data_providers,

client/consensus/aura/src/lib.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,22 @@ impl<B, CIDP, W> Clone for AuraConsensus<B, CIDP, W> {
7171
}
7272
}
7373

74+
/// Parameters of [`AuraConsensus::build`].
75+
pub struct BuildAuraConsensusParams<PF, BI, CIDP, Client, BS, SO> {
76+
pub proposer_factory: PF,
77+
pub create_inherent_data_providers: CIDP,
78+
pub block_import: ParachainBlockImport<BI>,
79+
pub para_client: Arc<Client>,
80+
pub backoff_authoring_blocks: Option<BS>,
81+
pub sync_oracle: SO,
82+
pub keystore: SyncCryptoStorePtr,
83+
pub force_authoring: bool,
84+
pub slot_duration: SlotDuration,
85+
pub telemetry: Option<TelemetryHandle>,
86+
pub block_proposal_slot_portion: SlotProportion,
87+
pub max_block_proposal_slot_portion: Option<SlotProportion>,
88+
}
89+
7490
impl<B, CIDP> AuraConsensus<B, CIDP, ()>
7591
where
7692
B: BlockT,
@@ -117,7 +133,7 @@ where
117133
let worker = sc_consensus_aura::build_aura_worker::<P, _, _, _, _, _, _, _, _>(
118134
BuildAuraWorkerParams {
119135
client: para_client,
120-
block_import: ParachainBlockImport::new(block_import),
136+
block_import,
121137
justification_sync_link: (),
122138
proposer_factory,
123139
sync_oracle,
@@ -216,19 +232,3 @@ where
216232
Some(ParachainCandidate { block: res.block, proof: res.storage_proof })
217233
}
218234
}
219-
220-
/// Parameters of [`AuraConsensus::build`].
221-
pub struct BuildAuraConsensusParams<PF, BI, CIDP, Client, BS, SO> {
222-
pub proposer_factory: PF,
223-
pub create_inherent_data_providers: CIDP,
224-
pub block_import: BI,
225-
pub para_client: Arc<Client>,
226-
pub backoff_authoring_blocks: Option<BS>,
227-
pub sync_oracle: SO,
228-
pub keystore: SyncCryptoStorePtr,
229-
pub force_authoring: bool,
230-
pub slot_duration: SlotDuration,
231-
pub telemetry: Option<TelemetryHandle>,
232-
pub block_proposal_slot_portion: SlotProportion,
233-
pub max_block_proposal_slot_portion: Option<SlotProportion>,
234-
}

client/consensus/common/src/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,12 @@ impl<I> ParachainBlockImport<I> {
8383
}
8484
}
8585

86+
impl<I: Clone> Clone for ParachainBlockImport<I> {
87+
fn clone(&self) -> Self {
88+
ParachainBlockImport(self.0.clone())
89+
}
90+
}
91+
8692
#[async_trait::async_trait]
8793
impl<Block, I> BlockImport<Block> for ParachainBlockImport<I>
8894
where

client/consensus/relay-chain/src/import_queue.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
use std::{marker::PhantomData, sync::Arc};
1818

19+
use cumulus_client_consensus_common::ParachainBlockImport;
20+
1921
use sc_consensus::{
2022
import_queue::{BasicQueue, Verifier as VerifierT},
2123
BlockImport, BlockImportParams,
@@ -103,7 +105,7 @@ where
103105
/// Start an import queue for a Cumulus collator that does not uses any special authoring logic.
104106
pub fn import_queue<Client, Block: BlockT, I, CIDP>(
105107
client: Arc<Client>,
106-
block_import: I,
108+
block_import: ParachainBlockImport<I>,
107109
create_inherent_data_providers: CIDP,
108110
spawner: &impl sp_core::traits::SpawnEssentialNamed,
109111
registry: Option<&substrate_prometheus_endpoint::Registry>,
@@ -117,11 +119,5 @@ where
117119
{
118120
let verifier = Verifier::new(client, create_inherent_data_providers);
119121

120-
Ok(BasicQueue::new(
121-
verifier,
122-
Box::new(cumulus_client_consensus_common::ParachainBlockImport::new(block_import)),
123-
None,
124-
spawner,
125-
registry,
126-
))
122+
Ok(BasicQueue::new(verifier, Box::new(block_import), None, spawner, registry))
127123
}

client/consensus/relay-chain/src/lib.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,14 @@ where
9090
para_id: ParaId,
9191
proposer_factory: PF,
9292
create_inherent_data_providers: CIDP,
93-
block_import: BI,
93+
block_import: ParachainBlockImport<BI>,
9494
relay_chain_interface: RCInterface,
9595
) -> Self {
9696
Self {
9797
para_id,
9898
proposer_factory: Arc::new(Mutex::new(proposer_factory)),
9999
create_inherent_data_providers: Arc::new(create_inherent_data_providers),
100-
block_import: Arc::new(futures::lock::Mutex::new(ParachainBlockImport::new(
101-
block_import,
102-
))),
100+
block_import: Arc::new(futures::lock::Mutex::new(block_import)),
103101
relay_chain_interface,
104102
_phantom: PhantomData,
105103
}
@@ -222,7 +220,7 @@ pub struct BuildRelayChainConsensusParams<PF, BI, CIDP, RCInterface> {
222220
pub para_id: ParaId,
223221
pub proposer_factory: PF,
224222
pub create_inherent_data_providers: CIDP,
225-
pub block_import: BI,
223+
pub block_import: ParachainBlockImport<BI>,
226224
pub relay_chain_interface: RCInterface,
227225
}
228226

parachain-template/node/src/command.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,6 @@ pub fn run() -> Result<()> {
217217
let partials = new_partial(&config)?;
218218
let db = partials.backend.expose_db();
219219
let storage = partials.backend.expose_storage();
220-
221220
cmd.run(config, partials.client.clone(), db, storage)
222221
}),
223222
BenchmarkCmd::Machine(cmd) =>

parachain-template/node/src/service.rs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ use parachain_template_runtime::{opaque::Block, Hash, RuntimeApi};
99

1010
// Cumulus Imports
1111
use cumulus_client_consensus_aura::{AuraConsensus, BuildAuraConsensusParams, SlotProportion};
12-
use cumulus_client_consensus_common::ParachainConsensus;
12+
use cumulus_client_consensus_common::{
13+
ParachainBlockImport as TParachainBlockImport, ParachainConsensus,
14+
};
1315
use cumulus_client_network::BlockAnnounceValidator;
1416
use cumulus_client_service::{
1517
prepare_node_config, start_collator, start_full_node, StartCollatorParams, StartFullNodeParams,
@@ -51,6 +53,8 @@ type ParachainClient = TFullClient<Block, RuntimeApi, ParachainExecutor>;
5153

5254
type ParachainBackend = TFullBackend<Block>;
5355

56+
type ParachainBlockImport = TParachainBlockImport<Arc<ParachainClient>>;
57+
5458
/// Starts a `ServiceBuilder` for a full service.
5559
///
5660
/// Use this macro if you don't actually need the full service, but just the builder in order to
@@ -64,7 +68,7 @@ pub fn new_partial(
6468
(),
6569
sc_consensus::DefaultImportQueue<Block, ParachainClient>,
6670
sc_transaction_pool::FullPool<Block, ParachainClient>,
67-
(Option<Telemetry>, Option<TelemetryWorkerHandle>),
71+
(ParachainBlockImport, Option<Telemetry>, Option<TelemetryWorkerHandle>),
6872
>,
6973
sc_service::Error,
7074
> {
@@ -109,8 +113,11 @@ pub fn new_partial(
109113
client.clone(),
110114
);
111115

116+
let block_import = ParachainBlockImport::new(client.clone());
117+
112118
let import_queue = build_import_queue(
113119
client.clone(),
120+
block_import.clone(),
114121
config,
115122
telemetry.as_ref().map(|telemetry| telemetry.handle()),
116123
&task_manager,
@@ -124,7 +131,7 @@ pub fn new_partial(
124131
task_manager,
125132
transaction_pool,
126133
select_chain: (),
127-
other: (telemetry, telemetry_worker_handle),
134+
other: (block_import, telemetry, telemetry_worker_handle),
128135
})
129136
}
130137

@@ -163,7 +170,7 @@ async fn start_node_impl(
163170
let parachain_config = prepare_node_config(parachain_config);
164171

165172
let params = new_partial(&parachain_config)?;
166-
let (mut telemetry, telemetry_worker_handle) = params.other;
173+
let (block_import, mut telemetry, telemetry_worker_handle) = params.other;
167174

168175
let client = params.client.clone();
169176
let backend = params.backend.clone();
@@ -255,6 +262,7 @@ async fn start_node_impl(
255262
if validator {
256263
let parachain_consensus = build_consensus(
257264
client.clone(),
265+
block_import,
258266
prometheus_registry.as_ref(),
259267
telemetry.as_ref().map(|t| t.handle()),
260268
&task_manager,
@@ -304,6 +312,7 @@ async fn start_node_impl(
304312
/// Build the import queue for the parachain runtime.
305313
fn build_import_queue(
306314
client: Arc<ParachainClient>,
315+
block_import: ParachainBlockImport,
307316
config: &Configuration,
308317
telemetry: Option<TelemetryHandle>,
309318
task_manager: &TaskManager,
@@ -318,8 +327,8 @@ fn build_import_queue(
318327
_,
319328
_,
320329
>(cumulus_client_consensus_aura::ImportQueueParams {
321-
block_import: client.clone(),
322-
client: client.clone(),
330+
block_import,
331+
client,
323332
create_inherent_data_providers: move |_, _| async move {
324333
let timestamp = sp_timestamp::InherentDataProvider::from_system_time();
325334

@@ -340,6 +349,7 @@ fn build_import_queue(
340349

341350
fn build_consensus(
342351
client: Arc<ParachainClient>,
352+
block_import: ParachainBlockImport,
343353
prometheus_registry: Option<&Registry>,
344354
telemetry: Option<TelemetryHandle>,
345355
task_manager: &TaskManager,
@@ -389,7 +399,7 @@ fn build_consensus(
389399
Ok((slot, timestamp, parachain_inherent))
390400
}
391401
},
392-
block_import: client.clone(),
402+
block_import,
393403
para_client: client,
394404
backoff_authoring_blocks: Option::<()>::None,
395405
sync_oracle,

0 commit comments

Comments
 (0)