Конвертер Cosmos-адресов: смена bech32-префикса

Вставьте любой адрес экосистемы Cosmos и увидите тот же аккаунт, перекодированный для двадцати популярных сетей, плюс сырые 20 байт в hex. Также кодирует 0x-аккаунт в bech32 для Injective, Evmos и подобных сетей.

Любой bech32-адрес (cosmos, osmo, juno, celestia, dydx, inj, sei, kava, akash, stars, axelar, noble, neutron, stride и другие), адрес valoper / valcons или 0x-аккаунт в hex длиной 20 или 32 байта.

Проверка выполняется в вашем браузере на JavaScript. Адреса никогда не загружаются и не хранятся.

Что такое конвертер Cosmos-адресов?

Конвертер Cosmos-адресов декодирует bech32-адрес любой сети на Cosmos SDK в сырые байты аккаунта (20 байт для кошельков, 32 — для модульных и контрактных аккаунтов) и перекодирует эти байты с другим человекочитаемым префиксом. Все сети на Cosmos SDK используют одну и ту же кодировку, описанную в документации Cosmos SDK по аккаунтам: префикс, разделитель 1, данные в 32-символьном алфавите bech32 и шестисимвольная контрольная сумма. От сети к сети меняется только префикс, поэтому адреса cosmos1…, osmo1… и juno1… с одинаковыми байтами принадлежат одному ключу.

Как работает преобразование

  1. Проверяется контрольная сумма bech32 по всей строке, включая префикс. Инструмент использует тот же polymod, что и SegWit-адреса, с константой bech32 = 1 (Cosmos не использует bech32m).
  2. 5-битные группы данных преобразуются обратно в байты без дополнения; требуется 20 или 32 байта.
  3. Для каждого префикса из таблицы байты перегруппировываются в 5-битные значения и вычисляется новая контрольная сумма с этим префиксом.

Пример

Адрес cosmos15c20sqakl4uqnp4y93uwe8rlwlnda5futtjxsl декодируется в 20 байт 0xa614f803b6fd780986a42c78ec9c7f77e6ded13c. Перекодирование этих байтов с префиксом Osmosis даёт адрес osmo1… с теми же 32 символами данных и другой шестисимвольной контрольной суммой, потому что префикс входит во входные данные контрольной суммы. Форма 0x с контрольной суммой EIP-55 — это то, что EVM-совместимая сеть показала бы для тех же байтов.

Префиксы в таблице

ПрефиксСетьВывод ключаПрефиксСетьВывод ключа
cosmosCosmos Hubsecp256k1celestiaCelestiasecp256k1
osmoOsmosissecp256k1dydxdYdX Chainsecp256k1
junoJunosecp256k1nobleNoblesecp256k1
starsStargazesecp256k1neutronNeutronsecp256k1
akashAkashsecp256k1strideStridesecp256k1
kavaKavasecp256k1evmosEvmosethsecp256k1
secretSecret Networksecp256k1creCrescentsecp256k1
axelarAxelarsecp256k1regenRegensecp256k1
injInjectiveethsecp256k1terraTerrasecp256k1
seiSeisecp256k1 (EVM-адрес связан в сети)kujiraKujirasecp256k1

Адрес с префиксом вне этого списка всё равно декодируется и показывается в начале таблицы под своим собственным префиксом.

Когда преобразованный адрес ваш, а когда нет

Кошельки вроде Keplr и Leap выводят по одному ключу на сеть из вашей мнемоники. Для сетей, использующих стандартный coin type 118 и вывод secp256k1, адрес, выведенный в каждой сети, в точности совпадает с перекодированным — именно поэтому работают IBC-переводы «на свой же адрес в другой сети». Сети с coin type 60 и ключами в стиле Ethereum (Injective, Evmos) выводят другие байты, а Sei связывает отдельный EVM-адрес с аккаунтом sei1 через ассоциацию в сети, а не через общие байты. Прежде чем отправлять средства на преобразованный адрес, подтвердите его в кошельке для этой сети.

Типичные применения

Для сырых bech32-строк с произвольными префиксами используйте bech32-кодер / декодер; для проверки формы EIP-55 — конвертер контрольной суммы Ethereum.

Часто задаваемые вопросы

Адреса cosmos1… и osmo1… — это один и тот же аккаунт?

Они содержат одни и те же 20 байт, и для сетей со стандартным выводом secp256k1 одна мнемоника порождает оба. Но каждая сеть — отдельный реестр: токены на Osmosis лежат под адресом osmo1, токены на Cosmos Hub — под cosmos1. Перекодирование ничего не перемещает; оно лишь показывает, как ваш адрес выглядит в другой сети.

Почему мой адрес Injective или Evmos не совпадает с преобразованной строкой?

Injective, Evmos и другие сети на ethsecp256k1 выводят байты аккаунта так же, как Ethereum (keccak-256 от несжатого публичного ключа), тогда как большинство сетей Cosmos используют sha256, а затем ripemd160 от сжатого ключа. Поэтому одна и та же мнемоника даёт разные байты в этих двух семействах. Конвертер перекодирует любые вставленные байты, так что адрес inj1, преобразованный в cosmos1, — валидная строка, но не тот адрес, который ваш кошелёк показывает для Cosmos Hub.

Для чего нужна форма 0x?

В Injective и Evmos форма 0x — это Ethereum-адрес аккаунта, который используют MetaMask и EVM-инструменты. В других сетях это просто сырые байты, полезные для отладки и поиска модульных аккаунтов. Инструмент показывает её с контрольной суммой EIP-55.

Что такое адреса valoper и valcons?

cosmosvaloper1… — операторский адрес валидатора, те же 20 байт, что и у кошелька оператора, но под другим префиксом; cosmosvalcons1… — хеш консенсусного ключа валидатора. Ни один из них не может получать токены. Конвертер распознаёт оба и для valoper показывает соответствующий адрес аккаунта.

Почему мой адрес длиной 59 символов?

Это 32-байтовый адрес: модульные аккаунты, межсетевые аккаунты (ICA) и адреса контрактов CosmWasm выводятся через sha256 и длиннее адресов кошельков. Инструмент декодирует их и перекодирует под другими префиксами, но такой аккаунт существует только в той сети, которая его создала.

Проверяет ли инструмент контрольную сумму bech32?

Да. Cosmos-адреса используют исходную контрольную сумму bech32 из BIP-173 (не bech32m), и инструмент проверяет её перед преобразованием. Ошибка контрольной суммы означает опечатку; контрольная сумма bech32m означает, что строка — это Taproot-адрес или подобный, а не Cosmos-адрес.