Глоссарий / Адреса и ключи
Bech32
- Что такое Bech32?
- Bech32 представляет собой кодировку адресов, лежащую в основе строк bc1q: формат base32 в нижнем регистре, контрольная сумма которого из шести символов обнаруживает любую ошибку, затрагивающую до четырех символов.
Определено в BIP-173.
BIP-173 ввел bech32 в 2017 году, чтобы заменить Base58Check для выходов SegWit. Алфавит содержит 32 символа и намеренно исключает "1", "b", "i" и "o", чтобы похожие глифы нельзя было перепутать по ошибке, и ни одна строка bech32 не превышает 90 символов. Когда кошелек отвергает адрес в тот момент, когда вы закончили его вставлять, именно контрольная сумма bech32 обнаружила повреждение.
Как это работает
Строка bech32 состоит из трех частей в фиксированном порядке: префикс, читаемый человеком, разделитель "1" и раздел данных, который заканчивается шестью символами контрольной суммы. В основной сети используется префикс "bc", в тестовой сети и signet используется "tb", а в regtest используется "bcrt", поэтому начальные буквы определяют сеть еще до того, как кошелек что-либо декодирует. Разделитель также является причиной, по которой "1" отсутствует в алфавите. Тогда он может встречаться только один раз, на границе, и парсер находит точку разделения, сканируя справа.
Контрольная сумма представляет собой код BCH, вычисляемый по всей строке, включая префикс. BIP-173 гарантирует обнаружение любой ошибки, затрагивающей не более четырех символов, и оценивает вероятность пропуска более крупной ошибки ниже одного на миллиард. Base58Check не предлагает ничего сравнимого: его четыре завершающих байта представляют собой усеченный хеш двойного SHA-256, который сообщает кошельку, что что-то не так, не уточняя, что именно.
Регистр не имеет значения. Адрес bech32 действителен полностью в нижнем регистре или полностью в верхнем, но никогда в смешанном, и кошельки отображают форму в нижнем регистре. BIP-173 предусматривает верхний регистр внутри QR-кодов, потому что буквенно-цифровые символы в верхнем регистре открывают буквенно-цифровой режим QR, который упаковывает каждый символ в 5,5 бита вместо 8, необходимых байтовому режиму, и создает более грубый узор, на который камера смартфона наводится быстрее.
Где это встречается
Каждый адрес bc1q является bech32. Адрес из 42 символов кодирует программу свидетеля из 20 байт и платит на один ключ; адрес из 62 символов кодирует программу из 32 байт и платит на скрипт. Оба относятся к версии свидетеля 0, и версия 0 является единственной версией, которую теперь разрешено кодировать с помощью bech32.
Кодировка также встречается вне адресов. Счета Lightning по BOLT11 заимствуют ее с префиксами, такими как "lnbc", и они сознательно игнорируют предельное значение в 90 символов, потому что счет несет хеш платежа, сумму, описание и подсказки маршрутизации, а не одну короткую программу.
Где это причиняет неудобства, так это в форме вывода на бирже. Валидатор, написанный до 2017 года, распознает только строки Base58 и отвечает на вполне хороший адрес bc1q сообщением "invalid address". Это ограничение платформы, а не вашего кошелька, и решение состоит в том, чтобы вывести средства на тип адреса, который платформа принимает, производный от той же сид-фразы, вместо поиска другого программного обеспечения.
Bech32 vs Bech32m
Bech32 и bech32m различаются одной константой и ничем больше. Оба используют один и тот же алфавит, одну и ту же структуру и одни и те же шесть символов контрольной суммы. Bech32m меняет значение, объединяемое в контрольную сумму, с 1 на 0x2bc830a3, и разделение определяется версией свидетеля: выходы версии 0 сохраняют bech32, версии с 1 по 16 используют bech32m. Программное обеспечение, которое считает эти два взаимозаменяемыми, примет строки, которые должно отвергнуть, что представляет собой именно тот сбой, для предотвращения которого был написан BIP-350.
Bech32 vs Base58Check
Bech32 и Base58Check представляют собой конкурирующие кодировки, а не конкурирующие типы адресов. Base58Check оборачивает байт версии и хеш из 20 байт четырехбайтовой контрольной суммой и создает строки, чувствительные к регистру, начинающиеся с 1 и 3. Bech32 кодирует версию свидетеля вместе с программой свидетеля и создает строки, нечувствительные к регистру, начинающиеся с bc1. Ни одна из кодировок не решает, к чему привязаны биткоины. Они решают, насколько надежно человек может скопировать строку, насколько большим должен быть QR-код и насколько громко программное обеспечение жалуется, когда пропадает символ.