Дебаг API & Модуль Трассировки
Вступление:
Оба, Geth Дебаг API и OpenEthereum Модуль Трассировки обеспечивают нестандартные RPC методы для более глубокого понимания обработки транзакций.
С релизом Moonbase Alpha v7 сделан еще один шаг в достижении основной цели Moonbeam, а именно предоставлении беспрепятственного взаимодействия разработчиков с Ethereum, оба: debug_traceTransaction
и trace_filter
RPC метода стали доступны.
Поддержка данных RPC методов является важнейшим этапом, ввиду того, что многие проекты, такие как The Graph и Blockscout используют их для индексации блокчейн данных. Оба запроса являются довольно тяжелыми, со стороны ноды. Поэтому требуется запустить этот RPC со стороны ноды при помощи команды — --ethapi=debug
флаг для debug_traceTransaction
и/или — --ethapi=trace
флаг для trace_filter
.
На данный момент вы можете запустить 2 типа нод:
- Moonbeam development node — запустите собственную копию Moonbeam в своей приватной среде. Для этого следуйте этому руководству. Обязательно проверьте расширенные настройки секции флагов (Flag Section).
- Moonbase Alpha node — запустите полную версию TestNet ноды и получите доступ к вашим приватным конечным точкам. Для этого следуйте этому руководству. Обязательно проверьте расширенные настройки секции флагов (Flag Section).
Geth Дебаг API
RPC имплементация debug_traceTransaction
следует данному Geth гайдлайну по дебагу API.
Для запуска RPC метода вам понадобится hash транзакции, в качестве дополнительных параметров вы можете указать следующее:
- disableStorage — один ввод, boolean (по умолчанию: false). Установка значения True отключает захват хранилища
- disableMemory — один ввод, boolean (по умолчанию: false). Установка значения True отключает захват памяти
- disableStack — один ввод, boolean (по умолчанию: false). Установка значения True отключает захват стека
На данный момент, трассировка транзакций на базе JavaScript не поддерживается.
Модуль Трассировки
RPC имплементация trace_filter
следует данному OpenEthereum гайдлайну Модуля Трассировки.
Для RPC метода необходим ввод одного из следующих необязательных параметров:
- fromBlock — один ввод: номер блока (
hex
),earliest
который является генезис блоком, илиlatest
(по умолчанию) последний-лучший доступный блок. Начальный блок трассировки - toBlock — один ввод: номер блока (
hex
),earliest
который является генезис блоком, илиlatest
последний-лучший доступный блок. Конечный блок трассировки - fromAddress — один ввод: список адресов. Фильтрация транзакций происходит только по заданным списком адресам. Если данный список не указан/поле не заполнено, то фильтрация по нему не выполняется
- toAddress — один ввод: список адресов. Фильтрация транзакций происходит только по заданным списком адресам. Если данный список не указан/поле не заполнено, то фильтрация по нему не выполняется
- after — один ввод: офсет (
uint
), по умолчанию0
. Номер офсет трассировки (или начальный номер) - count — один ввод: количество трассировок (
uint
). Количество отображаемых трассировок в пакете
Попробуем на Moonbase Alpha
Как говорилось ранее, для использования обеих функций Вам необходимо запустить debug
и trace
флаги на Вашей ноде. В данном примере мы используем полную ноду Moonbase Alpha с RPC HTTP конечной точкой в http://127.0.0.1:9933
. Если у Вас запущена нода Вы должны увидеть аналогичный лог в терминале:
Например, для вызова debug_traceTransaction
Вы можете сделать следующий JSON RPC запрос в терминале (в данном примере для хэша 0x04978f83e778d715eb074352091b2159c0689b5ae2da2554e8fe8e609ab463bf
):
curl http://localhost:9933 -H "Content-Type:application/json;charset=utf-8" -d \
'{
"jsonrpc":"2.0",
"id":1,
"method":"debug_traceTransaction",
"params": ["0x04978f83e778d715eb074352091b2159c0689b5ae2da2554e8fe8e609ab463bf"]
}'
На что нода ответит пошаговым воспроизведением информации о транзакции (ответ немного обрезан т.к. он достаточно длинный):
Для вызова trace_filter
Вы можете сделать следующий JSON RPC запрос в терминале (в данном примере стоит фильтрация от блока 20000 до 25000, для транзакций где получателем является 0x4E0078423a39EfBC1F8B5104540aC2650a756577
, запрос начнется с нулевого офсета и предоставит первые 20 трассировок):
curl http://localhost:9933 -H "Content-Type:application/json;charset=utf-8" -d \
'{
"jsonrpc":"2.0",
"id":1,
"method":"trace_filter", "params":[{"fromBlock":"0x4E20","toBlock":"0x5014","toAddress":["0x4E0078423a39EfBC1F8B5104540aC2650a756577"],"after":0,"count":20}]
}'
На что нода ответит информацией трассировки, соответствующей заданному фильтру (ответ немного обрезан т.к. он достаточно длинный).
Ваше мнение очень важно для нас
Если у Вас есть отзывы касательно использования дебага API, модуля трассировки или чего-либо связанного с Moonbeam, пишите нам в официальную Discord группу.
Подготовлено при участии: YR, Lyn.