Understanding eth_getTransactionByHash
: A Complete Guide to Fetching Ethereum Transaction Data
The eth_getTransactionByHash
method is a fundamental part of the Ethereum JSON-RPC API, enabling developers and analysts to retrieve detailed information about a specific transaction using its unique hash. Whether you're building a blockchain explorer, monitoring smart contract interactions, or debugging user transactions, this method provides essential insights into on-chain activity.
By supplying a transaction hash, eth_getTransactionByHash
returns a comprehensive object containing metadata such as sender and recipient addresses, gas usage, transaction value, and execution status. This makes it indispensable for real-time transaction tracking and post-execution analysis.
👉 Discover powerful tools to interact with Ethereum transactions seamlessly.
How eth_getTransactionByHash
Works
This RPC method allows you to query the Ethereum network for transaction details by providing a single parameter: the transaction hash. The response is either a transaction object filled with data or null
, indicating that the transaction does not exist or has not yet been mined.
It’s important to note that if you're monitoring your own transactions—especially those routed through private mempools for MEV (Maximal Extractable Value) protection—you should disable such features temporarily. Otherwise, your transactions may not appear in public block explorations until they are confirmed, leading to potential detection delays.
Parameters
hash
— The 32-byte hexadecimal string (e.g.,0x...
) that uniquely identifies the transaction on the Ethereum blockchain.
Response Object
The method returns a JSON object with the following properties:
blockHash
— The hash of the block where the transaction was included. Returnsnull
for pending transactions.blockNumber
— The number of the block in which the transaction was confirmed. Alsonull
if the transaction is still pending.from
— The Ethereum address of the sender.gas
— The maximum gas limit set by the sender for this transaction.gasPrice
— The price per unit of gas, denominated in Wei (used in legacy transactions).maxFeePerGas
— The maximum total fee per gas the sender is willing to pay (used in EIP-1559 transactions).maxPriorityFeePerGas
— The portion of the fee going directly to miners as incentive.hash
— The unique identifier of the transaction.input
— Additional data included in the transaction, typically used for smart contract calls.nonce
— A sequential number from the sender’s address, ensuring transaction order and preventing replay attacks.to
— The recipient address;null
if the transaction creates a new contract.transactionIndex
— The position of the transaction within the block;null
if unmined.value
— The amount of ETH transferred in Wei.type
— The transaction type:0
for legacy,2
for EIP-1559.accessList
— An optional list of addresses and storage keys accessed during execution (EIP-2930).v
,r
,s
— Components of the digital signature used to verify the sender's identity.
These fields provide a full forensic view of any Ethereum transaction, making this method crucial for auditing, debugging, and transparency.
Practical Use Cases
One primary use case for eth_getTransactionByHash
is inspecting individual transactions—such as verifying fund transfers, analyzing contract interactions, or confirming inclusion in a specific block. For decentralized applications (dApps), this method helps ensure transaction finality and enhances user trust by displaying accurate on-chain data.
Developers can integrate this functionality into dashboards, wallet interfaces, or backend services to offer real-time updates on transaction status.
👉 Access reliable blockchain infrastructure to streamline your development workflow.
Code Example: Fetching Transaction Details with ethers.js
Below is a practical implementation using ethers.js and Chainstack’s provider to fetch transaction data:
const ethers = require("ethers");
// Initialize ChainstackProvider for Ethereum mainnet
const chainstack = new ethers.ChainstackProvider("mainnet");
async function getTransaction(transactionHash) {
try {
// Call eth_getTransactionByHash via JSON-RPC
const transaction = await chainstack.send("eth_getTransactionByHash", [
transactionHash,
]);
if (transaction === null) {
console.log("Transaction not found or still pending.");
return;
}
// Extract key details
const sender = transaction.from;
const recipient = transaction.to || "Contract Creation";
const blockNumber = transaction.blockNumber;
const valueInEth = ethers.formatEther(transaction.value);
const gasLimit = transaction.gas;
const txType = transaction.type === "0x0" ? "Legacy" : "EIP-1559";
// Output formatted information
console.log(`✅ Transaction Hash: ${transaction.hash}`);
console.log(`📤 From: ${sender}`);
console.log(`📥 To: ${recipient}`);
console.log(`💰 Value: ${valueInEth} ETH`);
console.log(`📦 Block Number: ${blockNumber}`);
console.log(`⛽ Gas Limit: ${gasLimit}`);
console.log(`🔧 Type: ${txType}`);
} catch (error) {
console.error("Error fetching transaction:", error.message);
}
}
// Example usage
getTransaction(
"0xb528d706507b7e5d8f132389a667b3785cf14480a8f9aa6363f1e674a5a6099e"
);
This script connects to an Ethereum node via Chainstack, retrieves transaction data, and logs meaningful details in a human-readable format. You can extend it further by adding timestamp resolution, block confirmation checks, or integration with frontend UIs.
Frequently Asked Questions (FAQ)
What happens if eth_getTransactionByHash
returns null
?
A null
response means the transaction either doesn’t exist or hasn't been mined yet. It could still be pending in the mempool. Wait a few seconds and retry the query.
Can I use this method for pending transactions?
Yes, but only after they’ve been broadcast. If the transaction hasn’t been propagated to the network or was dropped due to low fees, it won’t be retrievable.
Does eth_getTransactionByHash
work across all Ethereum networks?
Yes. As long as you're connected to a node on a compatible network (Mainnet, Goerli, Sepolia, etc.), you can query transactions using their hash.
Why are v
, r
, and s
included in the response?
These are cryptographic signature components used to validate the authenticity of the transaction. They allow anyone to recover the sender's public key and confirm they authorized the transfer.
Is there a rate limit when calling this method?
Rate limits depend on your node provider. Public endpoints often impose restrictions, while dedicated nodes (like those from Chainstack or self-hosted solutions) offer higher throughput.
How does EIP-1559 affect the response structure?
EIP-1559 introduced maxFeePerGas
and maxPriorityFeePerGas
, replacing gasPrice
in dynamic fee transactions. Legacy transactions still use gasPrice
, so both may appear depending on type.
👉 Explore advanced blockchain APIs designed for speed and reliability.
Core Keywords
eth_getTransactionByHash
- Ethereum transaction hash
- JSON-RPC API
- Fetch Ethereum transaction
- Transaction details Ethereum
- ethers.js example
- Blockchain data retrieval
- Ethereum developer tools
With growing demand for transparent and verifiable on-chain operations, mastering methods like eth_getTransactionByHash
empowers developers to build more robust, user-trusting applications. Whether you're validating payments or debugging smart contracts, this method remains a cornerstone of Ethereum interaction.
As blockchain ecosystems evolve, having reliable access to raw transaction data ensures your projects stay resilient, performant, and aligned with decentralized principles.