Ethereum 当self未广播事务时,如何使用以太坊客户端从状态恢复异常获取消息?

Ethereum 当self未广播事务时,如何使用以太坊客户端从状态恢复异常获取消息?,ethereum,web3js,go-ethereum,Ethereum,Web3js,Go Ethereum,假设以太坊智能合约具有外部函数“foo”,其逻辑具有状态还原异常require(1==0,'错误:您破坏了模拟!') 如果以太坊客户端A广播事务“txA”,这是对foo的函数调用,以太坊客户端B如何访问对应于“txA”的状态恢复消息 编辑:我所说的“如何”是指开发人员如何实际使以太坊客户端B能够访问这些数据。i、 e.您能告诉我从特定工具进行正确(较低级别..而不是webui)api/rpc调用的方向吗 显然,这是可能的,因为块探索器为失败的事务提供这样的消息。我通读了etherscan的一些源

假设以太坊智能合约具有外部函数“foo”,其逻辑具有状态还原异常
require(1==0,'错误:您破坏了模拟!')

如果以太坊客户端A广播事务“txA”,这是对foo的函数调用,以太坊客户端B如何访问对应于“txA”的状态恢复消息

编辑:我所说的“如何”是指开发人员如何实际使以太坊客户端B能够访问这些数据。i、 e.您能告诉我从特定工具进行正确(较低级别..而不是webui)api/rpc调用的方向吗

显然,这是可能的,因为块探索器为失败的事务提供这样的消息。我通读了etherscan的一些源代码,但是它们的javascript被最小化,不容易阅读

提前谢谢

看看这个:

失败的事务通常包括在链中

如果使用MetaMask,您有时会看到一个弹出窗口,上面写着“此事务将失败”,它发生在事务发送到链之前。这是MetaMask,它试图提供帮助并防止浪费气体。但您仍然可以强制发送事务,您将在链上发布失败/恢复的事务(如for)


所以为了回答最初的问题,如果TxA被发布在链上,那么客户端B将处理它并获得回复消息本身。如果TxA没有发布在chain上,那么就没有相关记录。

我也一直在挖掘go ethereum的来源,以及Metamask,以找到解决方案,但没有任何结果。(还没有?)。我还调查了可能对该网络中的节点进行rpc调用的列表,发现最接近的是“getTransactionLogs”。不幸的是,这些日志似乎只适用于已包含在块中的事务,而函数恢复时则不是这样。我感谢您在理论上肯定这是可以做到的。我最初的问题是`以太坊客户端B如何访问对应于“txA”的状态恢复消息?`因此,作为开发人员,使用来自各种工具(go ethereum等)的api(或rpc调用)调用,以太坊客户端B如何访问此数据?哪个api(或rpc)从哪个工具调用?我使用Nethereum,即.NET api,调用是web3.Eth.getContractTransactionErrorReson,它传递一个tx哈希并返回一个字符串。此处的示例用法:。我不知道webjs的等价物是什么。此外,我相信仍然存在一个约束,即客户端必须是geth(奇偶校验可能有一些问题)。