微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法在 RSK 网络中调试交易,这可能是最好的方法?

如何解决有没有办法在 RSK 网络中调试交易,这可能是最好的方法?

我们正在运行一个 RSK 节点,一些智能合约交易显示内部错误,但与失败的 require 条件相关的消息没有出现在这错误消息中...

我们只能看到“内部错误”,无法看到具体发生了哪个错误

解决方法

如果您的合约在回复中发出消息,那么您可以使用 debug_traceTransaction 找到它们。

注意: debug RPC 模块在 RSK 配置中默认启用,但在公共节点上禁用。

此外,RSK 公共节点不公开此功能,您必须运行自己的节点才能这样做。

以下假设您有一个本地节点运行,RPC 在端口 4444 上公开。

首先,您需要在配置文件中启用 debug 模块:

modules = [
    ...
    {
        "name": "debug","version": "1.0","enabled": "true",},...
]

然后,您可以执行传递 交易 ID 作为参数,如本例所示:

curl \
    -X POST \
    -H "Content-Type:application/json" \
    --data '{"jsonrpc":"2.0","method":"debug_traceTransaction","params":["0xa9ae08f01437e32973649cc13f6db44e3ef370cbcd38a6ed69806bd6ea385e49"],"id":1}' \
    http://localhost:4444

您将收到以下回复 (为简洁起见被截断):

{
    ... 
    "result": "08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001e536166654d6174683a207375627472616374696f6e206f766572666c6f770000","error": "","reverted": true,...
}

最后把result从十六进制转成ASCII, 获取可读消息:

Ãy  SafeMath: subtraction overflow

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。