From f46fab675b41078d384454639236514ea107d424 Mon Sep 17 00:00:00 2001 From: GabrielMartinezRodriguez Date: Tue, 1 Apr 2025 11:27:39 +0200 Subject: [PATCH] fix(txm): not process the same block multiple times --- packages/txm/lib/BlockMonitor.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/txm/lib/BlockMonitor.ts b/packages/txm/lib/BlockMonitor.ts index 85ec57541c..f3dc88fd08 100644 --- a/packages/txm/lib/BlockMonitor.ts +++ b/packages/txm/lib/BlockMonitor.ts @@ -18,6 +18,7 @@ export class BlockMonitor { private txmgr: TransactionManager private unwatch: (() => void) | undefined private blockTimeout: ReturnType | undefined + private latestProcessedBlockNumber: bigint | undefined constructor(_transactionManager: TransactionManager) { this.txmgr = _transactionManager } @@ -27,10 +28,6 @@ export class BlockMonitor { this.unwatch = this.txmgr.viemClient.watchBlocks({ onBlock: this.onNewBlock.bind(this), ...(this.txmgr.transportProtocol === "http" ? { pollingInterval: this.txmgr.pollingInterval } : {}), - onError: (error) => { - Logger.instance.error(LogTag.TXM, "Error watching blocks", error) - this.resetBlockSubscription() - }, }) } @@ -40,6 +37,16 @@ export class BlockMonitor { return } + if (this.latestProcessedBlockNumber && block.number <= this.latestProcessedBlockNumber) { + Logger.instance.warn( + LogTag.TXM, + "Received block number less than or equal to latest processed block number. Skipping.", + ) + return + } + + this.latestProcessedBlockNumber = block.number + if (this.blockTimeout) clearTimeout(this.blockTimeout) eventBus.emit(Topics.NewBlock, block)