Skip to content

Commit 12ab315

Browse files
kianenigmabkontur
andauthored
make polkadot-parachain chain-spec extension more relaxed (#4452)
A small step towards https://forum.polkadot.network/t/polkadot-parachain-omni-node-gathering-ideas-and-feedback/7823 and #4352. Many parachains use `camelCase` and/or `PascalCase`ing for their chain spec extension. Sometimes the only reason polkadot-parachain cannot sync them is because it cannot parse the chain spec extension. This PR relaxes the requirement for the extension to be camel case. --------- Co-authored-by: Branislav Kontur <[email protected]>
1 parent 712a750 commit 12ab315

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

cumulus/polkadot-parachain/src/chain_spec/mod.rs

+21-1
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,12 @@ const SAFE_XCM_VERSION: u32 = xcm::prelude::XCM_VERSION;
3737

3838
/// Generic extensions for Parachain ChainSpecs.
3939
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)]
40-
#[serde(deny_unknown_fields)]
4140
pub struct Extensions {
4241
/// The relay chain of the Parachain.
42+
#[serde(alias = "relayChain", alias = "RelayChain")]
4343
pub relay_chain: String,
4444
/// The id of the Parachain.
45+
#[serde(alias = "paraId", alias = "ParaId")]
4546
pub para_id: u32,
4647
}
4748

@@ -78,3 +79,22 @@ where
7879
pub fn get_collator_keys_from_seed<AuraId: Public>(seed: &str) -> <AuraId::Pair as Pair>::Public {
7980
get_from_seed::<AuraId>(seed)
8081
}
82+
83+
#[cfg(test)]
84+
mod tests {
85+
use super::*;
86+
87+
#[test]
88+
fn can_decode_extension_camel_and_snake_case() {
89+
let camel_case = r#"{"relayChain":"relay","paraId":1}"#;
90+
let snake_case = r#"{"relay_chain":"relay","para_id":1}"#;
91+
let pascal_case = r#"{"RelayChain":"relay","ParaId":1}"#;
92+
93+
let camel_case_extension: Extensions = serde_json::from_str(camel_case).unwrap();
94+
let snake_case_extension: Extensions = serde_json::from_str(snake_case).unwrap();
95+
let pascal_case_extension: Extensions = serde_json::from_str(pascal_case).unwrap();
96+
97+
assert_eq!(camel_case_extension, snake_case_extension);
98+
assert_eq!(snake_case_extension, pascal_case_extension);
99+
}
100+
}

templates/parachain/node/src/chain_spec.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@ pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Pu
2222

2323
/// The extensions for the [`ChainSpec`].
2424
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)]
25-
#[serde(deny_unknown_fields)]
2625
pub struct Extensions {
2726
/// The relay chain of the Parachain.
27+
#[serde(alias = "relayChain", alias = "RelayChain")]
2828
pub relay_chain: String,
2929
/// The id of the Parachain.
30+
#[serde(alias = "paraId", alias = "ParaId")]
3031
pub para_id: u32,
3132
}
3233

0 commit comments

Comments
 (0)