以太坊获取交易数据的完整指南,从原理到实战
2026.10.18 00:24:38 1 0
以太坊作为全球最大的智能合约平台,每天处理超过 100 万笔交易,无论是开发钱包应用、数据分析工具、还是区块链浏览器,获取以太坊交易数据都是最基础也是最核心的能力,本文将系统介绍以太坊交易数据的结构、获取方式以及实战代码,帮助你快速掌握这项关键技能。

以太坊交易数据的基本结构
在获取数据之前,先了解一笔以太坊交易包含哪些关键字段:
| 字段 | 说明 |
|---|---|
hash |
交易哈希,交易的唯一标识 |
from |
发送方地址 |
to |
接收方地址(合约创建交易时为空) |
value |
转账金额,单位为 wei(1 ETH = 10^18 wei) |
data / input |
数据字段,调用合约时包含方法签名与参数 |
gasLimit |
交易允许消耗的最大 gas 数量 |
gasPrice / maxFeePerGas |
Gas 价格(EIP-1559 后为动态费用机制) |
nonce |
发送方账户的交易序号 |
blockNumber |
交易被打包进的区块高度 |
v, r, s |
ECDSA 签名数据 |
交易上链后还会产生交易回执(Transaction Receipt),包含执行结果:
status:1 表示成功,0 表示失败(回滚)gasUsed:实际消耗的 gaslogs:交易触发的事件日志contractAddress:如果是合约部署交易,为新合约地址
获取交易数据的主要途径
JSON-RPC 接口(最原生的方式)
以太坊节点原生支持 JSON-RPC 协议,常用方法包括:
eth_getTransactionByHash:根据哈希查询交易eth_getTransactionReceipt:查询交易回执eth_getBlockByNumber:按区块号获取区块(可包含完整交易列表)eth_getLogs:按条件查询事件日志
直接使用 curl 调用示例:
curl -X POST https://mainnet.infura.io/v3/你的项目ID \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_getTransactionByHash",
"params": ["0x交易哈希"],
"id": 1
}'
区块链浏览器 API(适合快速集成)
Etherscan 提供免费的 REST API,无需自己运行节点,适合获取某个地址的历史交易:
https://api.etherscan.io/api?module=account&action=txlist&address=0x...&sort=desc&apikey=你的APIKEY
需要注意免费版有速率限制(约 5 次/秒)。
节点服务商(生产环境推荐)
自建节点成本高、维护复杂,大多数开发者选择第三方节点服务商:
- Infura
- Alchemy
- QuickNode
- Ankr
它们同时提供 HTTP 和 WebSocket 端点,并附带增强型 API。
Web3 开发库(最常用方式)
通过封装好的库调用节点,大幅简化开发。
实战代码示例
使用 ethers.js(JavaScript)
const { ethers } = require("ethers");
const provider = new ethers.JsonRpcProvider(
"https://mainnet.infura.io/v3/你的项目ID"
);
async function main() {
// 1. 根据哈希获取交易详情
const tx = await provider.getTransaction(
"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"
);
console.log("交易金额:", ethers.formatEther(tx.value), "ETH");
console.log("发送方:", tx.from);
// 2. 获取交易回执(确认执行状态)
const receipt = await provider.getTransactionReceipt(tx.hash);
console.log("交易状态:", receipt.status === 1 ? "成功" : "失败");
console.log("实际消耗 Gas:", receipt.gasUsed.toString());
// 3. 获取最新区块的全部交易
const block = await provider.getBlock("latest", true);
console.log("最新区块交易数量:", block.transactions.length);
}
main();
使用 web3.py(Python)
from web3 import Web3
w3 = Web3(Web3.HTTPProvider("https://mainnet.infura.io/v3/你的项目ID"))
tx_hash = "0x88df016429689c079f3b2f6ad39fa052532c56795b
本文转载自互联网,如有侵权,联系删除
