From 5172f032e709e4e6cf7afa7f6e50131dbae2d809 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 3 May 2024 16:31:56 +0000 Subject: [PATCH] Add sequence number to track-mempool subscription messages --- backend/src/api/websocket-handler.ts | 20 ++++++++++++-------- backend/src/mempool.interfaces.ts | 2 ++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/backend/src/api/websocket-handler.ts b/backend/src/api/websocket-handler.ts index 9e8a4653a..fdda3df88 100644 --- a/backend/src/api/websocket-handler.ts +++ b/backend/src/api/websocket-handler.ts @@ -558,6 +558,10 @@ class WebsocketHandler { const latestTransactions = memPool.getLatestTransactions(); + if (memPool.isInSync()) { + this.mempoolSequence++; + } + const replacedTransactions: { replaced: string, by: TransactionExtended }[] = []; for (const tx of newTransactions) { if (rbfTransactions[tx.txid]) { @@ -567,12 +571,14 @@ class WebsocketHandler { } } const mempoolDeltaTxids: MempoolDeltaTxids = { + sequence: this.mempoolSequence, added: newTransactions.map(tx => tx.txid), removed: deletedTransactions.map(tx => tx.txid), mined: [], replaced: replacedTransactions.map(replacement => ({ replaced: replacement.replaced, by: replacement.by.txid })), }; const mempoolDelta: MempoolDelta = { + sequence: this.mempoolSequence, added: newTransactions, removed: deletedTransactions.map(tx => tx.txid), mined: [], @@ -638,10 +644,6 @@ class WebsocketHandler { const addressCache = this.makeAddressCache(newTransactions); const removedAddressCache = this.makeAddressCache(deletedTransactions); - if (memPool.isInSync()) { - this.mempoolSequence++; - } - // TODO - Fix indentation after PR is merged for (const server of this.webSocketServers) { server.clients.forEach(async (client) => { @@ -1034,6 +1036,10 @@ class WebsocketHandler { const mBlocksWithTransactions = mempoolBlocks.getMempoolBlocksWithTransactions(); + if (memPool.isInSync()) { + this.mempoolSequence++; + } + const replacedTransactions: { replaced: string, by: TransactionExtended }[] = []; for (const txid of Object.keys(rbfTransactions)) { for (const replaced of rbfTransactions[txid].replaced) { @@ -1041,12 +1047,14 @@ class WebsocketHandler { } } const mempoolDeltaTxids: MempoolDeltaTxids = { + sequence: this.mempoolSequence, added: [], removed: [], mined: transactions.map(tx => tx.txid), replaced: replacedTransactions.map(replacement => ({ replaced: replacement.replaced, by: replacement.by.txid })), }; const mempoolDelta: MempoolDelta = { + sequence: this.mempoolSequence, added: [], removed: [], mined: transactions.map(tx => tx.txid), @@ -1061,10 +1069,6 @@ class WebsocketHandler { return responseCache[key]; } - if (memPool.isInSync()) { - this.mempoolSequence++; - } - // TODO - Fix indentation after PR is merged for (const server of this.webSocketServers) { server.clients.forEach((client) => { diff --git a/backend/src/mempool.interfaces.ts b/backend/src/mempool.interfaces.ts index 516748e9c..0fcddc45a 100644 --- a/backend/src/mempool.interfaces.ts +++ b/backend/src/mempool.interfaces.ts @@ -72,6 +72,7 @@ export interface MempoolBlockDelta { } export interface MempoolDeltaTxids { + sequence: number, added: string[]; removed: string[]; mined: string[]; @@ -79,6 +80,7 @@ export interface MempoolDeltaTxids { } export interface MempoolDelta { + sequence: number, added: MempoolTransactionExtended[]; removed: string[]; mined: string[];