mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 15:51:12 +00:00
Allow for customisation of chain selection systems (#2240)
* move SelectChain trait out of client * Extend SelectChain, move longest chain implementation into it * Bring SelectChain into service * implement LongestChain SelectChain * implement longest chain for node * update Cargo.lock's * in between erroring tests * deprecate ::backend and ::import_lock * Remove unneded space Co-Authored-By: gnunicorn <ben.kampmann@googlemail.com> * Remove unneded space Co-Authored-By: gnunicorn <ben.kampmann@googlemail.com> * Fixes test compilation * remove todo * re-enable client test * add doc * fixing tests * Clarify SelectChain Interface, intended implementation and usage * minor components cleanups * minor cleanups * Update lock files * Implement cleaner interface for SelectChain * addressing comments * Updating tests * bump node runtime impl version * address grumbles
This commit is contained in:
committed by
Gavin Wood
parent
32fdeed21c
commit
18ca0170c3
@@ -58,10 +58,9 @@ use srml_babe::{
|
||||
BabeInherentData,
|
||||
timestamp::{TimestampInherentData, InherentType as TimestampInherent}
|
||||
};
|
||||
use consensus_common::well_known_cache_keys;
|
||||
use consensus_common::{SelectChain, well_known_cache_keys};
|
||||
use consensus_common::import_queue::{Verifier, BasicQueue};
|
||||
use client::{
|
||||
ChainHead,
|
||||
block_builder::api::BlockBuilder as BlockBuilderApi,
|
||||
blockchain::ProvideCache,
|
||||
runtime_api::ApiExt,
|
||||
@@ -249,7 +248,7 @@ impl SlotCompatible for BabeSlotCompatible {
|
||||
}
|
||||
|
||||
/// Parameters for BABE.
|
||||
pub struct BabeParams<C, E, I, SO, OnExit> {
|
||||
pub struct BabeParams<C, E, I, SO, SC, OnExit> {
|
||||
|
||||
/// The configuration for BABE. Includes the slot duration, threshold, and
|
||||
/// other parameters.
|
||||
@@ -261,6 +260,9 @@ pub struct BabeParams<C, E, I, SO, OnExit> {
|
||||
/// The client to use
|
||||
pub client: Arc<C>,
|
||||
|
||||
/// The SelectChain Strategy
|
||||
pub select_chain: SC,
|
||||
|
||||
/// A block importer
|
||||
pub block_import: Arc<I>,
|
||||
|
||||
@@ -281,28 +283,30 @@ pub struct BabeParams<C, E, I, SO, OnExit> {
|
||||
}
|
||||
|
||||
/// Start the babe worker. The returned future should be run in a tokio runtime.
|
||||
pub fn start_babe<B, C, E, I, SO, Error, OnExit>(BabeParams {
|
||||
pub fn start_babe<B, C, E, I, SO, SC, Error, OnExit>(BabeParams {
|
||||
config,
|
||||
local_key,
|
||||
client,
|
||||
select_chain,
|
||||
block_import,
|
||||
env,
|
||||
sync_oracle,
|
||||
on_exit,
|
||||
inherent_data_providers,
|
||||
force_authoring,
|
||||
}: BabeParams<C, E, I, SO, OnExit>) -> Result<
|
||||
}: BabeParams<C, E, I, SO, SC, OnExit>) -> Result<
|
||||
impl Future<Item=(), Error=()>,
|
||||
consensus_common::Error,
|
||||
> where
|
||||
B: Block,
|
||||
C: ChainHead<B> + ProvideRuntimeApi + ProvideCache<B>,
|
||||
C: ProvideRuntimeApi + ProvideCache<B>,
|
||||
C::Api: AuthoritiesApi<B>,
|
||||
E: Environment<B, Error=Error>,
|
||||
E::Proposer: Proposer<B, Error=Error>,
|
||||
<<E::Proposer as Proposer<B>>::Create as IntoFuture>::Future: Send + 'static,
|
||||
I: BlockImport<B> + Send + Sync + 'static,
|
||||
SO: SyncOracle + Send + Sync + Clone,
|
||||
SC: SelectChain<B>,
|
||||
DigestItemFor<B>: CompatibleDigestItem + DigestItem<AuthorityId=Public>,
|
||||
Error: ::std::error::Error + Send + From<::consensus_common::Error> + From<I::Error> + 'static,
|
||||
OnExit: Future<Item=(), Error=()>,
|
||||
@@ -319,7 +323,7 @@ pub fn start_babe<B, C, E, I, SO, Error, OnExit>(BabeParams {
|
||||
};
|
||||
slots::start_slot_worker::<_, _, _, _, _, BabeSlotCompatible, _>(
|
||||
config.0,
|
||||
client,
|
||||
select_chain,
|
||||
Arc::new(worker),
|
||||
sync_oracle,
|
||||
on_exit,
|
||||
@@ -847,10 +851,13 @@ fn claim_slot(
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
#[allow(dead_code, unused_imports)]
|
||||
#[allow(dead_code, unused_imports, deprecated)]
|
||||
// FIXME #2532: need to allow deprecated until refactor is done https://github.com/paritytech/substrate/issues/2532
|
||||
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
use client::LongestChain;
|
||||
use consensus_common::NoNetwork as DummyOracle;
|
||||
use network::test::*;
|
||||
use network::test::{Block as TestBlock, PeersClient};
|
||||
@@ -1014,6 +1021,7 @@ mod tests {
|
||||
config,
|
||||
local_key: Arc::new(key.clone().into()),
|
||||
block_import: client.clone(),
|
||||
select_chain: LongestChain::new(client.backend().clone(), client.import_lock().clone()),
|
||||
client,
|
||||
env: environ.clone(),
|
||||
sync_oracle: DummyOracle,
|
||||
|
||||
Reference in New Issue
Block a user