Дебаг API & Модуль Трассировки

Moonbeam in Russian
3 min readMay 3, 2021

--

Вступление:

Оба, Geth Дебаг API и OpenEthereum Модуль Трассировки обеспечивают нестандартные RPC методы для более глубокого понимания обработки транзакций.

С релизом Moonbase Alpha v7 сделан еще один шаг в достижении основной цели Moonbeam, а именно предоставлении беспрепятственного взаимодействия разработчиков с Ethereum, оба: debug_traceTransactionи trace_filterRPC метода стали доступны.

Поддержка данных RPC методов является важнейшим этапом, ввиду того, что многие проекты, такие как The Graph и Blockscout используют их для индексации блокчейн данных. Оба запроса являются довольно тяжелыми, со стороны ноды. Поэтому требуется запустить этот RPC со стороны ноды при помощи команды --ethapi=debug флаг для debug_traceTransactionи/или --ethapi=trace флаг для trace_filter.

На данный момент вы можете запустить 2 типа нод:

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.

--

--

Moonbeam in Russian
Moonbeam in Russian

Written by Moonbeam in Russian

Moonbeam — это совместимая с Ethereum платформа смарт-контрактов на Polkadot

No responses yet