waitForTransactionReceipt
Waits for the Transaction to be included on a Block (one confirmation), and then returns the Transaction Receipt.
The waitForTransactionReceipt action additionally supports Replacement detection (e.g. sped up Transactions).
Usage
example.ts
import { publicClient } from './client'
 
const transaction = await publicClient.waitForTransactionReceipt( 
  { hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d' }
)
{  blockHash: '0xaf1dadb8a98f1282e8f7b42cc3da8847bfa2cf4e227b8220403ae642e1173088',  blockNumber: 15132008n,  from: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',  ...  status: 'success', }Returns
The transaction receipt.
Parameters
confirmations (optional)
- Type: 
number - Default: 
1 
The number of confirmations (blocks that have passed) to wait before resolving.
const transaction = await publicClient.waitForTransactionReceipt(
  { 
    confirmations: 5, 
    hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d' 
  }
)onReplaced (optional)
- Type: 
({ reason: 'replaced' | 'repriced' | 'cancelled', replacedTransaction: Transaction, transaction: Transaction, transactionReceipt: TransactionReceipt }) => void 
Optional callback to emit if the transaction has been replaced.
const transaction = await publicClient.waitForTransactionReceipt(
  { 
    hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',
    onReplaced: replacement => console.log(replacement) 
  }
)pollingInterval (optional)
- Type: 
number 
Polling frequency (in ms). Defaults to the Client's pollingInterval config.
const transaction = await publicClient.waitForTransactionReceipt(
  { 
    hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',
    pollingInterval: 12_000, 
  }
)retryCount (optional)
- Type: 
number - Default: 
6 
Number of times to retry if the transaction or block is not found.
const transaction = await publicClient.waitForTransactionReceipt(
  { 
    hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',
    retryCount: 3, 
  }
)retryDelay (optional)
- Type: 
number | (({ count: number; error: Error }) => number) - Default: 
({ count }) => ~~(1 << count) * 200(exponential backoff) 
Time to wait (in ms) between retries.
const transaction = await publicClient.waitForTransactionReceipt(
  { 
    hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',
    retryDelay: 10_000, 
  }
)timeout (optional)
- Type: 
number - Default: 
180_000 
Optional timeout (in milliseconds) to wait before stopping polling.
const transaction = await publicClient.waitForTransactionReceipt(
  { 
    hash: '0x4ca7ee652d57678f26e887c149ab0735f41de37bcad58c9f6d3ed5824f15b74d',
    timeout: 60_000, 
  }
)Notes
- Transactions can be replaced when a user modifies their transaction in their wallet (to speed up or cancel). Transactions are replaced when they are sent from the same nonce.
 - There are 3 types of Transaction Replacement reasons:
repriced: The gas price has been modified (ie. differentmaxFeePerGas)cancelled: The Transaction has been cancelled (ie.value === 0n)replaced: The Transaction has been replaced (ie. differentvalueordata)
 
Live Example
Check out the usage of waitForTransactionReceipt in the live Sending Transactions Example below.
JSON-RPC Methods
- Polls 
eth_getTransactionReceipton each block until it has been processed. - If a Transaction has been replaced:
- Calls 
eth_getBlockByNumberand extracts the transactions - Checks if one of the Transactions is a replacement
 - If so, calls 
eth_getTransactionReceipt. 
 - Calls