Dfinity 共識過程與技術特點:PoS、隨機數與 WASM

Dfinity 從 2017 年起就沒有轉變過 PoS+隨機數+WASM 虛擬機的技術方向。文中將按步驟分解,簡單幫助大家講解共識,並簡述技術特點,與其他項目做比較,揭示這樣優缺點帶來的影響。

大家可能會驚訝的發現,目前大部分的公鏈項目,不約而同的走向統一方向:

PoS 提速並解決計算冗餘、隨機數信標保證去中心化、staking 保證安全性、周期性最終確認保證輕量。

包括剛公布的 ETH2.0、algo 以及不少新公鏈,VRF/VDF 慢慢彷彿要成為下一個保證去中心化的標準,PoW 的原始支持者也逐漸認識到了切換 PoS 後帶來性能飛越,甚至荒廢了三四年的「世界超級計算機」的概念,也被越來越多的項目方提起了。

DFINITY 算是最早堅持以上標準的項目,從 2017 年起就沒有轉變過 PoS+隨機數+WASM 虛擬機的技術方向(以太坊 2.0 表示「真香」)。共識方面的設計可以說是它最大的技術亮點,技術白皮書以分層的結構介紹了一致性共識的達成,文中將按步驟分解,簡單幫助大家講解共識。並簡述技術特點,與其他項目做比較,揭示這樣優缺點帶來的影響。

共識過程

DFINITY 的共識是按照輪為單位進行的,每一輪產出本輪的一個區塊,一輪的時間為區塊時間,輪次等於區塊高度。

開始前的節點準備(按順序)

  1. 節點創建私鑰公鑰,建立匿名的永久身份。
  2. 節點加入網路需要質押固定的 token 作為 staking。
  3. 節點隨機的與其他節點組成閥值組(完全隨機,一個節點可存在於多個閥值組)
  4. 閥值組中,運行分散式密鑰協議(DKG),每個節點獲取該組的「驗證簽名」密鑰(不同於個人密鑰,有一組的私鑰數學拆分而來)。
  5. 系統還是根據 DKG 產生閥值組的共同公鑰,並對閥值組進行註冊。
  6. 準備就緒,開始等待參與共識。

第 R 輪共識

Step1 選擇本輪委員會組

  • 系統根據 R-1 輪次生成的隨機數ξR,在已有的閥值組中隨機的選擇 R 輪的委員會。

硬核詳解 Dfinity 共識過程與技術特點:PoS、隨機數與 WASM

Step2 提案委員會打包出塊

  • 選出的委員會分成兩部分,提案組與驗證組,提案組先收集用戶發送的交易,檢驗合法後進行打包,出塊與常見區塊鏈項目一致。

硬核詳解 Dfinity 共識過程與技術特點:PoS、隨機數與 WASM

Step3 公證委員會持續接收並驗證區塊

  • 接受區塊:持續的接受提案組產出的區塊,直到觀測到下一個隨機數ξR+1 的產生。
  • 檢驗合法:接受區塊後首先檢驗是由合法有效(有無引用 R-1 區塊的公證),不合法就丟棄。
  • 計算優先順序:運行「概率插槽協議」,計算連續兩個區塊的權重,這是根據由隨機數得出的區塊權重得出的。
  • 簽名並廣播:如果上一步中區塊權重高於上一個接收到的,簽名並廣播;否則就丟棄區塊。

硬核詳解 Dfinity 共識過程與技術特點:PoS、隨機數與 WASM

Step4
隨機數信標收集簽名

  • 隨機數信標持續的收集公證者廣播的簽名部分,並記錄數目。

等待閥值,產出公證與隨機數

  • 一但對單個區塊,接受了超過 50% 公證者的簽名,馬上聚合簽名,產出公證 Zr (本質是時間戳)並寫入區塊廣播。
  • 同時產生根據這些簽名產生隨機數ξR+1,廣播。

硬核詳解 Dfinity 共識過程與技術特點:PoS、隨機數與 WASM

R+1 step0 同步正確區塊,R+1 輪開始,回到 strp1

  • 此時廣播傳播全網,R 輪委員會全部停止工作,節點開始同步被公證的區塊。
  • 根據隨機數ξR+1 選擇 R+1 輪的委員會組。

硬核詳解 Dfinity 共識過程與技術特點:PoS、隨機數與 WASM

共識特點

DFINITY 是一個試圖「擴展當前互聯網」的區塊鏈項目,是由所有參與網路的 P2P 客戶端(DFINITY 中稱節點 node 為客戶端 client)共同維護並提供資源的「世界超級計算機 “,這台計算機上「安裝」的如軟體具備了區塊鏈上智能合約的不可篡改與可信的屬性,但同時必須能夠承載大規模服務,並能夠完全託管軟體。

不同於以太坊的 DApp 只是適時調用合約,DFINITY 設想的軟體是完全依靠智能合約來驅動服務的。綜上來講,DFINITY 需要非常高的計算性能、減少計算冗餘,因此 DFINITY 但同時還得在保證去中心化的情況下
做到足夠安全,因此這對它的共識演算法提出了苛刻的要求。

1 從「完美的隨機數」出發

DFINIFTY 共識最重要的組成部分即為隨機數信標部分,需要做的事情有:

  • 選擇共識參與組:在 DFINIFTY 這個無准入(不需要申請即可加入,反例是 EOS)的網路中,參與網路的節點數以萬計,且分布在世界各地,因此所有節點共同達成一致性的效率就非常之低,系統得選擇一小部分成員來參加共識來保證速度。但是為了保證去中心化,成員必須隨機選擇。去中心化與性能的基礎基於隨機數。
  • 決定區塊的權重:用於判斷最終確定鏈,快速的獲得最終確認時間,剪除分叉。
  • 給鏈上應用提供隨機源:智能合約上很多 DApp 都是自己寫的隨機數方案,非常不成熟,經常會有應用因為不安全的隨機數而被黑客攻擊的新聞出現,這裡直接從底層提供了穩定隨機數。

VRF 涉及很多數學演算,我們可以將其視為一個黑箱子,一段是輸入,一段是輸出。輸入是一組客戶端的簽名,輸出是一個準確的隨機數。只有在獲取了足夠多的客戶端簽名,黑箱子才能輸出隨機數,再此之前,沒有任何一個客戶端能知道或預測它的輸出。「足夠多」簽名的閥值為 50%,因此這個 VRF 的過程也叫做「閥值簽名」。

這個 VRF 很特殊,因為它具備三個特點:

  • 可驗證:一但輸出了隨機數,大家都可以拿著客戶端的簽名對其進行驗證。VRF 的 “V」就體現在這裡。
  • 唯一確定性:一但有超過 50% 的客戶端發送了簽名,黑箱子接受到後會獲得唯一的一個確定的隨機數。這裡是因為使用的私鑰簽名演算法具有唯一性,也就是統一密鑰對統一數據的多次簽名的結果都不相同,只有一個可以合法的驗證。
  • 非交互:在產生隨機數的過程中,雖然黑箱子需要收集大家的簽名,但是客戶端之間不需要進行交易所,更沒法干擾到隨機數的從產生。

在已知的密碼學演算法里,只有 BLS 演算法能做到以上三點,而 BLS 演算法的提出者之一「L」Lynn 正是 DFINITY 的高級工程師。其他的隨機數方案,要麼驗證起來難度極高(連續哈希),要麼無法保證唯一性,要麼就是沒有閥值的設計,必須進行交互,存在「最後一個參與者」就能間接影響隨機數偏差的情況(以太坊的 RANDAO 與 VDF)。

當然這個 VRF 還是一點問題,選取的一組共識者中如果有超過 50% 被攻擊者掌握,那麼他可以間接的干擾到隨機數的生成,當然來預測隨機數還是基本不可能的,沒法直接控制。攻擊者還可以不發送簽名,讓隨機數生成過程停止,從而讓整個系統宕機。當然這都是攻擊者掌握了超過 50% 節點的情況下,這在 staking 里難度很大的,真做到了也沒有那個共識演算法頂得住。

2 非互動式

使用隨機數在全網中篩選節點組成共識組,來參與共識的項目不少,包括固定選擇的 DPOS、DBFT (NEO 的共識),以及分輪次隨機選取的,比如 Algorand、Cardano,包括 DFINITY,在選出了共識組後,組內成員都會出塊,這時存在多個區塊,需要獲得唯一的共識。

因此其他的項目比如 NEO、Algorand、Cardano 都是運行完整的拜占庭容錯協議,在組中達成一致的協議,對區塊進行確認。但是這個只要運行拜占庭協議,就意味著你的共識組不能過大,最大只能 100 個節點左右,再多就會存在性能與帶寬爆炸的問題。所以就會有 21 個組輪流出塊的設計,這大大拉低了項目的去中心化程度。

但如果你把組做的很大,像 algo 那種 2000 多人的大組,這個共識組在運行拜占庭容錯協議時,就需要經曆數十次的數據交互,同時傳送一個非常龐大的簽名數據,這樣對整個網路的帶寬要求就非常之高,普通人很難參與進來。

說回 DFINITY,首先由隨機數公開的選出了 400 個客戶端一組的出塊組,來打包交易並出塊。每一個客戶端都會出塊,還有一組同時隨機數選出的驗證者,他們會接受區塊,同時運行一個根據隨機數判斷區塊權重的協議,驗證者只簽名權重最高的節點,期間大家不會交互,不會進行拜占庭共識互相發送簽名數據,主要是固定區塊時間裡不斷尋找權重最高的區塊即可。在一個區塊接受到了超過 50% 個驗證者的簽名後(是單獨簽名的,不是一起聯合簽名的),系統會自動聚合區塊上的簽名,並確認區塊為唯一,一但客戶端觀察到聚合的簽名,就會進入下一輪共識。

可以看到,整個過程都沒有進行拜占庭協議,只是遵序三個原則:

  • 客戶端遵序最高許可權的原則對區塊簽名,權重越高的鏈越會被確認
  • 系統遵循 50% 以上簽名產出隨機數信標的原則
  • 大家遵序一看到新的隨機數信標馬上進入下一輪共識的原則

三個原則就像三把鋒利的奧卡姆剃刀,剔除了多餘的無效區塊,獲得了唯一的區塊,從而近似的達成了一致性共識(說近似是因為可能有同時存在兩個被公證區塊)。整個通訊過程幾乎為零,在廣播 gossip 協議的網路中,一個有 400 個節點的組網,只需轉發大約 20KB 的通信數據,即可產生閾值簽名。而一個小組的分散式簽名密鑰的生成,是在小組創建時就分配好的,不需要在共識階段產生,一次生成多次使用。

我們可以來類比一下非常相似但由兩輪拜占庭共識交互的 Algorand。Algo 的隨機數抽籤過程是隱秘式的,也就是說節點只知道自己被選擇與否,它卻不知道全網中有多少節點被選中。因此 Alogo 共識前必須遍歷一編全部網路,進行一次拜占庭才能知道全部的被選取的驗證組,因此這裡的延遲時間與帶寬使用就很高了。再加上前面講的超大驗證組(2000 人到 4000 人)的拜占庭通訊輪次與簽名數據的問題,Algo 共識下帶寬使用非常爆炸,這種人是沒這個能力參與的。

3 超快的最終確認

脫離最終確認時間談 TPS 的都是耍流氓,有個笑話,拿卡車運裝滿數據的硬碟,你算算這個 TPS 也非常大了,可是沒有最終確認與相應,顯然是不能用的。不說比特幣與以太坊,我們可以看到大量的新公鏈,特別是做多鏈分片的項目,就存在最終確認的嚴重滯後問題。

PoW 與傳統 PoS,只能近似的獲得一個最終確定性,也就是回滾概率趨近於 0 的時候,這就導致大額交易需要等待多個區塊確認。並且因為沒一個準信,每一個節點都得存儲全部的副本,防止分叉的回滾。這就導致整個賬本成交量大的嚇人,普通人基本告別全節點,隨著區塊的增長,以太坊的全節點數量就下跌的非常快,如此下去,系統又得回到中心化脆弱的狀態下了。

可以從上面了解到,DFINITY 的共識是按輪次進行的,每一輪共識的開始與結束的標誌,都是觀察到隨機數信標產生新的隨機數,而這個隨機數是系統聚合簽名產生公證的同時更新的。因此這 DFINITY 的區塊高度必須與輪次一致,每一輪中生產的區塊,必須是引用了上一輪的公證簽名,不然視為非法。同時公正組只會簽名本輪產生的區塊,不會對之前輪次的區塊簽名。

總結為兩個強制:

  • 只有本輪發布的區塊才能被公證;
  • 只有引用上一輪被公證的本輪區塊才是合法的;

這保證了出塊與公證兩個過程,都沒法被惡意扣留,因此攻擊者沒辦法偷偷來準備一條比主鏈更長的影子鏈,來做雙花攻擊,因為從影子鏈的第一個區塊起就不合法了。

因為存在上述「驗證者組單獨簽名,系統聚合簽名產生公證」的公證過程,因此每一輪後基本可以做出唯一性的確認。但也有會出現兩個或以上區塊同時通過公證的情況,因此一輪結束後還不能做到最終確認,這時就需要在下一輪中繼續判斷。此時等待出塊過程完成,因為出塊者可能選擇在上一輪同時被公證的區塊後面繼續生產,所以同時存在幾條分叉。

還記得上面講的「概率插槽協議」(PSP) 階段嗎?驗證者會計算權重來判斷唯一區塊,沒錯,這裡驗證者還是會對著區塊計算這條鏈上的總權重,這是權重高的一條鏈就作為唯一確認鏈,然後驗證者才會對他進行簽名。因此當本輪出現了新隨機數時,也就意味著分叉已經被剪除,而上一輪的區塊,包括其中的交易,都獲得了最終的確認。

最終確認時間 = 兩個出塊間隔+網路遍歷傳輸延遲

因此一個交易可以在幾秒鐘里完成最終確認,再也沒法對其進行回滾。可以對比一下以太坊 2.0,它用的是每隔 100 個區塊創建一個檢查點來做最終確認的方案,最終確認時長大約為 10 分鐘左右。

快速確認不僅提高了性能,剪除了分叉,降低了系統的冗餘度,並且可以讓客戶端不用存儲全部要歷史區塊數據,任何一個新加入的區塊,只要從最近的確認區塊開始即可。

4 幾乎無限的彈性擴展性能

這同樣是優秀的隨機數給 DFINITY 帶來的好處。DFINITY 的網路可以近乎無限的擴展,因為整個隨機數的產出,包括出塊與公證,都是由固定數目的委員會組來執行的,客戶端新節點的加入不會影響到運行的速度。而每一個客戶端,都需要一定性能的計算與存儲性能,這位整個「世界計算機」提供了近乎無限的資源。

單鏈的性能已經足夠強大,而 DFINITY 又天然適合分片。

上面講到,DFINITY 隨機產生多個閥值組的,因此多組間並行運行,從而實現分片,是相當輕鬆的。以太坊 2.0 的分片方式也非常近似。

但這部分官方披露的並不多,還需要一個片間協作的機制。同時涉及到智能合約運行,也存在以太坊 2.0 分片上類似的問題,也就是合約具體該運行在哪一個分片上?

特別是 DFINITY 這種存儲軟體全部結果狀態的,因為雖然分片能對計算性能進行擴展,但我們得同時考慮存儲與網路的擴展性,如果運行軟體的組根據隨機數不斷變動,那麼存儲的分布如果是全節點一起同步,這樣存儲冗餘度上來了,也就稱不上擴展了;如果隨出塊運算同步的去中心化存儲,那麼存儲的數據分布可能是不均的,而軟體運行需要的數據從一個節點傳到另一個節點是需要耗費時間的,這樣帶寬可能就撐不住了。

希望 DFINITY 能在分片層上也作出優秀的設計,學習以太坊 2.0 的合約固定運行在單獨分片上,或片間快照轉移也是沒問題的。

原文標題:《燒腦解密 DFINITY 的共識過程》
作者:BlockPunk

來源鏈接:mp.weixin.qq.com

提示:投資有風險,入市需謹慎,本資訊不作為投資理財建議。請理性投資,切實提高風險防範意識;如有發現的違法犯罪線索,可積極向有關部門舉報反映。
你可能還喜歡