【问题标题】:Is there a way to debug transactions in RSK network, which could be the best way?有没有办法在 RSK 网络中调试交易,这可能是最好的方法?
【发布时间】:2021-02-10 20:02:39
【问题描述】:

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

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

【问题讨论】:

    标签: debugging smartcontracts geth rsk


    【解决方案1】:

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

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

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

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

    首先,您需要在配置文件中启用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多