Алгоритм консенсуса Tendermint – полный обзор

Tendermint – это алгоритм консенсуса, характеризующийся устойчивостью к византийским падениям (BFT). Протокол создавался под Cosmos Network, который запустился в марте 2019 года. Основной акцент делается на валидаторах, поддерживающих работоспособность сети. Поскольку Tendermint и Cosmos разрабатываются одной командой и формируют единую масштабируемую сеть, рассмотрим взаимодействие и особенности этих двух проектов.

История создания

Cosmos и Tendermint BFT находятся в собственности Tendermint Inc. Это некоммерческая организация, созданная в 2014 году Дже Квоном . После заключения контракта с фондом Interchain Foundation, компания начала активную работу над проектом, объединяющим Cosmos с Tendermint. Готовая сеть запущена в марте текущего года.

Команду возглавляют:

  • Дже Квон – основатель и генеральный директор компании.
  • Этан Бухман – соучредитель и первый помощник Квона.
  • Пэн Чжун – главный разработчик.

Пост технического директора занимает Заки Маниан.

Алгоритмы консенсусов

С момента появления Proof-of-Work (PoW), который задействован в самой первой криптовалюте Биткоин, была проделана большая работа по поиску новых алгоритмов консенсуса. Использование старого PoW со временем перестало удовлетворять потребности блокчейна, пересмотру подвергалось все: устойчивость к ряду новых атак, пропускная способность, масштабирование и т. д.

Сегодня не так много проектов, которые решают сразу все эти проблемы. Прежде всего это криптовалюты на Proof-of-Stake, такие как BitShares, Lisk, EOS, еще можно выделить NEM, который функционирует на Proof-of-Importance. Но сегодня мы подробно остановимся на Tendermint.

Валидаторы

В алгоритмах PoS и PoW, майнером может стать каждый желающий в любое время, тогда как в Tendermint поддержку сети осуществляют валидаторы.

Правила, по которым обычный пользователь может получить функции валидатора, зависят от реализации проекта. Если говорить о простых случаях, там валидаторы изначально объявляются в genesis блоке и в дальнейшем их список не меняется. Такое решение повышает уязвимость к атакам, тем не менее, его применяют многие сети. Правда, они требуют, чтобы количество византийский валидаторов не превышало 1/3 от общего числа.

Особенность Tendermint в том, что он дает возможность применить механизм ротации валидаторов. Чтобы ввести данную функцию, в протоколе нужно указать транзакцию, которая отправляется участником в случае, если он намерен баллотироваться и выполнил для этого все требования, прописанные той или иной сетью. Также разработчики могут применять механизм голосования, как в Lisk.

Tendermint дает возможность получить список валидаторов для любого блока. В процессе голосования валидаторы подписывают отправляемые сообщения своими приватными ключами, при этом идентифицируются они по публичным ключам. Это дает возможность определить автора голоса. Таким образом, посторонние не могут принимать участие в построении консенсуса.

Справка! Транзакции на изменение списка валидаторов ничем не отличаются от обычных транзакций. Они все сохраняются в блокчейн и доступны каждому, кто хочет посмотреть список валидаторов. 

Схема

Рассмотрим, что же происходит в алгоритме при подписании блока N.

алгоритм

Propose – определяется алгоритмом в зависимости от его веса в списке. Что подразумевается под понятием «вес», каждый разработчики определяет индивидуально. В самых простых случаях вес всех валидаторов равноценный, то есть выбор будет равномерным. Выбор по весу дает 2 преимущества: необходимую детерминированность и защиту от атак, которые связаны с определенной последовательностью выбора. Propores предлагает собственный блок на высоту N.

Prevote – на этом этапе валидаторы «оценивают» блок. В самом простом случае они отправляют сообщение на подобии «Согласен с полученной информацией».

Precommit – этап проверки накопленных Prevote сообщений. Если одобрительных заявок 2/3 и больше, валидатор отправляет системное сообщение Precommit. Если же голосов недостаточно, ставится пометка Precommit nil.

Все три этапа, которые изображены в скобках на скрине, составляют раунд. Его смысл в том, чтобы при обнаружении подозрительных действий не допустить создание блока. Но не всегда причина кроется в недобросовестности prosper-а. Как вариант, он может быть офлайн. В таком случае система вносит в консенсус определенные изменения:

  1. Увеличение продолжительности этапа. У каждого из них есть отведенное время, например, 3 секунды, после чего валидатор переключается на следующий шаг. Но есть высокая вероятность сбоев: у пользователя может быть плохой интернет, он не успел загрузить блок и т. д. В таком случае время на выполнение заданных функций увеличивается.
  2. Выбор нового proposer. Если участник не выполняет качественно свою работу или намеренно пытается вредить сети, его сменяет другой proposer.

В официальной документации Tendermint приведена иллюстрация, которая изображает весь процесс:

процесс

Злонамеренный proposer

Чтобы понять принцип работы алгоритма, рассмотрим пример:

  • Предположим, есть 5 валидаторов: A, B, C, D, E. При этом количество всех участников сети не играет особой роли.
  •  Валидатор A выбран proposper-ом. Даже сделаем его византийским валидатором, чтобы посмотреть на принцип работы алгоритма в моменты, когда сеть пытаются скомпрометировать. Византийский валидатор – это пользователь, который осуществляет злоумышленные действия.
  • Продолжительность каждого этапа – t секунд.

Для создания блока X требуется пройти все этапы поочередно. Сначала нужно создать блок и запустить его в сеть. Важно уложиться в заданное время, иначе информация не дойдет к валидаторам.

шаги

Следующий шаг – Prevote. Валидаторы должны проверить блок, одобрить или отклонить его. Если B, C, D, E не признают рассматриваемый блок, они отправляют сетевое сообщение с пометкой Prevote nil.

Предположим, у валидатора E плохой интернет и ему не хватило времени на получение информации. Пользователь A хочет поддержать свой блок и отправляет системе одобрительное сообщение – Prevote. Поскольку у валидатора E трудности с интернетом, к нему не дошло сообщение ни от одного участника процесса.

участники процесса

 

Сообщения каждого валидатора на данном этапе выглядят так:

Сообщения валидатора

Через перебои с Интернетом никто из участников не получил сообщение от пользователя E.

Теперь участники переходят на заключительный этап – Precommint. Prevote сообщения каждого не набирают 2/3 голосов, поэтому они отправляют сообщение с пометкой Precommit nil (за исключением валидатора E, у которого по-прежнему нет интернета).

Сообщения выглядят следующим образом:

Сообщения

Никто не собрал 2/3 голосов, поэтому раунд заканчивается без создания блока высоты X.

Справка! Не менее 2/3 precommit сообщений находится в каждом блоке. Если пользователь A захочет раскидать по сети некорректный блок, он не получит нужное количество сообщений для его подтверждения. Подвох может заметить каждый из участников.

Оптимальный сценарий

В предыдущем раунде блок не был создан. Теперь система предполагает переизбрание proposper. Пускай в это раз им будет участник B. Чтобы не допустить медленного соединения, время выполнения каждого этапа будет немного увеличено.

Начинаем с первого шага. Информация о валидности блока дошла до всех участников. Предположим, A продолжает оставаться злонамеренным и старается помешать процессу. Картина для каждого пользователя выглядит так:

пользователи

Теперь у всех участников достаточно голосов для одобрения блока. Все они (кроме A) отправляют сообщение с пометкой Precommint. Пользователь A отправляет – Precommint nil, хотя это не совсем правильно с его стороны.

блоки

В этом случае злонамеренные действия не помешали набрать 2/3 голосов, поэтому генерация блока состоялась.

Tendermint Core

Tendermint Core объединяет консенсус Tendermint с p2p протоколом. Когда все эти элементы собираются в программный стек, получается Tendermint Core с прикладным уровнем Cosmos-SDK.

Таким образом, архитектура Tendermint Core имеет 3 уровня:

  1. Сеть
  2. Консенсус.
  3. Приложение

Рассмотрим каждый из них подробно.

Сетевой уровень

Сеть – это одноранговый стек. С помощью интерфейса ABCI любая цепочка может запускаться поверх консенсуса Tendermint. В качестве приложения, Tendermint использовал виртуальную машину Ethereum, создав проект под названием Ethermint.

Все эти цепочки используют одно программное обеспечение, поэтому могут формировать отдельную и самодостаточную сеть.

Уровень консенсуса

Платформа Tendermint первой начала использовать алгоритм византийской отказоустойчивости. Он передает информацию об отказах, или о том, что сеть не скомпрометирована.

Для многих систем обнаружение неисправного или злонамеренного компонента – довольно сложный процесс. Технические характеристики Tendermint позволяют справиться с этой задачей, обеспечивая качественную и перебойную работу сети.

Уровень приложения

Это конечная точка, где Dapps и токены используются как надстройка над Tendermint. Элементы сети объединяются в программный стек.

До запуска Ethereum, создать ПО с нуля было чрезвычайно сложно. В качестве платформы использовалось приложение EVM, которое обеспечивало связь с необходимыми элементами. Блоки создавались поверх основной сети. Но это имело существенный недостаток – разработчики не могли осуществлять полный контроль над собственными приложениями. Виртуальная машина диктовала свои стандарты, а предложения разработчиков не имели значения.

Tendermint предлагает запуск готовых приложений поверх сети Tendermint Core. При этом сетевые уровни и консенсус обрабатываются в автоматическом режиме. Приложения могут обмениваться информацией через интерфейс ABCI.

Платформа Cosmos

Cosmos Network создан для взаимодействия существующих блокчейнов. Также на базе сети можно создавать новые приложения. Платформа старается расширить возможности цепочек и создать систему распределенных независимых блокчейнов, которые будут называться хабами или зонами. Внутри системы будет развиваться здоровая конкуренция, при этом существующие блокчейны смогут с легкостью общаться и взаимодействовать друг с другом. Платформа предлагает выгодные условия всем участникам системы: валидаторам, делегатам, разработчикам и простым пользователям.

Валидаторы

Поддержку сети Cosmos обеспечивают валидаторы. Чтобы обеспечить децентрализацию, после подписанных результатов голосования, они обязаны их транслировать.

На счету у каждого валидатора должны находится токены ATOM, замороженные на определенный период времени. 100 первых валидаторов Cosmos были назначены в день запуска сети. Они определялись по результатам купленных токенов в процессе ICO. Разработчики Cosmos заявили, что количество валидаторов каждый год будет увеличиваться на 13 %, пока их количество не составит 300.

Валидаторы могут выбирать любые транзакции, принимать оплату за них в любой криптовалюте, устанавливать обменные курсы на свое усмотрение. Но существуют правила, которые они обязаны соблюдать, в частности подписывать валидные транзакции и находиться онлайн. Если валидатор нарушает правила, система уменьшает долю токенов на счету в рамках оговоренных условий конкретной зоны.

Делегаты

Делегатами являются все пользователи, у которых на счету находятся токены Атом. Они могут передавать свои активы в доверительное управление валидатором. Для повышения безопасности сети, разработчики внедрили механизм, согласно которому все риски по доверительной передаче средств берут на себя делегаты. Это стимулирует их ответственно подходить к выбору валидаторов.

Фонд вознаграждения делегатов состоит из транзакционных комиссий и инфляционных издержек. Валидаторы в свою очередь получают комиссию от держателей Атом. Они могут самостоятельно устанавливать комиссию, но обычно она на одном уровне, поскольку невыгодных лидеров делегаты быстро заменяют новыми. Если валидатор захочет делегировать, он должен использовать для этого свободные монеты Атом.

Поскольку делегаты выбирают валидаторов, они несут ответственность за их действия. 

На данный момент все участники сети получают вознаграждение в токенах Атом. Уровень дохода зависит от внутренней политики конкретного хаба. Поскольку к Comos постепенно будут добавляться новые проекты, со временем пользователи смогут получать вознаграждение в других валютах. Но функция стейка будет закреплена за Атомом постоянно.

Разработчики

Cosmos-SDK дает возможность создавать приложения на любом программном языке. Также разработчики могут запускать свои проекты на Ethermint, при условии, что в них не применяется блокчейн, и не задействуются валидаторы.

На базе платформы можно разворачивать бизнес-модели блокчейн-проектов при помощи универсального интерфейса ABCI. Также Cosmos предлагает фреймфорк Lotion, который позволит использовать JavaScript для создания своих проектов. Фреймфорк функционирует поверх Tendermint и применяет интерфейс ABCI.

Разработчики готовых приложений могут создавать для них hard spoons, подобно Ethermint. Таким образом, будут разрабатываться дополнительные элементы для существующих экосистем.

Пользователи

Пользователи не вовлечены в процесс достижения консенсуса, но система привлекает их по ряду других причин:

  • Зоны доступны правительствам и предприятиям для разворачивания кастомизируемых блокчейнов, которые не требуют собственных механизмов достижения консенсуса. В рамках зоны, организации могут запускать собственные услуги, которые выполняются блокчейном при достижении консенсуса. При этом предприятия не раскрывают данные для всех участников и не теряют к ним доступ.
  • Гибкость функционала Cosmos позволяет взаимодействовать разным блокчейнам, независимо от их структуры.  Все зоны на базе сети передают друг другу активы при помощи хабов, в которых находится информация о состоянии балансов. При этом принцип работы Cosmos не имеет ничего общего с атомарными свопами. Это асимметричная передача данных. Система дает возможность создавать зоны под любые нужды. Их работа регулируется валидаторами через установление параметров консенсуса.
  • В качестве одной из зон на базе Cosmos будет находиться децентрализованная биржа DEX. Это позволит обменивать активы в автономном режиме, не прибегая к услугам централизованных сервисов. Транзакции станут дешевле и безопаснее.

А еще проект поощряет хакеров, которые выявляют уязвимости на раннем этапе. При обнаружении эксплойта, работа ответственных валидаторов и делегатов приостановится, и доля их средств будет перенаправлена на счет этого хакера.

Отличия Tendermint от Casper

Задача византийских генералов была озвучена Шостаком, Пизом и Лампортом еще в 1982 году. Она описывалась как «надежная система из ненадежных запчастей» для коммуникационных распределенных сетей. До 1998 года никто так и не создал систему, которая успешно решала бы BTF. Следует признать, что на тот момент в ней не особо нуждались, поскольку Интернет только начинал эволюцию от централизованных к распределенным вычислениям. Единственное, что было нужно – это отказоустойчивость.

Первым отказоустойчивым алгоритмом стал Paxos. Его создали в 1998 году, и в течение 15 лет он оставался единственным в своем роде. Второй протокол, получивший широкое распространение, появился только в 2015 году. Это Raft. Что касаемо PBFT, с 1999 года он оставался в стенах академических организаций и не выходил за их рамки. В блокчейне его впервые применил Сатоши Накамото, после чего технологией активно заинтересовались другие исследователи. Они начали искать способы ее реализации в реальном мире.

В 2011 году на bitcointalk начали обсуждать идею, которая после реализации стала называться Proof-of-Stake. Но первые эксперименты, например, Peercoin, подорвали доверие к технологии за счет неудачной реализации. Только в 2014 году Дже Квон предложит внедрить BFT в PoS. В результате появился алгоритм под названием Tendermint.

В тот момент разработчики считали, что узлы в системе будут оставаться стабильными на протяжении длительного времени. PoS применялся исключительно их этого допущения. Но реальные условия блокчейна были совсем другие.

Дже Квон первым предложил соединить блокчейн и BFT, используя динамический набор валидаторов и их последующую ротацию. Чуть позже эту идею подхватили другие проекты, такие как Tezos, Casper, Honeybadger. Хотя платформы по-разному подходили к реализации, цель оставалась единой – достижение уровня безопасности, подобного PoW, но без расходования материальных ресурсов. PoS предлагает замену мощности хеширования на мощность голосования, деноминированную в нативной валюте. Но «чистая» версия алгоритма не может решить всех проблем блокчейна, в частности угрозу атак, рост централизации и т. д. Поэтому разработчики продолжают привлекать инвестиции для исследования PoS и его модификации.

Ниже я рассмотрю 3 варианта PoS, которые составляют основу трех криптовалютных протоколов: Tendermint, Casper от Влада Замфира и Casper FFG от Бутерина.

Tendermint

Основные свойства:

  • Граница безопасности составляет 1/3 валидаторов.
  • Совместим с различными сетями.
  • Мгновенная финализация. Все зависит от количества валидатор, но обычно этот процесс занимает 1-3 секунды.
  • Живучесть за счет частичной синхронизации.

PoS-алгоритм на основе BFT дает валидаторам право предлагать новые блоки, за которые голосуют остальные участники. Процесс состоит из многих раундов и требует большинства голосов для финализации блоков. Если поддержка будет меньше 2/3 от общего количества валидаторов, блок не закроется. На подтверждение может потребоваться несколько раундов. Технология BFT терпима только к 1/3 сбоев, где сбои – это недобросовестное или произвольное поведение.

Механизм консенсуса Tendermint Core гарантирует, что на каждом ПК одни и те же транзакции записываются в одинаковом порядке.

Casper Влада Замфира (Vlad Zamfir)

Основные характеристики:

  • Сопротивляемость олигополии: сговор валидаторов не поможет получить контроль над алгоритмом.
  • Живучесть, которая достигается частичной синхронизацией.
  • Доступность: Casper предусматривает форк блока до достижения консенсуса.
  • Асинхронная безопасность, зависящая от уровней, которые определяются валидаторами.

Casper CBC – алгоритм разработанный с нуля и оптимизированный для противостояния пулам валидаторов. Замфир адаптировал протокол GHOST под PoS (GHOST изначально разрабатывался под PoW). Casper CBC предлагает достижение безопасности за счет криптоэкономических методов. В отличие от Casper Бутерина, это чистая PoS концепция. Подобно протоколу PoW, CBC жертвует согласованностью ради доступности. Но у CBC и Casper Бутерина есть общее свойство – голова цепи увеличивается гораздо быстрее, чем финализируются блоки.

Уникальное свойство Casper CBC заключается в том, что валидатор сам выбирает целевые уровни безопасности. Этот процесс осуществляется аналогично подтверждению транзакций в Биткоине, например, 6 принятых сообщений формируют общепринятый параметр для финализации. Но по сравнению с PoW, CBC поддерживает низкий уровень дополнительного времени.

Преимущество обеих версий Casper над Tendermint заключается в количестве валидаторов, одновременно принятых системой. Финализация блоков в Tendermint происходит параллельно с их созданием, поэтому времени на создание отводится немного. Это ограничивает количество валидаторов с правом голоса.

Casper не предусматривает мгновенную финализацию, поэтому имеет большее количество валидаторов.

Casper Виталика Бутерина

Casper FFG – это своего рода надстройка над PoW в Эфириуме. Проще говоря, это гибридный алгоритм, который объединяет PoS и PoW.

Протоколы PoW в Биткоине и Эфириуме не принимают окончательных решений, получается, что теоретически блоки можно переписать до прошлой высоты цепочки. Блок становится финализированным только в том случае, если его невозможно переписать ни при каких обстоятельствах.

PoW не гарантирует финализацию, поэтому на уровне консенсуса его нельзя назвать безопасным. Чем глубже PoW блоки погружаются в блокчейн, тем выше шансы на их финализацию. Внедрение FFG в блокчейн добавит этому процессу свойство необратимости и сопротивляемости «атаке 51 %». Переход от PoW к PoS происходит поэтапно.

Механизм Casper заложен в смарт-контрактах. Чтобы стать валидатором, пользователю необходимо отправить на смарт-контракт конкретное количество монет. В первой генерации Casper, процесс предложения блоков останется прежним, как в Биткоине. Надстройка лишь будет их финализировать при помощи валидаторов.

Главный элемент PoS консенсуса FFG – чекпойнты – это каждый 50 блок, финализация которого оценена протоколом. Чекпойнты формируют сегменты из 50 блоков, называемые эпохой. В Ethereum появляются первые валидаторы, голосующие за блоки в каждой эпохе.

Финализация чекпойнта из предыдущей эпохи состоит из 2 раундов:

  1. Легализация блока 1 – когда 2/3 валидаторов голосуют за первый блок в первой эпохе.
  2. 2/3 голосует за второй блок во второй эпохе; блок 2 – это прямой наследник блока 1.

Этот процесс финализирует первый блок во второй эпохе, которая называется LFE.

Таким образом, основное отличие Casper от Tendermint заключается в том, что в первом случае вместо псевдослучайного определения валидаторов, лидеры могут предлагать те блоки, которые они видели. Кроме того, Casper предполагает большее количество валидаторов, участвующих в подтверждении блока.

Преимущества и недостатки Tendermint

Главная задача Tendermint – предоставить разработчикам практичный инструмент с высокой пропускной способностью.

Преимущества протокола:

  • Высокая производительность. Время блока в ядре Tendermint – 1-3 секунды. Также алгоритм позволяет обрабатывать до 1000 транзакций в секунду, если только это позволяет конкретное приложение. Продукты, созданные при помощи Tendermint Core, могут рассчитывать на исключительную производительность.
  • Совместимость блокчейнов. Проекты имеют разные цели. Одни остаются открытыми, как Ethereum, другие – закрытыми. Медицинские организации, например, не могут предоставлять свои данные на общее обозрение, поэтому они требуют что-то наподобие разрешенного блокчейна. Tendermint удовлетворяет потребности каждого, предоставляя возможность распространять информацию по протоколу «сплетни». Участники согласовывают транзакции, которые затем публикуются в блокчейн. Уровень приложений может определяться разными способами. Разработчики сами решают, добавлять ли в свое приложение систему выборов, ограниченный набор предварительно подтвержденных валидаторов и т. д.
  • Безопасность. Все участники в Tendermint несут ответственность за свои действия. Протокол не допустит разветвлений, если 2/3 участников сети являются вредоносными. Алгоритм обладает максимальной византийской отказоустойчивостью.
  • Окончательность. После выполнения какого-либо действия, его нельзя откатить назад. Если вы покупаете акции компании за миллионы долларов, вы должны быть уверены, что никакие сбои в системе не приведут к потере прав собственности. До завершения всех циклов интеграции Casper FFG в Биткоин и Эфириум, эти системы не предусматривают окончательный расчет. В случае взлома или хардфорка, систему можно откатить назад. В Tendermint блок создается за 1-3 секунды, после этого пользователи могут быть уверены, что их транзакция окончательно завершена.
  • Масштабируемость. Tendermint реализован эффективнее, чем традиционный PoS, поэтому масштабируемость у него лучше. Горизонтальное разделение баз данных и создание меньших сегментов обеспечивают их параллельное выполнение. Tendermint позволит реализовать шардинг.
  • Простота в использовании. Уровень приложений может настраиваться соответствующим образом. Базовые кодовые цепочки можно легко связать через ABCI – это интерфейс, с помощью которого можно отделять консенсус от логики приложения. Разработчики могут писать приложения на любом языке, а всю дальнейшую работу сделает Tendermint. На самом деле, ABCI – очень крутая вещь.

Из недостатков могу отметить то, что если нода за установленное время не создает блок, участники процесса ждут некоторое время до начала следующего раунда.

Заключение

Когда мы говорим о Tendermint, чаще всего подразумеваем утилиту https://github.com/tendermint/tendermint/, в состав которой входит данный алгоритм. Это программный стек, который состоит из алгоритма консенсуса, p2p сети, RPC, ABCI – интерфейса и т. д.

С помощью консенсуса достигается согласие в группе. Голосование устанавливает правила большинства, и часто интересы меньшинства не учитываются. Tendermint обеспечивает соглашение, которое несет пользу всем участникам сети. Консенсус может использоваться группой людей, разбросанных по всему земному шару, для создания равноправного и справедливого сообщества.

Tendermint обеспечивает исключительную производительность. Пропускная способность, которая превышает 1000 транзакций в секунду, обеспечивается даже в неблагоприятных условиях, когда валидаторы транслируют злонамеренные действия.

Источники

https://blockgeeks.com/guides/tendermint/

https://golos.io/vox-populi/@cyberanalytics/obzor-proekta-cosmos-network

https://bits.media/sravnenie-konsensusov-proof-of-stake-casper-protiv-tendermint/

https://medium.com/cosmos-russia/%D0%BA%D0%BE%D1%80%D0%BE%D1%82%D0%BA%D0%BE-%D0%BE-tendermint-%D0%B8-cosmos-network-f447789b7e45

Дмитрий Шустов/ автор статьи

Автор популярных материалов на различных криптовалютных и блокчейн площадках.

Интересуюсь данной сферой с 2015 года. Трейдер-аналитик. Junior-программист.

Окончил Московскую школу экономики.

Работаю в АНО "Рейтинговое агентство оценки проектов цифровой экономики".

Понравилась статья? Поделиться с друзьями:
EX4.ru
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Adblock
detector