區塊鏈共識分析的簡單框架

在以前的幾期祕猿科技小課堂中,咱們對比分析了 PoW 和 PoS 的優劣,以及咱們 CKB 是如何改進比特幣的 PoW 協議的。這一期是共識部分的最後一期,咱們帶你們綜合瞭解一下區塊鏈共識,以及如何用一個簡單的分析框架來解剖區塊鏈共識。

祕猿科技區塊鏈小課堂第 30 期react


圖片描述

[1] 延遲爲交易發出到被共識確認所須要的時間。低:<10s,中:10s-600s,高:>=600s
[2] 保持共識性能的狀況下容許的共識節點數量。低:<100,中:>=100,高:沒有限制
[3] Bitcoin的Nakamoto Consensus具備很低的通信開銷(communication overhead),但因爲共識參數的設定(10分鐘區塊間隔,~4MB區塊容量)致使帶寬利用率低。
[4] EOS的宣傳中說的是BFT,可是與一些朋友交流得知如今用的依然是NC,也就是說EOS的DPoS與BitShares的DPoS應該是同樣。git

框架思路

共識算法是一個很大的話題,在區塊鏈出現以前,分佈式系統和數據庫領域都已經有不少的共識算法的研究和沉澱。但區塊鏈的共識與以前的研究又有很是大的不一樣,若是不注意很容易掉進傳統共識的老套路里面。實際上不只僅是區塊鏈有本身的獨特須要,個人感受是數據庫會議上的共識研究和分佈式系統上的共識研究也是有不小的區別。其實這很是好理解,由於場景不一樣嘛,設計天然不一樣。github

本文嘗試提出一個分析區塊鏈共識的簡單框架,方便將不一樣的區塊鏈共識放到一塊兒來比較。算法

基本要求

共識的基本度量包括兩個方面,正確性和性能。正確性簡單來講包括:數據庫

  • 一致性(Consistency) - 節點最終能看到相同的本地狀態
  • 活性(Liveness) - 請求/交易總會在有限時間內被處理

正確性是最最基本的要求,這也是大部分區塊鏈共識都能作到的。要在異步網絡中始終保證一致性和活性是一個很是難的任務,所以共識設計一般會選擇保證一點而在一些特定狀況下放棄另一點,例如Bitcoin使用的Nakamoto共識選擇優先保證活性,而BFT共識則優先保證一致性。安全

性能包括:服務器

對吞吐量和延遲的影響因素不少,例如共識節點的數量,共識的消息複雜度,消息驗證須要的時間,共識可用的帶寬,共識設計的傾向等等。通常來講,吞吐量和延遲也難以兩全,這是由於共識的消息複雜度有一個下限:對於每一輪共識,參與共識的節點至少要收到一次消息(不然連要共識的東西是什麼都不知道)。若是要低延遲,就要儘快對每一個請求/交易的達成一致,意味着單個請求/交易須要更高的消息複雜度;若是要高吞吐,就要儘量的對請求/交易進行批量處理,以此下降單個請求/交易的消息複雜度,但也會形成高延遲。網絡

對於共識性能,Nervos研究團隊的張韌提出的一個比較有參考性的指標是共識對帶寬的利用率:給定相同的帶寬,共識對帶寬的佔用越低,共識的吞吐量越高。框架

圖片描述

區塊鏈共識的特色

動態的參與者集合

不管是permissionless(翻譯成「無需許可」太繞口了,用「公有鏈」又不是很準確 2,這裏仍是用單詞)仍是permissioned blockchain,最重要的一個特徵是它是一個長期運行的開放系統。長期運行和開放疊加的結果是,共識的參與者會一直變化,每隔一段時間,總會有老的共識節點離開,新的共識節點加入,共識參與者是一個動態集合。如何處理共識參與者的動態變化,是區塊鏈共識的一個核心問題。less

與區塊鏈共識不一樣,傳統的共識研究每每先假設一個固定的參與者集合,而後研究如何在這個集合內達成共識,偶爾討論參與者集合變化時的處理,基本上不關心參與共識須要什麼樣的資格。研究的重心在於如何保證共識的正確性(e.g. 一致性與活性),造成共識集合的方式只是個附屬課題。傳統共識的應用場景每每是中心化控制的網絡,增長或者減小的服務器都是本身的,造成這樣的側重也很天然。

數量衆多的參與者

去中心化是permissionless blockchain共識協議的一個獨特目標。咱們一般用參與共識的門檻來度量去中心化程度(爲何這是一個好的度量?),參與門檻越低,去中心化程度越高。低參與門檻的天然結果是共識參與者的集合能夠很是的大,所以共識協議的設計必須考慮到這一點,保證共識效率不會由於參與者的增多而降低。

最小的信任模型

執行共識算法的目的是爲了能對一個計算請求產生一致的計算結果,在這個過程當中必定會有發起請求的節點和處理請求的節點。在傳統共識模型中,有的徹底在請求處理節點集合內部執行共識算法,有的是由請求發起節點和處理節點一塊兒執行共識算法,不管何種狀況,信任邊界通常是在請求發起節點和請求執行節點之間,發起節點將計算請求發送給執行節點,執行節點計算出結果後返回給發起節點,發起節點信任執行節點的計算結果(反過來,執行節點不必定信任發起節點的消息,若是發起節點參與共識過程的話)。

Screenshot_20190429_160510Screenshot_20190429_160510.png713×398 36.8 KB
區塊鏈共識的信任模型則大爲不一樣,對信任的要求每每要小的多。在permissionless blockchain網絡中,同一個節點即發起交易又參與共識,節點對於共識結果要進行驗證,並非簡單的信任其餘節點的共識結果。以Bitcoin爲例,若是一個全節點參與挖礦,它就同時是一個發起請求(交易)的節點和處理請求(交易)的節點。即便它只想作一個安靜的全節點,不參與挖礦,它也會自行驗證收到的請求處理結果(區塊),並不信任其餘共識節點提供的結果。這樣的全節點只是選擇跟隨多數算力選擇的交易排序,不相信多數算力給出的交易結果。這是一個最小的信任模型。

SPV/輕節點使用一個比全節點更強的信任模型(更強意味着對信任的假設更多),並不驗證交易的執行,只驗證區塊頭的有效性。如何驗證區塊頭的有效性則是區塊鏈共識設計的另外一個核心問題。若是隻是經過對區塊頭附帶的非對稱簽名來驗證有效性,這個信任模型基本上和傳統共識的信任模型是等價的,由於傳統共識中的請求處理節點也能夠對結果附加簽名,這個模型在結合動態參與者集合時會遇到一系列的問題,例如你們熟知的長程攻擊。若是是經過PoW來驗證區塊頭有效性則自然沒有這些麻煩,主流的研究方向是在於如何進一步提升區塊頭的驗證效率。

一個簡單的分析框架

根據以上的分析,咱們能夠整理出一個簡單的區塊鏈共識分析框架,用於比較各類區塊鏈共識:

  • 進入方式* - 購買算力 / 抵押代幣 / …
  • 出塊方式* - 輪流出塊 / PoW隨機選擇 / 鏈上僞隨機 / VRF隨機選擇 / …
  • 共識方式* - Nakamoto Consensus / BFT / …
  • 退出方式* - 中止挖礦 / 解除抵押 / …
  • 一致性 - 能夠容忍多少惡意節點/算力/Stake/…
  • 活性 - 能夠容忍多少惡意節點/算力/Stake/…
  • 延遲 - 交易被徹底確認(被推翻的機率小於x)所須要的時間
  • 帶寬效率 - 共識對帶寬的利用率,越高越好
  • 節點數量 - 共識節點的數量上限是高仍是低

舉例說明:

圖片描述

[1] 99%的肯定性
[2] 考慮自私挖礦
[3] 不管多小的正常算力都有機會出塊,可是平均延遲會增長
[4] https://github.com/tendermint... 6
[5] https://medium.com/nervosnetw... 6

對於一個區塊鏈共識協議來講,前四點(帶*)基本上決定了後面的特徵。經過這個框架也容易看到,咱們一般所說的「PoW共識」或者「PoS共識」是很是模糊的描述,PoW/PoS僅僅是選擇出塊節點的方式,不能表達具體的共識過程是什麼樣子。咱們甚至能夠設計一些很是混搭的共識協議,例如設計一個須要經過抵押代幣來參與,經過PoW來選擇出塊節點,經過Nakamoto Consensus造成最長(重)鏈的協議(能夠給它取名叫StakingPoW,完美結合Staking熱點),或者是設計一個須要經過PoW來參與(必須提供知足必定難度的PoW才能參與共識),經過VRF來選擇出塊節點,經過BFT來達成共識的協議(這個能夠起名叫PoW+VRF/BFT,讓人一看就從心底油然升起專業的感受)。

激勵分析

在上面的框架之上,咱們還能夠疊加一個在傳統共識中沒有的維度:共識激勵。區塊鏈在共識中引入了經濟激勵,經過機制設計將納什均衡與系統目標融合在一塊兒,引導參與者遵照協議,共識參與者的效用函數能夠方便的以其經濟收益(即得到的獎勵減去參與共識的成本)來衡量。共識獎勵每每經過系統內原生代幣實現,獎勵價值由代幣價值決定,在一個正確設計的共識協議中參與者應該按照付出的多少得到相應的回報。共識成本的組成比較複雜,對應上面的框架,咱們須要分析共識的進入成本,出塊成本,共識成本,退出成本,這些成本共同構成了節點參與共識的成本。正確的共識激勵對網絡的安全性和去中心化程度都有影響,所以激勵分析是共識分析的一個重要部分。

相關文章
相關標籤/搜索