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

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

Base58Check

Другие названия: Base58.

Что такое Base58Check?
Base58Check представляет собой исходную текстовую кодировку биткоина: она превращает двоичные данные в строку из 58 легко переписываемых символов и добавляет четырехбайтовую контрольную сумму, чтобы выявлять опечатки.

Алфавит исключает четыре символа, которые люди путают при копировании вручную: ноль, заглавную O, заглавную I и строчную l. Четырехбайтовая контрольная сумма, взятая из двойного SHA-256 полезной нагрузки, означает, что кошелек отвергнет адрес с опечаткой, а не отправит его в пустоту, при этом вероятность проскочить составляет примерно один шанс из 4,29 млрд. Любой адрес, начинающийся с 1 или 3, является Base58Check.

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

В каждую строку Base58Check входят три части. Байт версии в начале говорит, какие это данные, полезная нагрузка в середине несет сами байты, а четыре байта контрольной суммы в конце являются первыми четырьмя байтами SHA-256, примененного дважды к версии и полезной нагрузке вместе. Затем результат записывается в системе счисления по основанию 58, а не 16, что заметно сокращает его и убирает неоднозначные символы.

Именно байт версии дает привычные первые символы. Версия 0x00 обозначает адрес pay-to-public-key-hash и дает в начале 1; версия 0x05 обозначает адрес pay-to-script-hash и дает в начале 3; версия 0x80 обозначает приватный ключ в формате Wallet Import Format, что дает 5, K или L. Расширенные ключи используют вместо этого четырехбайтовую версию 0x0488B21E, поэтому каждый xpub начинается с этих четырех букв.

Ведущие нулевые байты обрабатываются особым образом, иначе преобразование системы счисления отбросило бы их. Каждый байт 0x00 в начале полезной нагрузки записывается как дополнительный символ "1", поэтому некоторые устаревшие адреса оказываются короче или длиннее соседних, хотя несут одинаковый объем данных.

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

Base58Check встречается повсюду в первое десятилетие биткоина и нигде в его новейших форматах. Устаревшие адреса, адреса pay-to-script-hash, приватные ключи WIF, а также расширенные ключи xprv и xpub, которые вы экспортируете из кошелька, используют ее. Все, что начинается с bc1, ее не использует.

Две особенности объясняют и популярность, и отказ от нее. Безопасность при переписывании была целью: алфавит был создан так, чтобы адрес, прочитанный вслух, скопированный с экрана или выбитый на металлической пластине, выдерживал обращение человеком, а контрольная сумма превращает оставшиеся ошибки в отказ, а не в потерю. Но кодировка чувствительна к регистру, из-за чего QR-код вынужден использовать байтовый режим вместо более компактного буквенно-цифрового, и она может сообщить только о том, что что-то не так, но никогда о том, что именно и где.

Base58Check vs Bech32

Base58Check обнаруживает ошибки, а bech32 их исправляет. Bech32, описанный в BIP-173 и принятый для нативных адресов SegWit в 2017 году, использует алфавит из 32 символов без заглавных букв вообще, поэтому вся строка помещается в буквенно-цифровой режим QR и считывается с меньшего изображения. Его контрольная сумма BCH гарантирует обнаружение до четырех неверных символов и может указать, какие позиции подозрительны, вместо простого отказа.

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

Не путать с

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

Почему адреса биткоина никогда не содержат ноль или заглавную O?

Потому что алфавит Base58 намеренно исключает 0, O, I и l, символы, которые люди читают неправильно при копировании строки вручную. Все, что вы видите и что содержит один из них, не является действительным устаревшим адресом биткоина.

Будет ли адрес Base58Check по-прежнему работать теперь, когда существует bech32?

Да. Устаревшие адреса и адреса pay-to-script-hash остаются полностью действительными, и все кошельки их поддерживают. Новые типы адресов определяются вместо этого в bech32 или bech32m, и тратить с них дешевле, но ничто не вынуждает отказываться от старых адресов.

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

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

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