以太坊交易记录查询指南,使用Web3轻松获取链上数据

博主:neragonerago 2026-10-03 23:33:39 3

在区块链应用开发中,查询以太坊交易记录是一项非常基础且重要的操作,无论是开发钱包应用、区块浏览器、数据分析工具,还是进行审计核对,都需要与链上交易数据打交道,本文将详细介绍如何使用Web3技术栈查询以太坊交易记录,帮助你快速掌握这一核心技能。

以太坊交易记录查询指南,使用Web3轻松获取链上数据

什么是以太坊交易记录?

以太坊交易记录是指发生在以太坊区块链上的所有转账、合约调用等操作的永久记录,每笔交易包含以下关键信息:

  • 交易哈希(Transaction Hash):交易的唯一标识符
  • 发送方地址(from):发起交易的账户
  • 接收方地址(to):交易的目标账户或合约
  • 交易金额(value):转账的ETH数量
  • Gas费用:交易执行所消耗的手续费
  • 区块信息:交易被打包进哪个区块
  • 交易状态:成功或失败
  • 输入数据(input):合约调用的附加数据

Web3简介与环境准备

Web3.js是以太坊官方推荐的JavaScript库,它封装了与以太坊节点交互的JSON-RPC接口,让开发者可以用简洁的代码读取链上数据。

安装Web3.js:

npm install web3

建立连接:

const Web3 = require('web3');
// 连接节点(可以使用 Infura、Alchemy 等节点服务)
const web3 = new Web3('https://mainnet.infura.io/v3/你的项目ID');

常用的交易记录查询方法

根据交易哈希查询单笔交易

这是最常用的查询方式,通过getTransaction方法获取交易详情:

async function getTransactionInfo(txHash) {
    const tx = await web3.eth.getTransaction(txHash);
    console.log('交易哈希:', tx.hash);
    console.log('发送方:', tx.from);
    console.log('接收方:', tx.to);
    console.log('金额(ETH):', web3.utils.fromWei(tx.value, 'ether'));
    console.log('区块高度:', tx.blockNumber);
    console.log('Gas价格:', web3.utils.fromWei(tx.gasPrice, 'gwei'), 'Gwei');
    return tx;
}
getTransactionInfo('0x交易哈希...');

查询交易回执(Transaction Receipt)

交易回执包含交易的执行结果,例如是否成功、消耗了多少Gas、触发了哪些日志事件:

async function getTransactionReceipt(txHash) {
    const receipt = await web3.eth.getTransactionReceipt(txHash);
    if (receipt === null) {
        console.log('交易尚未被确认');
        return;
    }
    console.log('交易状态:', receipt.status ? '成功' : '失败');
    console.log('区块号:', receipt.blockNumber);
    console.log('实际消耗Gas:', receipt.gasUsed);
    console.log('合约地址:', receipt.contractAddress); // 如果是合约创建交易
    console.log('日志事件数量:', receipt.logs.length);
    return receipt;
}

查询指定区块中的交易

如果你知道区块号或区块哈希,可以查询该区块内打包的所有交易:

async function getBlockTransactions(blockNumber) {
    const block = await web3.eth.getBlock(blockNumber, true); // true表示返回完整交易
    console.log('区块包含交易数量:', block.transactions.length);
    block.transactions.forEach((tx, index) => {
        console.log(`交易${index + 1}:`);
        console.log('  哈希:', tx.hash);
        console.log('  from:', tx.from);
        console.log('  to:', tx.to);
    });
    return block.transactions;
}

查询某个地址的交易记录

以太坊原生RPC并不直接支持按地址查询历史交易,常见解决方案有以下几种:

使用事件日志查询(针对合约交互)

async function getTokenTransfers(contractAddress, userAddress) {
    const contract = new web3.eth.Contract(ERC20_ABI, contractAddress);
    const events = await contract.getPastEvents('Transfer', {
        filter: { from: userAddress }, // 筛选条件
        fromBlock: 0,
        toBlock: 'latest'
    });
    events.forEach(event => {
        console.log('转账哈希:', event.transactionHash);
        console.log('发送方:', event.returnValues.from);
        console.log('接收方:', event.returnValues.to);
        console.log('金额:', event.returnValues.value);
    });
    return events;
}

扫描区块(适合小范围查询)

async function scanBlocksForAddress(address, startBlock, endBlock) {
    const results = [];
    for (let i = startBlock; i <= endBlock; i++) {
        const block = await web3.eth.getBlock(i, true);
        for (const tx of block.transactions) {
            if (tx.from.toLowerCase() === address.toLowerCase() || 
                (tx.to && tx.to.toLowerCase() === address.toLowerCase())) {
                results.push(tx);
            }
        }
    }
    return results;
}

借助第三方API

对于大规模查询,建议使用Etherscan API等第三方服务,效率更高:

const axios = require('axios');
async function getTxHistoryFromEtherscan(address) {
    const url = `https://api.etherscan.io/api?module=account&action=txlist&address=${address}&startblock=0&endblock=99999999&sort=asc&apikey=你的API密钥`;
    const response = await axios.get(url);
    return response.data.result;
}

实用技巧与注意事项

  1. 单位转换要小心:链上金额以Wei为单位(1 ETH = 10^18 Wei),务必使用web3.utils.fromWei()转换,避免显示错误。

  2. 处理未确认交易:getTransaction返回的blockNumber为null时,说明交易还在内存池中等待打包。

  3. 注意速率限制:免费节点服务通常有请求频率限制,批量查询时建议加入延迟或使用付费服务。

  4. 地址大小写问题:比较地址时建议统一转为小写,避免校验和格式导致的匹配失败。

  5. 使用WebSocket实时监听:如果需要监控新交易,可以建立WebSocket连接订阅事件:

const web3Ws = new Web3('wss://mainnet.infura.io/ws/v3/你的项目ID');
// 监听新打包的区块
web3Ws.eth.subscribe('newBlockHeaders', (error, result) => {
    if (!error) {
        console.log('新区块:', result.number);
    }
});

使用Web3查询以太坊交易记录并不复杂,核心在于理解不同的查询场景:按哈希查询用getTransaction,查执行结果用getTransactionReceipt,按地址查历史则可以结合事件日志、区块扫描或第三方API来实现,掌握这些方法后,你就能够构建属于自己的区块查询工具、交易监控机器人或数据分析平台。

随着Web3生态的不断发展,链上数据查询的需求只会越来越多,建议读者在实践中多查阅Web3.js官方文档,并结合实际项目加深理解,动手试试吧,链上世界的大门正为你敞开!

The End

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