Прямой ответ
Блокчейн Bitcoin — это последовательная цепочка блоков, где каждый блок содержит заголовок с хешем предыдущего блока и набор транзакций. Целостность обеспечивается криптографическими хешами (SHA-256), а порядок блоков определяется консенсусом Proof-of-Work: майнеры соревнуются в подборе числа (nonce), при котором хеш заголовка блока оказывается ниже целевого порога. Узлы сети принимают ту цепочку, в которую вложено больше суммарной работы. Переписать историю — значит пересчитать все блоки начиная с целевого и обогнать честную сеть по суммарной работе, что требует контроля более 50 % хешрейта сети.
Структура блока
Каждый блок состоит из заголовка (80 байт) и тела со списком транзакций.
Заголовок блока
| Поле | Размер | Назначение |
|---|---|---|
| Version | 4 байта | Версия формата блока |
| Previous Block Hash | 32 байта | Хеш заголовка предыдущего блока |
| Merkle Root | 32 байта | Корень дерева Меркла всех транзакций блока |
| Timestamp | 4 байта | Время создания блока (Unix time) |
| Bits (target) | 4 байта | Сжатое представление целевой сложности |
| Nonce | 4 байта | Перебираемое число для подбора хеша |
Именно эти 80 байт хешируются двойным SHA-256. Результат — идентификатор блока (block hash).
Тело блока: транзакции и дерево Меркла
Транзакции в блоке упорядочены. Первая транзакция всегда coinbase — она создаёт новые биткоины и передаёт их майнеру. Остальные — обычные переводы.
Все транзакции хешируются попарно и сводятся в бинарное дерево (дерево Меркла). Корень этого дерева записывается в заголовок. Это означает: изменение любой транзакции меняет Merkle Root, а значит и хеш заголовка, а значит и хеш всех последующих блоков.
Хеш-связь между блоками
Поле Previous Block Hash в заголовке текущего блока содержит хеш заголовка предыдущего. Это создаёт однонаправленную цепочку:
Код:
Блок N-2 ← Блок N-1 ← Блок N ← Блок N+1
(hash N-2) (hash N-1) (hash N) (hash N+1)
Если злоумышленник изменит транзакцию в блоке N-1, хеш блока N-1 изменится. Тогда поле Previous Block Hash в блоке N перестанет соответствовать, и блок N станет невалидным. Чтобы «починить» цепочку, нужно пересчитать блок N, затем N+1, N+2 и так далее до последнего блока.
Proof-of-Work: зачем нужен майнинг
Суть задачи
Майнер перебирает nonce (и при необходимости другие поля), пока двойной SHA-256 заголовка не даст число, меньшее целевого порога (target). Target кодируется в поле Bits и периодически пересчитывается.
Пример условия:
Код:
SHA256(SHA256(block_header)) < target
Вероятность найти подходящий хеш пропорциональна отношению target к максимальному значению 256-битного числа. Чем меньше target, тем сложнее задача.
Пересчёт сложности
Каждые 2016 блоков (примерно раз в две недели при номинальном темпе 10 минут на блок) сеть пересчитывает target. Если блоки находились быстрее — сложность растёт, если медленнее — падает. Это поддерживает стабильный темп эмиссии.
Почему это дорого
Подбор nonce — чистая вычислительная работа. Её нельзя ускорить иначе как увеличением хешрейта. Атака на цепочку требует не просто найти один блок, а пересчитать все блоки от точки атаки до текущего конца цепочки быстрее, чем честная сеть продвигается вперёд.
Консенсус: правило самой длинной цепочки
Узлы Bitcoin принимают цепочку с наибольшей суммарной сложностью (не обязательно самую длинную по числу блоков, но на практике это совпадает). Когда два майнера одновременно находят блок, возникает временная вилка (fork). Сеть продолжает строить обе ветки, пока одна не станет длиннее. Проигравшая ветка отбрасывается, а транзакции из неё возвращаются в мемпул.
Это означает:
- Транзакция с 1 подтверждением теоретически может быть отменена при реорганизации.
- С каждым новым блоком вероятность реорганизации падает экспоненциально.
- На практике 6 подтверждений считаются достаточными для большинства сценариев.
Почему цепочку нельзя переписать
Атака «двойного расходования» (double-spend) выглядит так:
- Атакующий отправляет транзакцию и ждёт подтверждений.
- Параллельно тайно майнит альтернативную ветку, где эта транзакция отсутствует.
- Когда альтернативная ветка станет длиннее честной, сеть переключится на неё, и транзакция «исчезнет».
Вероятность успеха атаки
Если у атакующего доля хешрейта q < 0.5, вероятность догнать честную сеть после z подтверждений падает экспоненциально с ростом z. При q = 0.1 и z = 6 вероятность успеха составляет доли процента. При q = 0.3 — уже заметна, но всё равно мала. При q ≥ 0.5 атака становится детерминированной, но такой сценарий экономически бессмыслен: стоимость атаки превышает выгоду, а цена самого актива обрушится.
Экономический барьер
Хешрейт сети Bitcoin измеряется сотнями EH/s. Аренда или создание оборудования для атаки 51 % — это миллиарды долларов капитальных затрат плюс огромные операционные расходы на электричество. При этом успешная атака разрушит доверие к сети и обесценит актив, который атакующий пытается украсть.
Что реально можно и нельзя изменить в блокчейне
| Действие | Возможно? | Почему |
|---|---|---|
| Изменить чужую транзакцию в последнем блоке | Нет | Нужен пересчёт всей цепочки с хешрейтом > 50 % |
| Отменить свою подтверждённую транзакцию | Нет | Транзакция необратима после включения в блок |
| Заменить блок в середине цепочки | Практически нет | Требует пересчёта всех последующих блоков |
| Добавить транзакцию задним числом | Нет | Изменит Merkle Root и хеш блока |
| Создать форк с другими правилами | Да | Но это будет другая цепочка, не признаваемая основной сетью |
Роль полных узлов
Полный узел (full node) хранит всю цепочку блоков и независимо проверяет каждый блок и каждую транзакцию по правилам консенсуса. Он не доверяет другим узлам, а верифицирует:
- Корректность подписей (ECDSA/SegWit).
- Отсутствие двойного расходования в рамках известной цепочки.
- Соответствие размера блока и комиссий правилам.
- Валидность Proof-of-Work заголовка.
Именно распределённая сеть полных узлов делает цензуру и подмену данных экономически нецелесообразными: любой узел может отклонить невалидный блок, даже если его предложил майнер с большим хешрейтом.
Ограничения и типичные заблуждения
- Блокчейн не хранит «балансы». Он хранит транзакции. Баланс кошелька вычисляется как сумма непотраченных выходов (UTXO).
- Подтверждение ≠ мгновенная финальность. Финальность вероятностная и растёт с числом блоков.
- Атака 51 % не позволяет украсть чужие монеты. Она позволяет только отменить собственные транзакции (double-spend) и цензурировать новые.
- Приватный ключ — единственный способ потратить монеты. Без него ни одна транзакция не будет подписана, независимо от состояния блокчейна.
Проверка понимания: контрольные вопросы
- Что произойдёт с хешем блока, если изменить одну транзакцию в его теле?
- Почему правило «самой длинной цепочки» защищает от подмены истории?
- Что мешает майнеру с 30 % хешрейта успешно провести double-spend с 6 подтверждениями?
- Зачем нужен Merkle Root, если есть Previous Block Hash?
Ответы: (1) Изменится Merkle Root → изменится хеш заголовка → все последующие блоки станут невалидными. (2) Потому что для создания более длинной цепочки нужно вложить больше работы, чем вся остальная сеть. (3) Вероятность догнать честную сеть после 6 блоков при q = 0.3 экспоненциально мала. (4) Merkle Root привязывает конкретный набор транзакций к заголовку, позволяя доказывать включение транзакции без загрузки всего блока (SPV-верификация).
