轻松获取以太坊交易回退原因
使用 eth-revert-reason NPM 包轻松获取以太坊交易失败的原因
失败的以太坊交易有时会包含交易回退的原因。检索这些原因比想象中更困难,尤其是考虑到这些消息的实用性。Geth 和 Parity、Infura 和 Alchemy,甚至 ethers.js 和 web3.js 之间的不一致性增加了这种复杂性。
Authereum 新开源的 eth-revert-reason NPM 包为您处理所有工作,并准确给出您想要的内容——交易失败的原因。
立即安装,将其作为 NPM 包或简单的 CLI 命令使用!以下代码展示了现在这是多么简单:
NPM
|
|
CLI
|
|
底层原理
检索回退原因的常规场景是一个简单的 eth_call,并对结果字符串进行一些解析和 UTF-8 转换。像 ethers.js 这样的库有助于输入格式化,但即使没有库,也相对简单直接。
非理想场景则更为复杂。
变化的错误消息
以太坊生态系统中一个鲜为人知的事实是,交易错误消息可能因调用区块的上下文而异。以这个 Authereum 交易为例:
您可以看到它因回退原因 BA: Insufficient gas (ETH) for refund
而失败。但是,如果您对此交易哈希运行 eth-revert-reason,您将得到错误 “LKMTA: Auth key is invalid”。这是因为您收到的消息可能会根据您调用区块的上下文而变化。如果您运行 eth-revert-reason 并传入该交易哈希,您将得到预期的错误!
|
|
运行归档节点
每个人都喜欢的话题——备受喜爱的归档节点——在这个讨论中也扮演着角色。
非归档节点允许您从特定区块的上下文中调用交易。但是,如果该区块是在 128 个区块之前挖出的,那么非归档节点将抛出错误,声称节点无法访问旧区块。
归档节点允许您从超过 128 个区块的旧区块进行调用,并且可以得到更准确的回退消息,如上例所示。
弄清楚您正在使用的底层节点可能比您希望的要困难,它涉及进行 RPC 调用并根据结果推断节点类型。希望这在不久的将来会有所改变。
Kovan 和 Parity 追踪
另一个令人烦恼的问题是 Kovan 网络与其他网络之间的区别,因为 Kovan 只能通过 Parity 客户端访问。
为了在 Kovan 上检索回退消息,您的节点必须启用 Parity 追踪,这不是 Infura(目前)的功能,也不太常见。
在这种情况下,还必须进行稍微修改的字符串解析。
结论
以太坊交易回退原因曾经难以检索,但现在不再如此。Alchemy 通过提供 Parity 追踪和归档节点以及他们的包来处理这个问题,但像 Infura 这样的其他提供商要么不提供此功能,要么增加了额外成本。
请随时为项目做出贡献或提出任何问题。
我们希望这有助于推进和壮大整个以太坊生态系统!
如果您想分享您的想法或了解更多信息,请加入我们的 Telegram 并告诉我们您的想法。在 Twitter 上关注我们,获取 Authereum 团队的所有最新新闻和更新。