From 3d71ee3dc5aacee47fb6f521414103f5371f011a Mon Sep 17 00:00:00 2001 From: supaiku Date: Tue, 19 Mar 2019 02:02:05 +0100 Subject: [PATCH 1/3] fix: handle processFinished when downloading blocks --- packages/core-blockchain/src/blockchain.ts | 2 +- .../core-blockchain/src/machines/actions/sync-with-network.ts | 1 + packages/core-blockchain/src/state-machine.ts | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/core-blockchain/src/blockchain.ts b/packages/core-blockchain/src/blockchain.ts index 0f17bae232..f40b25529e 100644 --- a/packages/core-blockchain/src/blockchain.ts +++ b/packages/core-blockchain/src/blockchain.ts @@ -416,7 +416,7 @@ export class Blockchain implements blockchain.IBlockchain { if (result === BlockProcessorResult.Accepted || result === BlockProcessorResult.DiscardedButCanBeBroadcasted) { // broadcast only current block const blocktime = config.getMilestone(block.data.height).blocktime; - if (slots.getSlotNumber() * blocktime <= block.data.timestamp) { + if (this.state.started && slots.getSlotNumber() * blocktime <= block.data.timestamp) { this.p2p.broadcastBlock(block); } } diff --git a/packages/core-blockchain/src/machines/actions/sync-with-network.ts b/packages/core-blockchain/src/machines/actions/sync-with-network.ts index f8683ad344..f2ff9ea82e 100644 --- a/packages/core-blockchain/src/machines/actions/sync-with-network.ts +++ b/packages/core-blockchain/src/machines/actions/sync-with-network.ts @@ -20,6 +20,7 @@ export const syncWithNetwork = { on: { DOWNLOADED: "syncing", NOBLOCK: "syncing", + PROCESSFINISHED: "downloadFinished", }, }, downloadFinished: { diff --git a/packages/core-blockchain/src/state-machine.ts b/packages/core-blockchain/src/state-machine.ts index dad5d695e7..afd51c1aff 100644 --- a/packages/core-blockchain/src/state-machine.ts +++ b/packages/core-blockchain/src/state-machine.ts @@ -103,7 +103,7 @@ blockchainMachine.actionMap = (blockchain: Blockchain) => ({ stateStorage.networkStart = false; blockchain.dispatch("SYNCFINISHED"); - } else { + } else if (blockchain.queue.length() === 0) { blockchain.dispatch("PROCESSFINISHED"); } }, From 8dd44242eea53358fa21541c0cf388325475ec66 Mon Sep 17 00:00:00 2001 From: supaiku Date: Tue, 19 Mar 2019 02:04:13 +0100 Subject: [PATCH 2/3] misc: log unhandled events --- packages/core-blockchain/src/blockchain.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/core-blockchain/src/blockchain.ts b/packages/core-blockchain/src/blockchain.ts index f40b25529e..f5f471966e 100644 --- a/packages/core-blockchain/src/blockchain.ts +++ b/packages/core-blockchain/src/blockchain.ts @@ -107,6 +107,12 @@ export class Blockchain implements blockchain.IBlockchain { nextState.value, )} -> actions: [${nextState.actions.map(a => a.type).join(", ")}]`, ); + } else { + logger.debug( + `event '${event}': ${JSON.stringify(this.state.blockchain.value)} -> ${JSON.stringify( + nextState.value, + )}`, + ); } this.state.blockchain = nextState; From f33ce7a0fe8f8044345bce800fa4bab0a44b7e8a Mon Sep 17 00:00:00 2001 From: supaiku Date: Tue, 19 Mar 2019 03:51:17 +0100 Subject: [PATCH 3/3] test: fix --- __tests__/unit/core-blockchain/blockchain.test.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/__tests__/unit/core-blockchain/blockchain.test.ts b/__tests__/unit/core-blockchain/blockchain.test.ts index 478799d28a..b99704d3d0 100644 --- a/__tests__/unit/core-blockchain/blockchain.test.ts +++ b/__tests__/unit/core-blockchain/blockchain.test.ts @@ -112,6 +112,7 @@ describe("Blockchain", () => { it("should process a new chained block", async () => { const mockCallback = jest.fn(() => true); + blockchain.state.blockchain = {}; await blockchain.processBlock(new Block(blocks2to100[2]), mockCallback); await delay(200); @@ -131,6 +132,8 @@ describe("Blockchain", () => { }); it("should broadcast a block if (slots.getSlotNumber() * blocktime <= block.data.timestamp)", async () => { + blockchain.state.started = true; + const mockCallback = jest.fn(() => true); const lastBlock = blockchain.getLastBlock(); lastBlock.data.timestamp = slots.getSlotNumber() * 8000;