Конвертер Bitcoin Cash-адресов: CashAddr ↔ Legacy

Вставьте BCH-адрес в любом написании и получите другое, а также тип адреса, сеть и лежащий в основе хеш. Сначала проверяется контрольная сумма, поэтому адрес с опечаткой будет отклонён, а не преобразован.

Принимает CashAddr с префиксом bitcoincash: или без него (q… или p…), тестовые адреса bchtest: и legacy-адреса Base58Check 1… / 3….

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

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

Конвертер Bitcoin Cash-адресов переводит один BCH-аккаунт между двумя его написаниями: формой CashAddr bitcoincash:q… / p…, определённой в спецификации CashAddr, и legacy-формой Base58Check 1… / 3…, унаследованной от Bitcoin. Обе содержат один и тот же 160-битный хеш публичного ключа (P2PKH) или скрипта (P2SH); различаются только кодировка и контрольная сумма.

Как работает кодирование CashAddr

  1. Байт версии. Один байт, старшие биты которого хранят тип (0 = P2PKH, 1 = P2SH), а младшие три бита — размер хеша (0 = 160 бит, 3 = 256 бит).
  2. Перегруппировка по 5 бит. Байт версии и хеш объединяются и заново нарезаются на 5-битные группы с дополнением нулевыми битами — ровно так же, как в bech32.
  3. Контрольная сумма. 40-битный BCH-код вычисляется над расширенным префиксом (младшие 5 бит каждого символа, затем ноль), полезной нагрузкой и восемью нулевыми группами с использованием констант генератора 0x98f2bc8e61, 0x79b76d99e2, 0xf33e5fb3c4, 0xae2eabe2a8 и 0x1e4f43e470. Восемь групп контрольной суммы добавляются в конец.
  4. Алфавит. Каждая группа записывается 32-символьным набором qpzry9x8gf2tvdw0s3jn54khce6mua7l, поэтому строка никогда не содержит 1, b, i или o.

Пример

Первый тестовый вектор спецификации — 1BpEi6DfDAUFd7GtittLSdBeYJvcoaVggu. Декодирование Base58Check даёт версию 0x00 (P2PKH) и hash160 76a04053bda0a88bda5177b86a15c3b29f559873. Добавив спереди байт версии CashAddr 0x00, перегруппировав в 5-битные значения и дописав контрольную сумму, получаем bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a. P2SH-вариант того же хеша начинается с 3 в legacy-форме (3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC) и с p в CashAddr (bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq). Вставьте любой из них выше, чтобы увидеть преобразование вживую.

Форматы кратко

ФормаПримерКонтрольная суммаОтличима от BTC?
Legacy P2PKH1…, 26–35 символов4 байта double-SHA-256нет
Legacy P2SH3…, 34 символа4 байта double-SHA-256нет
CashAddr P2PKHbitcoincash:q…, 42 символа после префикса40-битный polymodда
CashAddr P2SHbitcoincash:p…, 42 символа40-битный polymodда
CashAddr P2SH-32bitcoincash:p…, 62 символа40-битный polymodда, legacy-формы нет
Тестовая сетьbchtest:q… или m… / n… / 2…та жетолько по префиксу

Почему важно предупреждение о legacy-адресах

Биржи до сих пор показывают legacy-адреса для депозитов BCH, а пользователи по-прежнему вставляют Bitcoin-адреса в формы вывода BCH. Поскольку байты идентичны, BCH-транзакция на адрес 1… пользователя Bitcoin валидна и подтверждается в сети Bitcoin Cash, куда кошелёк получателя никогда не заглядывает. Монеты не уничтожаются, но забрать их через BCH-кошелёк может только владелец соответствующего приватного ключа, а большинство получателей не представляют, как это сделать. Преобразование каждого адреса в CashAddr перед отправкой снимает неоднозначность: кошелёк, принимающий bitcoincash:, — это BCH-кошелёк.

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

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

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

В чём разница между CashAddr и legacy-адресами Bitcoin Cash?

Оба кодируют один и тот же 20-байтовый хеш. Legacy-адреса используют Base58Check от Bitcoin (1… для P2PKH, 3… для P2SH) и выглядят точно так же, как Bitcoin-адреса. CashAddr, введённый в январе 2018 года, использует алфавит в стиле bech32 с префиксом bitcoincash: и 40-битной контрольной суммой, поэтому BCH-адрес больше нельзя спутать с BTC-адресом.

Legacy-адрес 1… — это Bitcoin или Bitcoin Cash?

Может быть и тем, и другим. Формат побайтово одинаков в обеих сетях — именно поэтому и был создан CashAddr. Если биржа выдала вам адрес 1… для BCH, преобразовать его в bitcoincash:q… безопасно; но не считайте, что адрес 1…, найденный где-то ещё, — это BCH-адрес. Конвертер показывает предупреждение для каждого legacy-ввода.

Почему конвертер отклоняет мой адрес?

Не сошлась либо контрольная сумма polymod CashAddr, либо контрольная сумма double-SHA-256 Base58Check — значит, как минимум один символ неверен или пропущен. Строки CashAddr в смешанном регистре тоже невалидны: спецификация требует либо только строчные, либо только заглавные буквы.

Можно ли опустить префикс bitcoincash:?

Да. Префикс входит в контрольную сумму, но большинство кошельков принимают голую строку q… или p… и считают её адресом mainnet. Если префикс не указан, инструмент пробует bitcoincash, bchtest и bchreg и сообщает, какой из них подошёл.

Что такое адреса P2SH-32?

После обновления CashTokens в 2023 году Bitcoin Cash поддерживает 32-байтовые хеши скриптов (биты типа 1, биты размера 3). Это валидные строки CashAddr, начинающиеся с p…, но более длинные, и у них нет legacy-формы Base58. Декодер показывает хеш и объясняет, почему legacy-форма не предлагается.

Работает ли это для Bitcoin SV или eCash?

Нет. eCash (XEC) использует тот же алгоритм CashAddr с префиксом ecash:, а Bitcoin SV сохраняет legacy-адреса. Если вы вставите CashAddr с другим префиксом, контрольная сумма будет проверена для этого префикса, но адрес будет помечен как нестандартный префикс Bitcoin Cash.