From 42c7df936e80371bd8120d51d5cdba1f48408e80 Mon Sep 17 00:00:00 2001 From: Alan Sapede <alan@purestake.com> Date: Wed, 20 Jul 2022 18:04:31 -0400 Subject: [PATCH] Make reading json genesis file faster (#11868) * Make reading json genesis file faster * Formatting * fmt --- substrate/client/chain-spec/src/chain_spec.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/substrate/client/chain-spec/src/chain_spec.rs b/substrate/client/chain-spec/src/chain_spec.rs index efb40d46f21..5aafc28524d 100644 --- a/substrate/client/chain-spec/src/chain_spec.rs +++ b/substrate/client/chain-spec/src/chain_spec.rs @@ -61,7 +61,16 @@ impl<G: RuntimeGenesis> GenesisSource<G> { let file = File::open(path).map_err(|e| { format!("Error opening spec file at `{}`: {}", path.display(), e) })?; - let genesis: GenesisContainer<G> = json::from_reader(file) + // SAFETY: `mmap` is fundamentally unsafe since technically the file can change + // underneath us while it is mapped; in practice it's unlikely to be a + // problem + let bytes = unsafe { + memmap2::Mmap::map(&file).map_err(|e| { + format!("Error mmaping spec file `{}`: {}", path.display(), e) + })? + }; + + let genesis: GenesisContainer<G> = json::from_slice(&bytes) .map_err(|e| format!("Error parsing spec file: {}", e))?; Ok(genesis.genesis) }, -- GitLab