eth_getTransactionByHash - Arc RPC Method
Retrieve transaction details by hash on Arc. Essential for payment platforms, stablecoin issuers, exchange and treasury teams, and Solidity developers building on Arc tracking transactions on Circle's stablecoin-native Layer 1 where USDC is the gas token and BFT consensus gives sub-second deterministic finality.
Returns the information about a transaction by transaction hash on Arc.
Why Arc? Build on Circle's stablecoin-native Layer 1 where USDC is the gas token and BFT consensus gives sub-second deterministic finality with USDC as the native gas token, sub-second irreversible finality, an EWMA-smoothed fee market with a 20 Gwei floor, and EIP-7708 Transfer logs for native value movement.
When to Use This Method
eth_getTransactionByHash is essential for payment platforms, stablecoin issuers, exchange and treasury teams, and Solidity developers building on Arc:
- Track pending and confirmed transaction status: Monitor the full lifecycle of a transaction from submission through finalization on Arc
- Verify transaction parameters: Confirm the value, gas, and input data match your intent for crossborder settlement, merchant payments, institutional clearing, and USDC-denominated financial applications
- Wallet transaction history display: Show detailed transaction records with sender, receiver, value, and status for end users
- Debug failed transactions: Inspect raw transaction data to diagnose reverted calls and unexpected behavior on Circle's stablecoin-native Layer 1 where USDC is the gas token and BFT consensus gives sub-second deterministic finality
Common Use Cases
1. Wait for Transaction Confirmation with Polling
Poll eth_getTransactionByHash until the transaction's blockNumber becomes non-null, indicating it has been mined on Arc. This is the standard pattern for tracking transaction finality.
import { JsonRpcProvider } from 'ethers';
const provider = new JsonRpcProvider('https://api-arc-mainnet.n.dwellir.com/YOUR_API_KEY');
async function waitForConfirmation(txHash, interval = 2000) {
while (true) {
const tx = await provider.getTransaction(txHash);
if (tx && tx.blockNumber) {
console.log(`Transaction confirmed in block #${tx.blockNumber}`);
return tx;
}
console.log('Transaction pending, waiting...');
await new Promise(r => setTimeout(r, interval));
}
}
waitForConfirmation('0x4c4fad6d08e677e54644301bbbbffcba734b6c5fb3e47488565b61ecae3b0c1f');2. Display Transaction Details in a Wallet UI
Fetch and format transaction data for display in a wallet or explorer on Arc. Extract the key fields: sender, recipient, value, gas, and confirmation status.
from web3 import Web3
w3 = Web3(Web3.HTTPProvider('https://api-arc-mainnet.n.dwellir.com/YOUR_API_KEY'))
def get_transaction_details(tx_hash):
tx = w3.eth.get_transaction(tx_hash)
if not tx:
return {'status': 'not found'}
return {
'hash': tx['hash'].hex(),
'from': tx['from'],
'to': tx['to'],
'value_ether': w3.from_wei(tx['value'], 'ether'),
'gas': tx['gas'],
'gas_price_gwei': w3.from_wei(tx['gasPrice'], 'gwei'),
'block': tx.get('blockNumber'),
'confirmed': tx.get('blockNumber') is not None,
}
details = get_transaction_details('0x4c4fad6d08e677e54644301bbbbffcba734b6c5fb3e47488565b61ecae3b0c1f')
for key, value in details.items():
print(f'{key}: {value}')3. Decode Transaction Input Data for Contract Interaction Analysis
When a transaction's input field contains encoded function calls, decode it using a contract ABI to understand what action was performed on Circle's stablecoin-native Layer 1 where USDC is the gas token and BFT consensus gives sub-second deterministic finality.
package main
import (
"context"
"fmt"
"log"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
)
func main() {
client, _ := ethclient.Dial("https://api-arc-mainnet.n.dwellir.com/YOUR_API_KEY")
txHash := common.HexToHash("0x4c4fad6d08e677e54644301bbbbffcba734b6c5fb3e47488565b61ecae3b0c1f")
tx, isPending, _ := client.TransactionByHash(context.Background(), txHash)
fmt.Printf("Pending: %v\n", isPending)
fmt.Printf("From: %s\n", tx.From().Hex())
fmt.Printf("Value: %s wei\n", tx.Value().String())
fmt.Printf("Gas limit: %d\n", tx.Gas())
if len(tx.Data()) > 0 {
// First 4 bytes are the function selector
selector := tx.Data()[:4]
fmt.Printf("Function selector: 0x%x\n", selector)
fmt.Printf("Input data length: %d bytes\n", len(tx.Data()))
}
}Best Practices
- Check if
blockNumberis null to detect pending transactions: A nullblockNumberindicates the transaction has been submitted but not yet mined; use this to drive polling or loading states in your UI - For mined transactions, cross-reference with receipt for confirmation count: Once a block number is available, use
eth_getTransactionReceiptto get the final status, gas used, and emitted logs - Cache confirmed transaction data indefinitely: Transaction data is immutable once mined; cache it permanently to avoid redundant RPC calls for historical lookups
- Use
eth_getTransactionReceiptfor post-confirmation data: After a transaction is confirmed, calleth_getTransactionReceiptto get gas used, logs, status code, and effective gas price
Code Examples
Error Handling
| Error Code | Message | Description |
|---|---|---|
| -32602 | Invalid params | Invalid transaction hash format |
Related Methods
eth_getTransactionReceipt- Get transaction receipteth_sendRawTransaction- Send transaction
eth_sendRawTransaction
Submit signed transactions to Arc. Essential for broadcasting transactions for crossborder settlement, merchant payments, institutional clearing, and USDC-denominated financial applications.
eth_getTransactionReceipt
Get transaction receipt with status and logs on Arc. Essential for verifying transaction execution for crossborder settlement, merchant payments, institutional clearing, and USDC-denominated financial applications.