tendermint bft что это
Алгоритм консенсуса Tendermint – полный обзор
Tendermint – это алгоритм консенсуса, характеризующийся устойчивостью к византийским падениям (BFT). Протокол создавался под Cosmos Network, который запустился в марте 2019 года. Основной акцент делается на валидаторах, поддерживающих работоспособность сети. Поскольку Tendermint и Cosmos разрабатываются одной командой и формируют единую масштабируемую сеть, рассмотрим взаимодействие и особенности этих двух проектов.
История создания
Пост технического директора занимает Заки Маниан.
Алгоритмы консенсусов
С момента появления 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-а. Как вариант, он может быть офлайн. В таком случае система вносит в консенсус определенные изменения:
В официальной документации Tendermint приведена иллюстрация, которая изображает весь процесс:
Злонамеренный proposer
Чтобы понять принцип работы алгоритма, рассмотрим пример:
Для создания блока 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 уровня:
Рассмотрим каждый из них подробно.
Сетевой уровень
Сеть – это одноранговый стек. С помощью интерфейса 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. Таким образом, будут разрабатываться дополнительные элементы для существующих экосистем.
Пользователи
Пользователи не вовлечены в процесс достижения консенсуса, но система привлекает их по ряду других причин:
А еще проект поощряет хакеров, которые выявляют уязвимости на раннем этапе. При обнаружении эксплойта, работа ответственных валидаторов и делегатов приостановится, и доля их средств будет перенаправлена на счет этого хакера.
Отличия 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
PoS-алгоритм на основе BFT дает валидаторам право предлагать новые блоки, за которые голосуют остальные участники. Процесс состоит из многих раундов и требует большинства голосов для финализации блоков. Если поддержка будет меньше 2/3 от общего количества валидаторов, блок не закроется. На подтверждение может потребоваться несколько раундов. Технология BFT терпима только к 1/3 сбоев, где сбои – это недобросовестное или произвольное поведение.
Механизм консенсуса Tendermint Core гарантирует, что на каждом ПК одни и те же транзакции записываются в одинаковом порядке.
Casper Влада Замфира (Vlad Zamfir)
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 раундов:
Этот процесс финализирует первый блок во второй эпохе, которая называется LFE.
Таким образом, основное отличие Casper от Tendermint заключается в том, что в первом случае вместо псевдослучайного определения валидаторов, лидеры могут предлагать те блоки, которые они видели. Кроме того, Casper предполагает большее количество валидаторов, участвующих в подтверждении блока.
Преимущества и недостатки Tendermint
Главная задача Tendermint – предоставить разработчикам практичный инструмент с высокой пропускной способностью.
Из недостатков могу отметить то, что если нода за установленное время не создает блок, участники процесса ждут некоторое время до начала следующего раунда.
Заключение
Когда мы говорим о Tendermint, чаще всего подразумеваем утилиту https://github.com/tendermint/tendermint/, в состав которой входит данный алгоритм. Это программный стек, который состоит из алгоритма консенсуса, p2p сети, RPC, ABCI – интерфейса и т. д.
С помощью консенсуса достигается согласие в группе. Голосование устанавливает правила большинства, и часто интересы меньшинства не учитываются. Tendermint обеспечивает соглашение, которое несет пользу всем участникам сети. Консенсус может использоваться группой людей, разбросанных по всему земному шару, для создания равноправного и справедливого сообщества.
Tendermint обеспечивает исключительную производительность. Пропускная способность, которая превышает 1000 транзакций в секунду, обеспечивается даже в неблагоприятных условиях, когда валидаторы транслируют злонамеренные действия.
Сравнение консенсусов Proof of Stake: Casper против Tendermint
Задача византийских генералов (BFT) была впервые поставлена в 1982 году (Lamport, Shostak, Pease) для распределенных коммуникационных сетей и упрощенно ее можно сформулировать как «создание надежной системы из ненадежных частей». Вплоть до 1999 года система, успешно решающая BFT, так и не была создана, да она и не была особенно актуальна, поскольку интернет только эволюционировал от централизованных вычислений к распределенным; все, что требовалось, это устойчивость к сбоям.
Поэтому, первыми получили широкое распространение простые отказоустойчивые алгоритмы Paxos (1998) и Raft (2013). Созданный в 1999 году алгоритм PBFT (P – значит практичный), не выходил за пределы академических структур. Прорывом стала работа Сатоши Накамото, впервые применившего BFT консенсус в схеме блокчейна, и после практической демонстрации этого решения многочисленные исследователи начали искать варианты использования технологии в задачах реального мира.
В 2011 году, на ветке BitcoinTalk сформировались первые обсуждения идеи, впоследствии получившей название Proof-of-Stake, однако первые реализации PoS, такие как Peercoin, изрядно подорвали репутацию идеи. Одним из первых исследователей, предложивших реализацию BFT в PoS открытого блокчейна, стал Чэ Квон (Jae Kwon), основавший Tendermint в 2014 году.
В то время разработчики PoS исходили из допущения, что набор узлов в сети является статическим и остается стабильным на протяжении долгих периодов, что оказалось полностью несостоятельным в условиях реального блокчейна. Чэ Квон впервые адаптировал BFT к блокчейну, используя динамический набор валидаторов и ротацию лидеров, в протоколе Tendermint. За ним последовали другие проекты PoS (Honeybadger, Tezos, Casper, Ouroboros); все они использовали разные подходы, однако все искали ответ на один и тот же основной вопрос: возможно ли достичь такого же уровня безопасности как у алгоритма PoW Биткойна, не расходуя при этом материальные ресурсы? В PoS мощность голосования, деноминированная в нативной криптовалюте, приходит на замену мощности хэширования. Широко известные проблемы блокчейна: ограничение пропускной способности, высокие издержки на обслуживание майнеров PoW и экологические соображения, стали весомым стимулом для привлечения существенных ресурсов в исследования PoS.
Ниже будут рассмотрены различные варианты PoS, лежащие в основе трех основных криптовалютных протоколов: Casper the Friendly Ghost (или CBC – Correct by Construction), разрабатываемый Владом Замфиром, Casper FFG (Friendly Finality Gadget) Виталика Бутерина и Tendermint Чэ Квона.
Ловушки Proof-of-Stake
Нечего терять
В Proof-of-Work наказание за майнинг на конкурирующих цепях заключается в том, что майнер вынужден делить свою мощность хэширования (ценный ресурс) между форками,
Защита от этой атаки – введенное Виталиком Бутериным понятие «бритвы» (Slasher), когда недобросовестные действия влекут за собой потерю депозита. Такая бритва, вместе с набором условий, которые влекут за собой ее применение, включена во все три рассматриваемые BFT PoS протокола.
Атака из глубины (Long distance attack)
По окончании цикла работы, валидатор забирает свой депозит. Атакующий может построить форк из некоторой глубины цепи, без опасения потерять депозит. Как только депозиты разморожены, исчезает стимул не голосовать за форк, начиная с некоторой высоты цепи. Другими словами, когда депозиты более 2/3 валидаторов разморожены, они могут создать дублирующую цепь, включающую в себя прошлый набор валидаторов, и производить произвольные альтернативные транзакции.
Это может стать критичным для протоколов PoS, так как их модель безопасности обязательно «субъективна». Модель безопасности называется субъективной, если участие в сети требует большого количества социальной информации; новые узлы, появляющиеся в сети, делают различающиеся выводы о текущем состоянии сети, поскольку их решение базируется на субъективной информации, т. е., на социальной репутации. И напротив, модель безопасности PoW обязательно «объективна», так как текущее состояние сети всегда будет состояние с максимальным количеством доказательства работы, и все новые узлы появляются с одинаковым выводом, поскольку их выводы основаны на объективной информации.
Противодействие атакам из глубины осуществляется с помощью модели слабой субъективности, которая требует от новых узлов соблюдения следующих правил:
Доверенными могут быть только узлы, уже обладающие депозитами.
Размороженные депозиты могут быть перемещены только после некоторого «периода оттаивания». После разморозки, токены должны оставаться на месте от недель до месяцев, так, чтобы удовлетворялись условия синхронизации (т. е., отсроченные сообщения)).
Запрет отката дальше чем N блоков, где N – длина депозита.
Опционально: записывать набор валидаторов в блокчейне PoW.
И в обоих вариантах Casper, и в Tendermint, используется простой механизм залогового депозита с последующим «оттаиванием» на срок от недель до нескольких месяцев. К тому же, Casper FFG содержит правило выбора форка, согласно которому откатить назад завершенный (finalized) блок невозможно. Все попытки переписать блок старше последнего завершенного игнорируются протоколом.
Картельный сговор
Наконец, третье препятствие, стоящее перед любой экономической парадигмой, обладающей ценностью, это проблема олигополии, и децентрализованные криптовалютные протоколы здесь не исключение.
Криптовалюта стремится к концентрации в руках немногих. То же касается и майнинговых мощностей. На многих рынках «реального мира» конкуренция между олигополиями считается нормой. Наладить координацию между несколькими богатыми валидаторами несравнимо проще, чем скоординировать большое количество относительно бедных валидаторов. Так что в этом контексте картельные сговоры полностью ожидаемы.
В борьбе с олигополией валидаторов, Tendermint полагается на вне-протокольные способы сопротивления цензуре. Его авторы утверждают, что пользователи неизбежно заметят формирование картеля, и социальными методами распространят информацию об этом, после чего либо покинут атакуемый блокчейн, либо реорганизуют его.
Таким образом, единственной моделью, явно содержащей способы борьбы с образованием картелей, остается Casper CBC Замфира.
Общий обзор
Два базовых варианта алгоритма PoS – это PoS на основе цепи и BFT-PoS. Tendermint представляет собой BFT вариант; Casper CBC – цепь, а Casper FFG – гибрид двух предыдущих.
Теорема CAP говорит о невозможности одновременного обеспечения больше двух из трех свойств:
устойчивость к разделению.
Алгоритмы PoS на основе цепи предпочитают доступность согласованности: доступность означает, что все транзакции будут обработаны, но за счет согласованного состояния, воспроизводящегося по всей цепи. Напротив, алгоритмы BFT-PoS строго выбирают согласованность, предпочитая ее доступности.
BFT PoS – Tendermint
PoS протоколы на основе BFT псевдослучайно присваивают валидатору право предлагать новые блоки в течение процесса голосования, состоящего из множества раундов. Однако, производство и финализация блоков зависит от супербольшинства (кворум в 2/3) всех валидаторов, подписавших предлагаемый блок. На это может потребоваться несколько раундов, или polkas, пока блоки не станут финализированными. BFT системы терпимы всего к 1/3 сбоев, где сбои включают в себя произвольное и/или недобросовестное поведение.
Tendermint Core
Tendermint состоит из двух основных компонентов: аппарата консенсуса и интерфейса приложений. Аппарат консенсуса называется Tendermint Core. Он отвечает за то, чтобы одинаковые транзакции были записаны на каждой машине в одинаковом порядке. Интерфейс приложений, или ABCI, дает возможность обрабатывать транзакции на любом языке программирования.
Механизм голосования Tendermint Core состоит из нескольких раундов. Каждый раунд представляет собой процесс из трех шагов: валидаторы предлагают блок, сообщают о намерении закончить его создание, а затем подписывают готовые блоки.
Алгоритм консенсуса начинается с набора валидаторов. Валидаторы держат у себя полную копию блокчейна и идентифицируются открытыми ключами. Они по очереди предлагают блоки на каждой новой высоте блокчейна. На один раунд выделяется один предлагающий блок валидатор. Каждое предложение подписывается соответственным приватным ключом валидатора, так что в случае какого-либо сбоя, валидатор, ответственный за него, может быть идентифицирован. Остальные валидаторы голосуют своими приватными ключами по каждому предложению. Однако, из-за асинхронности сети, создание блока может занять несколько раундов.
По ряду причин, блок может не получиться: например, очередной валидатор может оказаться оффлайн, или сеть может испытывать задержки. Перед тем, как перейти к следующему раунду, валидаторы ожидают получения готового предложения в течение определенного временного отрезка. Зависимость от такого таймаута делает Tendermint протоколом со слабой синхронизацией (вместо асинхронного). Однако, остальная часть протокола асинхронна, и валидаторы могут двигаться дальше только получив одобрение супербольшинства в 2/3. Это означает, что 2/3 валидаторов должны быть онлайн, иначе сеть может остановиться.
Если набор насчитывает меньше 1/3 недобросовестных валидаторов, Tendermint гарантирует безопасность (т. е., валидаторы никогда не выдадут конфликтующие блоки на равной высоте). Следовательно, форк в блокчейне, основанном на Tendermint, невозможен.
Конструкция Tendermint предпочитает безопасность и завершенность живучести. Такой подход основан на предположении, что в реальном мире система просто остановится, а участникам придется в восстанавливать систему на программном уровне, вне рамок протокола.
Основные свойства
Порог безопасности: 1/3 валидаторов;
Мгновенная завершенность: 1– 3 секунды, в зависимости от числа валидаторов;
Приоритет отдается согласованности;
Безопасный консенсус в слабо синхронной сети.
PoS на основе цепи
Алгоритмы PoS на основе цепи симулируют консенсус PoW, в котором протокол присваивает право создания целого нового блока псевдослучайно выбранному валидатору, а новый блок привязывается хэшем к родительскому блоку самой длинной предыдущей цепи.
PoS на основе цепи, в основном, опирается на синхронные сети, отдавая приоритет доступности за счет согласованности. Оба протокола Casper адаптируют базовые идеи Tendermint к конструкции, предпочитающей живучесть безопасности.
Casper the Friendly Finality Gadget (FFG)
Casper FFG представляет собой надстройку над существующим в Эфириуме механизме предложения блоков PoW – гибридную реализацию PoW/PoS, созданную под руководством Виталика Бутерина.
PoW протоколы консенсуса Биткойна и Эфириума не принимают окончательных решений и, теоретически, блоки могут быть переписаны вплоть до какой-то прошлой высоты цепи. Блок называется «финализированным», когда он ни при каких обстоятельствах не может быть переписан. Поскольку PoW не дает твердых гарантий финализации, он не считается безопасным на уровне консенсуса. Чем глубже в блокчейн погружаются блоки PoW, тем более вероятностно финализированными они становятся. Имплементация логики FFG в блокчейн Эфириума добавит ему свойство необратимости и сопротивляемость атаке 51%.
Casper FFG будет вводиться поэтапно: группа Бутерина предпочла консервативный подход к переходу от модели PoW к PoS.По видимому, окончательный вариант Casper получит лучшие особенности как от FFG, так и от CBC.
Логика Casper FFG содержится в смарт-контракте. Чтобы стать валидатором Casper, необходимо отправить некоторое количество ETH (сумма пока не определена) на депозит в этот смарт-контракт. Механизм предложения блоков в первой итерации Casper остается прежним: это PoW консенсус Накамото, в котором майнеры создают блоки. PoS надстройка Casper финализирует блоки с помощью валидаторов.
Чекпойнты (checkpoints) – ключевой компонент PoS консенсуса FFG: протокол оценивает финализацию каждого 50-го блока, который называется чекпойнт, а сам сегмент из 50 блоков называется эпохой. Впервые в Эфириуме появляются валидаторы, которые голосуют за блоки в каждой эпохе.
Процедура финализации чекпойнта, находящегося в предыдущей эпохе, занимает два раунда голосования (т. е., 2 эпохи).
Блок 1 считается финализированным после выполнения двух условий:
Супербольшинство в 2/3 валидаторов голосуют за блок 1 в эпохе 1: это называется легализация (justifying) блока 1;
Супербольшинство в 2/3 валидаторов голосует за блок 2 в эпохе 2, где блок 2 – прямой «наследник» блока 1.
Таким образом, блок 1 финализирован в эпохе 2. Эпоха 2 называется LFE (Последняя эпоха финализации).
Иллюстрация логики FFG. Каждый блок представляет чекпойнт. Линии – эпоха между двумя чекпойнтами. Блок становится LFE, когда его прямой наследник легализован.
Валидаторы получают награду, как только чекпойнт финализирован. Однако, если обнаруживаются два финализированных чекпойнта на одинаковой высоте (два форка), включается условие «бритвы» и по меньшей мере 1/3 депозитов уничтожается. Доказательство нарушения передается PoW майнерам в виде транзакции, которые создают блок с этим доказательством, а валидатор, сообщивший о нарушении, получает награду (Finder’s fee).
Далее, допустим, что майнер пытается провести брутфорс атаку. Финализированный блокчейн не позволит переписать блоки даже, если атакующий обладает более 51% мощности хэширования. Таким образом, Casper FFG обеспечивает безопасность. Однако он не может обеспечить живучесть (liveness), поскольку она зависит от механизма предложения блоков, которым остается PoW.
У валидаторов появляется сильная мотивация остаться на канонической цепи, поскольку наказание за подтверждение отдельных форков может стать двойным. С формализацией условия «Бритвы 2.0», валидаторы получают наказание не только за двойное голосование, но и за поддержку неверного форка. Это создает условие «разочарования», когда валидаторы предпочтут вообще воздержаться от голосования, если они не уверены, какой форк выбрать.
Основные свойства
Завершенность: порядка 20 минут до финализации. Финализированные эпохи делают блокчейн устойчивым против брутфорс-атак со стороны майнеров;
Casper the Friendly Ghost или CBC – Correct by Construction
PoS протокол, разработанный Владом Замфиром с нуля и оптимизированный для противостоянию олигополиям реального мира (пулам валидаторов). Он воплощает адаптированную для PoS идею протокола GHOST, разработанного для PoW. Принципы, заложенные в основу Casper CBC, используют криптоэкономические методы для достижения уровней безопасности, определяемых самими валидаторами. В отличие от Casper FFG с его гибридным PoW/PoS, рассмотренного в предыдущей главе, Casper CBC – чистая PoS концепция. Так же как и протоколы PoW, CBC выбирает доступность, жертвуя согласованностью. Окончательная финализация блоков отсутствует, вместо этого, она увеличивается вместе с глубиной цепи. Общее свойство FFG и CBC – голова цепи всегда растет быстрее, чем блоки становятся финализированными.
Уникальная особенность CBC – целевые уровни безопасности каждый валидатор выбирает сам; это параметр, аналогичный тому, как, например, 6 подтверждений транзакции Биткойна являются общепринятым параметром для определения финализации. В то же время, при всей сложности применяемых методов, сеть поддерживает достаточно низкий оверхэд, по сравнению с PoW.
Основное преимущество обеих версий Casper перед Tendermint – это количество валидаторов, которое система может принять одновременно. Правила создания блоков Tendermint требуют финализации, одновременной с созданием блока, поэтому время создания блока должно быть небольшим, что означает ограничение предельного числа валидаторов. Поскольку Casper не требует мгновенной финализации, сеть Эфириума может иметь много большее число валидаторов.
Основные свойства
Сопротивляемость образованию картелей: CBC построен на принципах сопротивления олигополии: никакой сговор валидаторов не может получить контроль над протоколом.
Приоритет доступности: узлы Casper допускают форк блоков до наступления консенсуса.
Безопасность консенсуса: асинхронная. Зависит от порогов безопасности, определяемых самими валидаторами.
Живучесть: достигается в частичной синхронизации.