Skip to content

Commit 5369039

Browse files
feat(bridging): add config for local westend (#2373)
Add chain spec configuration to enable running Frequency with a local Westend network. This setup supports testing bridging functionality between Frequency and Snowbridge. Closes #2372 --------- Co-authored-by: Matthew Orris <[email protected]>
1 parent b59171e commit 5369039

File tree

11 files changed

+78
-3
lines changed

11 files changed

+78
-3
lines changed

.vscode/settings.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
// Set the features to use for cargo commands
1717
"rust-analyzer.cargo.features": [
1818
"runtime-benchmarks",
19+
"frequency-bridging",
1920
"frequency-lint-check"
2021
],
2122
"lldb.launch.preRunCommands": [

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ build-bridging-mainnet:
312312
cargo build --features frequency,frequency-bridging
313313

314314
build-bridging-westend:
315-
cargo build --features frequency-local,frequency-bridging
315+
cargo build --features frequency-local,frequency-bridging --release
316316

317317
.PHONY: test e2e-tests e2e-tests-serial e2e-tests-only e2e-tests-load e2e-tests-load-only e2e-tests-testnet-paseo e2e-tests-paseo-local
318318
test:

node/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ frequency-service = { path = "service" }
2323

2424
[features]
2525
std = []
26+
frequency-bridging = []
2627
default = []
2728
runtime-benchmarks = ["frequency-cli/runtime-benchmarks"]
2829
frequency = ["frequency-service/frequency", "frequency-cli/frequency"]

node/cli/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ cumulus-pallet-weight-reclaim = { workspace = true }
6666
substrate-build-script-utils = { workspace = true }
6767

6868
[features]
69+
frequency-bridging = []
6970
std = ["sp-io/std", "sp-api/std", "frame-support/std", "sp-runtime/std", "sp-core/std"]
7071
cli = [
7172
"frequency-service",

node/cli/src/command.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ use sc_cli::{
1818
use sc_service::config::{BasePath, PrometheusConfig};
1919
use sp_runtime::traits::HashingFor;
2020

21+
#[derive(Debug)]
2122
enum ChainIdentity {
2223
Frequency,
2324
FrequencyPaseo,
2425
FrequencyLocal,
2526
FrequencyDev,
27+
FrequencyWestendLocal,
2628
}
2729

2830
trait IdentifyChain {
@@ -39,6 +41,8 @@ impl IdentifyChain for dyn sc_service::ChainSpec {
3941
ChainIdentity::FrequencyLocal
4042
} else if self.id() == "dev" {
4143
ChainIdentity::FrequencyDev
44+
} else if self.id() == "frequency-westend-local" {
45+
ChainIdentity::FrequencyWestendLocal
4246
} else {
4347
panic!("Unknown chain identity")
4448
}
@@ -53,6 +57,7 @@ impl PartialEq for ChainIdentity {
5357
(ChainIdentity::FrequencyPaseo, ChainIdentity::FrequencyPaseo) => true,
5458
(ChainIdentity::FrequencyLocal, ChainIdentity::FrequencyLocal) => true,
5559
(ChainIdentity::FrequencyDev, ChainIdentity::FrequencyDev) => true,
60+
(ChainIdentity::FrequencyWestendLocal, ChainIdentity::FrequencyWestendLocal) => true,
5661
_ => false,
5762
}
5863
}
@@ -75,6 +80,9 @@ fn load_spec(id: &str) -> std::result::Result<Box<dyn ChainSpec>, String> {
7580
#[cfg(feature = "frequency-local")]
7681
"frequency-paseo-local" =>
7782
Ok(Box::new(chain_spec::frequency_paseo_local::local_paseo_testnet_config())),
83+
#[cfg(feature = "frequency-bridging")]
84+
"frequency-westend-local" =>
85+
Ok(Box::new(chain_spec::frequency_westend_local::local_westend_testnet_config())),
7886
#[cfg(feature = "frequency-testnet")]
7987
"frequency-testnet" | "frequency-paseo" | "paseo" | "testnet" =>
8088
Ok(Box::new(chain_spec::frequency_paseo::load_frequency_paseo_spec())),
@@ -103,6 +111,15 @@ fn load_spec(id: &str) -> std::result::Result<Box<dyn ChainSpec>, String> {
103111
}
104112
#[cfg(not(feature = "frequency-local"))]
105113
return Err("Frequency Local runtime is not available.".into());
114+
} else if cfg!(feature = "frequency-bridging") {
115+
#[cfg(feature = "frequency-bridging")]
116+
{
117+
return Ok(Box::new(
118+
chain_spec::frequency_westend_local::local_westend_testnet_config(),
119+
));
120+
}
121+
#[cfg(not(feature = "frequency-bridging"))]
122+
return Err("Frequency Westend Local runtime is not available.".into());
106123
} else if cfg!(feature = "frequency-testnet") {
107124
#[cfg(feature = "frequency-testnet")]
108125
{
@@ -144,6 +161,15 @@ fn load_spec(id: &str) -> std::result::Result<Box<dyn ChainSpec>, String> {
144161
}
145162
#[cfg(not(feature = "frequency-local"))]
146163
return Err("Frequency Local runtime is not available.".into());
164+
} else if ChainIdentity::FrequencyWestendLocal == spec.identify() {
165+
#[cfg(feature = "frequency-bridging")]
166+
{
167+
return Ok(Box::new(
168+
chain_spec::frequency_westend_local::ChainSpec::from_json_file(path_buf)?,
169+
));
170+
}
171+
#[cfg(not(feature = "frequency-bridging"))]
172+
return Err("Frequency Westend Local runtime is not available.".into());
147173
} else if ChainIdentity::FrequencyDev == spec.identify() {
148174
#[cfg(feature = "frequency-no-relay")]
149175
{

node/service/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ sc-client-api = { workspace = true }
116116
scale-info = { workspace = true, features = ["derive"] }
117117

118118
[features]
119+
frequency-bridging = ["frequency-runtime"]
119120
default = ["std"]
120121
std = ["sp-api/std", "sp-core/std"]
121122
runtime-benchmarks = [

node/service/src/chain_spec.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ pub mod frequency_paseo;
1919
#[cfg(any(feature = "frequency-local", feature = "frequency-no-relay"))]
2020
pub mod frequency_paseo_local;
2121

22+
#[cfg(feature = "frequency-bridging")]
23+
pub mod frequency_westend_local;
24+
2225
#[cfg(feature = "frequency-no-relay")]
2326
pub mod frequency_dev;
2427

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#![allow(missing_docs)]
2+
use common_runtime::constants::{FREQUENCY_TESTNET_TOKEN, TOKEN_DECIMALS};
3+
use frequency_runtime::Ss58Prefix;
4+
use polkadot_service::chain_spec::Extensions as RelayChainExtensions;
5+
use sc_service::ChainType;
6+
7+
use super::{get_properties, Extensions};
8+
9+
/// Specialized `ChainSpec` for the normal parachain runtime.
10+
pub type ChainSpec = sc_service::GenericChainSpec<Extensions>;
11+
12+
// Generic chain spec, in case when we don't have the native runtime.
13+
pub type RelayChainSpec = sc_service::GenericChainSpec<RelayChainExtensions>;
14+
15+
/// Generates the chain spec for a local testnet
16+
pub fn local_westend_testnet_config() -> ChainSpec {
17+
// Give your base currency a unit name and decimal places
18+
let properties =
19+
get_properties(FREQUENCY_TESTNET_TOKEN, TOKEN_DECIMALS as u32, Ss58Prefix::get().into());
20+
21+
ChainSpec::builder(
22+
frequency_runtime::wasm_binary_unwrap(),
23+
Extensions {
24+
relay_chain: "westend-local".into(), // You MUST set this to the correct network!
25+
para_id: 2000,
26+
},
27+
)
28+
.with_name("Frequency Local Westend Testnet")
29+
.with_id("frequency-westend-local")
30+
.with_protocol_id("frequency-westend-local")
31+
.with_properties(properties)
32+
.with_chain_type(ChainType::Local)
33+
.with_genesis_config_preset_name("frequency-westend-local")
34+
.build()
35+
}

runtime/common/src/lib.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ pub mod weights;
2222
#[macro_export]
2323
macro_rules! prod_or_testnet_or_local {
2424
($prod:expr, $test:expr, $local:expr) => {
25-
if cfg!(any(feature = "frequency-local", feature = "frequency-no-relay")) {
25+
if cfg!(any(
26+
feature = "frequency-local",
27+
feature = "frequency-no-relay",
28+
feature = "frequency-bridging"
29+
)) {
2630
$local
2731
} else if cfg!(feature = "frequency-testnet") {
2832
$test

runtime/frequency/src/genesis/presets.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<Vec<u8>> {
114114
feature = "frequency-lint-check"
115115
))]
116116
"frequency-local" => frequency_local_genesis_config(),
117+
#[cfg(all(feature = "frequency-local", feature = "frequency-bridging"))]
118+
"frequency-westend-local" => frequency_local_genesis_config(),
117119
#[cfg(feature = "frequency-testnet")]
118120
"frequency-testnet" => frequency_testnet_genesis_config(),
119121
#[cfg(any(feature = "frequency", feature = "runtime-benchmarks"))]

runtime/frequency/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1416,7 +1416,7 @@ construct_runtime!(
14161416
pub enum Runtime {
14171417
// System support stuff.
14181418
System: frame_system::{Pallet, Call, Config<T>, Storage, Event<T>} = 0,
1419-
#[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check", feature = "frequency-bridging"))]
1419+
#[cfg(any(not(feature = "frequency-no-relay"), feature = "frequency-lint-check"))]
14201420
ParachainSystem: cumulus_pallet_parachain_system::{ Pallet, Call, Config<T>, Storage, Inherent, Event<T> } = 1,
14211421
Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 2,
14221422
ParachainInfo: parachain_info::{Pallet, Storage, Config<T>} = 3,
@@ -1655,6 +1655,7 @@ sp_api::impl_runtime_apis! {
16551655
sp_genesis_builder::PresetId::from("development"),
16561656
sp_genesis_builder::PresetId::from("frequency-local"),
16571657
sp_genesis_builder::PresetId::from("frequency"),
1658+
sp_genesis_builder::PresetId::from("frequency-westend-local"),
16581659
]);
16591660

16601661

0 commit comments

Comments
 (0)