From f990dc20e563c10ebee023f8c56fa993d29cf901 Mon Sep 17 00:00:00 2001 From: Nikos Iliakis Date: Tue, 5 Jul 2022 15:04:52 +0300 Subject: [PATCH 1/6] Throw error for not found tx in getTransaction --- packages/web3-eth/src/web3_eth.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/web3-eth/src/web3_eth.ts b/packages/web3-eth/src/web3_eth.ts index f5796af7a32..1b34b1a6a3f 100644 --- a/packages/web3-eth/src/web3_eth.ts +++ b/packages/web3-eth/src/web3_eth.ts @@ -200,7 +200,15 @@ export class Web3Eth extends Web3Context Date: Tue, 5 Jul 2022 16:42:02 +0300 Subject: [PATCH 2/6] Fix failing tests --- .../web3_eth_methods_with_parameters.test.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts b/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts index 2b5a321c950..959e8ce9f04 100644 --- a/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts +++ b/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts @@ -53,6 +53,24 @@ import { jest.mock('../../src/rpc_methods'); jest.mock('../../src/rpc_method_wrappers'); +// eslint-disable-next-line @typescript-eslint/no-unsafe-call +jest.spyOn(rpcMethodWrappers, 'getTransaction').mockResolvedValue({ + blockHash: '0xb3a667f84f58c90ab87476073e06c5d1186a0f0b0b69aa3033bfe0e4df264350', + blockNumber: '123', + from: '0x01ada9d3470eb9eb3875d9e7948c674804ca43ae', + gas: '21000', + gasPrice: '10000', + hash: '0x84f44dffc3cd90a1b66ad0219a97680308e5e7a77299fbf1e2ebb572cf02cc2d', + input: '0x', + nonce: '61', + to: '0x0000000000000000000000000000000000000000', + transactionIndex: '0', + value: '1', + type: '0x01', + v: '2710', + r: '0xbefb00433ef79b2609dc560c28963c2e954370792671f71ab99665b8807b7feb', + s: '0x6bebe5e2c9f839d3ce0264dc5c7cc521f902e86705c69f5fddffaa3de5aac6d3', +}); describe('web3_eth_methods_with_parameters', () => { let web3Eth: Web3Eth; From 8468a39891e3e033c60d8e411cacfe814d0c9187 Mon Sep 17 00:00:00 2001 From: Nikos Iliakis Date: Tue, 5 Jul 2022 20:13:36 +0300 Subject: [PATCH 3/6] Move mock values to fixtures --- .../web3_eth_methods_with_parameters.ts | 37 +++++++++++++++++++ .../web3_eth_methods_with_parameters.test.ts | 21 ++--------- 2 files changed, 41 insertions(+), 17 deletions(-) diff --git a/packages/web3-eth/test/fixtures/web3_eth_methods_with_parameters.ts b/packages/web3-eth/test/fixtures/web3_eth_methods_with_parameters.ts index 37f24e1b290..c45a58461d0 100644 --- a/packages/web3-eth/test/fixtures/web3_eth_methods_with_parameters.ts +++ b/packages/web3-eth/test/fixtures/web3_eth_methods_with_parameters.ts @@ -28,6 +28,7 @@ import { Uint256, } from 'web3-utils'; import { transactionWithSender } from './rpc_methods_wrappers'; +import { ReceiptInfo } from '../../src/types'; /** * Array consists of: @@ -1835,3 +1836,39 @@ export const getProofValidData: [ ], ], ]; + +export const tx = { + blockHash: '0xb3a667f84f58c90ab87476073e06c5d1186a0f0b0b69aa3033bfe0e4df264350', + blockNumber: '123', + from: '0x01ada9d3470eb9eb3875d9e7948c674804ca43ae', + gas: '21000', + gasPrice: '10000', + hash: '0x84f44dffc3cd90a1b66ad0219a97680308e5e7a77299fbf1e2ebb572cf02cc2d', + input: '0x', + nonce: '61', + to: '0x0000000000000000000000000000000000000000', + transactionIndex: '0', + value: '1', + type: '0x01', + v: '2710', + r: '0xbefb00433ef79b2609dc560c28963c2e954370792671f71ab99665b8807b7feb', + s: '0x6bebe5e2c9f839d3ce0264dc5c7cc521f902e86705c69f5fddffaa3de5aac6d3', +}; + +export const txReceipt: ReceiptInfo = { + blockHash: '0xb3a667f84f58c90ab87476073e06c5d1186a0f0b0b69aa3033bfe0e4df264350', + blockNumber: BigInt(123), + cumulativeGasUsed: BigInt(21000), + effectiveGasPrice: BigInt(10000), + from: '0x01ada9d3470eb9eb3875d9e7948c674804ca43ae', + gasUsed: BigInt(21000), + logs: [], + logsBloom: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + status: BigInt(1), + to: '0x0000000000000000000000000000000000000000', + transactionHash: '0x84f44dffc3cd90a1b66ad0219a97680308e5e7a77299fbf1e2ebb572cf02cc2d', + transactionIndex: BigInt(0), + type: BigInt(0), + root: '', +}; diff --git a/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts b/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts index 959e8ce9f04..2920e756c5e 100644 --- a/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts +++ b/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts @@ -49,28 +49,15 @@ import { sendSignedTransactionValidData, signValidData, submitWorkValidData, + tx, + txReceipt, } from '../fixtures/web3_eth_methods_with_parameters'; jest.mock('../../src/rpc_methods'); jest.mock('../../src/rpc_method_wrappers'); // eslint-disable-next-line @typescript-eslint/no-unsafe-call -jest.spyOn(rpcMethodWrappers, 'getTransaction').mockResolvedValue({ - blockHash: '0xb3a667f84f58c90ab87476073e06c5d1186a0f0b0b69aa3033bfe0e4df264350', - blockNumber: '123', - from: '0x01ada9d3470eb9eb3875d9e7948c674804ca43ae', - gas: '21000', - gasPrice: '10000', - hash: '0x84f44dffc3cd90a1b66ad0219a97680308e5e7a77299fbf1e2ebb572cf02cc2d', - input: '0x', - nonce: '61', - to: '0x0000000000000000000000000000000000000000', - transactionIndex: '0', - value: '1', - type: '0x01', - v: '2710', - r: '0xbefb00433ef79b2609dc560c28963c2e954370792671f71ab99665b8807b7feb', - s: '0x6bebe5e2c9f839d3ce0264dc5c7cc521f902e86705c69f5fddffaa3de5aac6d3', -}); +jest.spyOn(rpcMethodWrappers, 'getTransaction').mockResolvedValue(tx); +jest.spyOn(rpcMethodWrappers, 'getTransactionReceipt').mockResolvedValue(txReceipt); describe('web3_eth_methods_with_parameters', () => { let web3Eth: Web3Eth; From d8840c7f863ba39b9377b4cb847fc4c83a2aea7e Mon Sep 17 00:00:00 2001 From: Nikos Iliakis Date: Tue, 5 Jul 2022 20:33:02 +0300 Subject: [PATCH 4/6] Throw error for not found tx in getTransactionReceipt --- packages/web3-eth/src/web3_eth.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/web3-eth/src/web3_eth.ts b/packages/web3-eth/src/web3_eth.ts index 1b34b1a6a3f..86e50cc2297 100644 --- a/packages/web3-eth/src/web3_eth.ts +++ b/packages/web3-eth/src/web3_eth.ts @@ -235,7 +235,15 @@ export class Web3Eth extends Web3Context(transactionHash: Bytes, returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat) { - return rpcMethodsWrappers.getTransactionReceipt(this, transactionHash, returnFormat); + const response = await rpcMethodsWrappers.getTransactionReceipt( + this, + transactionHash, + returnFormat, + ); + + if (!response) throw new Error('Transaction not found!'); + + return response; } public async getTransactionCount< From 9219f79f0cabf1e3caf733c01452f2a5de289606 Mon Sep 17 00:00:00 2001 From: Nikos Iliakis Date: Thu, 7 Jul 2022 12:12:40 +0300 Subject: [PATCH 5/6] Create dedicated error --- packages/web3-errors/src/errors/transaction_errors.ts | 6 ++++++ packages/web3-eth/src/web3_eth.ts | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/web3-errors/src/errors/transaction_errors.ts b/packages/web3-errors/src/errors/transaction_errors.ts index f01a76ffcca..d47e8676ee9 100644 --- a/packages/web3-errors/src/errors/transaction_errors.ts +++ b/packages/web3-errors/src/errors/transaction_errors.ts @@ -125,3 +125,9 @@ export class UndefinedRawTransactionError extends TransactionError { this.code = ERR_RAW_TX_UNDEFINED; } } +export class TransactionNotFound extends TransactionError { + public constructor() { + super('Transaction not found'); + this.code = ERR_TX; + } +} diff --git a/packages/web3-eth/src/web3_eth.ts b/packages/web3-eth/src/web3_eth.ts index 86e50cc2297..2b888d1e5f2 100644 --- a/packages/web3-eth/src/web3_eth.ts +++ b/packages/web3-eth/src/web3_eth.ts @@ -24,6 +24,7 @@ import { Web3Context, Web3ContextInitOptions, } from 'web3-core'; +import { TransactionNotFound } from 'web3-errors'; import { Address, Bytes, @@ -206,7 +207,7 @@ export class Web3Eth extends Web3Context Date: Thu, 7 Jul 2022 14:25:52 +0300 Subject: [PATCH 6/6] Create dedicated error code --- packages/web3-errors/src/error_codes.ts | 1 + packages/web3-errors/src/errors/transaction_errors.ts | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/web3-errors/src/error_codes.ts b/packages/web3-errors/src/error_codes.ts index ba90826a699..25ba73dcec7 100644 --- a/packages/web3-errors/src/error_codes.ts +++ b/packages/web3-errors/src/error_codes.ts @@ -73,6 +73,7 @@ export const ERR_TX_RECEIPT_MISSING_BLOCK_NUMBER = 428; export const ERR_TX_LOCAL_WALLET_NOT_AVAILABLE = 429; +export const ERR_TX_NOT_FOUND = 430; // Connection error codes export const ERR_CONN = 500; export const ERR_CONN_INVALID = 501; diff --git a/packages/web3-errors/src/errors/transaction_errors.ts b/packages/web3-errors/src/errors/transaction_errors.ts index d47e8676ee9..ca4d521d108 100644 --- a/packages/web3-errors/src/errors/transaction_errors.ts +++ b/packages/web3-errors/src/errors/transaction_errors.ts @@ -26,6 +26,7 @@ import { ERR_TX_REVERT_INSTRUCTION, ERR_TX_REVERT_TRANSACTION, ERR_TX_REVERT_WITHOUT_REASON, + ERR_TX_NOT_FOUND, } from '../error_codes'; import { ReceiptInfo } from '../types'; import { Web3Error } from '../web3_error_base'; @@ -128,6 +129,6 @@ export class UndefinedRawTransactionError extends TransactionError { export class TransactionNotFound extends TransactionError { public constructor() { super('Transaction not found'); - this.code = ERR_TX; + this.code = ERR_TX_NOT_FOUND; } }