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 f01a76ffcca..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'; @@ -125,3 +126,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_NOT_FOUND; + } +} diff --git a/packages/web3-eth/src/web3_eth.ts b/packages/web3-eth/src/web3_eth.ts index f5796af7a32..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, @@ -200,7 +201,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 TransactionNotFound(); + + return response; } public async getTransactionCount< 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 2b5a321c950..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,10 +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(tx); +jest.spyOn(rpcMethodWrappers, 'getTransactionReceipt').mockResolvedValue(txReceipt); describe('web3_eth_methods_with_parameters', () => { let web3Eth: Web3Eth;