Адрес биткойна выглядит как системный код: бессмысленная последовательность, которую приложение выдает, а вы копируете, боясь ошибиться. На самом деле это противоположно. Адрес — это результат короткого, публичного и проверяемого рецепта, и каждый его шаг существует по причине, которую можно объяснить в одном предложении.
Отправной точкой является открытый ключ из предыдущего урока. Он полностью проходит через SHA-256, и результат этого первого прохода попадает во вторую хеш-функцию, RIPEMD-160 — опубликованную в 1996 году Хансом Доббертином и двумя коллегами из лаборатории COSIC в Левене, Бельгия. Она возвращает 160 бит, или двадцать байт. Результат этой двойной операции имеет название: hash160.
Две функции из разных семейств, последовательно, решают две задачи одновременно. Они укорачивают адрес, так как двадцать байт занимают гораздо меньше места, чем открытый ключ. И скрывают открытый ключ: то, что вы публикуете, когда просите оплату, — это не он, а его краткое содержание. Ключ появляется только в день, когда вы тратите эти монеты.

К hash160 добавляется байт версии спереди. Ноль для обычных адресов, пять для тех, которые начинаются с 3. Этот байт заставляет каждый адрес одного типа всегда начинаться с одного и того же символа — это не украшение, это префикс, указывающий кошельку, какой рецепт он должен применить с другой стороны.
Затем идет контрольная сумма. Берется версия плюс hash160, применяется SHA-256 дважды, и первые четыре байта результата приклеиваются к концу. Всего получается двадцать пять байт: один байт версии, двадцать байт хеша и четыре байта для проверки.
Последний шаг — это запись. Число из двадцати пяти байт преобразуется в систему счисления с основанием 58, алфавит, который Сатоши создал, убрав четыре буквы из набора в шестьдесят два: ноль, заглавную O, заглавную i и строчную L. Причина написана в оригинальном исходном коде, в комментарии: это именно те символы, которые путаются, когда кто-то читает с экрана или копирует вручную.
И именно здесь работает контрольная сумма. Если изменить один символ в адресе, последние четыре байта перестают совпадать с тем, что производит расчет, и кошелек отказывается выполнять транзакцию. Вероятность того, что неправильно введенный адрес пройдет, составляет примерно одну на четыре миллиарда.

Адреса, которые начинаются с bc1, используют другую запись, bech32, предложенную в 2017 году бельгийским разработчиком Питером Вилле. Все они в нижнем регистре, что позволяет им поместиться в гораздо меньшие QR-коды, а их контрольная сумма принадлежит к более сильному семейству: она не только обнаруживает ошибку, но и может указать, где именно она находится. Современный кошелек не только сообщает, что адрес неверен, но и подчеркивает символ.

Важно точно понимать, чего вся эта защита не делает. Контрольная сумма проверяет целостность адреса, но не намерение того, кто его написал. Адрес другого человека является абсолютно действительным, и деньги, отправленные на него, дойдут, с полным соответствием всех расчетов. Существует вредоносное ПО, которое ждет, когда адрес появится в буфере обмена, чтобы заменить его на другой в момент, когда вы вставляете. Против этого контрольная сумма бессильна: только проверка первых и последних символов глазами, как рекомендовала начальная тропа.
Обратите внимание на то, чего нет в этом рецепте. Нет регистрации, нет сервера, нет шага, на котором кому-то нужно дать разрешение. Это три хеш-функции, один байт версии и одно преобразование базы — и любой человек с открытым ключом в руках может получить тот же адрес, что и ваш кошелек, тем же способом, не спрашивая ни у кого разрешения.
Адрес указывает, куда пойдут деньги. Осталась другая половина: доказательство того, что отправитель имеет право отправлять, предоставленное без показа ключа никому. На следующем уроке — цифровые подписи.