From eaad63a082cab89ada5e9eabcabad6fb0cf6f281 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 12 Jun 2023 16:32:04 -0400 Subject: [PATCH] frontend resync recent blocks when necessary --- backend/src/api/websocket-handler.ts | 2 +- frontend/src/app/interfaces/websocket.interface.ts | 1 + frontend/src/app/services/websocket.service.ts | 10 +++++++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/backend/src/api/websocket-handler.ts b/backend/src/api/websocket-handler.ts index dd7cdc8f2..1e2e381c2 100644 --- a/backend/src/api/websocket-handler.ts +++ b/backend/src/api/websocket-handler.ts @@ -116,7 +116,7 @@ class WebsocketHandler { } // send initial data when a client first starts a subscription - if (wantNow['want-blocks']) { + if (wantNow['want-blocks'] || (parsedMessage && parsedMessage['refresh-blocks'])) { response['blocks'] = this.socketData['blocks']; } diff --git a/frontend/src/app/interfaces/websocket.interface.ts b/frontend/src/app/interfaces/websocket.interface.ts index 83a0c636e..41643fb73 100644 --- a/frontend/src/app/interfaces/websocket.interface.ts +++ b/frontend/src/app/interfaces/websocket.interface.ts @@ -31,6 +31,7 @@ export interface WebsocketResponse { 'track-rbf'?: string; 'watch-mempool'?: boolean; 'track-bisq-market'?: string; + 'refresh-blocks'?: boolean; } export interface ReplacedTransaction extends Transaction { diff --git a/frontend/src/app/services/websocket.service.ts b/frontend/src/app/services/websocket.service.ts index af7a465f8..d22717b2a 100644 --- a/frontend/src/app/services/websocket.service.ts +++ b/frontend/src/app/services/websocket.service.ts @@ -235,6 +235,8 @@ export class WebsocketService { } handleResponse(response: WebsocketResponse) { + let reinitBlocks = false; + if (response.blocks && response.blocks.length) { const blocks = response.blocks; let maxHeight = 0; @@ -256,9 +258,11 @@ export class WebsocketService { } if (response.block) { - if (response.block.height > this.stateService.latestBlockHeight) { + if (response.block.height === this.stateService.latestBlockHeight + 1) { this.stateService.updateChainTip(response.block.height); this.stateService.blocks$.next([response.block, response.txConfirmed || '']); + } else if (response.block.height > this.stateService.latestBlockHeight + 1) { + reinitBlocks = true; } if (response.txConfirmed) { @@ -369,5 +373,9 @@ export class WebsocketService { if (response['git-commit']) { this.stateService.backendInfo$.next(response['git-commit']); } + + if (reinitBlocks) { + this.websocketSubject.next({'refresh-blocks': true}); + } } }