Alchemy 查交易回执是 null:区分错误网络、未入块和执行失败
链小知 · 进阶 · 核验 · 依官方文档整理
核对 JSON-RPC 链身份、交易对象与 receipt,避免把 HTTP 200 或哈希存在当执行成功。
开始前准备
- 准备 Ethereum 交易哈希及已保存的 eth_chainId、eth_getTransactionByHash、eth_getTransactionReceipt 响应。
- RPC endpoint 包含 API key,分享前脱敏;查询计入服务用量,额度和收费按当前套餐,其他链功能需单独核对。
1. 先验证 endpoint 网络
读 eth_chainId 响应的十六进制链 ID。Ethereum Mainnet 为 0x1;endpoint 的链身份必须与交易来源匹配。官方示例中的数据只用来说明字段,不能当目标交易真实证据。
检查结果:链 ID 与目标交易网络一致,key 未暴露。
2. 校验交易哈希与 JSON-RPC envelope
输入应为 0x 加 64 位十六进制交易哈希。检查响应的 id、result 和 error;HTTP 200 仅是传输结果,JSON-RPC error 仍需排查参数、权限或节点问题。
检查结果:使用完整哈希,error 未被当作成功空结果。
3. 比较交易对象与回执是否存在
eth_getTransactionByHash 回答节点是否知道该交易,receipt 回答入块执行结果。交易对象若未入块,blockHash/blockNumber 可能为空;receipt 为 null 不能证明执行失败,先检查网络和是否尚未入块。
检查结果:“找到交易”和“取得回执”有各自状态。
4. 回执非空再读 status 与 logs
核对 receipt.transactionHash、blockHash、blockNumber、status 和 logs。status 0x1/0x0 区分执行成功/失败,但成功回执不等于期望代币一定到账;仍需根据目标合约 ABI 检查日志和接收地址。
检查结果:执行状态与具体业务结果没有合并。
5. 分开 gas、查询成本和确认范围
gasUsed × effectiveGasPrice 可核对执行网络成本,十六进制需正确换算;RPC Compute Units 是服务查询计量,不能当链上 gas。保留区块与取得时间,交易回执不单独证明跨链另一端已完成或永久不会重组。
检查结果:记录网络成本、服务用量及最终性未验证项。
怎样确认完成
- 对链、哈希、交易对象与回执给出一致的诊断。
- 业务到账与最终性保留各自核查状态。
常见错误与边界
- HTTP 200 视作链上成功。
- receipt null 一律判成失败或丢失。
- 将 Alchemy CU 当 gas 费用。