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