From 761a4a8a775bddc0b5f441d74dc143dcf2fc80e1 Mon Sep 17 00:00:00 2001 From: James Chen Date: Sat, 16 Nov 2019 03:48:32 +0800 Subject: [PATCH 1/2] feat: Always load genesis hash and chain info when starting block syncing --- .../startup/sync-block-task/init-database.ts | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/packages/neuron-wallet/src/startup/sync-block-task/init-database.ts b/packages/neuron-wallet/src/startup/sync-block-task/init-database.ts index dbec74dab2..5eb0f4b076 100644 --- a/packages/neuron-wallet/src/startup/sync-block-task/init-database.ts +++ b/packages/neuron-wallet/src/startup/sync-block-task/init-database.ts @@ -35,29 +35,30 @@ export class InitDatabase { this.inProcess = true - let hash: string = network.genesisHash - let chain: string = network.chain + let hash: string = EMPTY_GENESIS_HASH + let chain: string = '' while (!this.stopped && !this.success) { try { - if (hash === EMPTY_GENESIS_HASH) { - hash = await genesisBlockHash(network.remote) - } + hash = await genesisBlockHash(network.remote) await initConnection(hash) - if (chain === '') { - chain = await getChain(network.remote) - } + chain = await getChain(network.remote) - try { - const systemScriptInfo = await LockUtils.systemScript(network.remote) - const daoScriptInfo = await DaoUtils.daoScript(network.remote) - updateMetaInfo({ genesisBlockHash: hash, systemScriptInfo, chain, daoScriptInfo }) - } catch (err) { - logger.error('update systemScriptInfo failed:', err) - } + if (hash === network.genesisHash && chain === network.chain) { + try { + const systemScriptInfo = await LockUtils.systemScript(network.remote) + const daoScriptInfo = await DaoUtils.daoScript(network.remote) + updateMetaInfo({ genesisBlockHash: hash, systemScriptInfo, chain, daoScriptInfo }) + } catch (err) { + logger.error('update systemScriptInfo failed:', err) + } - this.success = true + this.success = true + } else { + logger.error('network genesis hash and chain do not match data fetched') + this.stopped = true + } } catch (err) { - logger.debug('initDatabase error:', err) + logger.error('initDatabase error:', err) try { const metaInfo = getMetaInfo() await initConnection(metaInfo.genesisBlockHash) @@ -67,6 +68,7 @@ export class InitDatabase { hash = metaInfo.genesisBlockHash this.success = true } catch (error) { + logger.error('get cached meta info error:', err) Utils.sleep(5000) } } From bd8e4e49dae38e2580d0d8cbfc4d06e631b8f82d Mon Sep 17 00:00:00 2001 From: James Chen Date: Sat, 16 Nov 2019 04:37:15 +0800 Subject: [PATCH 2/2] feat: If genesis hash doesn't match do not proceed to sync --- .../neuron-wallet/src/startup/sync-block-task/init-database.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/neuron-wallet/src/startup/sync-block-task/init-database.ts b/packages/neuron-wallet/src/startup/sync-block-task/init-database.ts index 5eb0f4b076..dcdbfcc6e5 100644 --- a/packages/neuron-wallet/src/startup/sync-block-task/init-database.ts +++ b/packages/neuron-wallet/src/startup/sync-block-task/init-database.ts @@ -56,6 +56,7 @@ export class InitDatabase { } else { logger.error('network genesis hash and chain do not match data fetched') this.stopped = true + this.killed = true // Do not process as successful to let sync start with wrong genesis hash or chain } } catch (err) { logger.error('initDatabase error:', err)