Tendermint – движок для блокчейнов. Для валидации блоков использует алгоритм консенсуса BFT PoS (Byzantine Fault Tolerant Proof-of-Stake). Языковой агностик – протокол ABCI позволяет работать с механизмом на программных языках: Java, C++, Python, Go, JavaScript, Rust….
Главное отличие Tendermint – скорость финализации. Транзакция включается в блок за секунды и не требует ждать подтверждения.
История создания
В 2014 году Джэ Квон в поисках решения оптимизации работы узлов в глобальных сетях (Wide Area Networks, WAN) разработал новый протокол, основанный на BFT (первые алгоритмы создавались в MIT в 1988). Tendermint – проект с открытым исходным кодом. Концептуально демонстрировал достижение секьюрности в сети с большим количеством нод.
Спустя 4 года, в 2018 году проект Cosmos (ATOM) начал использовать движок Tendermint.
Что такое задача византийских генералов?
Основная идея, как достичь консенсус быстро – требовать правды хотя-бы от ⅔ (66%) узлов.
Byzantine Consensus Algorithm (или BFT, Byzantine Fault Tolerance) использует решение этой задачи. Пусть есть 4 генерала и им требуется согласовать действия. Они могут обмениваться письмами. Каждый генерал в письме сообщает о численности войск. Образуются векторы. Их сравнивают, и ложная информация, и её источник, обнажаются на фоне всех данных.
Ноды в блокчейне действуют по тому же принципу. Если кто-то транслирует неверное состояние сети (балансы, транзакции), алгоритм Tendermint будет исключать их из процесса валидации. Часто – штрафовать. BFT использует и популярная сеть Ethereum.
Особенности протокола Tendermint

Tendermint Inc. – организация. Она открыто предоставляет доступ к движку Tendermint Core и API – Application Blockchain Interface (ABCI).
Tendermint Core
Протокол, промежуточное программное обеспечение. Получает код на любом программном языке и безопасно реплицирует его на множество машин.
Отвечает за распространение данных о блоках и транзакциях по узлам, фиксирует их порядок.
Протокол Bitcoin обслуживает базу неизрасходованных выходов (UTXO), подпись и валидацию транзакций, предотвращение попытки двойных трат. Что делает его монолитным. На Tendermint эти обязанности возлагаются отдельно на ABCI.
Application Blockchain Interface (ABCI)
Простое API для приложений.
Передаёт данные в Tendermint Core через 3 отдельных соединения:
- DeliverTx – подробности транзакции. Идентифицируются для одобрения её к размещению в мемпуле.
- CheckTx – проверка одобренных транзакций. Только такие могут быть затем переданы в базу всей сети.
- Commit – фиксация криптографического доказательства валидности состояния сети, для размещения в следующем хэше блока. Обеспечивает непрерывность. Работа легковесных клиентов возможна – доказательства получаются из хэшей блоков по древу Меркла.
ABCI как отдельный слой может работать на любых языках программирования.
Детерминизм
Консенсус в Tendermint был бы невозможен без предсказуемости. Язык Solidity (Ethereum) тоже детерминирован.
Для этого свободные языки (Java, C++, Python, Go…) частично ограничивают от источников псевдослучайности: генераторы случайных чисел, соревновательные состояние потоков, системные часы, неинициализированная память, арифметика с плавающей запятой.
Статический анализатор проверяет код на детерминизм (эту задачу разработчики могут выполнять и вручную), и так Tendermint достигает консенсус в условиях мультиязычности.
Достижение консенсуса
Валидаторы поочередно предлагают блоки и голосуют за их фиксацию в рамках одного механизма. Раунды разработчики именуют полькой (в честь танца). ⅔ участников должны сойтись в мнении касательно предложения, чтобы оно было одобрено и сеть пошла дальше.
Если предлагающий узел долго не отвечает или находится не в сети – остальные ждут некоторое время, и затем пропускают его. Зависимость от тайм-аута делает Tendermint слабо синхронным протоколом, но в остальном он асинхронен.
Стейкинг
Чтобы валидатор получил право голосовать, он должен заморозить свои монеты на время работы. В Tendermint это называется «бондинг». Криптовалюта замораживается на несколько месяцев, во избежание атак. Это отличает Тендерминт от многих PoS систем.
Силу голоса определяет количество монет в стейкинге. Простые пользователи могут доверить свой стейк валидаторам и получать долевую доходность.
Преимущества и недостатки Tendermint
- Высокая пропускная способность (транзакции подтверждаются сиюсекундно)
- Горизонтальная масштабируемость (путём зонирования)
- Поддержка всех языков программирования
- Экономия вычислительных ресурсов (не требуются мощности как при майнинге PoW)
- Отсутствие мотивации у пользователей с небольшим стейком поддерживать демократию (психологически они считают незначительность своей роли процессе голосования, и власть концентрируется в руках бирж и других сервисов со временем)
- Стейк замораживается на несколько месяцев
Примеры использования
Cosmos (Interchain Foundation) – децентрализованная экосистема блокчейнов. Десятки млрд. $ уже вращаются в этой сети. Пользователи могут размещать в стейкинг базовую монету ATOM и получать доходность. Своя цепочка создаётся за 5 минут, для этого есть готовый тулкит. Binance, Terra, Hub, Crypto.com и Thorchain создали свои сети на Cosmos. А Cosmos использует движок Tendermint.
Fabric – использует реализацию PBFT (1999) для изучения возможности исполнения недетерминированного цепного кода. По итогам работы можно выпустить Fabric как приложение ABCI для Tendermint.
Ethermint – экспериментальная версия сети Ethereum на Tendermint.
Burrow – копия виртуальной машины Ethereum и механики транзакций, но с дополнительными функциями: реестр имён, права, нативные контракты, альтернативный блокчейн API.