From b554545ce5a738fc4033e061f01a3bb826e35b28 Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Sat, 30 Jun 2018 15:57:39 +0200
Subject: [PATCH] [fix] very initial sync (after a `reset all` for example) was
 not taking currency parameters correctly

---
 app/modules/crawler/lib/sync.ts | 10 +++++++---
 server.ts                       | 14 ++++++++++++--
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/app/modules/crawler/lib/sync.ts b/app/modules/crawler/lib/sync.ts
index 77b3c5640..3bf8cc58d 100644
--- a/app/modules/crawler/lib/sync.ts
+++ b/app/modules/crawler/lib/sync.ts
@@ -125,6 +125,13 @@ export class Synchroniser extends stream.Duplex {
       }
       to = rCurrent.number || 0
 
+      const rootBlock = await this.syncStrategy.getBlock(0)
+      if (!rootBlock) {
+        throw 'Could not get root block. Sync aborted.'
+      }
+      await this.BlockchainService.saveParametersForRootBlock(rootBlock)
+      await this.server.reloadConf()
+
       await this.syncStrategy.initWithKnownLocalAndToAndCurrency(to, localNumber, rCurrent.currency)
 
       //============
@@ -256,9 +263,6 @@ export class Synchroniser extends stream.Duplex {
         clearInterval(logInterval);
       }
 
-      // Save currency parameters given by root block
-      const rootBlock = await this.server.dal.getFullBlockOf(0)
-      await this.BlockchainService.saveParametersForRootBlock(BlockDTO.fromJSONObject(rootBlock))
       this.server.dal.blockDAL.cleanCache();
 
       if (!cliprogram.nosbx) {
diff --git a/server.ts b/server.ts
index 84f7cb4a9..69cd309e7 100644
--- a/server.ts
+++ b/server.ts
@@ -39,6 +39,7 @@ import {ProxiesConf} from './app/lib/proxy';
 import {Directory, FileSystem} from "./app/lib/system/directory"
 import {DataErrors} from "./app/lib/common-libs/errors"
 import {DBPeer} from "./app/lib/db/DBPeer"
+import {Underscore} from "./app/lib/common-libs/underscore"
 
 export interface HookableServer {
   generatorGetJoinData: (...args:any[]) => Promise<any>
@@ -158,9 +159,18 @@ export class Server extends stream.Duplex implements HookableServer {
     await this.dal.close()
   }
 
-  async loadConf(useDefaultConf:any = false) {
+  async reloadConf() {
+    await this.loadConf(false, true)
+  }
+
+  async loadConf(useDefaultConf:any = false, reuseExisting = false) {
     logger.debug('Loading conf...');
-    this.conf = await this.dal.loadConf(this.overrideConf, useDefaultConf)
+    const loaded = await this.dal.loadConf(this.overrideConf, useDefaultConf)
+    if (!reuseExisting || !this.conf) {
+      this.conf = loaded
+    } else {
+      Underscore.extend(this.conf, loaded) // Overwrite the current conf
+    }
     // Default values
     this.conf.proxiesConf      = this.conf.proxiesConf === undefined ?       new ProxiesConf()                            : this.conf.proxiesConf
     this.conf.remoteipv6       = this.conf.remoteipv6 === undefined ?        this.conf.ipv6                               : this.conf.remoteipv6
-- 
GitLab