Как работает блокчейн Bitcoin: блоки, майнинг, консенсус и почему цепочку нельзя переписать

Прямой ответ​


Блокчейн Bitcoin — это последовательная цепочка блоков, где каждый блок содержит заголовок с хешем предыдущего блока и набор транзакций. Целостность обеспечивается криптографическими хешами (SHA-256), а порядок блоков определяется консенсусом Proof-of-Work: майнеры соревнуются в подборе числа (nonce), при котором хеш заголовка блока оказывается ниже целевого порога. Узлы сети принимают ту цепочку, в которую вложено больше суммарной работы. Переписать историю — значит пересчитать все блоки начиная с целевого и обогнать честную сеть по суммарной работе, что требует контроля более 50 % хешрейта сети.

Структура блока​


Каждый блок состоит из заголовка (80 байт) и тела со списком транзакций.

Заголовок блока​


ПолеРазмерНазначение
Version4 байтаВерсия формата блока
Previous Block Hash32 байтаХеш заголовка предыдущего блока
Merkle Root32 байтаКорень дерева Меркла всех транзакций блока
Timestamp4 байтаВремя создания блока (Unix time)
Bits (target)4 байтаСжатое представление целевой сложности
Nonce4 байтаПеребираемое число для подбора хеша

Именно эти 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) выглядит так:

  1. Атакующий отправляет транзакцию и ждёт подтверждений.
  2. Параллельно тайно майнит альтернативную ветку, где эта транзакция отсутствует.
  3. Когда альтернативная ветка станет длиннее честной, сеть переключится на неё, и транзакция «исчезнет».

Вероятность успеха атаки​


Если у атакующего доля хешрейта 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) и цензурировать новые.
  • Приватный ключ — единственный способ потратить монеты. Без него ни одна транзакция не будет подписана, независимо от состояния блокчейна.

Проверка понимания: контрольные вопросы​


  1. Что произойдёт с хешем блока, если изменить одну транзакцию в его теле?
  2. Почему правило «самой длинной цепочки» защищает от подмены истории?
  3. Что мешает майнеру с 30 % хешрейта успешно провести double-spend с 6 подтверждениями?
  4. Зачем нужен Merkle Root, если есть Previous Block Hash?

Ответы: (1) Изменится Merkle Root → изменится хеш заголовка → все последующие блоки станут невалидными. (2) Потому что для создания более длинной цепочки нужно вложить больше работы, чем вся остальная сеть. (3) Вероятность догнать честную сеть после 6 блоков при q = 0.3 экспоненциально мала. (4) Merkle Root привязывает конкретный набор транзакций к заголовку, позволяя доказывать включение транзакции без загрузки всего блока (SPV-верификация).

Источники​


 
Назад
Верх Низ