From 8e7663ba3dd4202fb0afea3c6d635be9870b6b45 Mon Sep 17 00:00:00 2001 From: Adrian Catangiu Date: Tue, 26 Apr 2022 16:24:09 +0300 Subject: [PATCH] service: use deny-list instead of allow-list for BEEFY (#5331) * use deny-list instead of allow-list for BEEFY Instead of allowing BEEFY to run on specific test nets, inverse the condition to explicitly disallow BEEFY on production chains that we don't want it to run on yet. This allows other test chains (other than Rococo/Wococo) that use the polkadot service file to enable and test BEEFY. Signed-off-by: Adrian Catangiu * address review comments * throw error if BEEFY enabled on production networks Signed-off-by: acatangiu --- polkadot/cli/src/command.rs | 7 +++++++ polkadot/node/service/src/lib.rs | 20 +++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/polkadot/cli/src/command.rs b/polkadot/cli/src/command.rs index ad248db4eb..2b3a7e83cf 100644 --- a/polkadot/cli/src/command.rs +++ b/polkadot/cli/src/command.rs @@ -273,6 +273,13 @@ where .map_err(Error::from)?; let chain_spec = &runner.config().chain_spec; + // Disallow BEEFY on production networks. + if cli.run.beefy && + (chain_spec.is_polkadot() || chain_spec.is_kusama() || chain_spec.is_westend()) + { + return Err(Error::Other("BEEFY disallowed on production networks".to_string())) + } + set_default_ss58_version(chain_spec); let grandpa_pause = if cli.run.grandpa_pause.is_empty() { diff --git a/polkadot/node/service/src/lib.rs b/polkadot/node/service/src/lib.rs index abd106ef63..278971b86b 100644 --- a/polkadot/node/service/src/lib.rs +++ b/polkadot/node/service/src/lib.rs @@ -239,6 +239,9 @@ pub enum Error { /// Can be called for a `Configuration` to identify which network the configuration targets. pub trait IdentifyVariant { + /// Returns if this is a configuration for the `Polkadot` network. + fn is_polkadot(&self) -> bool; + /// Returns if this is a configuration for the `Kusama` network. fn is_kusama(&self) -> bool; @@ -259,6 +262,9 @@ pub trait IdentifyVariant { } impl IdentifyVariant for Box { + fn is_polkadot(&self) -> bool { + self.id().starts_with("polkadot") || self.id().starts_with("dot") + } fn is_kusama(&self) -> bool { self.id().starts_with("kusama") || self.id().starts_with("ksm") } @@ -713,6 +719,15 @@ where Some(backoff) }; + // If not on a known test network, warn the user that BEEFY is still experimental. + if enable_beefy && + !config.chain_spec.is_rococo() && + !config.chain_spec.is_wococo() && + !config.chain_spec.is_versi() + { + gum::warn!("BEEFY is still experimental, usage on a production network is discouraged."); + } + let disable_grandpa = config.disable_grandpa; let name = config.network.node_name.clone(); @@ -782,7 +797,7 @@ where &client.block_hash(0).ok().flatten().expect("Genesis block exists; qed"), &config.chain_spec, ); - if chain_spec.is_rococo() || chain_spec.is_wococo() || chain_spec.is_versi() { + if enable_beefy { config .network .extra_sets @@ -1125,8 +1140,7 @@ where let keystore_opt = if role.is_authority() { Some(keystore_container.sync_keystore()) } else { None }; - // We currently only run the BEEFY gadget on the Rococo and Wococo testnets. - if enable_beefy && (chain_spec.is_rococo() || chain_spec.is_wococo() || chain_spec.is_versi()) { + if enable_beefy { let beefy_params = beefy_gadget::BeefyParams { client: client.clone(), backend: backend.clone(),