Web3实战指南,多种方法查询以太坊转账记录

博主:neragonerago 2026-10-16 20:43:52 2

在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)。

操作步骤:

  1. 打开Etherscan官网
  2. 在搜索框输入要查询的钱包地址
  3. 页面会展示该地址的余额及所有交易记录
  4. 点击任意一笔交易,可查看详细信息

优点:零门槛、可视化程度高、支持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等。

注意事项

  1. 单位换算:链上金额以Wei为单位,务必除以10^18转换为ETH
  2. 交易状态校验:失败交易也会上链,需检查status字段是否为1
  3. 内部交易:由合约触发的内部转账需通过特殊接口(如Etherscan的txlistinternal)查询
  4. API限流:免费API有调用频率限制,批量查询需做好节流
  5. 网络区分:确认查询的是主网还是测试网(Sepolia等)

查询以太坊转账记录是Web3开发中最基础也是最核心的能力之一,普通用户可借助Etherscan等区块浏览器;开发者则可根据场景选择Web3.js/Ethers.js本地解析或第三方

The End

发布于:2026-10-16,除非注明,否则均为区块链社区- 欧亿APP下载原创文章,转载请注明出处。