Как сопоставить идентификаторы аккаунтов 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.