Алгоритм консенсуса 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 для международных звонков и мессенджеров