ethereum - 当自我没有广播交易时,如何使用以太坊客户端从状态恢复异常中获取消息?
问题描述
假设以太坊智能合约具有外部函数“foo”,其逻辑具有状态恢复异常require(1 == 0, 'error: you broke the simulation!');
。
如果 ethereum-client A 广播交易“txA”,这是对 foo 的函数调用,ethereum-client B 如何访问与“txA”对应的状态恢复消息?
编辑:“怎么能”,我的意思是开发人员实际上如何使以太坊客户端 B 能够访问这些数据。即,您能否指出我从特定工具调用正确(低级..不是 webui)api/rpc 的方向?
显然这是可能的,因为区块浏览器会为失败的交易提供此类消息。我阅读了一些 etherscan 的源代码,但它们的 javascript 被最小化并且不容易阅读。
提前致谢!
解决方案
失败的交易通常包含在链中。
如果您使用例如 MetaMask,您有时会看到一个弹出窗口,上面写着“此交易将失败”,该弹出窗口在交易发送到链之前发生。这是 MetaMask 试图提供帮助并防止您浪费气体。但是无论如何您都可以强制发送交易,并且您将在链上发布失败/恢复的交易(就像这个Solidity 源的交易)。
所以回答最初的问题,如果 TxA 发布在链上,那么客户端 B 将处理它并自己获取还原消息。如果 TxA 没有发布在链上,那么就没有它的记录。
推荐阅读
- ubuntu - SSH:权限被拒绝(公钥)
- .net - 无法使用 Mono 在 CentOS 7 上构建 Calamari
- python - 是否有 Python 函数来创建点模式?
- c++ - 使用泛型方法时“没有匹配的函数调用”
- python - RuntimeWarning: power 中遇到溢出
- mongodb - 使用 MongoDB 管理事务文档
- ios - 使用 Alamofire multipart 显示上传进度通知
- python - 为什么python中的df.at行显示有问题?
- php - 如何在 htaccess 中删除博客?city=
- python - 当 UTF 是多字节且 latin1 是单字节时,为什么会出现错误?