Блокчейн

Tendermint и Cosmos консенсус

Представьте: вы отправляете 10,000 на криптобиржу. В Bitcoin вам скажут подождать час, пока транзакция станет достаточно безопасной. В Ethereum - 13 минут. А в Cosmos Hub ваш перевод финален через 6 секунд, и никакая сила во вселенной не может его отменить. Как один протокол, созданный программистом без академической степени в распределённых системах, решил проблему, над которой учёные бились 30 лет?

  • **dYdX v4** мигрировал с Ethereum на собственную Cosmos-цепочку, получив orderbook DEX с ~2000 TPS и sub-second финальностью - невозможно на L1 Ethereum
  • **Osmosis** обрабатывает 100M+ ежедневного объёма как суверенный application-specific blockchain, с кастомными AMM-алгоритмами, невозможными в shared-EVM среде
  • **Celestia** использует Tendermint для консенсуса modular data availability layer - фундамент нового поколения rollup-архитектур

Предварительные знания

  • BFT Consensus: PBFT and variants

Tendermint BFT

PBFT доказал, что Byzantine Fault Tolerance возможен на практике, но его сложность реализации и O(n^2) сообщений при view change делали его непригодным для открытых блокчейн-сетей. В 2014 году Jae Kwon предложил **Tendermint** - BFT-протокол, спроектированный специально для блокчейна. Ключевая идея: упростить классический BFT, адаптировав его под реалии распределённых сетей с известным набором валидаторов.

**Tendermint = Tendermint Core + ABCI.** Core отвечает за консенсус и сетевое взаимодействие (P2P gossip), а ABCI - за интерфейс с приложением. Такое разделение позволяет писать бизнес-логику блокчейна на любом языке.

Протокол работает в **раундах**. Каждый раунд состоит из трёх фаз: **Propose**, **Prevote**, **Precommit**. Proposer выбирается по детерминистическому round-robin алгоритму, взвешенному по stake - валидатор с 10% stake будет предлагать блоки примерно в 10% раундов.

**Отличия от PBFT:** Tendermint использует gossip-протокол вместо broadcast (лучше масштабируется), round-robin proposer вместо фиксированного лидера (меньше точек отказа), и **locking mechanism** - валидатор, отправивший precommit для блока B, "залочен" на этот блок и не может prevote за другой блок в следующих раундах этой высоты. Это предотвращает двойное подписание и гарантирует safety.

СвойствоPBFTTendermint
СетьЧастичная синхронностьЧастичная синхронность
ЛидерФиксированный + view changeRound-robin по stake
Сообщений (normal)O(n^2)O(n^2) через gossip
View changeO(n^3)Новый раунд: O(n^2)
ФинальностьМгновеннаяМгновенная
СредаЗакрытые системыБлокчейн (PoS)

Почему в Tendermint используется round-robin proposer вместо фиксированного лидера как в PBFT?

Application Blockchain Interface

До Cosmos каждый блокчейн-проект строил всё с нуля: networking, консенсус, хранение состояния, API. Это как если бы каждый веб-разработчик писал свой HTTP-сервер. **Cosmos SDK** изменил это, предложив модульную архитектуру, где Tendermint Core берёт на себя консенсус и сеть, а разработчик фокусируется только на бизнес-логике.

**Философия Cosmos: "blockchain internet".** Вместо одного универсального блокчейна (как Ethereum пытается быть) - экосистема специализированных цепочек, каждая оптимизирована под свою задачу, соединённых через IBC (Inter-Blockchain Communication).

Архитектура разделена на три слоя. **Tendermint Core** обеспечивает P2P gossip, консенсус и блок-пропагацию. **ABCI** - это протокол (по сути gRPC/socket интерфейс), через который Core общается с приложением. **Application** - state machine, написанная разработчиком. Приложение может быть написано на любом языке: Go, Rust, TypeScript - главное реализовать ABCI-интерфейс.

**Cosmos SDK** предоставляет готовые модули: `bank` (переводы токенов), `staking` (делегирование и валидаторы), `gov` (on-chain голосование), `ibc` (межсетевая коммуникация), `auth` (аккаунты и подписи). Разработчик комбинирует нужные модули и добавляет свои. Сети Osmosis (DEX), Akash (облачные вычисления), Celestia (data availability) - все построены на Cosmos SDK, но каждая со своей специфичной логикой.

Cosmos SDK в действии

Реальные проекты на Cosmos SDK

**Osmosis** - DEX с кастомными AMM-модулями (supercharged liquidity, concentrated liquidity). **dYdX v4** - мигрировали с Ethereum на собственную Cosmos-цепочку для orderbook DEX, получив ~2000 TPS и sub-second блоки. **Celestia** - modular blockchain для data availability, использует Tendermint для консенсуса, но полностью переосмыслил execution layer. Все эти проекты не писали свой консенсус - они взяли Tendermint и сфокусировались на своей уникальной бизнес-логике.

Какое главное преимущество даёт разделение Tendermint Core и Application через ABCI?

ABCI: протокол в деталях

ABCI (Application Blockchain Interface) - набор методов, которые Tendermint Core вызывает у приложения в определённые моменты жизненного цикла блока. Приложение - это **детерминированная state machine**: одинаковые транзакции в одинаковом порядке всегда дают одинаковый результат. Это критически важно - все валидаторы должны прийти к идентичному состоянию.

**CheckTx** вызывается при получении транзакции из сети - до включения в блок. Это лёгкая проверка: валидна ли подпись, достаточно ли средств, корректен ли nonce. CheckTx не должна менять состояние - только решить, стоит ли транзакцию держать в mempool.

**DeliverTx** - основной метод. Вызывается для каждой транзакции в блоке, строго по порядку. Здесь происходит реальное изменение состояния: перевод токенов, обновление контрактов, запись данных. Результат DeliverTx включает events - типизированные события, которые индексаторы и клиенты используют для отслеживания изменений.

**BeginBlock/EndBlock** - хуки начала и конца блока. BeginBlock получает информацию о Byzantine-валидаторах (для slashing) и предыдущем commit. EndBlock возвращает обновления набора валидаторов (новые валидаторы, изменение voting power). Это позволяет приложению управлять составом валидаторов через staking-логику.

**Cosmos SDK за час.** Благодаря scaffolding-инструменту **Ignite CLI** (ранее Starport), можно создать работающий блокчейн буквально за минуты: `ignite scaffold chain mychain` `ignite scaffold module mymodule` `ignite scaffold message create-post title body` `ignite chain serve` Ignite генерирует protobuf-определения, обработчики сообщений, CLI-команды, REST/gRPC API и даже фронтенд. Разработчику остаётся написать бизнес-логику в keeper.

Обратите внимание: keeper ничего не знает о Tendermint, раундах, prevotes. Он работает с `sdk.Context` - абстракцией, которая предоставляет KV-store, event manager, block header. Вся сложность консенсуса скрыта за ABCI.

Транзакция прошла CheckTx успешно и попала в mempool. Гарантирует ли это, что она будет включена в блок и выполнена?

Instant Finality

В Bitcoin транзакция с 1 подтверждением может быть отменена реорганизацией цепи. Нужно ждать 6 подтверждений (~60 минут) для разумной уверенности, и даже тогда финальность вероятностная. В Tendermint блок **финален в момент коммита**. Как только 2/3+ валидаторов отправили precommit для блока - этот блок никогда не будет отменён. Нет orphan blocks, нет реорганизаций, нет "ждите 6 подтверждений".

**Почему это важно для DeFi:** Биржа может зачислить депозит сразу после 1 подтверждения Cosmos-транзакции. В Bitcoin бирже нужно ждать 6 подтверждений (час), в Ethereum - 2 эпохи (~13 минут после The Merge). Instant finality = лучший UX и меньший риск для финансовых приложений.

Математическая гарантия: если 2/3+ честных валидаторов подписали precommit для блока B на высоте H, то ни один другой блок B' на высоте H не может собрать 2/3+ precommits. Доказательство: пусть множество подписавших B = S_B, а подписавших B' = S_B'. Каждое множество > 2n/3. Их пересечение |S_B ∩ S_B'| > 2n/3 + 2n/3 - n = n/3. Но валидаторы из пересечения подписали два разных блока - это **double signing**, за которое следует slashing. При честном большинстве (>2/3) это невозможно.

**Trade-off: liveness vs safety.** Tendermint выбирает safety - сеть лучше остановится, чем допустит форк. Если более 1/3 валидаторов уходят offline, сеть **прекращает производить блоки**. Это фундаментальный выбор: Bitcoin при 1/3 offline продолжит работать (liveness), но может допустить реорганизацию (weaker safety). Tendermint наоборот: гарантирует safety, жертвуя liveness.

Juno Network Halt (2022)

Реальный пример остановки Cosmos-сети

В мае 2022 года сеть Juno (Cosmos SDK) остановилась на несколько часов. Причина: обновление ПО привело к расхождению состояния между валидаторами. Часть нод вычислила один app_hash, часть - другой. Консенсус не мог набрать 2/3+ для ни одного из вариантов. Сеть просто встала. Не было форка, не было двух конкурирующих цепей. Валидаторы скоординировались, откатили обновление, и сеть перезапустилась с последнего валидного блока. Это Tendermint safety в действии: лучше остановка, чем два разных "правильных" состояния.

СвойствоNakamoto (Bitcoin)Tendermint (Cosmos)
ФинальностьВероятностная (~60 мин)Мгновенная (~6 сек)
ФоркиВозможны (orphan blocks)Невозможны
При >1/3 offlineРаботает (медленнее)Останавливается
При >1/3 Byzantine51% атака возможнаSafety сохраняется
РеорганизацияТеоретически возможнаНевозможна

Ключевые идеи

  • **Tendermint BFT** - практичная реализация BFT-консенсуса для блокчейна: round-robin proposer, 2/3+ prevotes/precommits, locking mechanism для предотвращения double signing
  • **ABCI** разделяет консенсус (Tendermint Core) и бизнес-логику (Application), позволяя создавать blockchain на любом языке через стандартный интерфейс CheckTx/DeliverTx/BeginBlock/EndBlock
  • **Cosmos SDK** предоставляет модульный фреймворк с готовыми компонентами (bank, staking, gov, ibc), превращая создание блокчейна из многолетнего проекта в задачу на недели
  • **Instant finality** - блок финален сразу после коммита, нет orphan blocks и реорганизаций. Trade-off: сеть останавливается при >1/3 offline валидаторов
  • Помните вопрос про 10,000 перевод? Теперь вы понимаете, почему 6-секундная финальность Cosmos - не маркетинговый трюк, а математическая гарантия BFT-консенсуса с 2/3+ threshold

Связанные темы

Tendermint и Cosmos находятся на пересечении нескольких фундаментальных тем:

  • BFT-консенсус: PBFT и варианты — Tendermint - эволюция PBFT, адаптированная для блокчейна с round-robin proposer и gossip-протоколом
  • HotStuff и линейный BFT — HotStuff решает проблему O(n^2) view change в Tendermint, снижая сложность до O(n) через chained BFT
  • Cosmos экосистема — Детальный разбор IBC, Interchain Security, и экосистемы app-chain построенных на Tendermint/CometBFT

Вопросы для размышления

  • Если Tendermint останавливается при >1/3 offline - как это влияет на DeFi-протоколы с ликвидациями, привязанными к цене? Что происходит с позициями пользователей во время halt?
  • Cosmos SDK позволяет каждому проекту создать свой блокчейн. Но если каждый DeFi-протокол на отдельной цепочке - не теряется ли composability, которая делает Ethereum DeFi мощным?
  • Tendermint оптимален для ~100-200 валидаторов. Что это значит для децентрализации по сравнению с Bitcoin (~15,000 нод) или Ethereum (~900,000 валидаторов)?

Связанные уроки

  • dist-10-byzantine
Tendermint и Cosmos консенсус

0

1

Войти

Подтверждение для биржи6 блоков (60 мин)1 блок (6 сек)

**CometBFT** - форк Tendermint Core, поддерживаемый после реструктуризации компании Tendermint Inc. Технически идентичен, но с активной разработкой и улучшениями (ABCI 2.0 с PrepareProposal/ProcessProposal для MEV-защиты и оптимизации). Большинство современных Cosmos-сетей используют CometBFT.

Мгновенная финальность означает, что Tendermint быстрее Bitcoin во всём

Tendermint обменивает liveness на safety: при потере >1/3 валидаторов сеть останавливается, тогда как Bitcoin продолжает работать. Кроме того, Bitcoin допускает неограниченное количество участников (permissionless mining), а Tendermint требует фиксированный набор валидаторов. Это разные точки в пространстве компромиссов, а не "лучше/хуже"

CAP-теорема и FLP-невозможность показывают, что нельзя иметь одновременно safety, liveness и partition tolerance. Nakamoto-консенсус выбирает liveness + eventual safety. Tendermint выбирает instant safety + conditional liveness. Каждый подход оптимален для своего класса задач: Bitcoin - для цензуроустойчивых денег, Tendermint - для быстрого финансового settlement

Сеть Cosmos Hub имеет 180 валидаторов. 65 из них одновременно теряют связь. Что произойдёт?