區塊鏈從 2009 年發展至今,已經演變出多種共識。共識機制之爭的就像區塊鏈領域內競爭「王座」的「權力的遊戲」。本文通過類比美劇《權力的遊戲》來梳理和介紹目前區塊鏈的主流共識協議。
目前,大部分的區塊鏈共識都來自「BFT 家族」、「Proof of X 家族」,又或者是兩大家族之間的結合。BFT 共識發展較早但應用場景有限。在區塊鏈誕生後,BFT 類共識也隨之復興,主要應用於許可鏈內,也可在修改後應用於公鏈。Proof of X 是目前公鏈領域內應用較多的一類共識。其中 PoW 最早被應用,但存在資源浪費、算力集中、缺少終局性以及性能低下等。PoS 是目前有力競爭者,可避免資源浪費、弱化了中心礦池需求、降低 51% 攻擊可能性,但也同時存在確定記賬節點數量困難、存在非預期的中心化問題、Nothing at Stake 等問題。
爲了解決以上弊端,當前也誕生了許多混合類共識,希望既融合兩者的優勢,又能規避某些弊端,包括 PoW+PoS、DPoS+BFT 等。
此外,還有一些思路是應用密碼學技術來改進共識,包括門限簽名、聚合簽名、可驗證隨機函數等等,但使用效果還有待實踐檢驗。
可以看到,共識算法的「權力的遊戲」還在繼續,區塊鏈及分佈式計算的演化不會停歇。
原文標題:《共識機制的「權力的遊戲」》
文章來源:火幣研究院
作者:袁煜明、胡智威
報告正文
隨着《權力的遊戲》第 8 季的到來,這個陪伴我們近 10 年的劇集也將迎來終結。豆瓣評分 9.7 分,朋友圈各種劇透刷屏,隨着大 boss 夜王的「冤死」,故事真正的情節高潮還是圍繞在幾大家族對王座的角逐。
區塊鏈從 2009 年發展至今,已經演變出多種共識,不同共識以不同方法解決了運行中出現的攻擊、作弊、延時、一致性、最終確定性等等問題。目前主流的共識算法包括 PoW、PoS、BFT 等,混合共識更如雨後春筍。還有一些在主流基礎上演變而來的共識算法,諸如 PoA、PoI、DPoS、PBFT 稱得上百家爭鳴,不明覺厲。
不誇張地說,共識機制就是區塊鏈技術中的「王座」,而你方唱罷我登場的共識機制之爭,就好像一場區塊鏈的「權力的遊戲」。
1 兩大家族的紛爭
何爲共識 ? 共識(Consensus)是在分佈式的系統中獲得一致性數據的計算機科學過程。共識機制非常必要地假設一些流程和系統有較高延遲、無法有時效地溝通甚至於一些節點作惡,因此共識機制需要有一定的容錯性。
區塊鏈共識機制讓我們看得眼花繚亂,但我們可認爲基本都是由 Paxos、BFT 類和 Proof of X 三種基礎的共識衍生而成。大部分的區塊鏈共識都來自「BFT 家族」「Proof of X 家族」,又或者是兩大家族之間的結合。「BFT 家族」是共識世界中古老的王者,一如古老的龍族 House Targaryen,雖然一度落寞但是能力依舊,並且歷經磨難捲土重來。而隨着 2008 年比特幣白皮書的問世,「Proof of X 家族」開始了風光無限的快速發展,好像是自帶主角光環的 House Stark。Stark 家族雖然年輕,但家族成員個個能力超強,每個都是王座的有力爭奪者。
2 BFT 類共識
現在家喻戶曉的「拜占庭將軍問題」(Byzantine failures),早在 1982 年便出現了,是由美國計算機科學家萊斯利·蘭伯特在論文《ACM Transactions on Programming Languages and Systems》[2] 中提出的分佈式系統通信中的一種問題。
蘭伯特在提出了拜占庭將軍問題之後,也在論文中提出瞭解決該問題的兩種解法,包括口頭協議和書面協議等。爲了在工程上更加實際可用,學術界後來又不斷進行探索研究,誕生了 PBFT (Practical Byzantine Fault Tolerance)[3] 等更爲實用的共識協議。這類共識均可歸爲 BFT 類共識。單從歷史來看,BFT 類共識資歷最深,是共識機制傳統的王者。
拜占庭問題是非常嚴重且極難處理的。但是除了在飛機發動機系統、核電站等需要大量傳感器並對採集結果極端敏感的一些系統環境中適用外,通常的分佈式系統,例如 zookeeper 等並不需要拜占庭容錯,只需要 Paxos、Raft 等支持 CFT (CrashFaultTolerance)的共識協議即可。 就像 Targaryen 家族被 Baratheon 家族取代一樣,可認爲 BFT 的王座一度讓位於這些 CFT 共識。
不過隨着比特幣等一系列區塊鏈應用的誕生,區塊鏈的應用場景需求激增,BFT 類共識也得到了很好的發展。目前,BFT 類共識在區塊鏈應用中一般適合於對強一致性有要求的私有鏈和聯盟鏈場景,但是其變種也適用於公鏈的共識。
3 Proof of X
直到比特幣和區塊鏈的出現,共識機制迎來了由古典時期到現代時期的快速發展。區塊鏈主要的細分領域——公鏈,是一種去中心化的分佈式賬本系統,也是未來一切區塊鏈商業應用的基礎設施。由於點對點網絡下存在較高的網絡延遲,各個節點所觀察到的交易事務先後順序不可能完全一致。因此,公鏈系統需要共識機制來對在一定時間內發生的事務的先後順序進行共識。共識機制可以解決節點間互相信任的難題,使得區塊鏈在信息傳輸的過程中同時完成價值轉移。共識機制決定了公鏈的性能,公鏈則催生了共識機制的繁榮。
3.1 PoW 主角的危機
PoW(Proof of Work 工作量證明),是一種按勞分配模式,即礦工憑藉工作量的大小來爭取記賬的權利。工作量越大對應礦工的算力越大,其獲得記賬權的概率也越大。
PoW 共識在比特幣的應用中具有重要意義,也是最早和迄今爲止在實踐中最安全可靠的公有鏈共識算法,支撐了比特幣系統超過 10 年無重大故障的平穩運行。
除了 PoW 最早的「中本聰共識」以外,PoW 在後來的發展中還有了更多的一些演化,主要包括分叉選擇策略方面和哈希算法方面等。
分叉策略選擇
比特幣採用的最長鏈機制,呈現出贏者通喫的一種情況。一些區塊鏈系統對此有不同看法,因而採用了其他的策略。例如,以太坊認爲在挖礦競爭中失敗的礦工也爲整個網絡提供了服務,應當予以一定的獎勵,因此帶來了叔塊(Ommer)的概念。在這種情況下的確定主鏈方式,以太坊用了另一種策略:GHOST (Greedy Heaviest-Observed Sub-Tree Protocol)由簡單的最長鏈策略改爲了包含叔塊在內、區塊最多的一條鏈。
調整哈希算法
哈希算法主要用來 PoW 時的工作量證明,即礦工是否找到了一個數值可以滿足當前區塊的哈希值要求的。在比特幣之後,更多的算法被引入或發明出來用於工作量的證明 [4],在單純哈希的基礎上,還加入了更多的計算內容,形成了更爲複雜的計算流程。其中一些是因爲密碼學上已被證明存在安全隱患因此需要以比如增加位數等方式來改進;一些通過內存密集型的算法設計來提升 CPU、GPU 的相對計算優勢,以此對抗 ASIC 礦機;還有一些設計用來配合隱私保護。
當然,也像在《權力的遊戲》中一樣,危機會隨時降臨到每個人頭上,即使能力最強的主角也是一樣。PoW 共識也存在一些明顯問題:
資源浪費:PoW 共識過程高度依賴區塊鏈網絡節點貢獻的算力。同時,加密數字貨幣生態圈已經在資本和設備方面呈現出明顯的「軍備競賽」態勢,逐漸成爲高能耗的資本密集型行業,進一步凸顯了資源消耗問題。
算力集中:根據 btc.com 數據顯示,過去一年礦池算力份額排名前五位的礦池佔據了比特幣總算力份額的 65%,馬太效應逐漸顯現。同時算力過度集中還存在着 51% 攻擊的風險。
性能低:由於需要通過設置一定的工作量來達成共識,PoW 的區塊鏈通常處理交易業務的性能非常低,比如比特幣 TPS 理論上最多隻有 7 筆 / 秒。
3.2 PoS,王位最有力的衝擊者
正因爲 PoW 的勢微,主流算法裏面,PoS (Proof of Stake 權益證明)順利成章成爲了王位最有力的衝擊者。PoS 在 PoW 的基礎上發展而來,並受到當今區塊鏈共識世界的推崇。在 2014-2017 年期間,基於 PoS 共識打造的區塊鏈逐漸增多,就連市值長期保持第二的以太坊也計劃從 PoW 轉到 PoS。
PoS 共識機制的提出最早源於人們對挖礦中「公地悲劇」問題的辯論。2010 年 11 月,挖礦公地悲劇 (Disturbingly low future difficulty equilibrium) 由 Vandroiy 指出並引發廣泛討論。2011 年 7 月,數字貨幣愛好者 Quantum Mechanic 在比特幣論壇首次提出 PoS 權益證明共識機制的概念 (Proof of stake instead of proof of work)。客觀來說,PoS 機制的誕生確實解決了 PoW 的部分弊端:1. 以 PoS 機制開發新區塊在一定程度上避免了資源浪費,同時系統區塊的自動產出緩解了由於數字資源有限性而產生的通貨緊縮。PoW 機制下,礦池通過規模經濟效應來提高產量,降低了長期平均成本;2.PoS 共識機制弱化了中心礦池規模經濟的需求,算力集中壟斷的情形也得到了緩解,個體競爭力差別相對減小;3. 就 51% 攻擊而言,PoS 共識機制發起一小時攻擊的成本遠大於 PoW 共識機制。
然而 PoS 也存在一些問題需要解決:
無權益問題(Nothing at Stake):用戶在 PoS 中可以同時在兩個分叉上面下注;無論哪一個分叉後面被公認爲主鏈,該用戶都可以獲得獎勵而沒有機會成本的損失。這樣也在事實上會干擾共識的形成。
被動形成中心化:PoS 主網上線伊始,創世塊中分配的 Token 絕大多數屬於數量有限的項目方和早期投資人。因此 PoS 的區塊鏈很容易被早期用戶壟斷和支配。
記賬節點選擇問題:很多 PoS 依賴於 BFT 類算法,但是許多 BFT 類共識需要確定節點後才能進行下去。記賬節點的不確定還會增大網絡分區的概率。
4 天下大亂,混合共識如雨後春筍
幾乎所有的共識機制都有其獨特的優勢,也有其弊端,沒有一種共識機制可以完美解決區塊鏈「不可能三角」問題。因此,人們開始思考是否可以將兩種共識混合,從而做到既融合兩者的優勢,又能規避某些弊端。於是就有了混合類共識。
4.1.PoW + PoS
在「混合共識」中,PoW+PoS 混合機制是其中最熱門也應用得較爲成功的一種共識算法。
2014 年 4 月,拉里·雷恩 (Larry Ren) 在《Reddcoin 白皮書》中提出了權益 – 速度證明(Proof of Stake Velocity,PoSV)共識機制。PoSV 算法前期使用 PoW 實現代幣分配,後期使用 PoSV 維護網絡長期安全。PoSV 將 PoS 中幣齡和時間的線性函數修改爲指數式衰減函數,即幣齡的增長率隨時間減少最後趨於零。因此新幣的幣齡比老幣增長地更快,直到達到上限閾值,這在一定程度上緩和了持幣者的屯幣現象。
以太坊 Casper 是另一個比較知名的結合方案。爲了解決挖礦耗能、網絡中心化、性能擴展等多個問題,以太坊目前在通過 Casper 試着從 PoW 轉向 PoS。Casper 可視爲是以太坊版本的 PoS,但 Casper 目前並不是一個協議,而是包含了 2 個由以太坊團隊發起的設計實現,包括了 Casper FFG 和 CasperCBC。其中,CasperFFG[5](Casperthe Friendly Finality Gadget)是一種 PoW+PoS 混合的機制,希望將 PoS 機制逐步引入到以太坊區塊鏈網絡中。在這種共識協議下,區塊生成的主要過程將仍然通過 PoW 挖礦來進行;不過每間隔 50 或 100 個 PoW 生成的區塊,則會設置一個 PoS 的檢查點,由驗證人對這個檢查點上的數據內容進行驗證和投票。
此外,這些結合的共識還有:2014 年 5 月發行的 Slimcoin 基於 PoW 和 PoS 提出了燃燒證明 (Proof of Burn, PoB) 共識機制 ; 2014 年 12 月提出了行動證明 (Proofof Activity,PoA) 等等。
4.2 DPoS+BFT
PoS 會導致首富賬戶的權力更大,有能力支配記賬權。2014 年 4 月由 Dan Larimer (BM)提出 DPoS (Delegate Proof of Stake)機制,期望通過引入技術民主層來減少中心化的負面影響。
在 DPoS 共識機制中,存在兩種角色,公證人和見證者。公證人是指權益持有者,可以投票選舉區塊生產者,見證者指被選舉出來進行區塊生產、驗證交易的節點。在 DPoS 中,不是每個節點都具有生產區塊的權利,但是每個節點都具有投票權,這一點和議會制度很像:不是每個公民都可以做議員,但是每個公民都具有選舉自己信任的議員的權利。DPoS 中的投票是根據投票者權益進行加權的,在投票中使用的權益越多,選舉的影響力越大。DPoS 系統中仍然存在中心化現象,但它是受約束的。DPoS 體系裏每個客戶端都可以決定誰能夠被信任,而不用必須像 PoS 一樣信任擁有最多資源的人。
不過 DPoS 也存在一些問題:
投票的積極性並不高。絕大多數持股人(90%+)從未參與投票。這是因爲投票需要時間、精力以及技能,而這恰恰是大多數投資者所缺乏的。
對於壞節點的處理存在諸多困難。社區選舉不能及時有效地阻止一些破壞節點的出現,給網絡造成安全隱患。
依賴增發代幣。整個共識機制還是依賴於代幣的增發來維持代理節點的穩定性。
5 基於密碼學的改進,通向王位的龍與魔法?
可以說,以區塊鏈技術爲代表特徵的加密世界是構建於密碼學的基礎之上的。目前很多區塊鏈系統也開始迴歸到這種技術本源,利用各類密碼學技術來降低共識的通訊代價、提高共識效率,獲得了不錯的效果。這些密碼學技術包括門限簽名、聚合簽名、可驗證隨機函數等。
5.1 門限簽名
以上介紹的協議大部分都需要假設基於一個同步或半同步的網絡環境,而 HoneyBadger BFT 是第一個知名的異步 BFT 類協議 [6],可在消息延遲沒有明確上限的異步網絡中運行。它首先將交易拆分爲多份,各個節點間相互,減輕發起節點的消息發送瓶頸問題。而因爲其異步網絡環境,節點間收到交易是非同步的、隨機順序的。節點以二元拜占庭協議剔除無效交易和重複交易等後,得到一個異步公共交易子集(Asynchronous Common Subset)[7]。
而門限加密使得只有 f+1 個誠實節點共同合作才能解密出消息原文,防止惡意節點對於最終交易集的攻擊。HoneyBadger BFT 協議的主要限制是其在異步網絡下爲一個非確定性共識算法。
5.2 聚合簽名
E.Kokoris-Kogias 等在其論文中提出了在共識機制中使用聚合簽名的方法。論文中提到的 ByzCoin[8] 以數字簽名方式替代原有 PBFT 使用的 MAC 將通訊延遲從 [if !msEquation] [endif] 降低至 [if !msEquation][endif];使用聚合簽名方式將通訊複雜度進一步降低至 [if !msEquation][endif]。但 ByzCoin 在主節點作惡或 33% 容錯等方面仍有侷限。
之後一些公鏈項目,例如 Zilliqa[9] 等基於這種思想,採用 EC-Schnorr 多籤算法提高 PBFT 過程中 Prepare 和 Commit 階段的消息傳遞效率,並結合分片等優化技術以希望突出改進公有鏈平臺 TPS。
Gosig[10] 也使用該方法,同時還結合了 Algorand 以可驗證隨機函數的方式選擇「Leade」和多輪投票等方法來儘量降低 Leader 作惡可能性。
5.3. 可驗證隨機函數
可驗證隨機函數(Verifiable Random Function,簡稱 VRF)是另一個經常會使用到的密碼學技術。在區塊鏈共識裏,經常會被用來以一種公平公開的方式選出某些節點,作爲出塊者或者驗證者。因此在公鏈平臺中與中本聰共識進行結合,既可容納衆多參與者,又能儘量避免 PoW 的算力集中等問題。Algorand、VBFT、Dfinity,都是通過引入可驗證隨機函數的共識機制改進節點中心化的問題。
Algorand 和 Dfinity 的「套路」大體上可從可驗證隨機函數包含的四個函數來看:1、生成密鑰,生成一個公鑰私鑰對;2、生成隨機數輸出;3、計算零知識證明;4、驗證隨機數輸出。具體過程是先將前一個隨機數(最初的隨機數卻是協議給定的)和某種代表高度、輪次的變量進行組合,用某種私鑰對之進行簽名(或者是先簽名再組合),最後哈希一下得出最新的隨機數。這樣產生的隨機數旁人很容易驗證其合乎算法,「V」就這樣得到了;而哈希返回值又是隨機分佈的,「R」也因此得到保證。正如 VRF 的文字表述,目的就是要生成一個真正隨機而且無法被預測的值。
在區塊鏈選出塊節點的過程中,爲了保證安全,隨機是一個基本要求。不過,區塊鏈選節點不單純是隨機就有保證了,還要考慮到攻擊成本、治理的公平性等問題。如果單純使用隨機算法,就很容易受到「女巫攻擊」:攻擊者可以廉價地以大量的傀儡機來增加自己抽中的概率。所以共識機制往往還需要加入算力和持幣權益等影響因素來綜合設計,以增加攻擊者的攻擊成本。
但密碼學的技術應用也並不是沒有代價的。門限簽名、聚合簽名通常要比普通簽名技術需要更大的計算量。在具體技術實現上,有些會需要一些特殊的信息交互過程或中心化的密碼基礎設施。另外,Algorand 和 Dfinity 這些大量使用 VRF 的區塊鏈系統還沒有上線,VRF 在共識中的具體使用效果還有待實踐評估檢驗。
6 結語
共識算法的「權力的遊戲」還在繼續,區塊鏈及分佈式計算的演化不會停歇。回顧共識算法過去 40 年的發展歷程,由古典時期 BFT 對一致性的關注,到近代時期中本聰共識對容錯和去中心化的追求,再到現在 PoS、VRF 等對性能平衡的聚焦,可以看到:遊戲還在繼續,未來浪成於微瀾之間。
來源鏈接:www.jianshu.com