Что такое конвертер Cosmos-адресов?
Конвертер Cosmos-адресов декодирует bech32-адрес любой сети на Cosmos SDK в сырые байты аккаунта (20 байт для кошельков, 32 — для модульных и контрактных аккаунтов) и перекодирует эти байты с другим человекочитаемым префиксом. Все сети на Cosmos SDK используют одну и ту же кодировку, описанную в документации Cosmos SDK по аккаунтам: префикс, разделитель 1, данные в 32-символьном алфавите bech32 и шестисимвольная контрольная сумма. От сети к сети меняется только префикс, поэтому адреса cosmos1…, osmo1… и juno1… с одинаковыми байтами принадлежат одному ключу.
Как работает преобразование
- Проверяется контрольная сумма bech32 по всей строке, включая префикс. Инструмент использует тот же polymod, что и SegWit-адреса, с константой bech32 = 1 (Cosmos не использует bech32m).
- 5-битные группы данных преобразуются обратно в байты без дополнения; требуется 20 или 32 байта.
- Для каждого префикса из таблицы байты перегруппировываются в 5-битные значения и вычисляется новая контрольная сумма с этим префиксом.
Пример
Адрес cosmos15c20sqakl4uqnp4y93uwe8rlwlnda5futtjxsl декодируется в 20 байт 0xa614f803b6fd780986a42c78ec9c7f77e6ded13c. Перекодирование этих байтов с префиксом Osmosis даёт адрес osmo1… с теми же 32 символами данных и другой шестисимвольной контрольной суммой, потому что префикс входит во входные данные контрольной суммы. Форма 0x с контрольной суммой EIP-55 — это то, что EVM-совместимая сеть показала бы для тех же байтов.
Префиксы в таблице
| Префикс | Сеть | Вывод ключа | Префикс | Сеть | Вывод ключа |
|---|---|---|---|---|---|
| cosmos | Cosmos Hub | secp256k1 | celestia | Celestia | secp256k1 |
| osmo | Osmosis | secp256k1 | dydx | dYdX Chain | secp256k1 |
| juno | Juno | secp256k1 | noble | Noble | secp256k1 |
| stars | Stargaze | secp256k1 | neutron | Neutron | secp256k1 |
| akash | Akash | secp256k1 | stride | Stride | secp256k1 |
| kava | Kava | secp256k1 | evmos | Evmos | ethsecp256k1 |
| secret | Secret Network | secp256k1 | cre | Crescent | secp256k1 |
| axelar | Axelar | secp256k1 | regen | Regen | secp256k1 |
| inj | Injective | ethsecp256k1 | terra | Terra | secp256k1 |
| sei | Sei | secp256k1 (EVM-адрес связан в сети) | kujira | Kujira | secp256k1 |
Адрес с префиксом вне этого списка всё равно декодируется и показывается в начале таблицы под своим собственным префиксом.
Когда преобразованный адрес ваш, а когда нет
Кошельки вроде Keplr и Leap выводят по одному ключу на сеть из вашей мнемоники. Для сетей, использующих стандартный coin type 118 и вывод secp256k1, адрес, выведенный в каждой сети, в точности совпадает с перекодированным — именно поэтому работают IBC-переводы «на свой же адрес в другой сети». Сети с coin type 60 и ключами в стиле Ethereum (Injective, Evmos) выводят другие байты, а Sei связывает отдельный EVM-адрес с аккаунтом sei1 через ассоциацию в сети, а не через общие байты. Прежде чем отправлять средства на преобразованный адрес, подтвердите его в кошельке для этой сети.
Типичные применения
- Поиск своего депозитного адреса Osmosis или Celestia по адресу Cosmos Hub, когда кошелёк показывает только одну сеть.
- Перевод 0x-адреса MetaMask в форму
inj1…илиevmos1…, которую ожидает форма вывода на бирже. - Проверка, что адрес
valoperне вставлен туда, где должен быть адрес аккаунта.
Для сырых bech32-строк с произвольными префиксами используйте bech32-кодер / декодер; для проверки формы EIP-55 — конвертер контрольной суммы Ethereum.