Алгоритм консенсуса Tendermint

    Алгоритм консенсуса Tendermint
    0

    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

    image

    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.

    от РЕДАКЦИЯ
    Регистрируясь, вы акцептуете Оферту
    Товарный знак Кошелёк.ру принадлежит
    ООО "Кошелёк.ру" (ИНН 7811454512)
    [email protected]
    8(800)55555-89 для звонков по РФ
    +7(900)55555-89 для международных звонков и мессенджеров