如何查询以太坊交易确认状态,从基础到进阶指南
在以太坊生态中,每一笔交易都需要经过“确认”才能被视为最终完成,无论是发送ETH、 interact with DeFi协议,还是NFT转账,查询交易确认状态都是用户必备的核心技能,本文将从基础概念出发,详细介绍多种查询方法,并解答常见问题,助你轻松掌握以太坊交易确认的查询技巧。
先搞懂:什么是“以太坊交易确认”
在以太坊网络中,交易并非由单一中心化机构处理,而是由全球数千个节点共同维护的“区块链”记录,一笔交易的“确认”,本质上是网络中的矿工(或验证者,以太坊合并后由PoS机制下的验证者负责)将这笔交易打包进一个“区块”,并后续不断有新的区块在它之上生成。
- 1次确认:交易被打包进最新区块,此时交易处于“pending”(待处理)或“confirmed”(已确认)的过渡状态,但理论上仍可能因链重组被回滚(概率较低)。
- 12次及以上确认:以太坊网络通常认为,一笔交易经历12个以上区块确认后,被回滚的概率极低(接近于0),可视为“最终确认”。
确认速度受网络拥堵程度、Gas费高低、交易大小等因素影响:网络繁忙时,可能需要几分钟到几小时;网络空闲时,几十秒即可完成多次确认。
查询以太坊交易确认的3种主流方法
方法1:通过区块浏览器(最直观,适合所有用户)
区块浏览器是以太坊网络的“公开账本”,任何人都可以通过它查询交易详情、地址余额、区块信息等,以下是常用浏览器及操作步骤:
常用区块浏览器推荐:
- Etherscan(最主流,支持以太坊主网及测试网):https://etherscan.io
- Ethplorer(适合代币转账查询):https://ethplorer.io
- OKLink(中文界面友好):https://www.oklink.com/eth
操作步骤(以Etherscan为例):
-
获取交易哈希(Tx Hash)
这是查询交易的“唯一身份证”,通常在以下场景可以找到:- 钱包(如MetaMask、Trust Wallet)的“交易历史”中,每笔交易都会显示一串以“0x”开头的长字符串。
- 交易所(如币安、欧易)提币时,会生成交易哈希,可在“提币记录”中查看。
-
输入交易哈希搜索
打开Etherscan首页,在顶部的搜索框中粘贴交易哈希,点击“Search”(搜索)。 -
查看确认状态
进入交易详情页后,重点看以下信息:- Status(状态):显示“✓ Success”(成功)表示已确认并执行;“Pending”(待处理)表示未被打包;“Failed”(失败)表示执行失败(如Gas费不足、合约错误等)。
- Confirmations(确认数):直接显示当前确认次数,12 Confirmations”,即已完成12次确认。
- Block(区块高度):交易被打包进的区块号,点击可查看该区块详情及后续区块。
-
辅助信息
- Timestamp(时间戳):交易被打包的具体时间,可判断是否延迟。
- Gas Used(Gas消耗):实际消耗的Gas量,与“Gas Limit”对比可知是否因Gas不足失败。

方法2:通过钱包应用(实时同步,适合日常操作)
大多数加密货币钱包(尤其是去中心化钱包)会内置交易状态查询功能,与区块链浏览器数据同步,适合快速查看本地发起的交易。
主流钱包操作示例:
MetaMask(浏览器插件/手机端)
- 打开MetaMask,点击“Activity”(活动)标签页。
- 找到对应交易,右侧会显示“Pending”“Confirmed”或“Failed”状态,以及具体确认数(如“12 Confirmations”)。
- 点击交易详情,可查看交易哈希、Gas费、接收方地址等信息,并可一键跳转至Etherscan查看详情。
Trust Wallet(手机端)
- 进入“交易”页面,找到目标交易,状态会直接标注为“已确认”“待处理”或“失败”。
- 点击交易,可查看确认数及区块浏览器链接。
imToken(手机端)
- 在“资产”页面切换到“ETH”,点击“交易记录”。
- 交易状态显示为“成功”“处理中”或“失败”,处理中状态下会显示当前确认数。
优势:无需手动复制交易哈希,钱包自动同步本地交易记录,适合新手快速查询自己发起的交易。
方法3:通过API接口(适合开发者/高频需求)
对于需要批量查询交易状态或开发应用的用户,可通过以太坊节点服务商提供的API接口获取数据,无需手动访问区块浏览器。
常用API服务商:
- Infura(需注册,免费额度有限):https://infura.io
- Alchemy(功能强大,适合开发者):https://www.alchemy.com
- Moralis(支持Web3开发,集成简单):https://moralis.io
示例代码(以Infura的eth_getTransactionReceipt为例):
使用Infura的API查询交易收据(包含确认状态),以JavaScript为例:
const axios = require('axios');
const INFURA_URL = 'https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'; // 替换为你的Infura项目ID
const TX_HASH = '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef'; // 替换为交易哈希
async function getTransactionConfirmations() {
try {
// 1. 获取交易收据(包含区块信息)
const receiptResponse = await axios.post(INFURA_URL, {
jsonrpc: '2.0',
method: 'eth_getTransactionReceipt',
params: [TX_HASH],
id: 1
});
const receipt = receiptResponse.data.result;
if (!receipt) {
console.log('交易未找到(可能尚未被打包)');
return;
}
// 2. 获取当前最新区块号
const blockResponse = await axios.post(INFURA_URL, {
jsonrpc: '2.0',
method: 'eth_blockNumber',
params: [],
id: 1
});
const latestBlockNumber = parseInt(blockResponse.data.result, 16);
const txBlockNumber = parseInt(receipt.blockNumber, 16);
// 3. 计算确认数
const confirmations = latestBlockNumber - txBlockNumber + 1;
console.log(`交易确认数: ${confirmations}`);
console.log(`交易状态: ${receipt.status === '0x1' ? '成功' : '失败'}`);
} catch (error) {
console.error('查询失败:', error.message);
}
}
getTransactionConfirmations();
说明:
eth_getTransactionReceipt接口返回的交易收据中,status字段为0x1表示成功,0x0表示失败;- 确认数=当前最新区块号 - 交易所在区块号 + 1(需将十六进制区块号转为十进制计算)。
优势:自动化、批量处理,适合需要实时监控交易状态的场景(如交易所、DeFi协议)。
常见问题与解决方法
交易一直是“Pending”,怎么办?
原因:
- Gas费设置过低:矿工优先处理Gas费高的交易,低Gas费交易可能长时间被打包不上。
- 网络拥堵:以太坊网络交易量过大,矿工打包池中积压大量交易。
- 交易数据过大:例如转账数据过长,导致单笔交易消耗Gas过高,超出区块限制。
解决方法:
- 提高Gas费:在钱包中发起“加速交易”(如MetaMask的“Speed Up”功能),或重新发起一笔相同接收方、更高Gas费的交易(会覆盖原交易)。
- 使用“Gas估算”工具:Etherscan的“Gas Tracker”或钱包的“Gas估算”功能,可参考当前网络建议的Gas范围。
- 等待网络空闲:若Gas费合理,可耐心等待(通常拥堵几小时后会缓解)。
交易显示“失败”,但ETH已扣除,能找回吗?
原因:
- Gas费不足:设置的Gas Limit低于实际消耗,导致交易执行到一半被终止,但已消耗的Gas费无法