diff --git a/polkadot-parachain/src/chain_spec/bridge_hubs.rs b/polkadot-parachain/src/chain_spec/bridge_hubs.rs index 4bef37f893..ee0e62cd17 100644 --- a/polkadot-parachain/src/chain_spec/bridge_hubs.rs +++ b/polkadot-parachain/src/chain_spec/bridge_hubs.rs @@ -22,7 +22,9 @@ use std::{path::PathBuf, str::FromStr}; /// Collects all supported BridgeHub configurations #[derive(Debug, PartialEq)] pub enum BridgeHubRuntimeType { + Rococo, RococoLocal, + Wococo, WococoLocal, } @@ -31,7 +33,9 @@ impl FromStr for BridgeHubRuntimeType { fn from_str(value: &str) -> Result { match value { + rococo::BRIDGE_HUB_ROCOCO => Ok(BridgeHubRuntimeType::Rococo), rococo::BRIDGE_HUB_ROCOCO_LOCAL => Ok(BridgeHubRuntimeType::RococoLocal), + wococo::BRIDGE_HUB_WOCOCO => Ok(BridgeHubRuntimeType::Wococo), wococo::BRIDGE_HUB_WOCOCO_LOCAL => Ok(BridgeHubRuntimeType::WococoLocal), _ => Err(format!("Value '{}' is not configured yet", value)), } @@ -43,22 +47,29 @@ 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::RococoLocal => rococo::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) -> Box { Box::new(match self { + BridgeHubRuntimeType::Rococo => + rococo::live_config(rococo::BRIDGE_HUB_ROCOCO, "Rococo BrideHub", "rococo", ParaId::new(1013)), BridgeHubRuntimeType::RococoLocal => - rococo::local_config("Rococo BrideHub Local", "rococo-local", ParaId::new(1013)), + rococo::local_config(rococo::BRIDGE_HUB_ROCOCO_LOCAL, "Rococo BrideHub Local", "rococo-local", ParaId::new(1013)), + BridgeHubRuntimeType::Wococo => + wococo::live_config(wococo::BRIDGE_HUB_WOCOCO, "Wococo BrideHub", "wococo", ParaId::new(1013)), BridgeHubRuntimeType::WococoLocal => - wococo::local_config("Wococo BrideHub Local", "wococo-local", ParaId::new(1013)), + wococo::local_config(wococo::BRIDGE_HUB_WOCOCO_LOCAL, "Wococo BrideHub Local", "wococo-local", ParaId::new(1013)), }) } pub fn runtime_version(&self) -> &'static RuntimeVersion { match self { + 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 &bridge_hub_rococo_runtime::VERSION @@ -90,6 +101,7 @@ pub mod rococo { 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_LOCAL: &str = "bridge-hub-rococo-local"; /// Specialized `ChainSpec` for the normal parachain runtime. @@ -98,7 +110,8 @@ pub mod rococo { pub type RuntimeApi = bridge_hub_rococo_runtime::RuntimeApi; - pub fn local_config( + pub fn live_config( + id: &str, chain_name: &str, relay_chain: &str, para_id: ParaId, @@ -113,7 +126,66 @@ pub mod rococo { // Name chain_name, // ID - super::ensure_id(BRIDGE_HUB_ROCOCO_LOCAL).expect("invalid id"), + super::ensure_id(id).expect("invalid id"), + ChainType::Live, + move || { + genesis( + // initial collators. + vec![ + ( + get_account_id_from_seed::("Alice"), + get_collator_keys_from_seed::("Alice"), + ), + ( + get_account_id_from_seed::("Bob"), + get_collator_keys_from_seed::("Bob"), + ), + ], + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Charlie"), + get_account_id_from_seed::("Dave"), + get_account_id_from_seed::("Eve"), + get_account_id_from_seed::("Ferdie"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + get_account_id_from_seed::("Charlie//stash"), + get_account_id_from_seed::("Dave//stash"), + get_account_id_from_seed::("Eve//stash"), + get_account_id_from_seed::("Ferdie//stash"), + ], + para_id, + Some(get_account_id_from_seed::("Alice")), + Some(get_account_id_from_seed::("Bob")), + ) + }, + Vec::new(), + None, + None, + None, + Some(properties), + Extensions { relay_chain: relay_chain.to_string(), para_id: para_id.into() }, + ) + } + + pub fn local_config( + id: &str, + chain_name: &str, + relay_chain: &str, + para_id: ParaId, + ) -> BridgeHubChainSpec { + let properties = sc_chain_spec::Properties::new(); + // TODO: check + // properties.insert("ss58Format".into(), 2.into()); + // properties.insert("tokenSymbol".into(), "ROC".into()); + // properties.insert("tokenDecimals".into(), 12.into()); + + BridgeHubChainSpec::from_genesis( + // Name + chain_name, + // ID + super::ensure_id(id).expect("invalid id"), ChainType::Local, move || { genesis( @@ -216,16 +288,27 @@ pub mod wococo { use super::ParaId; use crate::chain_spec::bridge_hubs::rococo; + pub(crate) const BRIDGE_HUB_WOCOCO: &str = "bridge-hub-wococo"; 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( + id: &str, chain_name: &str, relay_chain: &str, para_id: ParaId, ) -> BridgeHubChainSpec { - rococo::local_config(chain_name, relay_chain, para_id) + rococo::local_config(id, chain_name, relay_chain, para_id) + } + + pub fn live_config( + id: &str, + chain_name: &str, + relay_chain: &str, + para_id: ParaId, + ) -> BridgeHubChainSpec { + rococo::live_config(id, chain_name, relay_chain, para_id) } } diff --git a/polkadot-parachain/src/command.rs b/polkadot-parachain/src/command.rs index e5734e4320..5e0950a567 100644 --- a/polkadot-parachain/src/command.rs +++ b/polkadot-parachain/src/command.rs @@ -481,10 +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::RococoLocal => new_partial::( &$config, crate::service::aura_build_import_queue::<_, AuraId>, )?, + chain_spec::bridge_hubs::BridgeHubRuntimeType::Wococo | chain_spec::bridge_hubs::BridgeHubRuntimeType::WococoLocal => new_partial::( &$config, crate::service::aura_build_import_queue::<_, AuraId>, @@ -779,11 +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::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::WococoLocal => crate::service::start_generic_aura_node::< chain_spec::bridge_hubs::wococo::RuntimeApi,