Как проверить 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.