Web3实战指南,多种方法查询以太坊转账记录
在Web3的世界里,区块链的一大核心特性就是公开透明,每一笔以太坊转账记录都永久地存储在链上,任何人都可以查询,无论是开发者构建钱包应用、数据分析工具,还是普通用户想核对资产动向,掌握查询以太坊转账记录的方法都至关重要,本文将系统介绍几种主流的查询方式,从简单的区块浏览器到编程实现,带你全面了解。
什么是以太坊转账记录?
以太坊转账记录(Transaction)本质上是区块链上的一笔交易数据,包含以下关键字段:
- 交易哈希(Transaction Hash):交易的唯一标识
- 发起方(From):转出地址
- 接收方(To):转入地址
- 金额(Value):转账的ETH数量(以Wei为单位,1 ETH = 10^18 Wei)
- Gas费用:矿工执行交易的手续费
- 区块号:交易被打包进哪个区块
- 时间戳:交易确认的时间
- 交易状态:成功(Success)或失败(Failed)
需要注意的是,ETH原生转账和ERC-20代币转账在数据层面有所不同:ERC-20代币转账是通过调用代币合约的transfer方法实现的,记录在合约的事件日志中。
方法一:使用区块浏览器(适合普通用户)
最简单直接的方式是使用区块浏览器,最常用的是 Etherscan(etherscan.io)。
操作步骤:
- 打开Etherscan官网
- 在搜索框输入要查询的钱包地址
- 页面会展示该地址的余额及所有交易记录
- 点击任意一笔交易,可查看详细信息
优点:零门槛、可视化程度高、支持ERC-20代币和NFT记录筛选。
局限:不适合程序化调用,无法集成到自己的应用中。
方法二:使用Web3.js查询(开发者常用)
Web3.js是与以太坊交互最经典的JavaScript库。
1 查询单笔交易
const Web3 = require('web3');
const web3 = new Web3('https://mainnet.infura.io/v3/你的项目ID');
async function getTransaction() {
const tx = await web3.eth.getTransaction(
'0x交易哈希'
);
console.log('转账金额:', web3.utils.fromWei(tx.value, 'ether'), 'ETH');
console.log('发起地址:', tx.from);
console.log('接收地址:', tx.to);
}
2 按地址扫描历史交易
需要特别注意:以太坊节点原生不支持按地址查询交易历史,因为区块链没有为地址建立索引,常见做法是遍历区块:
async function scanTransactions(targetAddress, fromBlock, toBlock) {
for (let i = fromBlock; i <= toBlock; i++) {
const block = await web3.eth.getBlock(i, true);
if (!block) continue;
block.transactions.forEach(tx => {
if (tx.from === targetAddress || tx.to === targetAddress) {
console.log(`区块 ${i}: ${tx.from} -> ${tx.to},
金额: ${web3.utils.fromWei(tx.value, 'ether')} ETH`);
}
});
}
}
提示:全量扫描非常耗时,生产环境建议配合索引服务使用。
方法三:使用Ethers.js查询ERC-20代币转账
Ethers.js是更现代的库,通过事件日志可以高效查询代币转账:
const { ethers } = require('ethers');
const provider = new ethers.providers.JsonRpcProvider('RPC节点地址');
async function getTokenTransfers(walletAddress, tokenAddress) {
// Transfer事件的Topic编码
const transferTopic = ethers.utils.id('Transfer(address,address,uint256)');
const filter = {
address: tokenAddress, // 代币合约地址
topics: [
transferTopic,
null, // from不限
ethers.utils.hexZeroPad(walletAddress, 32) // 精确匹配to地址
],
fromBlock: 0,
toBlock: 'latest'
};
const logs = await provider.getLogs(filter);
console.log(`共找到 ${logs.length} 笔转入记录`);
}
这种方式利用了eth_getLogs接口,效率远高于逐块扫描。
方法四:调用Etherscan API(推荐的高效方案)
对于需要快速集成地址交易历史的DApp,Etherscan官方API是最佳选择之一:
https://api.etherscan.io/api
?module=account
&action=txlist
&address=0x目标地址
&startblock=0
&endblock=99999999
&page=1
&offset=10
&sort=desc
&apikey=你的API密钥
返回的JSON数据包含完整交易列表。action=tokentx可查询代币转账,类似的服务还有Alchemy、Moralis、Covalent等。
注意事项
- 单位换算:链上金额以Wei为单位,务必除以10^18转换为ETH
- 交易状态校验:失败交易也会上链,需检查
status字段是否为1 - 内部交易:由合约触发的内部转账需通过特殊接口(如Etherscan的
txlistinternal)查询 - API限流:免费API有调用频率限制,批量查询需做好节流
- 网络区分:确认查询的是主网还是测试网(Sepolia等)
查询以太坊转账记录是Web3开发中最基础也是最核心的能力之一,普通用户可借助Etherscan等区块浏览器;开发者则可根据场景选择Web3.js/Ethers.js本地解析或第三方
发布于:2026-10-16,除非注明,否则均为原创文章,转载请注明出处。

