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

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

我们只能看到“内部错误”,而无法查看发生了哪个特定错误。

回答

如果您的合约在回复中发出消息,那么您可以使用debug_traceTransaction.

注:debugRPC模块默认情况下,在RSK配置启用,但是这是公共节点上被禁用。

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

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

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

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

然后,您可以执行将事务 ID 作为参数传递的 RPC 方法,如下例所示:

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


以上是有没有办法在RSK网络中调试交易,这可能是最好的方法?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>