Как расшифровать историческую ошибку модуля Substrate по метаданным

При неудаче extrinsic модуль и ошибка могут быть представлены числами. Их значение задают метаданные runtime и могут изменить при обновлении.

Получите типизированную ошибку исполнения

Найдите system.ExtrinsicFailed в событиях нужного extrinsic. Первый элемент data содержит DispatchError. Возьмите данные, декодированные с runtime того исполнения, и сохраните номер extrinsic и хеш блока рядом с объектом error из примера.

if (error.isModule) {
  const decoded = error.registry.findMetaError(error.asModule)
  console.log(decoded.section, decoded.name, decoded.docs.join(" "))
} else {
  console.log(error.toString())
}

Сохраните исходные данные при отсутствии метаданных

Для ошибки модуля запишите расшифрованные section, name и docs вместе с исходными байтами. Одинаковый номер pallet на двух разных парачейнах может относиться к разным модулям. Для общей ошибки исполнения достаточно варианта перечисления без поиска по модулю.

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

Источники