Что такое конвертер Bitcoin Cash-адресов?
Конвертер Bitcoin Cash-адресов переводит один BCH-аккаунт между двумя его написаниями: формой CashAddr bitcoincash:q… / p…, определённой в спецификации CashAddr, и legacy-формой Base58Check 1… / 3…, унаследованной от Bitcoin. Обе содержат один и тот же 160-битный хеш публичного ключа (P2PKH) или скрипта (P2SH); различаются только кодировка и контрольная сумма.
Как работает кодирование CashAddr
- Байт версии. Один байт, старшие биты которого хранят тип (0 = P2PKH, 1 = P2SH), а младшие три бита — размер хеша (0 = 160 бит, 3 = 256 бит).
- Перегруппировка по 5 бит. Байт версии и хеш объединяются и заново нарезаются на 5-битные группы с дополнением нулевыми битами — ровно так же, как в bech32.
- Контрольная сумма. 40-битный BCH-код вычисляется над расширенным префиксом (младшие 5 бит каждого символа, затем ноль), полезной нагрузкой и восемью нулевыми группами с использованием констант генератора 0x98f2bc8e61, 0x79b76d99e2, 0xf33e5fb3c4, 0xae2eabe2a8 и 0x1e4f43e470. Восемь групп контрольной суммы добавляются в конец.
- Алфавит. Каждая группа записывается 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 P2PKH | 1…, 26–35 символов | 4 байта double-SHA-256 | нет |
| Legacy P2SH | 3…, 34 символа | 4 байта double-SHA-256 | нет |
| CashAddr P2PKH | bitcoincash:q…, 42 символа после префикса | 40-битный polymod | да |
| CashAddr P2SH | bitcoincash:p…, 42 символа | 40-битный polymod | да |
| CashAddr P2SH-32 | bitcoincash:p…, 62 символа | 40-битный polymod | да, legacy-формы нет |
| Тестовая сеть | bchtest:q… или m… / n… / 2… | та же | только по префиксу |
Почему важно предупреждение о legacy-адресах
Биржи до сих пор показывают legacy-адреса для депозитов BCH, а пользователи по-прежнему вставляют Bitcoin-адреса в формы вывода BCH. Поскольку байты идентичны, BCH-транзакция на адрес 1… пользователя Bitcoin валидна и подтверждается в сети Bitcoin Cash, куда кошелёк получателя никогда не заглядывает. Монеты не уничтожаются, но забрать их через BCH-кошелёк может только владелец соответствующего приватного ключа, а большинство получателей не представляют, как это сделать. Преобразование каждого адреса в CashAddr перед отправкой снимает неоднозначность: кошелёк, принимающий bitcoincash:, — это BCH-кошелёк.
Типичные применения
- Перевод legacy-адреса для депозита со старой биржи в форму CashAddr, которую ожидают современные кошельки и генератор платёжных QR.
- Проверка, относится ли строка
q…, вставленная без префикса, к mainnet или кbchtest. - Извлечение hash160, чтобы собрать или проверить скрипт либо сравнить два написания одного адреса.
Для самого Bitcoin используйте валидатор Bitcoin-адресов; для произвольных bech32-строк — bech32-кодер / декодер.