Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -93,13 +93,29 @@ export const MockSendTransactionResponse = {
*/
export const GetTransactionReceiptParams = ['0xdeadbeef']

/**
* Mocks for EIP-1193 rpc responses - eth_getTransactionReceipt.
*/
export const MockTransactionReceipt = {
transactionHash: GetTransactionReceiptParams[0],
}

/**
* Mocks for EIP-1193 rpc responses - eth_getTransactionReceipt.
*/
export const MockGetTransactionReceiptResponse = {
id: undefined,
jsonrpc: undefined,
result: { receipt: { transactionHash: GetTransactionReceiptParams[0] } },
result: MockTransactionReceipt,
}

/**
* Mocks for EIP-1193 rpc responses - eth_getTransactionReceipt.
*/
export const MockPendingTransactionReceiptResponse = {
id: undefined,
jsonrpc: undefined,
result: null,
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,10 @@ import {
EthAccountsResponse,
GetTransactionReceiptParams,
MockGetTransactionReceiptResponse,
MockPendingTransactionReceiptResponse,
MockSendTransactionResponse,
MockSendUserOperationResponse,
MockTransactionReceipt,
MockWaitForUserOperationReceiptResponse,
PersonalSignParams,
PersonalSignResponse,
Expand Down Expand Up @@ -351,23 +353,44 @@ describe('Providers > eip-1193 > EIP1193Provider > rpc methods', () => {
params: GetTransactionReceiptParams,
}

// Spy on `waitForTransactionReceipt`
const waitForGetTransactionReceiptSpy = jest
.spyOn(publicClient, 'waitForTransactionReceipt')
.mockResolvedValue(MockWaitForUserOperationReceiptResponse as never)
const requestSpy = jest
.spyOn(publicClient, 'request')
.mockResolvedValue(MockTransactionReceipt)

const response = await provider.request<
string,
typeof MockGetTransactionReceiptResponse
>(mockPayload)

expect(waitForGetTransactionReceiptSpy).toHaveBeenCalledWith({
hash: GetTransactionReceiptParams[0],
expect(requestSpy).toHaveBeenCalledWith({
method: 'eth_getTransactionReceipt',
params: GetTransactionReceiptParams,
})

expect(response).toEqual(MockGetTransactionReceiptResponse)

waitForGetTransactionReceiptSpy.mockRestore()
requestSpy.mockRestore()
})

it('should return null for a pending eth_getTransactionReceipt', async () => {
const mockPayload = {
method: 'eth_getTransactionReceipt',
params: GetTransactionReceiptParams,
}

const requestSpy = jest
.spyOn(publicClient, 'request')
.mockResolvedValue(null)

const response = await provider.request<
string,
typeof MockPendingTransactionReceiptResponse
>(mockPayload)

expect(requestSpy).toHaveBeenCalledTimes(1)
expect(response).toEqual(MockPendingTransactionReceiptResponse)

requestSpy.mockRestore()
})

it('should throw an error when the addresses are different for eth_signTypedData_v4', async () => {
Expand Down
5 changes: 3 additions & 2 deletions packages/w3s-web-core-sdk/src/providers/eip-1193/provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,9 @@ export default class EIP1193Provider<
case 'eth_getTransactionReceipt': {
const [hash] = params as [Hex]

const receipt = await this.publicClient.waitForTransactionReceipt({
hash,
const receipt = await this.publicClient.request({
method: 'eth_getTransactionReceipt',
params: [hash],
})

return this.getResponse(receipt, payload)
Expand Down