Как сопоставить идентификаторы аккаунтов Substrate в разных форматах SS58

Две адресные строки с разными префиксами SS58 могут представлять один 32-байтовый аккаунт. При сравнении только строк один контакт рискует появиться в справочнике дважды.

Сначала декодируйте адреса

В примере inputAddress — входной адрес SS58. Его байты повторно кодируются с общим префиксом 42. Сравнивайте декодированные идентификаторы побайтно. Проверку контрольной суммы оставьте декодеру, ошибочные строки обрабатывайте отдельно.

import { decodeAddress, encodeAddress } from '@polkadot/util-crypto'
import { u8aEq } from '@polkadot/util'

const id = decodeAddress(inputAddress)
const reformatted = encodeAddress(id, 42)
console.log(reformatted, u8aEq(id, decodeAddress(reformatted)))

Сохраните контекст сети при учёте средств

Смена префикса отображения не перемещает средства и не запрашивает аккаунт в другой сети. У двух цепочек могут быть независимые балансы одного идентификатора. Для учёта храните идентификатор цепочки рядом с байтами аккаунта, а для показа получателя выбирайте формат нужной сети.

Такой способ предполагает ожидаемое представление account ID. До применения к сетям с адресами другой длины проверьте тип аккаунта в runtime.

Источники