Как проверить preimage предложения управления в Substrate

Предложение может выглядеть верно в интерфейсе и при этом ссылаться на другие байты, если хешировался весь extrinsic или текстовая hex-строка. Проверку preimage начинают с кодированного вызова runtime.

Вычислите хеш и длину байтов локально

Подключите polkadot-js к нужному runtime и подготовьте вызов preparedCall для предложения. Для стандартной цепочки с соответствующей хеш-функцией реестра возьмите байты внутреннего вызова до обёртки в preimage.notePreimage. В примере обёртка создаётся локально.

const bytes = preparedCall.method.toU8a()
const hash = api.registry.hash(bytes)
console.log({ hash: hash.toHex(), length: bytes.length })
const note = api.tx.preimage.notePreimage(bytes)
console.log(note.method.toHex())

Сверьте обе части ссылки

У вызова из 90 байтов будет 180 печатных шестнадцатеричных цифр без префикса 0x. Если в ссылке указана длина 180, она ошибочна даже при верном хеше исходных 90 байтов. Декодируйте вызов с метаданными целевого runtime и сверьте адреса и сумму.

При обновлении runtime между подготовкой и исполнением отдельно проверьте декодирование на момент исполнения. Совпадение хеша устанавливает тождество байтов, а смысл вызова задают метаданные runtime.

Источники