diff --git a/substrate/polkadot/service/src/chain_spec.rs b/substrate/polkadot/service/src/chain_spec.rs index 6249fca7e4d1cc095f624f157865884a466dce11..ccab794b050183f4e4df60f44345e4901c7fc59c 100644 --- a/substrate/polkadot/service/src/chain_spec.rs +++ b/substrate/polkadot/service/src/chain_spec.rs @@ -114,6 +114,14 @@ impl ChainSpec { /// Dump to json string. pub fn to_json(self, raw: bool) -> Result<String, String> { + #[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)) }