From 00555073f1ff570ae89c02a66a978311408f0e7c Mon Sep 17 00:00:00 2001 From: acatangiu Date: Mon, 13 Dec 2021 14:15:53 +0200 Subject: [PATCH] chain-spec: add optional 'fork_id' 'fork_id' is used to uniquely identify forks of the same chain/network 'ChainSpec' trait provides default 'None' implementation, meaning this chain hasn't been forked. --- bin/node-template/node/src/service.rs | 5 ++++- bin/node/cli/src/service.rs | 5 ++++- client/chain-spec/src/lib.rs | 4 ++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/bin/node-template/node/src/service.rs b/bin/node-template/node/src/service.rs index 2a4ee47b659cf..4397a0dfb358f 100644 --- a/bin/node-template/node/src/service.rs +++ b/bin/node-template/node/src/service.rs @@ -170,7 +170,10 @@ pub fn new_full(mut config: Configuration) -> Result other: (block_import, grandpa_link, mut telemetry), } = new_partial(&config)?; let genesis_hash = client.block_hash(0).ok().flatten().unwrap_or_default(); - let chain_prefix = format!("/{}/{}", config.protocol_id().as_ref(), genesis_hash); + let chain_prefix = match config.chain_spec.fork_id() { + Some(fork_id) => format!("/{}/{}", genesis_hash, fork_id), + None => format!("/{}", genesis_hash), + }; if let Some(url) = &config.keystore_remote { match remote_keystore(url) { diff --git a/bin/node/cli/src/service.rs b/bin/node/cli/src/service.rs index e945ecb868d03..f412f0a83ae70 100644 --- a/bin/node/cli/src/service.rs +++ b/bin/node/cli/src/service.rs @@ -327,7 +327,10 @@ pub fn new_full_base( let shared_voter_state = rpc_setup; let auth_disc_publish_non_global_ips = config.network.allow_non_globals_in_dht; let genesis_hash = client.block_hash(0).ok().flatten().unwrap_or_default(); - let chain_prefix = format!("/{}/{}", config.protocol_id().as_ref(), genesis_hash); + let chain_prefix = match config.chain_spec.fork_id() { + Some(fork_id) => format!("/{}/{}", genesis_hash, fork_id), + None => format!("/{}", genesis_hash), + }; config.network.extra_sets.push(grandpa::grandpa_peers_set_config(&chain_prefix)); let warp_sync = Arc::new(grandpa::warp_proof::NetworkProvider::new( diff --git a/client/chain-spec/src/lib.rs b/client/chain-spec/src/lib.rs index 334d8f8b3d7ac..ee24744b16f9d 100644 --- a/client/chain-spec/src/lib.rs +++ b/client/chain-spec/src/lib.rs @@ -165,6 +165,10 @@ pub trait ChainSpec: BuildStorage + Send + Sync { fn telemetry_endpoints(&self) -> &Option; /// Network protocol id. fn protocol_id(&self) -> Option<&str>; + /// Optional network fork identifier. `None` by default. + fn fork_id(&self) -> Option<&str> { + None + } /// Additional loosly-typed properties of the chain. /// /// Returns an empty JSON object if 'properties' not defined in config