From 6198d72816593304ce67edbe90d99101f2fbc6aa Mon Sep 17 00:00:00 2001 From: Nabarun Gogoi Date: Thu, 13 Nov 2025 13:58:09 +0530 Subject: [PATCH] Retry fetching latest block on ETH RPC network error (#548) * Handle network error when fetching latest block * Upgrade version --- lerna.json | 2 +- packages/cache/package.json | 2 +- packages/cli/package.json | 12 +++++----- packages/codegen/package.json | 4 ++-- .../src/templates/package-template.handlebars | 10 ++++---- packages/graph-node/package.json | 10 ++++---- packages/ipld-eth-client/package.json | 6 ++--- packages/peer/package.json | 2 +- packages/rpc-eth-client/package.json | 8 +++---- packages/solidity-mapper/package.json | 2 +- packages/test/package.json | 2 +- packages/tracing-client/package.json | 2 +- packages/util/package.json | 8 +++---- packages/util/src/events.ts | 23 ++++++++++++------- 14 files changed, 50 insertions(+), 43 deletions(-) diff --git a/lerna.json b/lerna.json index f5766db5..4915e493 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "packages": [ "packages/*" ], - "version": "0.2.98-patch.3", + "version": "0.2.98-patch.4", "npmClient": "yarn", "useWorkspaces": true, "command": { diff --git a/packages/cache/package.json b/packages/cache/package.json index 1ec7d9e2..293bf766 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/cache", - "version": "0.2.98-patch.3", + "version": "0.2.98-patch.4", "description": "Generic object cache", "main": "dist/index.js", "scripts": { diff --git a/packages/cli/package.json b/packages/cli/package.json index 78a12872..09f5d3bc 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/cli", - "version": "0.2.98-patch.3", + "version": "0.2.98-patch.4", "main": "dist/index.js", "license": "AGPL-3.0", "scripts": { @@ -15,13 +15,13 @@ }, "dependencies": { "@apollo/client": "^3.7.1", - "@cerc-io/cache": "^0.2.98-patch.3", - "@cerc-io/ipld-eth-client": "^0.2.98-patch.3", + "@cerc-io/cache": "^0.2.98-patch.4", + "@cerc-io/ipld-eth-client": "^0.2.98-patch.4", "@cerc-io/libp2p": "^0.42.2-laconic-0.1.4", "@cerc-io/nitro-node": "^0.1.15", - "@cerc-io/peer": "^0.2.98-patch.3", - "@cerc-io/rpc-eth-client": "^0.2.98-patch.3", - "@cerc-io/util": "^0.2.98-patch.3", + "@cerc-io/peer": "^0.2.98-patch.4", + "@cerc-io/rpc-eth-client": "^0.2.98-patch.4", + "@cerc-io/util": "^0.2.98-patch.4", "@ethersproject/providers": "^5.4.4", "@graphql-tools/utils": "^9.1.1", "@ipld/dag-cbor": "^8.0.0", diff --git a/packages/codegen/package.json b/packages/codegen/package.json index 67019016..1adc237d 100644 --- a/packages/codegen/package.json +++ b/packages/codegen/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/codegen", - "version": "0.2.98-patch.3", + "version": "0.2.98-patch.4", "description": "Code generator", "private": true, "main": "index.js", @@ -20,7 +20,7 @@ }, "homepage": "https://github.com/cerc-io/watcher-ts#readme", "dependencies": { - "@cerc-io/util": "^0.2.98-patch.3", + "@cerc-io/util": "^0.2.98-patch.4", "@graphql-tools/load-files": "^6.5.2", "@npmcli/package-json": "^5.0.0", "@poanet/solidity-flattener": "https://github.com/vulcanize/solidity-flattener.git", diff --git a/packages/codegen/src/templates/package-template.handlebars b/packages/codegen/src/templates/package-template.handlebars index 0de19b6c..ebb51c76 100644 --- a/packages/codegen/src/templates/package-template.handlebars +++ b/packages/codegen/src/templates/package-template.handlebars @@ -41,12 +41,12 @@ "homepage": "https://github.com/cerc-io/watcher-ts#readme", "dependencies": { "@apollo/client": "^3.3.19", - "@cerc-io/cli": "^0.2.98-patch.3", - "@cerc-io/ipld-eth-client": "^0.2.98-patch.3", - "@cerc-io/solidity-mapper": "^0.2.98-patch.3", - "@cerc-io/util": "^0.2.98-patch.3", + "@cerc-io/cli": "^0.2.98-patch.4", + "@cerc-io/ipld-eth-client": "^0.2.98-patch.4", + "@cerc-io/solidity-mapper": "^0.2.98-patch.4", + "@cerc-io/util": "^0.2.98-patch.4", {{#if (subgraphPath)}} - "@cerc-io/graph-node": "^0.2.98-patch.3", + "@cerc-io/graph-node": "^0.2.98-patch.4", {{/if}} "@ethersproject/providers": "^5.4.4", "debug": "^4.3.1", diff --git a/packages/graph-node/package.json b/packages/graph-node/package.json index 6c83103a..95e81110 100644 --- a/packages/graph-node/package.json +++ b/packages/graph-node/package.json @@ -1,10 +1,10 @@ { "name": "@cerc-io/graph-node", - "version": "0.2.98-patch.3", + "version": "0.2.98-patch.4", "main": "dist/index.js", "license": "AGPL-3.0", "devDependencies": { - "@cerc-io/solidity-mapper": "^0.2.98-patch.3", + "@cerc-io/solidity-mapper": "^0.2.98-patch.4", "@ethersproject/providers": "^5.4.4", "@graphprotocol/graph-ts": "^0.22.0", "@nomiclabs/hardhat-ethers": "^2.0.2", @@ -51,9 +51,9 @@ "dependencies": { "@apollo/client": "^3.3.19", "@cerc-io/assemblyscript": "0.19.10-watcher-ts-0.1.2", - "@cerc-io/cache": "^0.2.98-patch.3", - "@cerc-io/ipld-eth-client": "^0.2.98-patch.3", - "@cerc-io/util": "^0.2.98-patch.3", + "@cerc-io/cache": "^0.2.98-patch.4", + "@cerc-io/ipld-eth-client": "^0.2.98-patch.4", + "@cerc-io/util": "^0.2.98-patch.4", "@types/json-diff": "^0.5.2", "@types/yargs": "^17.0.0", "bn.js": "^4.11.9", diff --git a/packages/ipld-eth-client/package.json b/packages/ipld-eth-client/package.json index 40f66bed..b75a485b 100644 --- a/packages/ipld-eth-client/package.json +++ b/packages/ipld-eth-client/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/ipld-eth-client", - "version": "0.2.98-patch.3", + "version": "0.2.98-patch.4", "description": "IPLD ETH Client", "main": "dist/index.js", "scripts": { @@ -20,8 +20,8 @@ "homepage": "https://github.com/cerc-io/watcher-ts#readme", "dependencies": { "@apollo/client": "^3.7.1", - "@cerc-io/cache": "^0.2.98-patch.3", - "@cerc-io/util": "^0.2.98-patch.3", + "@cerc-io/cache": "^0.2.98-patch.4", + "@cerc-io/util": "^0.2.98-patch.4", "cross-fetch": "^3.1.4", "debug": "^4.3.1", "ethers": "^5.4.4", diff --git a/packages/peer/package.json b/packages/peer/package.json index 7ce6e1b7..51eecabe 100644 --- a/packages/peer/package.json +++ b/packages/peer/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/peer", - "version": "0.2.98-patch.3", + "version": "0.2.98-patch.4", "description": "libp2p module", "main": "dist/index.js", "exports": "./dist/index.js", diff --git a/packages/rpc-eth-client/package.json b/packages/rpc-eth-client/package.json index aec327d7..b84919c9 100644 --- a/packages/rpc-eth-client/package.json +++ b/packages/rpc-eth-client/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/rpc-eth-client", - "version": "0.2.98-patch.3", + "version": "0.2.98-patch.4", "description": "RPC ETH Client", "main": "dist/index.js", "scripts": { @@ -19,9 +19,9 @@ }, "homepage": "https://github.com/cerc-io/watcher-ts#readme", "dependencies": { - "@cerc-io/cache": "^0.2.98-patch.3", - "@cerc-io/ipld-eth-client": "^0.2.98-patch.3", - "@cerc-io/util": "^0.2.98-patch.3", + "@cerc-io/cache": "^0.2.98-patch.4", + "@cerc-io/ipld-eth-client": "^0.2.98-patch.4", + "@cerc-io/util": "^0.2.98-patch.4", "chai": "^4.3.4", "ethers": "^5.4.4", "left-pad": "^1.3.0", diff --git a/packages/solidity-mapper/package.json b/packages/solidity-mapper/package.json index 630ff836..4968c7a4 100644 --- a/packages/solidity-mapper/package.json +++ b/packages/solidity-mapper/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/solidity-mapper", - "version": "0.2.98-patch.3", + "version": "0.2.98-patch.4", "main": "dist/index.js", "license": "AGPL-3.0", "devDependencies": { diff --git a/packages/test/package.json b/packages/test/package.json index e47bdf67..aa02870b 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/test", - "version": "0.2.98-patch.3", + "version": "0.2.98-patch.4", "main": "dist/index.js", "license": "AGPL-3.0", "private": true, diff --git a/packages/tracing-client/package.json b/packages/tracing-client/package.json index 876a30c7..9deac8f0 100644 --- a/packages/tracing-client/package.json +++ b/packages/tracing-client/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/tracing-client", - "version": "0.2.98-patch.3", + "version": "0.2.98-patch.4", "description": "ETH VM tracing client", "main": "dist/index.js", "scripts": { diff --git a/packages/util/package.json b/packages/util/package.json index a3aaa687..4fdcfac2 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,13 +1,13 @@ { "name": "@cerc-io/util", - "version": "0.2.98-patch.3", + "version": "0.2.98-patch.4", "main": "dist/index.js", "license": "AGPL-3.0", "dependencies": { "@apollo/utils.keyvaluecache": "^1.0.1", "@cerc-io/nitro-node": "^0.1.15", - "@cerc-io/peer": "^0.2.98-patch.3", - "@cerc-io/solidity-mapper": "^0.2.98-patch.3", + "@cerc-io/peer": "^0.2.98-patch.4", + "@cerc-io/solidity-mapper": "^0.2.98-patch.4", "@cerc-io/ts-channel": "1.0.3-ts-nitro-0.1.1", "@ethersproject/properties": "^5.7.0", "@ethersproject/providers": "^5.4.4", @@ -54,7 +54,7 @@ "yargs": "^17.0.1" }, "devDependencies": { - "@cerc-io/cache": "^0.2.98-patch.3", + "@cerc-io/cache": "^0.2.98-patch.4", "@nomiclabs/hardhat-waffle": "^2.0.1", "@types/bunyan": "^1.8.8", "@types/express": "^4.17.14", diff --git a/packages/util/src/events.ts b/packages/util/src/events.ts index 78100bf6..e05bbec9 100644 --- a/packages/util/src/events.ts +++ b/packages/util/src/events.ts @@ -191,16 +191,23 @@ export class EventWatcher { if (isComplete) { while (true) { - const { block: latestBlock } = await this._ethClient.getBlockByHash(); + try { + const { block: latestBlock } = await this._ethClient.getBlockByHash(); - // Process block if it is blockProcessingOffset blocks behind latest block - if (latestBlock.number >= blockNumber + (this._config.jobQueue.blockProcessingOffset ?? 0)) { - await processBlockByNumber(this._jobQueue, blockNumber + 1); - break; + // Process block if it is blockProcessingOffset blocks behind latest block + if (latestBlock.number >= blockNumber + (this._config.jobQueue.blockProcessingOffset ?? 0)) { + await processBlockByNumber(this._jobQueue, blockNumber + 1); + break; + } + + log(`Latest block number fetched: ${latestBlock.number}`); + } catch (err: unknown) { + log(`Error while triggering processing for next block: ${blockNumber + 1}`); + log(err); + } finally { + log(`Retry next block to process: ${blockNumber + 1} after ${this._config.jobQueue.blockDelayInMilliSecs}ms`); + await wait(this._config.jobQueue.blockDelayInMilliSecs); } - - log(`Latest block: ${latestBlock.number}; retry next block to process: ${blockNumber + 1} after ${this._config.jobQueue.blockDelayInMilliSecs}ms`); - await wait(this._config.jobQueue.blockDelayInMilliSecs); } } }