From d9441aa144a9efab3df75bca2901a20e9edfed7a Mon Sep 17 00:00:00 2001 From: Branislav Kontur Date: Thu, 13 Oct 2022 23:42:04 +0200 Subject: [PATCH] [BridgeHub] Added default chain_spec for live Rococo/Wococo --- .../src/chain_spec/bridge_hubs.rs | 116 +++++++++++++----- polkadot-parachain/src/command.rs | 8 +- 2 files changed, 90 insertions(+), 34 deletions(-) diff --git a/polkadot-parachain/src/chain_spec/bridge_hubs.rs b/polkadot-parachain/src/chain_spec/bridge_hubs.rs index 7855f37866..ce1705822a 100644 --- a/polkadot-parachain/src/chain_spec/bridge_hubs.rs +++ b/polkadot-parachain/src/chain_spec/bridge_hubs.rs @@ -14,17 +14,19 @@ // You should have received a copy of the GNU General Public License // along with Cumulus. If not, see . +use crate::chain_spec::{get_account_id_from_seed, get_collator_keys_from_seed}; use cumulus_primitives_core::ParaId; -use sc_chain_spec::ChainSpec; +use sc_chain_spec::{ChainSpec, ChainType}; use sc_cli::RuntimeVersion; +use sp_core::sr25519; use std::{path::PathBuf, str::FromStr}; /// Collects all supported BridgeHub configurations #[derive(Debug, PartialEq)] pub enum BridgeHubRuntimeType { - Rococo, + Rococo { default_config: bool }, RococoLocal, - Wococo, + Wococo { default_config: bool }, WococoLocal, } @@ -33,9 +35,13 @@ impl FromStr for BridgeHubRuntimeType { fn from_str(value: &str) -> Result { match value { - rococo::BRIDGE_HUB_ROCOCO => Ok(BridgeHubRuntimeType::Rococo), + rococo::BRIDGE_HUB_ROCOCO => Ok(BridgeHubRuntimeType::Rococo { default_config: false }), + rococo::BRIDGE_HUB_ROCOCO_DEFAULT => + Ok(BridgeHubRuntimeType::Rococo { default_config: true }), rococo::BRIDGE_HUB_ROCOCO_LOCAL => Ok(BridgeHubRuntimeType::RococoLocal), - wococo::BRIDGE_HUB_WOCOCO => Ok(BridgeHubRuntimeType::Wococo), + wococo::BRIDGE_HUB_WOCOCO => Ok(BridgeHubRuntimeType::Wococo { default_config: false }), + wococo::BRIDGE_HUB_WOCOCO_DEFAULT => + Ok(BridgeHubRuntimeType::Wococo { default_config: true }), wococo::BRIDGE_HUB_WOCOCO_LOCAL => Ok(BridgeHubRuntimeType::WococoLocal), _ => Err(format!("Value '{}' is not configured yet", value)), } @@ -47,42 +53,74 @@ impl BridgeHubRuntimeType { pub fn chain_spec_from_json_file(&self, path: PathBuf) -> Result, String> { Ok(Box::new(match self { - BridgeHubRuntimeType::Rococo => rococo::BridgeHubChainSpec::from_json_file(path)?, + BridgeHubRuntimeType::Rococo { .. } => + rococo::BridgeHubChainSpec::from_json_file(path)?, BridgeHubRuntimeType::RococoLocal => rococo::BridgeHubChainSpec::from_json_file(path)?, - BridgeHubRuntimeType::Wococo => wococo::BridgeHubChainSpec::from_json_file(path)?, + BridgeHubRuntimeType::Wococo { .. } => + wococo::BridgeHubChainSpec::from_json_file(path)?, BridgeHubRuntimeType::WococoLocal => wococo::BridgeHubChainSpec::from_json_file(path)?, })) } pub fn load_config(&self) -> Result, String> { match self { - BridgeHubRuntimeType::Rococo => - Ok(Box::new(rococo::BridgeHubChainSpec::from_json_bytes( - &include_bytes!("../../../parachains/chain-specs/bridge-hub-rococo.json")[..], - )?)), - BridgeHubRuntimeType::RococoLocal => Ok(Box::new(rococo::local_config( + BridgeHubRuntimeType::Rococo { default_config } => + if *default_config { + Ok(Box::new(rococo::default_config( + rococo::BRIDGE_HUB_ROCOCO, + "Rococo BrideHub", + ChainType::Live, + "rococo", + ParaId::new(1013), + None, + None, + ))) + } else { + Ok(Box::new(rococo::BridgeHubChainSpec::from_json_bytes( + &include_bytes!("../../../parachains/chain-specs/bridge-hub-rococo.json")[..], + )?)) + }, + BridgeHubRuntimeType::RococoLocal => Ok(Box::new(rococo::default_config( rococo::BRIDGE_HUB_ROCOCO_LOCAL, "Rococo BrideHub Local", + ChainType::Local, "rococo-local", ParaId::new(1013), + Some("Alice".to_string()), + Some("Bob".to_string()), ))), - BridgeHubRuntimeType::Wococo => - Ok(Box::new(rococo::BridgeHubChainSpec::from_json_bytes( - &include_bytes!("../../../parachains/chain-specs/bridge-hub-wococo.json")[..], - )?)), - BridgeHubRuntimeType::WococoLocal => Ok(Box::new(wococo::local_config( + BridgeHubRuntimeType::Wococo { default_config } => + if *default_config { + Ok(Box::new(wococo::default_config( + wococo::BRIDGE_HUB_WOCOCO, + "Wococo BrideHub", + ChainType::Live, + "wococo", + ParaId::new(1013), + None, + None, + ))) + } else { + Ok(Box::new(rococo::BridgeHubChainSpec::from_json_bytes( + &include_bytes!("../../../parachains/chain-specs/bridge-hub-wococo.json")[..], + )?)) + }, + BridgeHubRuntimeType::WococoLocal => Ok(Box::new(wococo::default_config( wococo::BRIDGE_HUB_WOCOCO_LOCAL, "Wococo BrideHub Local", + ChainType::Local, "wococo-local", ParaId::new(1013), + Some("Alice".to_string()), + Some("Bob".to_string()), ))), } } pub fn runtime_version(&self) -> &'static RuntimeVersion { match self { - BridgeHubRuntimeType::Rococo | - BridgeHubRuntimeType::Wococo | + BridgeHubRuntimeType::Rococo { .. } | + BridgeHubRuntimeType::Wococo { .. } | BridgeHubRuntimeType::RococoLocal | BridgeHubRuntimeType::WococoLocal => { // this is intentional, for Rococo/Wococo we just want to have one runtime, which is configured for both sides @@ -107,15 +145,13 @@ fn ensure_id(id: &str) -> Result<&str, String> { /// Sub-module for Rococo setup pub mod rococo { - use super::ParaId; - use crate::chain_spec::{ - get_account_id_from_seed, get_collator_keys_from_seed, Extensions, SAFE_XCM_VERSION, - }; + use super::{get_account_id_from_seed, get_collator_keys_from_seed, sr25519, ParaId}; + use crate::chain_spec::{Extensions, SAFE_XCM_VERSION}; use parachains_common::{AccountId, AuraId}; use sc_chain_spec::ChainType; - use sp_core::sr25519; pub(crate) const BRIDGE_HUB_ROCOCO: &str = "bridge-hub-rococo"; + pub(crate) const BRIDGE_HUB_ROCOCO_DEFAULT: &str = "bridge-hub-rococo-default"; pub(crate) const BRIDGE_HUB_ROCOCO_LOCAL: &str = "bridge-hub-rococo-local"; /// Specialized `ChainSpec` for the normal parachain runtime. @@ -124,11 +160,14 @@ pub mod rococo { pub type RuntimeApi = bridge_hub_rococo_runtime::RuntimeApi; - pub fn local_config( + pub fn default_config( id: &str, chain_name: &str, + chain_type: ChainType, relay_chain: &str, para_id: ParaId, + root_key_seed: Option, + bridges_pallet_owner_seed: Option, ) -> BridgeHubChainSpec { let properties = sc_chain_spec::Properties::new(); // TODO: check @@ -141,7 +180,7 @@ pub mod rococo { chain_name, // ID super::ensure_id(id).expect("invalid id"), - ChainType::Local, + chain_type, move || { genesis( // initial collators. @@ -170,8 +209,12 @@ pub mod rococo { get_account_id_from_seed::("Ferdie//stash"), ], para_id, - Some(get_account_id_from_seed::("Alice")), - Some(get_account_id_from_seed::("Bob")), + root_key_seed + .as_ref() + .map(|seed| get_account_id_from_seed::(&seed)), + bridges_pallet_owner_seed + .as_ref() + .map(|seed| get_account_id_from_seed::(&seed)), ) }, Vec::new(), @@ -242,19 +285,32 @@ pub mod rococo { pub mod wococo { use super::ParaId; use crate::chain_spec::bridge_hubs::rococo; + use sc_chain_spec::ChainType; pub(crate) const BRIDGE_HUB_WOCOCO: &str = "bridge-hub-wococo"; + pub(crate) const BRIDGE_HUB_WOCOCO_DEFAULT: &str = "bridge-hub-wococo-default"; pub(crate) const BRIDGE_HUB_WOCOCO_LOCAL: &str = "bridge-hub-wococo-local"; pub type BridgeHubChainSpec = rococo::BridgeHubChainSpec; pub type RuntimeApi = rococo::RuntimeApi; - pub fn local_config( + pub fn default_config( id: &str, chain_name: &str, + chain_type: ChainType, relay_chain: &str, para_id: ParaId, + root_key_seed: Option, + bridges_pallet_owner_seed: Option, ) -> BridgeHubChainSpec { - rococo::local_config(id, chain_name, relay_chain, para_id) + rococo::default_config( + id, + chain_name, + chain_type, + relay_chain, + para_id, + root_key_seed, + bridges_pallet_owner_seed, + ) } } diff --git a/polkadot-parachain/src/command.rs b/polkadot-parachain/src/command.rs index fe8dc65586..2845d2b2ec 100644 --- a/polkadot-parachain/src/command.rs +++ b/polkadot-parachain/src/command.rs @@ -481,12 +481,12 @@ macro_rules! construct_async_run { Runtime::BridgeHub(bridge_hub_runtime_type) => { runner.async_run(|$config| { let $components = match bridge_hub_runtime_type { - chain_spec::bridge_hubs::BridgeHubRuntimeType::Rococo | + chain_spec::bridge_hubs::BridgeHubRuntimeType::Rococo { .. } | chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoLocal => new_partial::( &$config, crate::service::aura_build_import_queue::<_, AuraId>, )?, - chain_spec::bridge_hubs::BridgeHubRuntimeType::Wococo | + chain_spec::bridge_hubs::BridgeHubRuntimeType::Wococo { .. } | chain_spec::bridge_hubs::BridgeHubRuntimeType::WococoLocal => new_partial::( &$config, crate::service::aura_build_import_queue::<_, AuraId>, @@ -781,13 +781,13 @@ pub fn run() -> Result<()> { .map(|r| r.0) .map_err(Into::into), Runtime::BridgeHub(bridge_hub_runtime_type) => match bridge_hub_runtime_type { - chain_spec::bridge_hubs::BridgeHubRuntimeType::Rococo | + chain_spec::bridge_hubs::BridgeHubRuntimeType::Rococo { .. } | chain_spec::bridge_hubs::BridgeHubRuntimeType::RococoLocal => crate::service::start_generic_aura_node::< chain_spec::bridge_hubs::rococo::RuntimeApi, AuraId, >(config, polkadot_config, collator_options, id, hwbench), - chain_spec::bridge_hubs::BridgeHubRuntimeType::Wococo | + chain_spec::bridge_hubs::BridgeHubRuntimeType::Wococo { .. } | chain_spec::bridge_hubs::BridgeHubRuntimeType::WococoLocal => crate::service::start_generic_aura_node::< chain_spec::bridge_hubs::wococo::RuntimeApi,