Algorand 系列二: Algorand 共識算法(2017)的設計原理-1

YOUChain Research

YOUChain 研究團隊,成員畢業於國內外頂級名校,有長期的工業界經驗。我們持續跟蹤的區塊鏈學界和業界的前沿發展,致力於深入區塊鏈本質,推動學術和技術發展。團隊誠邀加密、算法、區塊鏈、工程人才加入!

本文來自 yipast@YOUChainResearch

一、背景知識

一提到Algorand就想到了VRF抽籤。關於VRF,已有專門的文章進行了詳細的分析 傳送門,本文專注於Algorand早期版本的共識算法設計原理。

Algorand在2017年發佈的協議是基於拜占庭共識(BA),命名爲 BA∗BA^*BA 協議,主要包含兩階段:

  1. 第一階段:分級共識協議 GCGCGC

  2. 第二階段:二元拜占庭協議 BBA* 。

首先,我們來了解下這兩個階段詳細的背景知識。

1.1 分級共識協議 GC

結合 graded broadcast 與 crusader agreement,分級共識協議概念的定義如下。

在這裏插入圖片描述

gradecast 就是一個 (n,t)(n,t)(n,t) 分級的共識協議,包含了3-Step。而Algorand共識算法中第一階段的GC包含了 gradecast 的最後兩步。具體的內容如下。

在這裏插入圖片描述
Step 1:每個節點 iii 給所有節點發送 vi′v_i^{'}vi

Step 2:當且僅當 #i2(x)⩾2t+1\#_i^2(x) \geqslant 2t+1#i2(x)2t+1 時,每個節點 iii 給所有節點發送字符串 xxx

輸出決定條件:

在這裏插入圖片描述

1.2 二元拜占庭協議 BBA∗BBA^*BBA

二元拜占庭協議BBA∗BBA^*BBA借鑑了Feldman、Micali提出的二元BA​協議

前提:誠實節點超過 2/3,即總節點數 n≥3t+1n \geq 3t+1n3t+1,其中 ttt 代表惡意節點的最大可能數量。

不管惡意節點如何操作,每次主循環的執行都有 1/3 的概率把節點帶入協議中。

該協議有一個設置的要求:需要一個共同的隨機字符串 rrr,不依賴節點的key (Algorand中是 QrQ^rQr)。

協議實際上是一個3步循環:節點間不停的交換布爾值。

節點可以在任意時間退出該循環。如果節點 iii 在退出前,在某步驟廣播了一個值 bbb,退出後,其它節點就假裝從 iii 那收到了 bbb 值。

另外,協議用了一個計數器 γ\gammaγ,標記3步循環執行的次數。

3步循環:

在這裏插入圖片描述

1.3 BA 協議

BA^{*}協議可以通過分級共識協議`GC、二元拜占庭協議 BBA^{*}來描述。

Step 1、2:每個節點ii執行GC,輸入爲初始值viv^{'}_{i},計算出一對(viv_{i},gig_{i})。

Step 3:每個節點ii執行 BBA^{*},初始輸入爲0(若gig_{i}=2,則爲1),計算bit位outiout_{i}

輸出決定條件:若outiout_{i}=0,則每個節點ii的輸出爲viv_{i},否則爲⊥。注:輸出即達成共識。

在這裏插入圖片描述
爲何能在Algorand中使用 BA^{*}協議?

首先,Algorand中的通信都是通過廣播,而BA^{*} 協議不僅僅適用於傳統的通信網絡,同時適用於gossip網絡。

其次,Algorand最大的特性之一是節點可替換,而BA^{*}協議完全滿足這一屬性。

綜上,只要滿足節點可替換、能在gossip網絡工作的BA^{*} 協議都適用於Algorand系統。Micali、Vaikunthannatan對 BA^{*}進行了擴展,使得其能在大部分節點是誠實的系統中高效運行。這個協議同樣可用於Algorand。

二、Algorand共識核心

在瞭解Algorand共識的具體內容之前,我們先來看看它的整個思考過程。

在Algorand的設想中,理想的每一輪共識 rrr 都需要滿足兩個屬性:

  1. 完全的正確。所有誠實的節點對同一個區塊Br^{r}達成一致。

  2. 完備性。最大化Br^{r}中的交易集合PAYr^{r}

由於惡意節點的存在,同時滿足這兩個屬性比較困難。所以Algorand採取了更實際的目標: 帶着壓倒性的概率,保證完全正確和完備性接近 hhhh>2/3h > 2/3h>2/3,是誠實節點的比例)。換而言之,優先滿足正確性。畢竟,未在當前輪處理的交易可以在下一輪處理,而分叉是無法容受的。

於是,問題轉化爲協議如何設計來滿足完全的正確,以及最大程度的保證完備性。

在這裏插入圖片描述

2.1 符號定義

r⩾0r \geqslant 0r0:第幾輪

s⩾1s \geqslant 1s1:第幾步

BrB^{r}:第 rrr 輪生成的區塊

PKrPK^{r}:第 r−1r-1r1 輪結束後第 rrr 輪開始時的公鑰集合

SrS^{r}r−1r-1r1 輪結束後第 rrr 輪開始時的狀態

PAYrPAY^{r}:第 rrr 輪的支付集合

lrl^{r}:第 rrr 輪的領導者,它選擇第 rrr 輪的支付集合PAYrPAY^{r},並決定種子QrQ^{r}

QrQ^{r}:第 rrr 輪結束時生成的種子,被用來選擇第 r+1r+1r+1 輪的驗證者。獨立於區塊中的支付集合,且不能被lrl^{r}操縱。

SVr,sSV^{r,s}:第 rrr 輪第 sss 步選中的驗證者集合

2.2 領導者選擇

參考了 Micali、Rivest 設計的微支付機制,Algorand規定節點 iii 只有滿足以下條件,才能成爲potential leader:
在這裏插入圖片描述
在這裏插入圖片描述

2.3 驗證者選擇

根據論文,從第 r−kr-krk 輪的系統節點中隨機選擇一部分來組成第 rrr 輪的驗證者集合。節點 iii 只有滿足以下條件,才能成爲SVr,sSV^{r,s}中的驗證者:

在這裏插入圖片描述

這兩個條件說明了:

  1. 在BA協議的最後一步,至少需要給定數量的誠實節點對新區塊 BrB^rBr 進行數字簽名;

  2. 每輪只有一個區塊擁有必需數量的簽名;

  3. BA協議每一步都需要2/3的誠實節點。

2.4 區塊的生成

領導者lrl^{r} 若是誠實的,則新區塊的形式如下:

在這裏插入圖片描述

假若領導者lrl^{r} 是惡意的,則新區塊會是以下兩種形式之一:

在這裏插入圖片描述

  • 形式(1):有可能交易集合PAYrPAY^{r}=iii是第 rr 輪的potential leader,然而 ii 不一定是領導者lrl^{r}(當 lrl^{r}不展示它的憑證,導致其它節點無法驗證時)。

  • 形式(2):在BA協議的第 rr 輪中,所有誠實節點輸出默認值,即空區塊BεrB^{r}_{ε}
    時,出現這種形式。

儘管形式(1)、(2)中都會出現交易集合爲空的情況,但是兩者是不同的區塊,且在不同的情況下出現:
在這裏插入圖片描述

Algoran ^{'} 中第rr輪生成區塊B r^{r}的過程

在這裏插入圖片描述

2.5 問題

在這裏插入圖片描述

交流羣
受限於筆者的學識和能力,文章內容難免有紕漏之處。技術探討,請添加加微信 kvdoth
備註「YOUChain 技術交流」,進羣交流。

公衆號
歡迎添加「有令」公衆號,瞭解項目最新進展和技術分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章