首页 > 解决方案 > 当自我没有广播交易时,如何使用以太坊客户端从状态恢复异常中获取消息?

问题描述

假设以太坊智能合约具有外部函数“foo”,其逻辑具有状态恢复异常require(1 == 0, 'error: you broke the simulation!');

如果 ethereum-client A 广播交易“txA”,这是对 foo 的函数调用,ethereum-client B 如何访问与“txA”对应的状态恢复消息?

编辑:“怎么能”,我的意思是开发人员实际上如何使以太坊客户端 B 能够访问这些数据。即,您能否指出我从特定工具调用正确(低级..不是 webui)api/rpc 的方向?

显然这是可能的,因为区块浏览器会为失败的交易提供此类消息。我阅读了一些 etherscan 的源代码,但它们的 javascript 被最小化并且不容易阅读。

提前致谢!

标签: ethereumweb3jsgo-ethereum

解决方案


看到这个:https ://ethereum.stackexchange.com/questions/39817/are-failed-transactions-included-in-the-blockchain

失败的交易通常包含在链中。

如果您使用例如 MetaMask,您有时会看到一个弹出窗口,上面写着“此交易将失败”,该弹出窗口在交易发送到链之前发生。这是 MetaMask 试图提供帮助并防止您浪费气体。但是无论如何您都可以强制发送交易,并且您将在链上发布失败/恢复的交易(就像这个Solidity 源的交易)。

所以回答最初的问题,如果 TxA 发布在链上,那么客户端 B 将处理它并自己获取还原消息。如果 TxA 没有发布在链上,那么就没有它的记录。


推荐阅读