diff --git a/lerna.json b/lerna.json index 4c4f64fd0..57478ded5 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "packages": [ "packages/*" ], - "version": "0.2.50", + "version": "0.2.51", "npmClient": "yarn", "useWorkspaces": true, "command": { diff --git a/packages/cache/package.json b/packages/cache/package.json index d0db535e4..bb3347208 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/cache", - "version": "0.2.50", + "version": "0.2.51", "description": "Generic object cache", "main": "dist/index.js", "scripts": { diff --git a/packages/cli/package.json b/packages/cli/package.json index 88a18ce3d..b7c9fe552 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/cli", - "version": "0.2.50", + "version": "0.2.51", "main": "dist/index.js", "license": "AGPL-3.0", "scripts": { @@ -11,8 +11,8 @@ "chat": "DEBUG='vulcanize:*, laconic:*' node dist/chat.js" }, "dependencies": { - "@cerc-io/peer": "^0.2.50", - "@cerc-io/util": "^0.2.50", + "@cerc-io/peer": "^0.2.51", + "@cerc-io/util": "^0.2.51", "@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 283d30a88..516b1c953 100644 --- a/packages/codegen/package.json +++ b/packages/codegen/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/codegen", - "version": "0.2.50", + "version": "0.2.51", "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.50", + "@cerc-io/util": "^0.2.51", "@graphql-tools/load-files": "^6.5.2", "@poanet/solidity-flattener": "https://github.com/vulcanize/solidity-flattener.git", "@solidity-parser/parser": "^0.13.2", diff --git a/packages/codegen/src/templates/package-template.handlebars b/packages/codegen/src/templates/package-template.handlebars index 87a6303de..cee6a8d64 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.50", - "@cerc-io/ipld-eth-client": "^0.2.50", - "@cerc-io/solidity-mapper": "^0.2.50", - "@cerc-io/util": "^0.2.50", + "@cerc-io/cli": "^0.2.51", + "@cerc-io/ipld-eth-client": "^0.2.51", + "@cerc-io/solidity-mapper": "^0.2.51", + "@cerc-io/util": "^0.2.51", {{#if (subgraphPath)}} - "@cerc-io/graph-node": "^0.2.50", + "@cerc-io/graph-node": "^0.2.51", {{/if}} "@ethersproject/providers": "^5.4.4", "apollo-type-bigint": "^0.1.3", diff --git a/packages/graph-node/package.json b/packages/graph-node/package.json index 7351498f1..d840f4859 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.50", + "version": "0.2.51", "main": "dist/index.js", "license": "AGPL-3.0", "devDependencies": { - "@cerc-io/solidity-mapper": "^0.2.50", + "@cerc-io/solidity-mapper": "^0.2.51", "@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.50", - "@cerc-io/ipld-eth-client": "^0.2.50", - "@cerc-io/util": "^0.2.50", + "@cerc-io/cache": "^0.2.51", + "@cerc-io/ipld-eth-client": "^0.2.51", + "@cerc-io/util": "^0.2.51", "@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 437a399ca..7a5fd96fc 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.50", + "version": "0.2.51", "description": "IPLD ETH Client", "main": "dist/index.js", "scripts": { @@ -20,7 +20,7 @@ "homepage": "https://github.com/cerc-io/watcher-ts#readme", "dependencies": { "@apollo/client": "^3.7.1", - "@cerc-io/cache": "^0.2.50", + "@cerc-io/cache": "^0.2.51", "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 cb8b87ea2..52fa44fc8 100644 --- a/packages/peer/package.json +++ b/packages/peer/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/peer", - "version": "0.2.50", + "version": "0.2.51", "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 a14330264..f69d15e25 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.50", + "version": "0.2.51", "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.50", - "@cerc-io/util": "^0.2.50", - "@cerc-io/ipld-eth-client": "^0.2.50", + "@cerc-io/cache": "^0.2.51", + "@cerc-io/ipld-eth-client": "^0.2.51", + "@cerc-io/util": "^0.2.51", "cross-fetch": "^3.1.4", "debug": "^4.3.1", "ethers": "^5.4.4", diff --git a/packages/rpc-eth-client/src/eth-client.ts b/packages/rpc-eth-client/src/eth-client.ts index dfe0a171b..de48f940a 100644 --- a/packages/rpc-eth-client/src/eth-client.ts +++ b/packages/rpc-eth-client/src/eth-client.ts @@ -90,7 +90,8 @@ export class EthClient { } async getBlocks ({ blockNumber, blockHash }: { blockNumber?: number, blockHash?: string }): Promise { - const blockHashOrBlockNumber = blockHash ?? blockNumber; + const blockNumberHex = blockNumber ? utils.hexValue(blockNumber) : undefined; + const blockHashOrBlockNumber = blockHash ?? blockNumberHex; assert(blockHashOrBlockNumber); let nodes: any[] = []; console.time(`time:eth-client#getBlocks-${JSON.stringify({ blockNumber, blockHash })}`); @@ -98,7 +99,7 @@ export class EthClient { try { const rawBlock = await this._provider.send( blockHash ? 'eth_getBlockByHash' : 'eth_getBlockByNumber', - [utils.hexValue(blockHashOrBlockNumber), false] + [blockHashOrBlockNumber, false] ); if (rawBlock) { @@ -119,7 +120,7 @@ export class EthClient { } } catch (err: any) { // Check and ignore future block error - if (!(err.code === errors.SERVER_ERROR && err.error.message === "requested a future epoch (beyond 'latest')")) { + if (!(err.code === errors.SERVER_ERROR && err.error && err.error.message === "requested a future epoch (beyond 'latest')")) { throw err; } } finally { @@ -134,13 +135,14 @@ export class EthClient { } async getFullBlocks ({ blockNumber, blockHash }: { blockNumber?: number, blockHash?: string }): Promise { - const blockHashOrBlockNumber = blockHash ?? blockNumber; + const blockNumberHex = blockNumber ? utils.hexValue(blockNumber) : undefined; + const blockHashOrBlockNumber = blockHash ?? blockNumberHex; assert(blockHashOrBlockNumber); console.time(`time:eth-client#getFullBlocks-${JSON.stringify({ blockNumber, blockHash })}`); const rawBlock = await this._provider.send( blockHash ? 'eth_getBlockByHash' : 'eth_getBlockByNumber', - [utils.hexValue(blockHashOrBlockNumber), false] + [blockHashOrBlockNumber, false] ); console.timeEnd(`time:eth-client#getFullBlocks-${JSON.stringify({ blockNumber, blockHash })}`); @@ -162,7 +164,7 @@ export class EthClient { Extra: rawBlock.extraData, MixDigest: rawBlock.mixHash, Nonce: BigInt(rawBlock.nonce), - BaseFee: rawBlock.baseFeePerGas + BaseFee: BigInt(rawBlock.baseFeePerGas) }; const rlpData = encodeHeader(header); diff --git a/packages/solidity-mapper/package.json b/packages/solidity-mapper/package.json index 9ac63e4d9..74aa83f70 100644 --- a/packages/solidity-mapper/package.json +++ b/packages/solidity-mapper/package.json @@ -1,10 +1,10 @@ { "name": "@cerc-io/solidity-mapper", - "version": "0.2.50", + "version": "0.2.51", "main": "dist/index.js", "license": "AGPL-3.0", "devDependencies": { - "@cerc-io/ipld-eth-client": "^0.2.50", + "@cerc-io/ipld-eth-client": "^0.2.51", "@ethersproject/abi": "^5.3.0", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-waffle": "^2.0.1", diff --git a/packages/test/package.json b/packages/test/package.json index 1b07a5679..b8b7297ee 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/test", - "version": "0.2.50", + "version": "0.2.51", "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 a841f83db..576d1b4af 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.50", + "version": "0.2.51", "description": "ETH VM tracing client", "main": "dist/index.js", "scripts": { diff --git a/packages/util/package.json b/packages/util/package.json index 19d652069..48a72a3bb 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,12 +1,12 @@ { "name": "@cerc-io/util", - "version": "0.2.50", + "version": "0.2.51", "main": "dist/index.js", "license": "AGPL-3.0", "dependencies": { "@apollo/utils.keyvaluecache": "^1.0.1", "@cerc-io/nitro-client": "^0.1.5", - "@cerc-io/solidity-mapper": "^0.2.50", + "@cerc-io/solidity-mapper": "^0.2.51", "@cerc-io/ts-channel": "1.0.3-ts-nitro-0.1.1", "@ethersproject/providers": "^5.4.4", "@graphql-tools/schema": "^9.0.10", @@ -40,7 +40,7 @@ "yargs": "^17.0.1" }, "devDependencies": { - "@cerc-io/cache": "^0.2.50", + "@cerc-io/cache": "^0.2.51", "@nomiclabs/hardhat-waffle": "^2.0.1", "@types/express": "^4.17.14", "@types/fs-extra": "^9.0.11", diff --git a/packages/util/src/common.ts b/packages/util/src/common.ts index cf611a360..fdbf34a62 100644 --- a/packages/util/src/common.ts +++ b/packages/util/src/common.ts @@ -1,6 +1,7 @@ import debug from 'debug'; import assert from 'assert'; import { DeepPartial } from 'typeorm'; +import { errors } from 'ethers'; import { QUEUE_BLOCK_PROCESSING, @@ -93,13 +94,24 @@ export const fetchBlocksAtHeight = async ( // Try fetching blocks from eth-server until found. while (!blocks.length) { - console.time('time:common#_fetchBlocks-eth-server'); - blocks = await indexer.getBlocks({ blockNumber }); - console.timeEnd('time:common#_fetchBlocks-eth-server'); + try { + console.time('time:common#_fetchBlocks-eth-server'); + blocks = await indexer.getBlocks({ blockNumber }); + + if (!blocks.length) { + log(`No blocks fetched for block number ${blockNumber}, retrying after ${jobQueueConfig.blockDelayInMilliSecs} ms delay.`); + await wait(jobQueueConfig.blockDelayInMilliSecs); + } + } catch (err: any) { + // Handle null block error in case of Lotus EVM + if (!(err.code === errors.SERVER_ERROR && err.error && err.error.message === 'requested epoch was a null round')) { + throw err; + } - if (!blocks.length) { - log(`No blocks fetched for block number ${blockNumber}, retrying after ${jobQueueConfig.blockDelayInMilliSecs} ms delay.`); - await wait(jobQueueConfig.blockDelayInMilliSecs); + log(`Block ${blockNumber} requested was null (FEVM); Fetching next block`); + blockNumber++; + } finally { + console.timeEnd('time:common#_fetchBlocks-eth-server'); } } diff --git a/packages/util/src/eth.ts b/packages/util/src/eth.ts index 9791aa5ea..8a1c508b4 100644 --- a/packages/util/src/eth.ts +++ b/packages/util/src/eth.ts @@ -118,7 +118,7 @@ export function getRawTransaction (tx: TransactionResponse): string { } // Extract the relevant parts of the transaction and signature - const txFields = 'accessList chainId data gasPrice gasLimit maxFeePerGas maxPriorityFeePerGas nonce to type value'.split(' '); + const txFields = 'accessList chainId data gasLimit maxFeePerGas maxPriorityFeePerGas nonce to type value'.split(' '); const sigFields = 'v r s'.split(' '); // Seriailze the signed transaction