在RSK网络中,有一种调试交易的方法吗?哪种方法是最佳的?

7
我们正在运行一个RSK节点,一些智能合约交易显示内部错误,但与失败的require条件相关的消息不会出现在这些错误消息中...我们只能看到"内部错误",无法看到发生了哪个具体错误。
1个回答

6
如果您的合约在回退中发出了信息,那么您可以使用debug_traceTransaction方法找到它们。
注意:在RSK配置中,默认启用了debug RPC模块,但在公共节点上会禁用此模块。
此外,RSK公共节点不公开此功能,您必须运行自己的节点才能这样做。
以下假定您已经在本地节点上运行了RPC,并将其暴露在端口4444上。
首先,您需要在配置文件中启用debug模块。
modules = [
    ...
    {
        "name": "debug",
        "version": "1.0",
        "enabled": "true",
    },
    ...
]

然后,您可以执行RPC方法,并将交易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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接