Блокчейн
Nakamoto vs Classical консенсус
В мае 2022 Terra/Luna потеряла 40 миллиардов за 72 часа. Валидаторы массово покидали сеть, и Tendermint - движок с deterministic finality - просто остановился. Нет кворума, нет блоков, нет спасения. В тот же момент Bitcoin продолжал работать как ни в чём не бывало, несмотря на панику рынка. Два протокола, два подхода к консенсусу - и диаметрально противоположное поведение в кризисе. Почему один остановился, а другой нет? Ответ лежит в фундаментальном выборе, который делает каждый блокчейн ещё до написания первой строчки кода: probabilistic или deterministic finality.
- **Биржи (Coinbase, Binance)** ждут разное количество подтверждений для разных блокчейнов: 6 для Bitcoin (~60 мин), 1 для Cosmos (~6 сек) - потому что у них разный тип финальности
- **DeFi-протоколы** выбирают L1 исходя из CAP-свойств: Aave и Compound на Ethereum (гибрид AP+CP), протоколы Cosmos экосистемы на CP-цепочках с мгновенной финальностью
- **Cross-chain мосты** (Wormhole, IBC) должны понимать тип финальности обеих цепочек: перевод из CP-цепочки в AP-цепочку и обратно требует разных стратегий ожидания и верификации
- **Ethereum после The Merge** использует гибрид GHOST + Casper FFG (Gasper): блоки производятся каждые 12 секунд (AP-стиль), но финализируются батчами каждые ~13 минут (CP-стиль)
Предварительные знания
Probabilistic Finality: уверенность вместо гарантии
В Bitcoin ни одна транзакция не является финальной в абсолютном смысле. Каждый новый блок, построенный поверх вашего, **уменьшает вероятность реорганизации** экспоненциально - но никогда не сводит её к нулю.
**Probabilistic finality** означает, что уверенность в транзакции растёт с каждым подтверждением, но теоретически всегда остаётся ненулевая вероятность отмены.
Сатоши Накамото вывел формулу, описывающую вероятность успешной атаки для злоумышленника с долей `q` от общего hashrate после `z` подтверждений:
Обратите внимание: при `q = 0.1` (10% hashrate) уже после 6 подтверждений вероятность атаки падает ниже **0.025%**. При 12 подтверждениях - ниже одной десятимиллионной. Именно поэтому биржи ждут 6 подтверждений для Bitcoin.
При `q >= 0.5` формула ломается: атакующий **всегда** догонит честную цепочку. Это и есть знаменитая **51% attack** - не порог магии, а точка, после которой вероятность атаки становится равной 1.
Биржа Coinbase требует 6 подтверждений для Bitcoin-депозита. Почему именно 6, а не 1?
Deterministic Finality: раз и навсегда
В отличие от Bitcoin, **BFT-протоколы** (Byzantine Fault Tolerant) дают абсолютную гарантию: как только блок прошёл commit-фазу, он **финален навсегда**. Никакой реорганизации, никаких откатов, никакого ожидания подтверждений.
**Tendermint** (движок консенсуса Cosmos) - классический пример deterministic finality. Каждый блок проходит двухфазное голосование: **pre-vote** и **pre-commit**. Если более 2/3 валидаторов подписали pre-commit, блок считается финальным.
Но за deterministic finality приходится платить. Главный trade-off - **liveness vs safety**:
- **Safety** (безопасность): финализированный блок никогда не будет отменён - гарантировано при `f < n/3`
- **Liveness** (живучесть): сеть продолжает производить блоки - **НЕ гарантировано**, если >1/3 валидаторов offline
- Если 61 из 180 валидаторов Cosmos Hub уйдут offline, **сеть полностью остановится** до их возвращения
- Bitcoin в аналогичной ситуации продолжит работать - просто медленнее
**Liveness failure** - реальная проблема. Сеть Cosmos Hub останавливалась в 2019 году. Terra/Luna остановилась в мае 2022 при массовом выходе валидаторов. Solana (частично BFT) переживала многочасовые простои.
Сеть Cosmos Hub имеет 180 валидаторов. Если 70 валидаторов одновременно уйдут offline, что произойдёт?
CAP-теорема: невозможный выбор
В 2000 году Эрик Брюер сформулировал теорему, которая объясняет **фундаментальный** trade-off между Nakamoto и Classical consensus. В распределённой системе невозможно одновременно гарантировать все три свойства:
В блокчейне **Partition Tolerance обязательна** - узлы разбросаны по всему миру, сетевые разрывы неизбежны. Значит, реальный выбор стоит между **C** и **A**:
**Гибридные подходы** пытаются взять лучшее из обоих миров:
- **Ethereum 2.0 (Gasper):** Nakamoto-style block production (always available) + BFT-style finality через Casper FFG каждые ~13 минут. Цепочка работает даже при потере >1/3, но финальность приостанавливается
- **Avalanche:** вероятностная выборка подмножества валидаторов (subsampling) - быстрая финальность (~1 сек) при высокой доступности. Формально AP, но с очень высокой вероятностью consistency
- **Polkadot (GRANDPA + BABE):** BABE производит блоки (AP), GRANDPA финализирует батчами (CP). Если GRANDPA отстаёт, блоки всё равно производятся
Выбор AP vs CP - не вопрос "что лучше", а вопрос **для чего система**. Для платежей (Bitcoin) доступность критичнее: лучше принять платёж с малым риском реорга, чем не принять вовсе. Для DeFi (Cosmos) consistency критичнее: лучше остановиться, чем допустить двойную трату на миллионы.
DeFi-протокол выдаёт займы на 100M. При выборе L1 блокчейна, какое свойство CAP для него приоритетнее и почему?
Fork Choice Rule: кто главный?
Когда два майнера одновременно находят блок, возникает **fork** - временное расхождение цепочки. Кто решает, какая ветка "правильная"? Для этого нужно **fork choice rule** - детерминированное правило, по которому каждый узел выбирает canonical chain.
**Longest Chain Rule** (Bitcoin) - самое простое fork choice rule: побеждает цепочка с наибольшим количеством блоков. Но у него есть проблема: оно не учитывает "потерянную" работу в побочных ветках.
Ethereum до The Merge использовал **GHOST** (Greedy Heaviest Observed SubTree) - модифицированное правило, предложенное Sompolinsky & Zohar в 2013:
**Uncle (ommer) блоки** - валидные блоки, которые не попали в главную цепь. В Bitcoin они просто теряются (orphaned blocks). Ethereum включал ommer-блоки в подсчёт веса поддерева и даже давал их авторам частичную награду (7/8 от полной):
- **Справедливость:** майнер, нашедший валидный блок, получает награду даже если его обогнали на миллисекунду
- **Безопасность:** учёт ommer-блоков делает 51% атаку дороже, так как атакующий должен перевесить ВСЁ поддерево, а не только главную цепь
- **Масштабируемость:** позволяет уменьшить block time без потери безопасности (Ethereum: 12-15 сек vs Bitcoin: 10 мин)
После The Merge (сентябрь 2022) Ethereum перешёл на **LMD-GHOST** (Latest Message Driven GHOST) в рамках Gasper - гибрида GHOST и Casper FFG. Вместо hashrate-веса используются голоса валидаторов:
**Chain quality** - метрика, измеряющая долю блоков в canonical chain, произведённых честными участниками. Хорошее fork choice rule должно обеспечивать chain quality > `1 - f/n`, где `f` - количество Byzantine узлов. GHOST улучшает chain quality по сравнению с longest chain rule при высокой частоте блоков.
Fork choice rule - одно из самых недооценённых решений при проектировании блокчейна. Оно определяет устойчивость к атакам, скорость convergence после fork, и fairness для майнеров/валидаторов. Каждый крупный протокол имеет своё правило, адаптированное под его модель угроз.
Longest chain rule выбирает цепочку с наибольшим количеством блоков, поэтому в Bitcoin побеждает тот, кто быстрее производит блоки
В Bitcoin "longest chain" на практике означает цепочку с наибольшей **cumulative proof of work** (суммарной сложностью). Если атакующий производит много лёгких блоков с пониженной difficulty, они не победят меньшее количество тяжёлых блоков. Корректнее говорить **heaviest chain**, а не longest chain.
Это различие критично для безопасности. Если бы считались просто блоки, атакующий мог бы создать длинную цепочку дешёвых блоков. Суммарная PoW делает атаку пропорционально дорогой: чтобы перевесить честную цепь, нужно потратить столько же (или больше) энергии, сколько потратила вся сеть.
В Ethereum до The Merge использовался GHOST вместо Bitcoin-стиля longest chain. Какое главное преимущество это давало?
Ключевые идеи
- **Probabilistic finality** (Nakamoto): уверенность растёт экспоненциально с каждым подтверждением, но никогда не достигает 100%. Формула Накамото: при 10% hashrate атакующего и 6 подтверждениях вероятность реорга < 0.025%
- **Deterministic finality** (BFT): после commit блок финален навсегда. Trade-off: сеть может остановиться при потере >1/3 валидаторов (liveness failure). Вспомните Terra/Luna из начала урока - именно этот trade-off сработал в кризис
- **CAP-теорема** определяет фундаментальный выбор: Bitcoin = AP (всегда работает, eventual consistency), BFT = CP (всегда консистентен, может остановиться). Гибридные подходы (Gasper, Avalanche) переключаются между режимами
- **Fork choice rule** определяет каноничную цепочку при расхождении. Longest chain (Bitcoin) считает суммарную PoW; GHOST (Ethereum) учитывает ommer-блоки в весе поддерева, что позволяет безопасно сокращать block time
- Выбор между Nakamoto и Classical - не вопрос "что лучше", а вопрос **какой failure mode допустим**: временная inconsistency (реорг) или временная остановка (liveness failure)
Связанные темы
Этот урок связывает теорию консенсуса с конкретными протоколами:
- Proof of Work — Базовый механизм Nakamoto consensus, на котором построена probabilistic finality
- BFT-консенсус — Базовый механизм Classical consensus, обеспечивающий deterministic finality
- HotStuff — Оптимизация BFT до линейной communication complexity - решение проблемы масштабирования classical consensus
- Gasper (Ethereum PoS) — Гибрид LMD-GHOST и Casper FFG - главный пример сочетания Nakamoto и Classical подходов на практике
Вопросы для размышления
- Если вы проектируете блокчейн для международных банковских расчётов (миллиарды долларов в день), какой тип финальности вы выберете и почему? Какой failure mode (реорг vs остановка) менее приемлем для банков?
- Ethereum перешёл от чистого Nakamoto consensus (PoW + longest chain) к гибриду (PoS + LMD-GHOST + Casper FFG). Какие свойства он приобрёл и какие потерял? Стал ли Ethereum после The Merge ближе к AP или CP?
- Avalanche утверждает, что достигает "финальности за 1 секунду" через вероятностную выборку. Это probabilistic или deterministic finality? Может ли вероятностная финальность быть "достаточно хорошей" для замены детерминированной?