diff --git a/polkadot/service/src/chain_spec.rs b/polkadot/service/src/chain_spec.rs index 6249fca7e4d1c..ccab794b05018 100644 --- a/polkadot/service/src/chain_spec.rs +++ b/polkadot/service/src/chain_spec.rs @@ -114,6 +114,14 @@ impl ChainSpec { /// Dump to json string. pub fn to_json(self, raw: bool) -> Result { + #[derive(Serialize, Deserialize)] + struct Container { + #[serde(flatten)] + spec: ChainSpecFile, + #[serde(flatten)] + genesis: Genesis, + + }; let genesis = match (raw, self.genesis.resolve()?) { (true, Genesis::Runtime(g)) => { let storage = g.build_storage()?.into_iter() @@ -124,11 +132,10 @@ impl ChainSpec { }, (_, genesis) => genesis, }; - let mut spec = json::to_value(self.spec).map_err(|e| format!("Error generating spec json: {}", e))?; - { - let map = spec.as_object_mut().expect("spec is an object"); - map.insert("genesis".to_owned(), json::to_value(genesis).map_err(|e| format!("Error generating genesis json: {}", e))?); - } + let spec = Container { + spec: self.spec, + genesis, + }; json::to_string_pretty(&spec).map_err(|e| format!("Error generating spec json: {}", e)) }