From 6fc41d0e937f34da97588a6e687733454c202de4 Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Thu, 21 Sep 2023 13:49:59 +0200
Subject: [PATCH] fix(#125): allow indexer export file through
 `DUNITER_GENESIS_EXPORT` env var

---
 node/src/chain_spec/gdev.rs             | 11 +++++++++++
 node/src/chain_spec/gen_genesis_data.rs | 10 ++++++++++
 2 files changed, 21 insertions(+)

diff --git a/node/src/chain_spec/gdev.rs b/node/src/chain_spec/gdev.rs
index 1d2e30c46..7f49e0774 100644
--- a/node/src/chain_spec/gdev.rs
+++ b/node/src/chain_spec/gdev.rs
@@ -15,6 +15,7 @@
 // along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
 use super::*;
+use crate::chain_spec::gen_genesis_data::{genesis_data_to_indexer_export, GenesisIndexerExport};
 use common_runtime::constants::*;
 use common_runtime::entities::IdtyData;
 use common_runtime::*;
@@ -29,6 +30,7 @@ use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
 use sp_consensus_babe::AuthorityId as BabeId;
 use sp_core::{sr25519, Encode};
 use sp_finality_grandpa::AuthorityId as GrandpaId;
+use std::fs;
 
 pub type AuthorityKeys = (
     AccountId,
@@ -284,6 +286,15 @@ fn genesis_data_to_gdev_genesis_conf(
     genesis_data: super::gen_genesis_data::GenesisData<GenesisParameters, SessionKeys>,
     wasm_binary: &[u8],
 ) -> gdev_runtime::GenesisConfig {
+    if let Ok(path) = std::env::var("DUNITER_GENESIS_EXPORT") {
+        let export: GenesisIndexerExport = genesis_data_to_indexer_export(&genesis_data);
+        fs::write(
+            &path,
+            serde_json::to_string(&export).expect("should be serializable"),
+        )
+        .expect(format!("Could not export genesis data to {}", &path).as_str());
+    }
+
     let super::gen_genesis_data::GenesisData {
         accounts,
         certs_by_receiver,
diff --git a/node/src/chain_spec/gen_genesis_data.rs b/node/src/chain_spec/gen_genesis_data.rs
index a1f549db6..e25f2c9fc 100644
--- a/node/src/chain_spec/gen_genesis_data.rs
+++ b/node/src/chain_spec/gen_genesis_data.rs
@@ -698,3 +698,13 @@ fn to_bn(genesis_timestamp: u64, timestamp: u64) -> u32 {
 fn validate_idty_name(name: &str) -> bool {
     name.len() <= 64
 }
+
+pub fn genesis_data_to_indexer_export<P: Default + DeserializeOwned, SK: Decode>(
+    genesis_data: &GenesisData<P, SK>,
+) -> GenesisIndexerExport {
+    GenesisIndexerExport {
+        first_ud: genesis_data.first_ud,
+        first_ud_reeval: genesis_data.first_ud_reeval,
+        ud: genesis_data.ud,
+    }
+}
-- 
GitLab