AERGO

DPoS: консенсус в Aergo Mainnet

DPoS: консенсус в Aergo Mainnet
Written by bitmet

Подробное описание консенсуса DPoS — делегированного доказательства доли (Delegated Proof of Stake), реализованного в ядре блокчейна Aergo.

Перевод статьи — DPoS: Consensus on the Aergo Mainnet, которую написал Сун Чже Ву — Developer at Blocko and AERGO

Вступление

Каждый блокчейн протокол использует согласованный алгоритм для поддержки одного и только одного списка криптографически связанных блоков — блокчейна. Самым известным в мире блокчейнов является консенсус Накамото реализованный в Bitcoin, основанный на Proof of Work (PoW). Он позволяет достигать полной децентрализации, допуская окончательность только вероятностным методом. В этом случае несколько ветвей могут конкурировать друг с другом и постепенно со временем превращаться в одну. Другая крайность в спектре — это консенсусы, которые произошли из традиционного Византийского соглашения (BA). Они гарантируют мгновенную окончательность блока, но ограничивают степень децентрализации.

Консенсус делегированного подтверждения доли (DPoS)¹, который используется в основной сети Aergo, находится посередине между вышеупомянутыми двумя консенсусами. Он делегирует исключительное право на генерацию блоков для ряда выбранных производителей блоков (BP), в то же время разрешая реорганизацию в ограниченном диапазоне. (A) Следуя модели Proof of Stake (PoS) и (b) поддерживая только ограниченное количество BP, это решает как проблему производительности, так и проблему чрезмерного энергопотребления, обнаруженную в консенсусе на основе PoW.

В этой статье дается подробное описание DPoS, реализованного в ядре блокчейна Aergo. В оставшейся части статьи «DPoS» означает DPoS, реализованный в ядре блокчейна Aergo, если не указано иное определение.

Делегированное доказательство доли в Aergo

Производство блоков

В DPoS разрешено генерировать блоки только ограниченному количеству² узлов, называемых производителями активных блоков (BP). Они выбираются путем голосования среди заинтересованных сторон. Время равномерно делится на слоты, и для каждого слота должен быть создан максимум один блок. Активные BP распределяются по этим слотам путем подсчета голосов и по очереди производят блоки.

Для простоты, давайте рассмотрим пример четырех активных BP, которые являются соответственно A , B , C и D в порядке убывания голосов. Интервал блока составляет 1 секунду. Если все в порядке, блокчейн работает так, как показано на рисунке 1.

DPoS Consensus on the Aergo Mainne
Рисунок 1. Производство блоков при нормальной работе; Буква в каждом квадрате — это блок производителя

Каждый BP генерирует блок каждые четыре секунды. Однако, когда первый блок не получен вовремя, следующий BP должен его сгенерировать. Например, предположим, что A создал блок «1», а затем B упал, прежде чем производить блок «2» В этом случае, С должна генерировать блок «2» , а не B . На рисунке 2 показано, как выглядит блокчейн в случае такого сбоя.

Рисунок 2. Производство блоков при сбое B
Рисунок 2. Производство блоков при сбое B

Нет блоков, соответствующих слотам «1» и «5», так как B дает сбой, так что блоки распределяются неравномерно по времени; временной интервал между блоками «1» и «2» примерно в два раза длиннее (2 с), чем обычно (1 с).

Fork (разветвление)

С другой стороны, DPoS позволяет разветвление и реорганизацию, как в Bitcoin. Давайте предположим, что B отключен от других BP из-за сбоя в сети. Даже в этом случае B и другие ( A , C , D ) не останавливают производство блоков. Они соответственно управляют своими собственными блокчейнами, как показано на рисунке 3.

консенсус Рис. 3. Разветвление сети; B и (A, C, D) отключены друг от друга
Рисунок 3. Разветвление сети; B и (A, C, D) отключены друг от друга

Обратите внимание, что слоты «1» и «5» главной цепи (верхняя) пустые, потому что блоки, созданные B , не принимаются ( A , C , D ) из-за разделения сети.

Нижняя цепь, управляемая B, является боковой цепью, поскольку она короче другой; В то время как высота главной цепи становится равной 7, высота боковой цепи все еще составляет только 3. Таким образом, согласно правилу самой длинной цепи, как только проблема сети решена, и блоки главной цепи отправлены в B , B становится известно, что его цепь короче другой. Наконец, она начинает следовать основной цепи (реорганизация).

Законченность: Последний необратимый блок

Если блок подключен к цепочке блоков, его можно рассматривать как приводящий в действие сам блок и его родительские блоки. Исходя из этой идеи, в DPoS была введена концепция, называемая последним необратимым блоком (LIB). Как только блок становится LIB, любая реорганизация, выходящая за его пределы, запрещена. Соответственно, гарантируется законченность LIB и предшествующих ей блоков. При нормальных условиях LIB постоянно обновляется до более высокого значения, за исключением начального периода перезагрузки.

Говоря техническим языком, LIB определяется в два этапа:

  1. Когда большинство (⅔+) ВР присоединяют к цепочке блоки, первым из них становится предлагаемая LIB.
  2. Предложенная LIB, наконец, становится LIB, когда дополняется блоками из другого большинства BP.

Первоначально диапазон голосования [или подтверждения] по блоку не имел ограничений. Другими словами, блок, подключенный к цепочке, считался голосованием за сам блок и все вышестоящие блоки. Однако позже он будет изменен, чтобы избежать конфликтующих LIBs³. В модифицированном варианте блок, сгенерированный BP X, подтверждает только ряд предшественников блока, произведенного BP X в последний раз.

Рисунок 4. Определение последнего необратимого блока в случае 4 BP
Рисунок 4. Определение последнего необратимого блока в случае 4 BP

Простой пример приведен на рисунке 4. Это случай с сетью DPoS 4-ВР, большинство голосов в ней составляет 3. В этом случае голоса 3 ВР необходимы для достижения консенсуса соответственно на каждом из этапов определения LIB. Поэтому, как показано на рисунке 3, блок «1» становится предлагаемой LIB при подключении блока «3» к цепи (1 фаза). После этого блок «1» окончательно переходит в LIB, когда к нему добавляется блок «5» (вторая фаза). При нормальных условиях, как только блок завершен в виде LIB, высота LIB увеличивается на 1 при подключении нового блока; один новый блок сопровождает новый LIB.

Ставки, голосование и выборы

Активные BP выбираются пользователями Aergo, которые ставят свои токены (Aergo) ⁴. Заинтересованная сторона может свободно голосовать за нескольких кандидатов (максимум 30 кандидатов), хотя голосование ограничено 1 голосом в день. Результат голосования собирается каждые 100 блоков. Рейтинг влияет на смену режима после 100 блоков. Эта схема выборов проиллюстрирована на рисунке 5. Здесь ВР на блоке «700» выбираются в соответствии с рейтингом, собранным на блоке «600» (а не «700»). Она призвана снизить вероятность неоправданно частой смены режима в результате реорганизации, поскольку реорганизация прошлых блоков менее вероятна, чем недавних.

Рисунок 5. Схема выборов ВР
Рисунок 5. Схема выборов ВР

Резюме

На простом примере, состоящем из 4 BP, мы объяснили, как работает DPoS. Его основными достоинствами являются:

  • генерирование блока ограниченным количеством избранных ВР; и
  • возможность реорганизации только в пределах ограниченного диапазона блоков.

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

**********

  1. DPoS был впервые представлен как алгоритм консенсуса для BitShares ( https://bitshares.org/technology/delegated-proof-of-stake-consensus/ ). Текущая реализация Aergo похожа на реализацию в EOS (https://github.com/EOSIO/Documentation/blob/master/TechnicalWhitePaper.md#consensus-algorithm-bft-dpos ).
  2. В настоящее время сеть Aergo работает с 13 активными ВР на стадии инкубации ( https://medium.com/aergo/aergo-mainnet-incubation-8f097344d14e ).
  3. «Исправить потерю консенсуса DPOS из-за противоречивого последнего необратимого блока» (https://github.com/EOSIO/eos/issues/2718).
  4. Ставка и голосование проводятся путем подачи заявок на участие в торгах.

About the author

bitmet

Add Comment

Leave a Comment