From 16a2c9a2dc761f0c1f87520402a13d090b4811b2 Mon Sep 17 00:00:00 2001 From: Luke Parker <lukeparker5132@gmail.com> Date: Tue, 8 Nov 2022 02:14:49 -0500 Subject: [PATCH] Correct protocol name handling --- substrate/node/src/service.rs | 21 +++++++++---------- .../tendermint/client/src/authority/mod.rs | 6 +++--- substrate/tendermint/client/src/lib.rs | 6 +++--- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/substrate/node/src/service.rs b/substrate/node/src/service.rs index 19618220..1de4e6ed 100644 --- a/substrate/node/src/service.rs +++ b/substrate/node/src/service.rs @@ -21,12 +21,12 @@ pub(crate) use sc_tendermint::{ use serai_runtime::{self, MILLISECS_PER_BLOCK, opaque::Block, RuntimeApi}; type FullBackend = sc_service::TFullBackend<Block>; -type FullSelectChain = TendermintSelectChain<Block, FullBackend>; +pub type FullClient = TFullClient<Block, RuntimeApi, NativeElseWasmExecutor<ExecutorDispatch>>; type PartialComponents = sc_service::PartialComponents< FullClient, FullBackend, - FullSelectChain, + TendermintSelectChain<Block, FullBackend>, sc_consensus::DefaultImportQueue<Block, FullClient>, sc_transaction_pool::FullPool<Block, FullClient>, Option<Telemetry>, @@ -48,8 +48,6 @@ impl NativeExecutionDispatch for ExecutorDispatch { } } -pub type FullClient = TFullClient<Block, RuntimeApi, NativeElseWasmExecutor<ExecutorDispatch>>; - pub struct Cidp; #[async_trait::async_trait] impl CreateInherentDataProviders<Block, ()> for Cidp { @@ -169,11 +167,13 @@ pub async fn new_full(mut config: Configuration) -> Result<TaskManager, ServiceE }, ) = new_partial(&config)?; - if config.role.is_authority() { - config.network.extra_sets.push(sc_tendermint::set_config( - client.block_hash(0).unwrap().unwrap(), - config.chain_spec.fork_id(), - )); + let is_authority = config.role.is_authority(); + let tendermint_protocol = sc_tendermint::protocol_name( + client.block_hash(0).unwrap().unwrap(), + config.chain_spec.fork_id(), + ); + if is_authority { + config.network.extra_sets.push(sc_tendermint::set_config(tendermint_protocol.clone())); } let (network, system_rpc_tx, tx_handler_controller, network_starter) = @@ -210,8 +210,6 @@ pub async fn new_full(mut config: Configuration) -> Result<TaskManager, ServiceE }) }; - let is_authority = config.role.is_authority(); - let registry = config.prometheus_registry().cloned(); sc_service::spawn_tasks(sc_service::SpawnTasksParams { network: network.clone(), @@ -232,6 +230,7 @@ pub async fn new_full(mut config: Configuration) -> Result<TaskManager, ServiceE "tendermint", None, TendermintAuthority::new(authority).authority( + tendermint_protocol, keystore_container.keystore(), Cidp, sc_basic_authorship::ProposerFactory::new( diff --git a/substrate/tendermint/client/src/authority/mod.rs b/substrate/tendermint/client/src/authority/mod.rs index 314d4369..a51f9f71 100644 --- a/substrate/tendermint/client/src/authority/mod.rs +++ b/substrate/tendermint/client/src/authority/mod.rs @@ -26,7 +26,7 @@ use sc_consensus::import_queue::IncomingBlock; use sc_service::ImportQueue; use sc_client_api::{BlockBackend, Finalizer}; -use sc_network::NetworkBlock; +use sc_network::{ProtocolName, NetworkBlock}; use sc_network_gossip::GossipEngine; use substrate_prometheus_endpoint::Registry; @@ -37,7 +37,7 @@ use tendermint_machine::{ }; use crate::{ - CONSENSUS_ID, PROTOCOL_NAME, TendermintValidator, + CONSENSUS_ID, TendermintValidator, validators::{TendermintSigner, TendermintValidators}, tendermint::TendermintImport, }; @@ -142,6 +142,7 @@ impl<T: TendermintValidator> TendermintAuthority<T> { /// as it will not return until the P2P stack shuts down. pub async fn authority( mut self, + protocol: ProtocolName, keys: Arc<dyn CryptoStore>, providers: T::CIDP, env: T::Environment, @@ -158,7 +159,6 @@ impl<T: TendermintValidator> TendermintAuthority<T> { // Create the gossip network let mut gossip = GossipEngine::new( network.clone(), - PROTOCOL_NAME, protocol, Arc::new(TendermintGossip::new(number.clone(), self.import.validators.clone())), registry, diff --git a/substrate/tendermint/client/src/lib.rs b/substrate/tendermint/client/src/lib.rs index 63b563e0..7c3e96c4 100644 --- a/substrate/tendermint/client/src/lib.rs +++ b/substrate/tendermint/client/src/lib.rs @@ -35,7 +35,7 @@ pub(crate) const KEY_TYPE_ID: KeyTypeId = KeyTypeId(CONSENSUS_ID); const PROTOCOL_NAME: &str = "/tendermint/1"; -fn protocol_name<Hash: AsRef<[u8]>>(genesis: Hash, fork: Option<&str>) -> ProtocolName { +pub fn protocol_name<Hash: AsRef<[u8]>>(genesis: Hash, fork: Option<&str>) -> ProtocolName { let mut name = format!("/{}", hex::encode(genesis.as_ref())); if let Some(fork) = fork { name += &format!("/{}", fork); @@ -44,9 +44,9 @@ fn protocol_name<Hash: AsRef<[u8]>>(genesis: Hash, fork: Option<&str>) -> Protoc name.into() } -pub fn set_config<Hash: AsRef<[u8]>>(genesis: Hash, fork: Option<&str>) -> NonDefaultSetConfig { +pub fn set_config(protocol: ProtocolName) -> NonDefaultSetConfig { // TODO: 1 MiB Block Size + 1 KiB - let mut cfg = NonDefaultSetConfig::new(protocol_name(genesis, fork), (1024 * 1024) + 1024); + let mut cfg = NonDefaultSetConfig::new(protocol, (1024 * 1024) + 1024); cfg.allow_non_reserved(25, 25); cfg }