區塊鏈數字貨幣的9種共識機制比較

區塊鏈的根本屬性是去中心化,而去中心化的依託是共識機制。

在了解共識機制之前,先來看兩個古老的引入問題:類兩軍問題、拜占庭將軍問題。

類兩軍問題:

古代有兩個相距很遠的軍隊要傳遞信息,

藍軍派遣一個信使去跟紅軍說:有本事把義大利炮拿過來!

紅軍收到後回復藍軍說:收到指令。

藍軍要給出確認答覆:知道你收到指令了!

紅軍繼續給出答覆:知道你知道我知道指令了!

….

拜占庭將軍問題:

拜占庭羅馬帝國在軍事行動中,採取將軍投票策略來決定進攻還是撤退,即如果多數人決定進攻,就整體確定進攻策略。但是軍隊中如果有姦細(將軍可能反水、傳令官可能誤傳),如何保證最後投票真實反映忠誠將軍的決策?

拜占庭帝國周圍有10個小國,它們飽受拜占庭欺壓,卻只有同一時間有6個以上國家進攻才有可能打敗拜占庭帝國,非則一定戰敗。

難點在於:古時候軍隊之間的通信完全依賴於人,如果軍隊中有姦細,無論是將軍反水還是傳令官誤傳,都會是另外9個國家收到假消息,從而造成作戰失敗。如果你是國王,該如何判斷一定會有另外5個以上國家與你並肩作戰?畢竟一不小心,就亡國了。

由於類似於以上這樣的問題存在,共識的必要性浮現出來。

九種共識機制比較

區塊鏈上的共識機制有多種,但任何一種都不是完美無缺,或者說適用於所有應用場景的。

1. 工作量證明(POW)

工作量證明(Proof of Work,簡稱PoW)通常只能從結果證明,因為監測工作過程通常是繁瑣且低效的。

比特幣在區塊的生成過程種使用了PoW機制,一個符合要求的區塊哈希值由N個前導零構成,零的個數取決於網路的難度值。要得到合理的區塊哈希值需要經過大量的嘗試計算,計算時間取決於機器的哈希運算速度。當某個節點提供出一個合理的區塊哈希值,說明該節點確實經過了大量的嘗試計算,但是並不能得出計算次數,因為尋找合理的哈希值是一個概率事件。當節點擁有佔全網n%的算力時,該節點既有n%的概率找到區塊哈希值。

PoW依賴機器進行數學運算來獲取記賬權,資源消耗大、共識機制高、可監管性弱,同時每次達成共識需要全網共同參與運算,性能效率比較低,容錯性方便允許全網50%節點出錯。

PoW的優點:完全去中心化,節點自由進出。

PoW的缺點:目前比特幣已經吸引全球大部分的算力,其他再使用PoW共識機制的區塊鏈應用很難獲得相同的算力來保障自身安全;挖礦造成大量的資源浪費;共識達成的周期較長。

使用PoW的項目有:比特幣、以太坊的前三個階段(Frontier前沿、Homestead家園、Metropolis大都會)。以太坊的第四個階段 Serenity寧靜 將採用權益證明機制(POS)

2. 權益證明(P0S)

權益證明(Proof of Stake,簡稱PoS)由Quantum Mechanic 2011年在比特幣論壇講座上首先提出,後經Peercoin(點點幣)和NXT(未來幣)以不同思路實現。

PoS的主要理念是節點記賬權的獲得難度與節點持有的權益成反比,相比PoW,其在一定程度上減少了數學運算帶來的資源消耗,性能也得到了相應的提升,但依然是基於哈希運算,競爭獲取記賬權的方式,可監管性弱。該共識機制的容錯性和PoW相同。它是PoW的一種升級,根據每個節點所佔代幣的比例和時間,等比例地降低挖礦難度,從而加快找到隨機數的速度。

在PoW中,一個用戶可能拿1000美元來購買計算機,並加入網路來挖礦以此產生新區塊,從而得到獎勵。而在PoS中,用戶可以拿1000美元購買等價的代幣,並把這些代幣當作押金放入PoS機制中,這樣用戶就有機會產生新區塊而得到獎勵。

總體而言,這個系統中存在一個持幣人的集合,他們把手中的代幣放入PoS機制中,這樣他們就變成驗證者。比如對區塊鏈最前面的一個區塊而言,PoS演算法在驗證者中隨機選擇一個(選擇驗證者的權重依據他們投入的代幣量,比如一個投入押金為1W代幣的驗證者被選擇的概率是一個投入1K代幣驗證者的10倍),給他權利產生下一個區塊。如果在一定時間內,這個驗證者沒有產生一個區塊,則選出第二個驗證者代替產生新區塊。與PoW一樣,PoS以最長的鏈為準。

隨著規模經濟(指擴大生產規模引起經濟效益增加的現象)的消失,中心化所帶來的風險減小了。價值1000萬美元的代幣帶來的回報不多不少,是價值100萬美元代幣的10倍,不會有人因為負擔得起大規模生產工具而得不到成比例的額外回報。

PoS的優點:在一定程度上縮短了共識達成的時間;不再需要大量消耗能源去挖礦。

PoS的缺點:還是需要挖礦,本質上沒有解決商業應用的痛點;所有的確認都只是一個概率上的表達,而不是一個確定性的事情,理論上有可能存在其他攻擊影響,例如以太坊的DAO攻擊事件造成以太坊硬分叉,而ETC隨之出現,事實上證明了此次硬分叉的失敗。

3. 股份授權證明(DPOS)

BitShares(比特股)社區首先提出了股份授權證明(簡稱DPoS)機制,它與PoS的主要區別在於節點選舉若干代理人,由代理人驗證和記賬,但其合規監管、性能、資源消耗和容錯性與PoS相似。類似於董事會投票,持幣者投出一定數量的節點,進行代理驗證和記賬。

DPoS的工作原理如下:每個股東按其持股比例擁有相應的影響力,51%股東投票的結果將是不可逆且有約束力的,其挑戰是通過及時而高效的方法達到「51%批准」;

為了達到這個目標,每個股東可以將其投票授予一名代表。獲票數最多的前100位代表按既定時間表輪流產生區塊。每位代表分配到一個時間段來生產區塊。

所有的代表將收到等同於一個平均水平的區塊所含交易費的10%作為報酬。如果一個平均水平的區塊用100股作為交易費,一位代表將獲得一股作為報酬。

網路延遲有可能使某些代表沒能及時廣播他們的區塊,而這將導致區塊鏈分叉。然而,這不太可能發生,因為製造該區塊的代表可以與製造該區塊前後的區塊的代表建立直接連接。建立這種與你之後的代表(也許也包括其後的那名代表)的直接連接是為了確保你能得到報酬。

DPoS的投票模式可以每30秒產生一個新區塊,並且在正常的網路條件下,區塊鏈分叉的可能性極其小,即使發生也可以在幾分鐘內得到解決。執行該模式的基本步驟如下:

  1. 成為代表。成為一位代表,你必須在網路上註冊你的公鑰,並獲得一個32位的特有標識符。該標識符會被每筆交易數據的「頭部」引用。
  2. 授權投票。每個錢包有一個參數設置窗口,在該窗口裡用戶可以選擇一位或更多的代表,並將其分級。一經設定,用戶所做的每筆交易將把選票從「輸入代表」轉移至「輸出代表」。一般情況下,用戶不會創建專門以投票為目的的交易,因為那將耗費他們一筆交易費。但是在緊急情況下,某些用戶可能覺得通過支付費用這一更積極的方式來改變他們的投票是值得的。
  3. 保持代表忠誠。每個錢包將顯示一個狀態指示器,讓用戶知道他們的代表表現如何。如果他們錯過了太多的區塊,那麼系統將會推薦用戶更換一位新的代表。如果任何代表被發現簽發了一個無效的區塊,那麼所有標準錢包將在每個錢包進行更多交易前要求選出一位新代表。
  4. 抵抗攻擊。在抵抗攻擊上,前100位代表所獲得的權利是相同的,即每位代表都有一項平等的投票權,因此,無法通過獲得超過1%的選票而將權利集中到單一代表上。由於只有100位代表,不難想像一個攻擊者可以對每位輪到其生產區塊的代表依次進行拒絕服務攻擊。幸運的是,由於每位代表的標識是其公鑰而非IP地址,這種特定攻擊的威脅很容易被減輕。這將使確定DDoS(分散式拒絕服務)攻擊目標更為困難。而代表之間的潛在連接將使妨礙他們生產區塊變得更為困難。

DPoS的優點:大幅縮小參與驗證和記賬節點的數量,可以達到秒級的共識驗證。

DPoS的缺點:整個共識機制還是依賴於代幣,而很多商業應用是不需要代幣的。

4. 投注共識

投注共識是以太坊下一代的共識機制Casper(鬼馬小精靈)引入的一個全新概念,屬於PoS。Casper的共識是按區塊達成的,而不像PoS那樣按鏈達成。

為了防止驗證人在不同的世界中提供不同的投注,我們還有一個簡單嚴格的條款:如果你兩次的投注序號一樣,或者說你提交了一個無法讓Casper依照合約處理的投注,你將失去所有保證金。從這一點我們可以看出,Casper與傳統的PoS不同的是,Casper有懲罰機制,這樣非法節點通過惡意攻擊網路不僅得不到交易費,而且還面臨著保證金被沒收的風險。

Casper協議下的驗證人需要完成出塊和投注兩個活動。具體如下:

出塊是一個獨立於其他所有時間而發生的過程,驗證人收集交易,當輪到他們的出塊時間時,他們就製造一個區塊,並簽名,然後發送到網路上。投注的過程更為複雜一些,目前Casper默認的驗證人策略被設計為模仿傳統的拜占庭容錯共識:觀察其他的驗證人如何投注,取33%處的值,向0或1進一步移動。

而客戶端確認當前狀態的過程是這樣的:一開始先下載所有的區塊和投注,然後用上面的演算法來形成自己的意見,但是不公布意見;它只是簡單地按順序在每個高度進行觀察,如果一個區塊的概率高於0.5就處理它,否則就跳過它。在處理所有的區塊之後,所得到的狀態就可以顯示為區塊鏈的「當前狀態」。客戶端還可以給出對於「最終確定」的主觀看法:如果高度k之前的每個區塊形成的意見高於99.999%或者低於0.001%,那麼客戶端可以認為前k個區塊已經最終確定。

5. 瑞波共識機制(Ripple Consensus)

瑞波共識演算法使一組節點能夠基於特殊節點列表形成共識。初始特殊節點列表就像一個俱樂部,要接納一個新成員,必須由該俱樂部51%的會員投票通過。共識遵循這些核心成員的「51%權利」,外部人員則沒有影響力。由於該俱樂部由中心化開始,它將一直是中心化的,而如果它開始腐化,股東們什麼也做不了。與比特幣及Peercoin一樣,瑞波系統將股東們與其投票權隔開,因此,它比其他系統更中心化。

6. Pool驗證池

基於傳統的分散式一致性技術以及數據驗證機制,Pool(聯營)驗證池是目前行業內大範圍使用的共識機制。它的優缺點如下:

優點:不需要代幣也可以工作,在成熟的分散式一致性演算法(Paxos、Raft)的基礎上,實現秒級共識驗證。

缺點:去中心化程度不如比特幣,更適合多方參與的多中心商業模式。

7. 實用拜占庭容錯

在分散式計算上,不同的計算機通過信息交換嘗試達成共識,但有時候,系統中的協調計算機或者成員計算機可能因系統錯誤,而交換錯誤信息,以致影響最終的系統一致性。對於拜占庭將軍問題,若根據錯誤計算機的數量,尋找可能的解決辦法,這其實無法找到一個絕對的答案,只可以用來驗證一個機制的有效程度。

而拜占庭將軍問題的可能解決方法為:在N≥3F+1的情況下,一致性是可能實現的(N為計算機總數,F為有問題的計算機總數)。信息在計算機間互相交換後,各計算機列出所有得到的信息,以大多數的結果作為解決辦法。

最早由卡斯特羅和利斯科夫在1999年提出的使用拜占庭容錯(PBFT)是第一個得到廣泛應用的拜占庭演算法。只要系統中有2/3的節點是正常工作的,就可以保證一致性。

使用拜占庭容錯演算法的總體過程如下:客戶端向主節點發送請求調用服務操作,如「<REQUEST,o,t,c>」,這裡客戶端c請求執行操作o,時間戳t用來保證客戶端請求只會執行一次。每個由副本節點發給客戶端的消息都包含了當前的視圖編號,使得客戶端能夠追蹤視圖編號,從而進一步推算出當前主節點的編號。客戶端通過點對點消息向它自己認為的主節點發送請求,然後主節點自動將該請求向所有備份節點進行廣播。

視圖編號是連續編號的整數,主節點由公式p=v mod |R|計算得到,這裡v是視圖編號,p是副本編號,|R|是副本集合的個數。

副本發給客戶單的響應為「<REPLY,v,t,c,i,r>」,v是視圖編號,t是時間戳,i是副本的編號,r是請求執行的結果。

主節點通過廣播將請求發送給其他副本,然後就開始執行三個階段的任務。

  1. 預準備階段。主節點分配一個序列號n給收到的請求,然後向所有備份節點群發預準備消息,預準備消息格式為「<<PRE-PREPARE, v, n, d>, m>」,這裡v是視圖編號,m是客戶端發送的請求消息,d是請求消息m的摘要。
  2. 準備階段。如果備份節點i接受了預準備消息,則進入準備階段。在準備的同時,該節點向所有副本節點發送準備消息「<PREPARE, v, n, d, i>」,並且將預準備消息和準備消息寫入自己的消息日誌。
  3. 確認階段。當「(m, v, n, i)」條件為真的時候,副本i將「<COMMIT, v, n, D(m), i>」向其他副本節點廣播,於是就進入了確認階段。所有副本都執行請求並將結果發回客戶端。客戶端需要等待不同副本節點發回相同的結果,作為整個操作的最終結果。

如果客戶端沒有在有限時間內收到回復,請求將向所有副本節點進行廣播;

如果該請求已經在副本節點處理過了,副本就向客戶端重發一遍執行結果;

如果請求沒有在副本節點處理過,該副本節點將把請求轉發給主節點;

如果主節點沒有將該請求進行廣播,那麼就認為主節點失效;

如果有足夠多的副本節點認為主節點失效,則會觸發一次視圖變更。

圖2-85展示了在沒有發生主節點失效的情況下演算法的正常執行流程,其中副本0是主節點,副本3是失效節點,而c是客戶端。

使用拜占庭容錯機制是一種採用「許可投票、少數服從多數」來選舉領導者並進行記賬的共識機制,該共識機制允許拜占庭容錯,允許強監督節點參與,具備許可權分級能力,性能更高,耗能更低,而且每輪記賬都會由全網節點共同選舉領導者,允許33%的節點作惡,容錯率為33%。

由於特別適合聯盟鏈的應用場景,實用拜占庭容錯機制及其改進演算法為目前使用最多的聯盟鏈共識演算法,其改進演算法為目前使用最多的聯盟鏈共識演算法,其改進演算法在以下方面進行了調整:修改底層網路拓撲的要求,使用P2P網路;可以動態地調整節點數量;減少協議使用的消息數量。

8. 授權拜占庭容錯

2016年4月,小蟻公司發布共識演算法白皮書,描述了一種通用共識機制——授權拜占庭容錯,提出了一種改進的拜占庭容錯演算法,使其能夠適用於區塊鏈系統。授權拜占庭容錯演算法在使用拜占庭容錯演算法的基礎上,進行了以下改進:

  1. 將C/S架構的請求響應模式改進為適合P2P網路的對等節點模式;
  2. 將靜態的共識參與節點改進為可動態進入、退出的共識參與節點;
  3. 為共識參與節點的產生設計了一套基於持有權益比例的投票機制,通過投票決定共識參與節點(記賬節點);
  4. 在區塊鏈中引入數字證書,解決了投票中對記賬節點真實身份的認證問題。

授權拜占庭容錯機制的優點:專業化的記賬人;可以容忍任何類型的錯誤;記賬由多人協同完成;每一個區塊都有最終性,不會分叉;演算法的可靠性有嚴格的數字證明。

授權拜占庭容錯機制的缺點:當1/3及以上的記賬人停止工作後,系統將無法提供服務;當1/3及以上的記賬人聯合作惡,且其他所有的記賬人被恰好分割為兩個網路孤島時,惡意記賬人可以使系統出現分叉,但是會留下密碼學證據。

總而言之,授權拜占庭容錯機制最核心的一點,就是最大限度地確保系統的最終性,使區塊鏈能夠適用於真正的金融應用場景。

9. Paxos演算法

這是一種傳統的分散式一致性演算法,是一種基於選舉領導者的共識機制。領導者節點擁有絕對許可權,並允許強監督節點參與,其性能高,資源消耗低。所有節點一般有線下准入機制,但選舉過程中不允許有作惡節點,不具備容錯性。

專欄:

區塊鏈與比特幣技術zhuanlan.zhihu.com圖標
推薦閱讀:

比特幣等數字貨幣的核心運行原理與案例
還有誰能阻止比特幣(Bitcoin)征服地球?
區塊鏈與物聯網結合:解讀數字貨幣IOTA在機器經濟中的應用

TAG:区块链Blockchain | 比特币Bitcoin | 数字化货币 |