Как устроен блокчейн: хеши, блоки и консенсус
Из чего состоит блок, почему историю нельзя тихо переписать, чем Proof of Work отличается от Proof of Stake и чего блокчейн принципиально не умеет.
Реестр, которому не нужен хозяин
Любая платёжная система — это прежде всего реестр: таблица, где записано, кому сколько принадлежит и кто кому что перевёл. В банке этот реестр хранит сам банк, и доверие к записям держится на доверии к нему. Блокчейн решает другую задачу: как вести общий реестр, если участники друг другу не доверяют, никто из них не главный, а часть может сознательно жульничать.
Ответ складывается из трёх частей: криптографических хешей, которые делают историю неизменяемой, цифровых подписей, которые доказывают право распоряжаться средствами, и механизма консенсуса, который позволяет тысячам независимых узлов согласиться, какая версия истории правильная.
Хеш: отпечаток данных
Криптографическая хеш-функция превращает данные любого размера в строку фиксированной длины. В биткоине используется SHA-256 (дважды подряд), результат — 256 бит. У хорошей хеш-функции три важных свойства:
- Детерминированность — одни и те же данные всегда дают один и тот же хеш.
- Лавинный эффект — изменение одного бита на входе меняет примерно половину битов на выходе. Похожие данные не дают похожих хешей.
- Необратимость и стойкость к коллизиям — по хешу нельзя восстановить данные и практически невозможно подобрать два разных входа с одинаковым хешем.
Что лежит в блоке
Блок состоит из заголовка и списка транзакций. Транзакции попарно хешируются, затем попарно хешируются полученные хеши — и так до одного значения, корня Меркла. Он попадает в заголовок. Кроме него в заголовке записаны хеш заголовка предыдущего блока, метка времени, текущая сложность и число nonce.
Ссылка на предыдущий блок и делает цепочку цепочкой. Если кто-то изменит одну транзакцию в старом блоке, изменится корень Меркла, значит, изменится хеш этого блока, значит, следующий блок будет ссылаться на несуществующего предка — и так до конца цепи. Подделать одну запись незаметно нельзя: придётся пересобрать все последующие блоки.
Дерево Меркла даёт ещё одну полезную вещь: чтобы доказать, что транзакция входит в блок, достаточно предъявить логарифмическое число хешей (для блока в несколько тысяч транзакций — около дюжины), а не весь блок. На этом держатся «лёгкие» кошельки, которые не скачивают блокчейн целиком.
Подписи: кто вправе тратить
У каждого пользователя есть пара ключей. Закрытый ключ — это просто большое случайное число; открытый вычисляется из него, а адрес — из открытого. Транзакция подписывается закрытым ключом, и любой узел может проверить подпись открытым, не узнав при этом сам секрет. В биткоине и Ethereum используется эллиптическая кривая secp256k1; в биткоине с 2021 года (обновление Taproot) доступны также подписи Шнорра.
Отсюда главное практическое следствие: владеет монетами тот, у кого закрытый ключ. У сети нет службы поддержки, которая восстановит доступ по паспорту.
Консенсус: кто пишет следующий блок
Самая трудная часть — договориться о порядке транзакций. Если Алиса одновременно отправит одни и те же монеты Бобу и Кэрол, разные узлы могут увидеть эти транзакции в разном порядке. Сеть должна выбрать одну версию, и выбор должен быть дорогим для подделки.
Proof of Work (биткоин). Чтобы добавить блок, майнер перебирает nonce, пока хеш заголовка не окажется меньше целевого значения. Найти такое число можно только перебором, а проверить — одним вычислением. Сложность пересчитывается каждые 2016 блоков, чтобы блоки выходили в среднем раз в 10 минут. Если возникли две конкурирующие ветки, узлы выбирают ту, в которую вложено больше суммарной работы.
Proof of Stake (Ethereum с сентября 2022 года). Вместо электричества в залог ставятся монеты. Валидатор блокирует 32 ETH, протокол псевдослучайно выбирает, кто предлагает блок в очередном 12-секундном слоте, а остальные голосуют за него. За доказуемый обман — например, подпись двух конфликтующих блоков — часть залога сжигается (slashing).
Атака 51% и её пределы
Если злоумышленник контролирует больше половины вычислительной мощности (или ставки), он может строить свою ветку быстрее честной сети и переписать недавнюю историю — например, отменить собственный платёж после того, как получил товар (двойная трата). Но даже большинство не позволяет украсть чужие монеты: для этого нужна подпись владельца, а подделать её консенсус не помогает.
Для крупных сетей такая атака экономически бессмысленна: оборудование и электричество стоят огромных денег, а успешная атака обрушит цену той самой монеты, которую атакующий добывает. Для маленьких сетей на PoW это реальная угроза — атаки на Ethereum Classic в 2020 году переписали тысячи блоков.
Чего блокчейн не умеет
- Гарантировать правдивость входных данных. Блокчейн надёжно хранит то, что в него записали. Если записали ложь — она тоже будет храниться надёжно. Данные из внешнего мира (курсы, погода, результаты матчей) приходят через оракулы, и это отдельное слабое место.
- Быть быстрым и дешёвым одновременно с децентрализацией. Каждый полный узел проверяет каждую транзакцию. Поднять пропускную способность «в лоб» значит поднять требования к узлам и сократить их число. Поэтому масштабирование уходит на второй уровень — в каналы и роллапы.
- Обеспечить приватность. Публичный блокчейн прозрачен: все транзакции видны всем. Адреса не подписаны именами, но аналитика связывает их с людьми через биржи и поведенческие паттерны.
Итог
Блокчейн — это не магия и не «база данных будущего» для всего подряд. Это конкретный инженерный компромисс: мы платим избыточностью, скоростью и энергией (или замороженным капиталом) за то, чтобы общий реестр работал без центрального оператора. Там, где доверенный оператор есть и устраивает всех, обычная база данных будет быстрее и дешевле. Там, где его нет или ему не доверяют, — у блокчейна появляется смысл.
Материал носит образовательный характер и не является инвестиционной рекомендацией. Операции с криптовалютами связаны с высоким риском потери средств.