Skip to content

Commit 603d474

Browse files
committed
Stall block polling bootstrap when the network is down (ethers-io#3924).
1 parent d661f70 commit 603d474

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

src.ts/providers/subscriber-polling.ts

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,23 +50,32 @@ export class PollingBlockSubscriber implements Subscriber {
5050
set pollingInterval(value: number) { this.#interval = value; }
5151

5252
async #poll(): Promise<void> {
53-
const blockNumber = await this.#provider.getBlockNumber();
54-
if (this.#blockNumber === -2) {
55-
this.#blockNumber = blockNumber;
56-
return;
57-
}
53+
try {
54+
const blockNumber = await this.#provider.getBlockNumber();
55+
56+
// Bootstrap poll to setup our initial block number
57+
if (this.#blockNumber === -2) {
58+
this.#blockNumber = blockNumber;
59+
return;
60+
}
5861

59-
// @TODO: Put a cap on the maximum number of events per loop?
62+
// @TODO: Put a cap on the maximum number of events per loop?
6063

61-
if (blockNumber !== this.#blockNumber) {
62-
for (let b = this.#blockNumber + 1; b <= blockNumber; b++) {
63-
// We have been stopped
64-
if (this.#poller == null) { return; }
64+
if (blockNumber !== this.#blockNumber) {
65+
for (let b = this.#blockNumber + 1; b <= blockNumber; b++) {
66+
// We have been stopped
67+
if (this.#poller == null) { return; }
6568

66-
await this.#provider.emit("block", b);
69+
await this.#provider.emit("block", b);
70+
}
71+
72+
this.#blockNumber = blockNumber;
6773
}
6874

69-
this.#blockNumber = blockNumber;
75+
} catch (error) {
76+
// @TODO: Minor bump, add an "error" event to let subscribers
77+
// know things went awry.
78+
//console.log(error);
7079
}
7180

7281
// We have been stopped

0 commit comments

Comments
 (0)