Форматы криптоадресов: Bech32, Base58 и 0x
Содержание
Если вы когда-нибудь копировали криптоадрес и замечали, что адреса Bitcoin начинаются с bc1, адреса Ethereum --- с 0x, а адреса Solana выглядят как совершенно другой язык, вы не одиноки. Эти различия не косметические. Каждый формат адреса кодирует конкретную информацию о блокчейне, типе поддерживаемых транзакций и механизмах обнаружения ошибок, защищающих ваши средства.
Понимание форматов адресов --- практически полезное знание. Одна ошибка в криптоадресе может навсегда отправить средства в пустоту. Это руководство разбирает основные схемы кодирования, объясняет, почему каждый блокчейн выбрал свой формат, и показывает, как контрольные суммы предотвращают дорогостоящие ошибки.
Почему адреса выглядят по-разному¶
Криптовалютный адрес --- это человекочитаемое представление публичного ключа или хеша, полученного из него. Сырой криптографический вывод --- двоичные данные, которые непрактичны для чтения, копирования или проверки человеком. Разные блокчейны выбрали разные схемы кодирования для преобразования двоичных данных в текстовые строки.
Эти решения отражают компромиссы между:
- Безопасность набора символов -- исключение похожих символов (0/O, l/1/I)
- Обнаружение ошибок -- встроенные контрольные суммы для перехвата опечаток до потери средств
- Компактность -- более короткие адреса удобнее в обращении
- Регистрозависимость -- форматы только в нижнем регистре исключают путаницу при копировании
Три доминирующих семейства кодирования в криптовалюте --- Base58Check, Bech32 и шестнадцатеричный формат с префиксом 0x. Каждое возникло из конкретных целей проектирования в определённые моменты истории блокчейна.
Base58Check: Bitcoin Legacy¶
Base58Check --- одна из первых схем кодирования адресов, представленная Сатоси Накамото вместе с Bitcoin. Она использует 58 буквенно-цифровых символов, намеренно исключая символы, вызывающие визуальную путаницу:
- Без нуля (
0) -- слишком похож на букву O - Без заглавной O (
O) -- слишком похожа на ноль - Без строчной L (
l) -- слишком похожа на заглавную I и цифру 1 - Без заглавной I (
I) -- слишком похожа на строчную l и цифру 1
Адрес Base58Check Bitcoin выглядит так: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
Формат включает байт версии в начале и 4-байтную контрольную сумму в конце. Байт версии указывает тип адреса: 1 для стандартных адресов Pay-to-Public-Key-Hash (P2PKH), 3 для адресов Pay-to-Script-Hash (P2SH). Контрольная сумма вычисляется двойным применением SHA-256 к полезной нагрузке и добавлением первых 4 байтов результата.
Эта контрольная сумма означает: если вы случайно неправильно наберёте один символ, адрес почти наверняка не пройдёт валидацию, а не отправит средства на неверный, но действительный адрес. Вероятность того, что случайная опечатка породит валидную контрольную сумму, составляет примерно 1 к 4,3 миллиарда.
Несколько других блокчейнов переняли Base58Check, так как он был проверен и знаком:
Вы можете использовать Bitcoin Address Validator от SafeSeed, чтобы проверить валидность контрольной суммы Base58Check-адреса перед отправкой транзакции.
Bech32: SegWit bc1-адреса¶
В 2017 году Bitcoin представил Segregated Witness (SegWit), для которого потребовался новый формат адреса. Вместо расширения Base58Check разработчики создали Bech32, определённый в BIP173. Bech32-адреса сразу узнаваемы, поскольку начинаются с bc1 для основной сети Bitcoin.
Bech32-адрес выглядит так: bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4
Bech32 внёс ряд целенаправленных улучшений по сравнению с Base58Check:
Только нижний регистр¶
Bech32 использует исключительно строчные буквы и цифры. Это устраняет проблемы регистрозависимости при устной передаче адресов, печати шрифтами с разным регистром или кодировании в QR-коды (которые компактнее с единым регистром).
Превосходное обнаружение ошибок¶
Base58Check обнаруживает ошибки, но не указывает, где они находятся. Bech32 использует код БЧХ (Боуза-Чоудхури-Хоквингема), который может обнаружить любую односимвольную ошибку и большинство многосимвольных подстановок. Он может определить позицию до двух ошибок, что позволяет потенциально исправить их в некоторых интерфейсах кошельков.
Меньшие QR-коды¶
Поскольку Bech32 использует ограниченный набор символов (32 символа), QR-коды с этими адресами заметно меньше и проще сканируются.
Bech32m¶
Обновлённая версия Bech32m (BIP350) устранила незначительную слабость оригинального формата Bech32, связанную с последним символом. Современные адреса SegWit v1 (Taproot, начинающиеся с bc1p) используют Bech32m. Если вы генерируете Bitcoin-адрес с помощью Bitcoin Address Generator от SafeSeed, по умолчанию используется современный формат Bech32/Bech32m.
Litecoin также принял Bech32 для своих SegWit-адресов с префиксом ltc1.
0x: адреса EVM-сетей¶
Ethereum выбрал совершенно другой подход. Адреса Ethereum --- это 20-байтовые значения, отображаемые как 40 шестнадцатеричных символов с префиксом 0x:
0x742d35Cc6634C0532925a3b844Bc9e7595f2bD08
Hex-формат прост: каждый байт соответствует двум hex-символам (0-9, a-f). Это делает адрес прямым представлением базовых данных без специальной кодировки.
Контрольная сумма EIP-55 через регистр¶
Оригинальный формат адресов Ethereum не имел встроенной контрольной суммы. Если вы набирали символ неправильно, адрес оставался технически валидным, а средства терялись. EIP-55 решил эту проблему, используя регистр hex-букв как контрольную сумму. Адрес хешируется Keccak-256, и каждая буква пишется заглавной, если соответствующий полубайт хеша превышает 8.
Вот почему адреса Ethereum содержат кажущуюся случайной смену регистра. Чередование прописных и строчных букв не произвольно --- это контрольная сумма. Если вы измените один символ, паттерн регистра не совпадёт, и правильно реализованный кошелёк отклонит его.
Общий для всех EVM-сетей¶
Один из самых значимых аспектов формата 0x --- он идентичен для всех EVM-совместимых сетей:
- Ethereum --
0x... - BNB Chain --
0x... - Polygon --
0x... - Arbitrum --
0x... - Optimism --
0x... - Base --
0x... - Avalanche C-Chain --
0x...
Один и тот же приватный ключ порождает один и тот же адрес во всех этих сетях. Это и удобство, и источник путаницы: отправка токенов на правильный адрес в неправильной сети --- распространённая ошибка. Подробнее о безопасности EVM-адресов читайте в нашем руководстве Безопасность EVM-адресов.
Вы можете проверить любой EVM-адрес, включая контрольную сумму EIP-55, с помощью Ethereum Address Validator от SafeSeed.
Base58 в Solana, XRP и TRON¶
Несколько современных блокчейнов используют кодировку Base58, но без суффикса Check, то есть реализуют собственные механизмы контрольных сумм или валидации.
Solana¶
Адреса Solana --- это Base58-кодированные публичные ключи Ed25519, обычно длиной от 32 до 44 символов:
7EcDhSYGxXyscszYEp35KHN8vvw3svAuLKTzXwCFLtV
Solana использует тот же алфавит Base58, что и Bitcoin (исключая визуально путающие символы), но не добавляет байт версии или контрольную сумму SHA-256. Вместо этого адрес --- просто сырой публичный ключ в кодировке Base58. Валидация основана на проверке, что ключ является валидной точкой на кривой Ed25519. Solana Address Validator от SafeSeed выполняет эту проверку.
XRP¶
XRP использует кодировку Base58Check с собственным префиксом версии, создавая адреса, начинающиеся с r:
rN7n3473SaZBCG4dFL83w7p1W9cgZw6p1N
TRON¶
Адреса TRON используют Base58Check с байтом версии 0x41, создавая адреса, начинающиеся с T:
TJCnKsPa7y5okkXvQAidZBzqx3QyQ6sxMW
Интересно, что TRON использует ту же эллиптическую кривую secp256k1, что Ethereum и Bitcoin. Адрес TRON получается из того же ключевого материала, что и адрес Ethereum, но кодируется иначе.
Контрольные суммы: ваша страховочная сетка¶
Контрольная сумма --- небольшой фрагмент данных, вычисленный из полезной нагрузки адреса, позволяющий программам обнаруживать ошибки. Считайте её математическим отпечатком: если изменится хоть один символ, отпечаток не совпадёт.
Сравнение механизмов контрольных сумм основных форматов:
| Формат | Метод контрольной суммы | Возможности обнаружения |
|---|---|---|
| Base58Check | Двойной SHA-256 (4 байта) | Обнаруживает практически все ошибки |
| Bech32 | Код БЧХ (6 символов) | Обнаруживает все односимвольные ошибки; локализует до 2 ошибок |
| EIP-55 (0x) | Регистр Keccak-256 | ~99,98% обнаружения односимвольных изменений |
| Solana Base58 | Валидация кривой Ed25519 | Отклоняет невалидные точки кривой |
Контрольная сумма защищает не от всех типов ошибок. Если вредоносное ПО заменяет весь буфер обмена другим валидным адресом (атака перехвата буфера), контрольная сумма пройдёт, потому что адрес злоумышленника сам по себе валиден. Контрольные суммы защищают от случайных опечаток и ошибок передачи, но не от умышленного мошенничества.
Более широкий взгляд на угрозы помимо опечаток смотрите в статье Распространённые криптомошенничества с seed-фразами.
Валидация адресов перед отправкой¶
Каждая криптовалютная транзакция должна начинаться с валидации адреса. Это больше, чем беглый взгляд на первые несколько символов. Полноценная валидация включает:
1. Проверка формата¶
Убедитесь, что адрес соответствует ожидаемому формату для используемого блокчейна. Адрес bc1 следует использовать только в Bitcoin. Адрес 0x может быть валиден в нескольких EVM-сетях, поэтому проверьте, какую сеть вы имеете в виду.
2. Проверка контрольной суммы¶
Пропустите адрес через валидатор, проверяющий встроенную контрольную сумму. SafeSeed предоставляет бесплатные валидаторы для основных сетей:
Вся валидация выполняется полностью в вашем браузере клиентским кодом. Никакие данные адресов не передаются на сервер.
3. Визуальное подтверждение¶
Даже после автоматической валидации визуально сверьте первые и последние несколько символов адреса. Малварь перехвата буфера обмена иногда заменяет адреса контролируемыми злоумышленником, совпадающими по первым символам.
4. Небольшая тестовая транзакция¶
Для крупных переводов сначала отправьте небольшую сумму и подтвердите получение, прежде чем отправлять полный баланс. Небольшая комиссия за транзакцию --- малая цена за уверенность.
5. Использование адресной книги¶
Большинство кошельков позволяют сохранять проверенные адреса. Подтвердив адрес один раз, сохраните его, чтобы не вводить повторно (и не создавать новые возможности для ошибок).
Подробное пошаговое руководство по валидации смотрите в статье Как проверить криптоадрес.
Выбор правильного формата¶
Если вы генерируете новые адреса, современные форматы почти всегда предпочтительнее:
- Bitcoin: Используйте Bech32 (
bc1) адреса для меньших комиссий и лучшего обнаружения ошибок. Устаревшие адреса Base58Check по-прежнему работают, но обходятся дороже из-за большего размера транзакций. - Ethereum и EVM-сети: Всегда используйте адреса с контрольной суммой EIP-55. Большинство современных инструментов генерируют их по умолчанию.
- Solana: Base58 --- единственный вариант, и он работает хорошо.
При генерации адресов на SafeSeed инструменты по умолчанию используют самый актуальный и безопасный формат для каждого блокчейна. Будь то Bitcoin Seed Phrase Generator или Ethereum Address Generator --- сгенерированные адреса используют рекомендуемую кодировку для соответствующей сети.
Понимание этих форматов снимает завесу тайны с криптовалютных адресов. Это не случайные строки --- это тщательно спроектированные представления криптографических ключей со встроенными механизмами безопасности, предназначенными для защиты ваших средств от простых человеческих ошибок.