Перейти к содержимому
buybitcoinsmart

Глоссарий / Адреса и ключи

Bech32m

Что такое Bech32m?
Bech32m исправляет недостаток bech32, меняя одну константу в контрольной сумме, и каждый адрес Taproot, начинающийся с bc1p, использует его вместо исходной кодировки.

Определено в BIP-350.

Недостаток узкий, но реальный. Всякий раз, когда строка bech32 оканчивается символом "p", вставка или удаление любого числа символов "q" непосредственно перед этой последней буквой оставляет контрольную сумму действительной, так что искаженный адрес может пройти проверку. BIP-350 закрывает эту дыру, добавляя 0x2bc830a3 в контрольную сумму там, где bech32 добавлял значение 1.

Как это работает

Bech32m представляет собой bech32 с одним измененным числом. Кодировщик разворачивает префикс, читаемый человеком, дописывает данные, прогоняет через результат тот же полином BCH и отличается только на последнем шаге, где результат складывается с 0x2bc830a3, а не с 1. Все, что видит пользователь, остается прежним: тот же алфавит из 32 символов, тот же разделитель "1", те же шесть символов контрольной суммы, тот же предел в 90 символов.

Замена константы не является побочным эффектом. Она и есть механизм. Поскольку две схемы не совпадают, строка bech32m не проходит проверку контрольной суммы bech32, а строка bech32 не проходит проверку bech32m, поэтому старое программное обеспечение отвергает новые адреса сразу, а не понимает их наполовину. BIP-350 описывает это как намеренное нарушение совместимости, выбранное вместо тихого исправления bech32 на месте.

Граница проходит по версии witness. Версия witness 0, то есть адреса bc1q для одиночных ключей и скриптов, сохраняет bech32. Версии witness с 1 по 16 используют bech32m. Сегодня определена только версия 1, как Taproot, поэтому на практике bech32m означает bc1p. Правило было написано так, чтобы охватить версии, которых еще не существует, и поэтому корректный кошелек проверяет номер версии, а не префикс адреса.

Где это встречается

Адрес для получения bc1p закодирован в bech32m, имеет длину 62 символа и кодирует ключ размером 32 байта. В тестовых сетях те же выходы выглядят как tb1p. Выходы Taproot стали доступны для расходования в блоке 709 632, 14 ноября 2021 года, и именно с этого момента адреса bech32m начали нести реальную стоимость в основной сети.

Bitcoin Core реализовал BIP-350 в версии 22.0, и с этого выпуска любой удаленный вызов процедуры, принимающий адрес, требует bech32m для версии witness 1 и выше. Версия 23.0 пошла дальше: вновь созданные кошельки на дескрипторах автоматически получают дескриптор tr(), поэтому они выдают адреса bc1p без запроса.

Практические затруднения проявляются на экране вывода средств. Некоторые платформы по-прежнему отказываются от адресов bc1p, потому что их валидатор адресов понимает bech32, но не новую константу. В этом случае с вашим кошельком все в порядке, и адрес bc1q из той же сид-фразы приведет биткоины в тот же кошелек.

Bech32m vs P2TR

Bech32m является кодировкой, а P2TR является типом выхода, и сегодня они совпадают только из-за случайного совпадения по времени. Bech32m говорит, как записать текстом любую witness-программу версии 1 или выше. P2TR говорит, что означает программа версии 1: подправленный публичный ключ размером 32 байта, который можно потратить подписью Schnorr или раскрыв скрипт. Каждый адрес bech32m в обращении кодирует выход P2TR, но это перестанет быть верным в тот момент, когда версия witness 2 будет назначена чему-либо, поскольку такие адреса тоже были бы bech32m и не были бы Taproot.

Не путать с

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

Нужно ли мне что-то делать с bech32m?

Нет. Кодировку обрабатывает ваш кошелек. Это становится заметным только в сервисе, который отклоняет адреса bc1p, и в этом случае следует вывести средства на адрес bc1q из того же кошелька.

Почему создали второй формат вместо исправления bech32?

Потому что тихое исправление оставило бы старое и новое программное обеспечение в разногласии о том, какие адреса действительны. Замена константы контрольной суммы делает две кодировки взаимно недействительными, поэтому устаревшие кошельки отвергают адрес bech32m сразу, а не читают его неправильно.

Читайте далее

Связанные термины

Еще в разделе «Адреса и ключи»

Читать эту страницу на английском