Есть ли лучший способ отладки транзакций в сети RSK?

Мы запускаем узел RSK, некоторые транзакции смарт-контрактов показывают внутренние ошибки, но сообщение, связанное с невыполненным условием require, не появляется в этих сообщениях об ошибках ...

Мы видим только внутреннюю ошибку и не можем увидеть, какая именно ошибка произошла.


person Julio Moros    schedule 10.02.2021    source источник


Ответы (1)


Если ваш контракт отправляет сообщения в реверсиях, вы можете узнать их, используя debug_traceTransaction.

ПРИМЕЧАНИЕ. Модуль debug RPC включен по умолчанию в конфигурации RSK, но отключен на общедоступных узлах.

Более того, общедоступные узлы RSK не предоставляют эту функцию, и для этого вы должны запустить свой собственный узел.

Ниже предполагается, что у вас есть локальный узел, работающий с RPC, доступным через порт 4444.

Во-первых, вам нужно включить модуль debug в вашем файле конфигурации:

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

Затем вы можете выполнить метод 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
person 7alip    schedule 11.02.2021