eth_getTransactionByHash
Returns information about a transaction requested by transaction hash.
When to Use This Method
Use eth_getTransactionByHash
to:
- Track Transactions - Monitor transaction status after submission
- Verify Cross-Chain Transfers - Confirm omnichain operations
- Payment Verification - Confirm payment details
- Debug Issues - Investigate failed or stuck transactions
- Build Explorers - Display transaction details
Parameters
- Transaction Hash -
DATA
, 32 Bytes- Hash of the transaction to retrieve
- Format:
0x
followed by 64 hexadecimal characters
{
"jsonrpc": "2.0",
"method": "eth_getTransactionByHash",
"params": [
"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"
],
"id": 1
}
Returns
Transaction object or null
if not found:
blockHash
- Hash of the block containing this transactionblockNumber
- Block number containing this transactionfrom
- Address of the sendergas
- Gas provided by the sendergasPrice
- Gas price in weihash
- Transaction hashinput
- Input data sent with transactionnonce
- Number of transactions from senderto
- Receiver address (null for contract creation)transactionIndex
- Position in the blockvalue
- Value transferred in weitype
- Transaction typev
,r
,s
- Signature values
Implementation Examples
- cURL
- JavaScript
- Python
curl -X POST https://api-xdc-mainnet.n.dwellir.com/YOUR_API_KEY \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_getTransactionByHash",
"params": [
"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"
],
"id": 1
}'
import { ethers } from 'ethers';
const provider = new ethers.JsonRpcProvider('https://api-xdc-mainnet.n.dwellir.com/YOUR_API_KEY');
// Get transaction details
const txHash = '0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b';
const tx = await provider.getTransaction(txHash);
if (tx) {
console.log('From:', tx.from);
console.log('To:', tx.to);
console.log('Value:', ethers.formatEther(tx.value), 'ZETA');
console.log('Block:', tx.blockNumber);
console.log('Status:', tx.blockNumber ? 'Confirmed' : 'Pending');
} else {
console.log('Transaction not found');
}
// Track cross-chain transaction
class CrossChainTracker {
async trackTransaction(txHash) {
const tx = await provider.getTransaction(txHash);
if (!tx) return null;
// Check if it's a cross-chain transaction
const connectorAddress = '0x239e96c8f17C85c30100AC26F635Ea15f23E9c67';
const isCrossChain = tx.to?.toLowerCase() === connectorAddress.toLowerCase();
if (isCrossChain) {
// Decode cross-chain data
const decoded = await this.decodeCrossChainData(tx.data);
return {
...tx,
crossChain: true,
destinationChain: decoded.destChainId,
crossChainMessage: decoded.message
};
}
return tx;
}
}
from web3 import Web3
w3 = Web3(Web3.HTTPProvider('https://api-xdc-mainnet.n.dwellir.com/YOUR_API_KEY'))
# Get transaction
tx_hash = '0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b'
tx = w3.eth.get_transaction(tx_hash)
if tx:
print(f"From: {tx['from']}")
print(f"To: {tx['to']}")
print(f"Value: {w3.from_wei(tx['value'], 'ether')} ZETA")
print(f"Gas: {tx['gas']}")
print(f"Block: {tx['blockNumber']}")
Example Response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"blockHash": "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
"blockNumber": "0x5daf3b",
"from": "0xa7d9ddbe1f17865597fbd27ec712455208b6b76d",
"gas": "0xc350",
"gasPrice": "0x4a817c800",
"hash": "0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",
"input": "0x68656c6c6f21",
"nonce": "0x15",
"to": "0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb",
"transactionIndex": "0x41",
"value": "0xf3dbb76162000",
"type": "0x0",
"v": "0x25",
"r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea",
"s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c"
}
}
Cross-Chain Transaction Detection
// Identify and decode cross-chain transactions
async function analyzeCrossChainTx(txHash) {
const tx = await provider.getTransaction(txHash);
if (!tx) return null;
// xdc connector contracts
const connectors = {
mainnet: '0x239e96c8f17C85c30100AC26F635Ea15f23E9c67',
testnet: '0x0000c9ec4042283e8139c74f4c64bcd1e0b9b54f'
};
const isConnectorTx = Object.values(connectors)
.some(addr => tx.to?.toLowerCase() === addr.toLowerCase());
if (isConnectorTx) {
return {
type: 'cross-chain',
hash: tx.hash,
from: tx.from,
sourceChain: 7000,
value: ethers.formatEther(tx.value),
status: tx.blockNumber ? 'confirmed' : 'pending',
confirmations: tx.blockNumber ?
await provider.getBlockNumber() - tx.blockNumber : 0
};
}
return {
type: 'standard',
hash: tx.hash,
from: tx.from,
to: tx.to,
value: ethers.formatEther(tx.value)
};
}
Best Practices
- Always check for null responses
- Cache transaction data once confirmed
- Monitor pending transactions with timeout
- Validate transaction hash format
- Handle reorg scenarios for recent blocks
Related Methods
- eth_getTransactionReceipt - Get transaction receipt
- eth_sendRawTransaction - Send signed transaction
- eth_getBlockByNumber - Get block details
- eth_getTransactionCount - Get nonce