以太坊交易回执怎么看? 图 1
以太坊交易回执怎么看? · 图 1

钱包显示“交易成功”,你至少还要回答两个问题:EVM执行是否成功?合约是否产生了你期待的业务结果?eth_getTransactionReceipt返回的回执能证明交易被哪个区块收录、status是成功还是失败、实际消耗多少Gas以及产生哪些事件;但status为1只说明执行没有整体revert,不保证你买到正确代币、收到预期数量或调用了正确合约。

交易对象和交易回执的分工

eth_getTransactionByHash更像提交单:发送人、目标地址、value、input、gas参数和nonce描述用户发出了什么。eth_getTransactionReceipt更像执行凭证:交易在哪个区块、排序位置、实际Gas、执行状态、合约创建地址和事件日志描述链上执行留下了什么。

待处理交易通常还没有回执。ethereum.org的JSON-RPC文档说明,找不到或仍pending时,eth_getTransactionReceipt会返回null。因此“回执为null”不能直接判定失败;要同时查询交易对象、当前nonce和内存池状态。交易哈希基础查询见交易哈希怎么查

把回执拆成四组证据

证据组关键字段主要回答
收录位置blockHash、blockNumber、transactionIndex交易被哪个区块收录
执行结果status、contractAddressEVM是否revert、是否创建合约
费用gasUsed、effectiveGasPrice、cumulativeGasUsed本交易实际Gas与单位价格
事件logs、logsBloom合约公开记录了哪些事件

from和to也会出现在回执中。若to为null且交易创建了合约,contractAddress会给出新合约地址;普通调用的contractAddress通常为null。不要把它与“本次调用经过的所有内部合约”混为一谈。

status 0和1分别意味着什么

status等于0x0,表示交易已被区块收录,但EVM执行失败或revert。状态变化会回滚,矿工或验证者仍处理过交易,所以Gas不会退回全部。失败扣Gas的机制可参考以太坊交易失败为什么还扣Gas

status等于0x1,表示顶层执行成功。不过合约可能把某个分支失败作为返回值处理,也可能成功转出了与你预期不同的代币。钓鱼合约同样可以成功执行。确认业务结果时,应继续核对目标合约、input解码、Token转账、事件参数和余额变化。

实际手续费怎么从回执计算

本交易执行层费用可按gasUsed × effectiveGasPrice计算。gasUsed是这笔交易实际消耗的Gas单位;effectiveGasPrice是每单位Gas实际支付的价格,在EIP-1559交易中反映基础费与优先费的实际合计。

不要把cumulativeGasUsed当成本交易Gas。它表示区块内从第一笔交易累计到当前交易的Gas总量,用于回执结构与验证。浏览器若还展示L2数据费、Blob费或平台服务费,应分别看其来源,不能全塞进这个乘法公式。

例如gasUsed为120,000,effectiveGasPrice为20 gwei,执行层手续费约为0.0024 ETH。这个示例不代表当前网络价格,也未包含任何应用交换损失。

logs如何证明合约发生了什么

日志由合约事件产生,包含发出日志的合约地址、topics和data。常见Transfer、Approval、Swap等事件需要用对应ABI解码。topics[0]通常是事件签名哈希,其余indexed参数进入topics,非indexed参数进入data。

事件很有用,但不是完整状态。恶意合约可以发出名字相似的事件;同名事件由不同合约发出也不是同一资产。核对必须从日志的address开始,再检查合约源码与ABI。连接合约前的地址核验见连接智能合约前要检查什么

“内部交易”为何不在普通回执里

合约调用其他合约、发送ETH或创建子合约,会形成内部调用路径。它们不是用户独立签名提交的普通交易,标准回执也不会把完整调用树列成transactions数组。区块浏览器的“Internal Transactions”通常来自客户端trace或索引器重放。

Geth提供debug_traceTransaction等调试接口,可返回执行步骤、消耗Gas、失败状态和返回值;不同trace模式和客户端字段可能不同。普通用户排查时,先用可信浏览器对照多个视图;开发者再在可信节点上运行trace,不要把未知交易发送给会记录敏感业务的第三方调试服务。

一套从哈希到结论的排查顺序

  1. 查询交易对象,核对chain、from、to、nonce、value和input。
  2. 回执为null时,判断是pending、节点未同步还是哈希错误。
  3. 回执存在后记录blockNumber和确认状态。
  4. 查看status,再用gasUsed与effectiveGasPrice计算执行费。
  5. 从logs的合约地址和事件参数核对代币、数量与接收人。
  6. 结果仍不清楚时,再看余额差、状态读取和trace。

钱包连接权限与链上授权是两层状态。即使交易成功,后续是否仍有Token allowance也要独立检查,可参考连接钱包和撤销授权有何区别

风险提示

本文仅用于以太坊数据读取与交易排查,不构成资产安全保证。回执成功不代表合约可信、价格合理或授权安全;区块浏览器解码也可能不完整。涉及异常大额转账、未知授权或疑似攻击时,应停止继续签名,保存交易证据并通过可信节点、官方合约地址和多种数据源交叉核验。