Алгоритм консенсуса — это механизм, используемый для обеспечения согласованности распределенных систем. Согласованностью здесь может быть согласованность последовательности транзакций, согласованность реестра, согласованность статуса узла и т. д. Обычно мы делим алгоритмы консенсуса на две категории в зависимости от типа отказоустойчивости.
Мы используем пример, чтобы проиллюстрировать этот механизм.
Предположим, существует Византийская империя с армией, состоящей из нескольких генералов и солдат. Этим генералам необходимо согласовать решение о начале атаки или отступлении, а затем передать приказ солдатам для исполнения. Однако некоторые генералы могут быть предателями и могут отдавать неправильные приказы или подделывать приказы, чтобы вызвать хаос в армии. Для решения этой проблемы можно применить византийский механизм отказоустойчивости. В этом механизме генералы достигают консенсуса посредством нескольких раундов обмена сообщениями. Каждый раунд генералы будут отправлять друг другу свои мнения и инструкции и собирать мнения других генералов. В каждом раунде генералы проверяют свои действия на основе полученных сообщений. Они проверяют сообщение на полноту, целостность и достоверность отправителя. Если большинство генералов отправят один и тот же приказ, то другие генералы примут этот приказ и передадут его солдатам. Если несколько генералов-предателей отправят неверные инструкции, большинство лояльных генералов смогут устранить эти неправильные инструкции путем голосования большинством и прийти к единогласному решению. Таким образом, византийский механизм отказоустойчивости может гарантировать, что большинство лояльных генералов примут единогласное решение и передадут солдатам правильные инструкции, даже если будет вмешательство нескольких генералов-предателей.
Большинство платформ используют Адаптивный механизм консенсуса , поддерживает несколько алгоритмов консенсуса, таких как RBFT, NoxBFT (тип BFT) и RAFT (тип CFT), для удовлетворения потребностей различных бизнес-сценариев. Далее в основном будут представлены алгоритмы консенсуса, такие как RBFT, NoxBFT и RAFT.
Здесь мы объясним один из них - RBFT.
RBFT (Redundant Byzantine Fault Tolerance) — это византийский отказоустойчивый алгоритм, который повышает отказоустойчивую производительность системы за счет добавления резервных узлов. В алгоритме RBFT узлы в системе делятся на две категории: основной узел (Primary) и резервный узел (Backup). Главный узел отвечает за принятие решений и передачу их другим узлам, в то время как резервный узел используется для обеспечения отказоустойчивости, чтобы обеспечить нормальную работу системы, даже если главный узел совершает ошибки или ведет себя злонамеренно.
Возвращаясь к предыдущему примеру с Византийской империей, мы можем применить алгоритм RBFT для улучшения процесса консенсуса. Предположим, есть 5 генералов, один из них выбран главным генералом, а остальные 4 генерала служат резервными генералами.
Во время каждого раунда консенсуса главный генерал предложит решение атаковать или отступить и отправит его остальным 4 резервным генералам. Резервный генерал проверяет решение главного генерала и сравнивает его с решением других резервных генералов. Если большинство резервных генералов получают и проверяют одно и то же решение, они принимают его и сообщают своим солдатам.
Однако, если главный генерал предатель или совершает ошибку и принимает неправильное решение, резервный генерал может устранить неправильное решение путем взаимного сравнения и голосования большинством и прийти к единогласному решению. Только когда большинство резервных генералов согласятся, солдатам будет сообщено правильное решение.
Добавляя общие параметры резервного копирования, алгоритм RBFT обеспечивает резервные узлы, позволяющие выдерживать ошибки или вредоносное поведение главного узла. Даже если главный узел является предателем или что-то пойдет не так, пока большинство резервных узлов честны, система все равно может достичь консенсуса и продолжать работать нормально.
Продолжая предыдущий пример, предположим, что главный генерал отправляет неправильное решение или дает сбой во время определенного хода. Резервный генерал может переключить вид и выбрать нового главного генерала в соответствии с согласованными правилами.
Благодаря сочетанию этих этапов алгоритм RBFT способен выдерживать ошибки или вредоносное поведение главных узлов и достигать консенсуса посредством голосования большинством. Этот механизм повышает отказоустойчивость и безопасность системы.
PoW(Proof of Work)
доказательство работы,PoS(Proof of Stake)
Доказательство доли,DPoS(Delegated Proof of Stake
назначать Доказательство доли,DBFT(Delegated Byzantine Fault Tolerance)
ждать。EOS
Делегированное доказательство справедливости используется для выбора некоторых репрезентативных узлов для голосования. Этот метод направлен на оптимизацию эффективности и результатов голосования сообщества, но он несет в себе некоторые риски централизации.
Предположим, что в примере с генералами у нас есть три узла, представляющие генерала A, генерала B и генерала C соответственно. Теперь применим этот пример к вышеупомянутой ситуации.
Предположим, что первым генералом, создавшим блок, является A, затем B и, наконец, C. Теперь General B решает сделать форк. Когда наступает очередь генерала Б строить блок, он больше не распознает блоки генерала С и генерала А, а строит блок в одиночку. В этом случае цепочка, разветвленная B, может создавать блок только каждые 9 секунд, в то время как C и A могут создавать блок каждые 6 секунд. В рамках механизма DPOS, даже если он разветвляется, B все равно нужно дождаться, пока A и C создадут блоки, прежде чем он сможет продолжать создавать блоки. Следовательно, скорость раздвоенных блоков никогда не сможет сравняться со скоростью исходной цепи, поскольку механизм консенсуса распознает только самую длинную цепочку. Это означает, что в случае разветвления небольшим количеством узлов раздвоенный узел не может расти быстрее, чем цепь, распознаваемая другими узлами. Если две трети узлов решают разветвиться, принцип тот же. Несколько последних честных узлов определяют самую быструю и длинную цепочку. Раздвоенные узлы не могут успевать за ростом цепочки, поддерживаемой другими узлами. существоватьDPOSмеханизм В консенсусе определение самой длинной цепочки достигается за счет концепции «последнего необратимого блока». Последний необратимый блок — это последний блок, который нельзя изменить. Согласно правилам DPOS, когда две трети узлов подтверждают блокировку, она становится необратимой. Если две трети узлов, создавших последний блок, подтверждают блокировку, то это последний необратимый блок. С помощью последнего необратимого блока вы можете подтвердить, является ли эта цепочка самой длинной цепочкой, подписанной двумя третями узлов. Таким образом, механизм DPOS может эффективно предотвращать византийское зло и обладает высокой византийской отказоустойчивостью. В этом примере перечислены только несколько серьезных злых ситуаций, а механизм DPOS может предотвратить множество других злых ситуаций, которые здесь не перечислены. Кроме того, транзакции как доказательство доли (TaPOS) относятся к транзакциям как к подтверждению данных, подтверждающих предыдущий блок. Когда количество блоков увеличивается, эту цепочку сложно заменить, поскольку изменение блока приведет к несовпадению всех значений TaPOS. В механизме DPOS EOS направленная трансляция используется для повышения скорости и производительности генерации блоков. В таких системах, как BitShares и STEEM, трансляция является случайной, и тот, кто первым получит блок, может передать его для генерации новых блоков. Однако EOS использует направленную трансляцию, что делает распространение блоков более эффективным. Этот механизм позволяет EOS достигать более высоких скоростей генерации блоков (например, 500 миллисекунд).
Как упоминалось выше, скорость генерации блоков BitShares составляет 3 с, тогда как EOS может достигать 500 мс. EOS может увеличить скорость производства блоков благодаря прямой трансляции.
Поскольку это случайная трансляция, будет много путей блоков, которые синхронизируются в одном раунде и не являются кратчайшим путем.
DBFT
Механизм консенсуса DBFT достигает консенсуса, распределяя разные роли через верные узлы.,так можно значительно сократить накладные расходы и избежать вилок.,Но есть также риск того, что главный герой окажется злым.
NEO предложил алгоритм консенсуса dBFT (делегированная византийская отказоустойчивость, делегированная византийская отказоустойчивость), основанный на алгоритме PBFT (практическая византийская отказоустойчивость). Алгоритм определяет узлы, которые будут участвовать в следующем раунде консенсуса, на основе результатов голосования блокчейна в реальном времени, эффективно сокращая затраты времени алгоритма, тем самым увеличивая скорость генерации блоков и сокращая цикл подтверждения транзакции.
имя | определение |
---|---|
Консенсусный узел | Узлы с полномочиями инициировать новые предложения блоков и голосовать по предложениям. |
Обычный узел | У него есть разрешения на передачу и транзакции, а также весь сетевой реестр, но он не может инициировать предложения блоков и голосования. |
оратор | Отвечает за трансляцию предложений новых блоков другим узлам. |
член парламента | Учетные записи, которые участвуют в создании консенсусного блока, несут ответственность за голосование по предложениям новых блоков. |
кандидат | Номинанты имеют право участвовать в Консенсусном узел аккаунта кампании |
Консенсусный узел | выбран из кандидатов,Аккаунты, участвующие в консенсусе |
вид | Набор данных, используемый для раунда консенсуса от начала до конца。видсерийный номер в, из 0 В начале, когда этот раунд консенсуса терпит неудачу v Постепенно увеличивайте, пока новое предложение не будет принято и не будет сброшено. |
Алгоритм dBFT 2.0 содержит 6 консенсусных сообщений:
имя | описывать |
---|---|
Prepare Request | Информация для запуска нового раунда консенсуса |
Prepare Response | Используется для уведомления других узлов о том, что вся информация о транзакциях для построения блока получена. |
Commit | Уведомите другие узлы о том, что получено достаточно ответов на подготовку. |
Change View Request | Попробуйте изменить информацию о виде |
Recovery Request | Запрос на синхронизацию статуса консенсуса |
Recovery Message | Информация об ответе на запрос на восстановление |
Мы можем использовать общий пример, чтобы объяснить эти четыре шага.
Предположим, у нас есть три генерала A, B и C, и они проводят раунд консенсуса.
Таким образом, мы можем иметь предварительное представление об этом алгоритме, но фактическое использование зависит от конкретного бизнес-сценария.