Как выявить устаревшие данные офлайн-подписи после обновления runtime Substrate

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

Сравните снимок подписанта с текущим runtime

Через подключённый polkadot-js сохраните версии на финализированном состоянии. Сверьте genesis hash, specVersion, transactionVersion и используемые расширения с сохранённым офлайн-запросом. Номер релиза процесса RPC — отдельный идентификатор.

const hash = await api.rpc.chain.getFinalizedHead()
const version = await api.rpc.state.getRuntimeVersion(hash)
console.log({
  genesis: api.genesisHash.toHex(),
  spec: version.specVersion.toString(),
  transaction: version.transactionVersion.toString(),
  at: hash.toHex()
})

Пересоберите запрос при расхождении

Если запрос собран при specVersion 120, а runtime сообщает 121, в сети с CheckSpecVersion меняются неявные данные для проверки подписи. Редактирование отображаемого поля после подписания это не исправит. Обновите метаданные, пересоберите внутренний вызов, проверьте аргументы и получите новую подпись.

Совпадение версий исключает только эту причину. В журнале инцидента отдельно учитывайте истечение срока, nonce и ошибки самой подписи.

Источники