Как расшифровать историческую ошибку модуля 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 на двух разных парачейнах может относиться к разным модулям. Для общей ошибки исполнения достаточно варианта перечисления без поиска по модулю.
Если исторические данные удалены, сохраните ошибку без расшифровки и получите подходящие метаданные перед выводом диагноза. Подставленное наугад имя может направить поиск не в ту подсистему.