From 603d47496e2b667c15b72f315261d6e299381848 Mon Sep 17 00:00:00 2001 From: Richard Moore Date: Thu, 23 Mar 2023 17:08:46 -0400 Subject: [PATCH] Stall block polling bootstrap when the network is down (#3924). --- src.ts/providers/subscriber-polling.ts | 33 ++++++++++++++++---------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src.ts/providers/subscriber-polling.ts b/src.ts/providers/subscriber-polling.ts index 76c0529fdb..837c58f1ea 100644 --- a/src.ts/providers/subscriber-polling.ts +++ b/src.ts/providers/subscriber-polling.ts @@ -50,23 +50,32 @@ export class PollingBlockSubscriber implements Subscriber { set pollingInterval(value: number) { this.#interval = value; } async #poll(): Promise { - const blockNumber = await this.#provider.getBlockNumber(); - if (this.#blockNumber === -2) { - this.#blockNumber = blockNumber; - return; - } + try { + const blockNumber = await this.#provider.getBlockNumber(); + + // Bootstrap poll to setup our initial block number + if (this.#blockNumber === -2) { + this.#blockNumber = blockNumber; + return; + } - // @TODO: Put a cap on the maximum number of events per loop? + // @TODO: Put a cap on the maximum number of events per loop? - if (blockNumber !== this.#blockNumber) { - for (let b = this.#blockNumber + 1; b <= blockNumber; b++) { - // We have been stopped - if (this.#poller == null) { return; } + if (blockNumber !== this.#blockNumber) { + for (let b = this.#blockNumber + 1; b <= blockNumber; b++) { + // We have been stopped + if (this.#poller == null) { return; } - await this.#provider.emit("block", b); + await this.#provider.emit("block", b); + } + + this.#blockNumber = blockNumber; } - this.#blockNumber = blockNumber; + } catch (error) { + // @TODO: Minor bump, add an "error" event to let subscribers + // know things went awry. + //console.log(error); } // We have been stopped