Содержание статьи
info
Это вторая статья из цикла, посвященного техническим основам устройства криптовалют. Первая носит название «Крипта с нуля. Разбираемся с алгоритмами в основе криптовалют».
3 января 2009 года, где‑то около семи вечера по Гринвичу, на ничем не примечательном компьютере запускается программа. Через несколько минут она генерирует первый блок данных и записывает в него короткую фразу — заголовок из свежей газеты The Times: «Канцлер на грани второго спасения банков». Автор программы — человек, которого никто никогда не видел, — подписывается псевдонимом Сатоси Накамото и вскоре исчезает из публичного пространства, оставив после себя технологию, ставшую основой крупнейшей криптовалютной экосистемы мира.
Это известная история, затертая до дыр, ее пересказывают в каждой второй статье про криптовалюты. Я вспомнил о ней не в качестве очередного экскурса в прошлое, а ради одной детали — той самой газетной цитаты, вбитой в первый блок, так называемый генезис‑блок блокчейна. Накамото поместил ее туда не из литературных соображений — это была подпись, доказательство, что блок создан не раньше 3 января 2009 года, потому что до указанной даты этого номера The Times просто не существовало. И одновременно — манифест: банковская система трещит по швам, мы строим другую. С этой фразы и начался биткоин.
Точнее, не сам биткоин, а блокчейн — технология, которую Накамото подробно описал в своей работе «Bitcoin: A Peer-to-Peer Electronic Cash System», опубликованной в интернете 31 октября 2008 года. Если говорить кратко, то блокчейн — это технологическая основа, поверх которой могут быть запущены различные приложения, а биткоин всего лишь одно из них. Фактически история технологий сделала очередной виток: когда‑то одним из первых прикладных приложений, работающих поверх интернета, стала электронная почта, и только потом к ней подтянулись браузеры, файлообменники и прочий полезный софт. Сейчас на блокчейне построено столько всего, что голова идет кругом: от криптобирж и NFT до систем голосования, земельных кадастров и цепочек поставок фармацевтики. Биткоин просто был первым приложением, построенным на этой технологии.
Генезис‑блок задает стартовую точку блокчейна и не ссылается на предыдущий блок, потому что его попросту нет в природе. Именно поэтому точная дата создания этого самого первого блока критически важна. Его параметры жестко зашиты в исходный код биткоин‑клиента, чтобы каждая нода начинала проверку цепочки с одной и той же основы.
Как устроен блокчейн
Если отбросить маркетинговую шелуху — а ее вокруг темы накопилось на пару товарных вагонов и маленькую тележку, — блокчейн устроен довольно просто: это база данных. Не самая быстрая, не самая удобная, с кучей ограничений, но у нее есть одно ключевое свойство, которого нет ни у одной классической СУБД: записи в ней невозможно отредактировать задним числом. Это математически невозможно, даже если этим займутся на досуге АНБ, ЦРУ и парочка правительств каких‑нибудь мировых сверхдержав. Причем реализовано это не с помощью какой‑то древней черной магии, а посредством трех давно известных инженерных трюков, использованных в правильном порядке.
Вторая особенность вытекает из первой: раз никто не может подделать записи, то и доверять одному конкретному хранителю базы больше не нужно. Можно раздать копии всем желающим, и, если кто‑то попытается жульничать, остальные моментально это заметят. В блокчейне нет главного сервера, нет администратора с правами root, нет банка, который однажды решит, что твой счет пришло время заблокировать. Это звучит как анархистская утопия, но технология работает — уже много лет подряд, без единого серьезного сбоя сети (отдельные биржи и кошельки — это совсем другой разговор, к самому блокчейну отношения не имеющий).

Ну а теперь давай заглянем этому самому блокчейну под капот, разберемся, что такое блок и почему его называют именно «блок», а не, скажем, «запись» или «строка». Посмотрим, как блоки соединяются в цепочку и почему эта сцепка крепче любого амбарного замка. Поймем, как тысячи независимых компьютеров умудряются договариваться о единой версии истории транзакций без начальника и арбитра. И в конце разложим по полочкам три разновидности блокчейнов — публичные, приватные и консорциумные, а заодно поймем, почему за одним словом скрываются принципиально разные концепции.
Что такое блок и из чего он состоит?
Слово «блок» звучит монументально — и поэтому сбивает с толку. На самом же деле это просто пакет данных с определенной структурой, почти как в обычной базе данных. Возьмем для примера блокчейн, на котором построен биткоин: здесь блок состоит из двух частей — заголовка и тела.
С телом, занимающим самый большой объем блока, все просто: оно содержит список транзакций. «Аня отправила Диме 0,01 BTC», «Вася отправил Маше 0,3 BTC» — и так далее, сколько влезет. В один блок блокчейна в сети биткоин помещается две‑три тысячи транзакций, иногда больше. К слову, самая первая пользовательская транзакция с биткоином произошла 12 января 2009 года: Сатоси Накамото отправил 10 BTC американскому программисту и криптографу Хэлу Финни, и эта операция была подтверждена в блоке № 170. Короче, если представить, что блок — это железнодорожный вагон, доверху наполненный зерном, то зерно (составляющее основную массу и полезное содержимое вагона) — это как раз записи о транзакциях.

А вот заголовок — штука поинтереснее. Он маленький, всего 80 байт, но именно в нем спрятана вся механика, на которой работает блокчейн. В сети биткоин заголовок содержит шесть полей:
- Версия протокола — техническое поле, содержимое которого сообщает другим узлам сети, по каким правилам обрабатывать блок.
- Хеш предыдущего блока — а вот это самое важное поле во всей конструкции. Именно оно превращает набор разрозненных блоков в цепочку. Каждый блок хранит в себе «отпечаток пальца» предыдущего — 256-битный хеш, вычисленный по алгоритму SHA-256. Зачем — подробно разберем в следующем разделе, пока просто запомни: это поле и есть самое важное звено в цепи.
- Корень Меркла (Merkle root) — это хеш всех транзакций в теле блока, свернутый в одно 256-битное число. Работает это так: транзакции разбиваются на пары, от каждой пары считается хеш, потом хеши снова разбиваются на пары, снова хешируются — и так до тех пор, пока не останется одно значение. Получается дерево, где корень — единственное число, которое изменится, если изменить хотя бы один бит хоть в одной транзакции. Зачем такие сложности? Затем, что хранить в заголовке тысячи транзакций целиком физически невозможно, а корень Меркла позволяет одним значением «запечатать» все тело блока, сделав невозможным его незаметное изменение.
- Временная метка — Unix timestamp, показывает, сколько секунд прошло с 1 января 1970 года. У генезис‑блока, того самого, с цитатой из газеты, метка имеет значение 1231006505 — 3 января 2009 года, 18:15:05 UTC. Метка нужна для порядка и для корректировки сложности майнинга: сеть следит за тем, как быстро появляются новые блоки, и при необходимости корректирует процесс.
- Биты сложности (difficulty target) — компактная запись значения, ниже которого должен оказаться хеш блока, чтобы сеть его приняла. Чем меньше это число, тем сложнее найти подходящий хеш. Именно это поле регулирует скорость майнинга и поддерживает среднее время появления нового блока. Биты сложности показывают, насколько трудно сейчас найти новый блок в сети биткоин. Сеть настроена таким образом, чтобы новый корректный блок в цепочке появлялся примерно раз в десять минут, над этой задачей трудятся майнеры. Если в какой‑то момент майнеров становится много и общая вычислительная мощь сети возрастает, сеть автоматически делает задачу труднее, если мощности стало меньше, задача упрощается. Биты сложности как раз и позволяют управлять этим процессом.
- Нонс (nonce, от number used once) — четырехбайтовое число, которое майнер перебирает вслепую, пытаясь подобрать такое значение, чтобы хеш всего заголовка оказался меньше целевого порога сложности. Этот процесс называют «вычислительной работой», proof of work: иного тривиального способа найти нонс не существует, только перебор. Майнер меняет нонс, считает SHA-256 от заголовка, смотрит результат — и, если он не подошел, меняет снова, миллиарды раз подряд, пока не повезет.
Вот, собственно, и весь блок: тело с транзакциями и заголовок с шестью полями.

Обрати внимание на два поля заголовка: хеш предыдущего блока и корень Меркла — это так называемые криптографические хеши. Они намертво привязывают блок к двум вещам: к предыдущему блоку и к собственному содержимому. Измени один байт в любой транзакции — изменится корень Меркла. Изменится корень Меркла — изменится хеш всего заголовка. А этот хеш записан в следующем блоке, поэтому при его изменении цепочка разорвется, что и делает любое изменение содержимого блокчейна задним числом физически невозможным.
Скованные одной цепью
Когда майнер собирает новый блок, он включает в его заголовок хеш предыдущего блока, который добавляется в поле prev_block_hash. Всё, связь установлена. Блок № 638 201 содержит хеш блока № 638 200, тот — хеш блока № 638 199, и так далее вниз, до самого генезис‑блока с газетным заголовком из The Times. Получается что‑то вроде бусин на нитке — с той разницей, что нитка здесь не физическая, а математическая. Каждая бусина «помнит» значение предыдущей, причем абсолютно точно, до последнего бита.
А теперь давай на минуточку представим, что кто‑то вдруг захотел подправить старую транзакцию. Например, в блоке № 638 100 записано, что Вася отправил Пете 2 BTC. Злоумышленник хочет эту запись стереть — сделать вид, что перевода не было, и потратить те же монеты еще раз.
Злоумышленник открывает блок № 638 100 и меняет транзакцию. В тот же момент меняется корень Меркла — потому что дерево хешей пересчитывается снизу вверх и любое изменение в любом месте блока меняет это значение. Изменился корень Меркла — изменился заголовок. Изменился заголовок — изменился хеш блока. А этот хеш записан в заголовке следующего блока № 638 101. Значит, блок № 638 101 теперь содержит неправильную ссылку: любая нода сети проверит хеш, и, если он не сойдется, блок будет отвергнут.
Ладно, думает злоумышленник. Я пересчитаю и блок № 638 101 тоже, подставлю новый хеш, подберу новый нонс, чтобы блок снова удовлетворял порогу сложности. Но тогда изменится хеш блока № 638 101 — а он записан в блоке № 638 102. Значит, пересчитывать нужно и его, и следующий, и следующий за ним — все блоки от точки подделки до конца цепочки.
И вот тут вступает в игру экономика. На момент написания этой статьи (апрель 2026 года) в цепочке биткоина содержится 945 339 блоков. Каждый из них был найден майнерами путем перебора нонсов, и это потребовало колоссальной вычислительной работы — собственно, в этом и кроется суть майнинга: он защищает сеть от злодеев, желающих что‑то поменять в блокчейне.

Пересчитать один блок — значит заново выполнить весь этот перебор, пересчитать тысячу блоков — проделать эту работу заново тысячу раз. Причем не просто пересчитать всю цепочку от точки подделки, а пересчитать ее быстрее, чем это сделает вся остальная сеть — ведь она тоже не стоит на месте. Пока злоумышленник пересчитывает старые блоки, остальные участники блокчейна продолжают майнить новые. Обогнать их физически невозможно: ни у одного злоумышленника на нашей планете нет таких вычислительных мощностей.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»
