共識演算法的比較:Casper vs Tendermint

以太中文網發表於2018-10-11

共識演算法的比較:Casper vs Tendermint

權益證明的漫漫長路

1982年,拜占庭將軍問題首次被Lamport,Shostak和Pease提出。Cosmos的Ethan Buchman這樣描述它:”這是一個在可妥協的通訊網路中實現分散式協議的問題,也就是在不可靠的環境中建立一個可靠的系統的問題“。從1982年到1999年,都沒有人能夠創造一個可以解決拜占庭將軍問題系統。長久以來,拜占庭將軍問題與計算都是無關的,因為在那個時候,網際網路演進出基於雲的中央中心化計算模式,所需要解決的只是容錯問題。

所以,故障容錯演算法得到普及,例如1998年發明的Paxos演算法和2013年發明的Raft演算法被廣泛的應用。而1999年發明的實用拜占庭容錯(PBFT)卻沒有被學術界之外採用。直到2008年,中本聰將網路規模級別的分散式拜占庭容錯(BFT)演算法設計到區塊鏈方案中,才使拜占庭容錯得到推廣。當這種原型出現之後,系統研究界的人都開始圍繞將學術界“奇物”應用到真實世界而去構思各種想法。

在2011年,BitcoinTalk論壇對一個叫做權益證明(PoS)的概念組織了一場討論。最初的PoS協議例如點點幣,實現結果的並不理想。第一個真正提出將BFT研究應用到PoS公有區塊鏈環境中是Jae Kwon,他在2014年創造了Tendermint。

在當時,PoS研究做出了很大的假設:假設系統中的一系列對等節點都是靜態的,並且在長時間內都是穩定的。在區塊鏈環境中完全是不現實的。 Jae Kwon的重大突破是使Tendermint能夠使用區塊,雜湊連結,動態驗證器集合和迴圈的領導者選舉來將BFT研究適應複製狀態機(區塊鏈)的領域。

在Tendermint環境中,出現了大量的共識演算法(Honeybadger, Ouroboros, Tezos, Casper),它們都包含了BTF研究的元素以及在區塊鏈上其他模組觀察的元素。

為權益證明做的所有研究都指向一個重要問題:在不耗盡物質稀缺資源的情況下,我們可以達到工作量證明(PoW)的安全級別嗎?這個問題可以轉化為:PoS的投票權以鏈上貨幣計價而不是計算力計價。區塊鏈的POS共識問題比可擴充套件性更被廣泛討論,執行PoW挖礦的高開銷成本以及環境外部性方面存在的問題都刺激了大量資源湧入PoS安全研究。

本文主要探討了在加密貨幣中使用了權益證明的三個主要PoS協議的特性:由Vlad Zamfir帶領研究的Casper the Friendly Ghost(CTFG)和由Vitalik Buterin帶領研究Casper the Friendly Finality Gadget(CFFG)以及Jae Kwon帶領研究的Tendermint。

權益證明的陷阱

無利害關係

起初,有多種不同的說法來描述權益證明的一般陷阱,無利害關係就在這時被提出。Jae Kwon 2014年5月以“錯誤選擇謬論”的不幸名字第一次提到這個問題。在2014年7月Vitalik把比特幣開發者所描述的確切定義的問題普及推廣為“無利害關係”。問題呈現出此情況:驗證者通過在給定高度為多個有衝突的區塊投票可以有效的破壞安全性而不用付出任何代價。

簡單的PoS實現對於這些攻擊而言是非常脆弱的。災難性的是,因為沒有任何的激勵來鼓勵大家永遠集中在一個獨一的鏈上,並且每次激勵都要同時在相互衝突的鏈條上進行重複簽名,所以為了獲得更多的區塊獎勵,在經濟上最優的策略就變成了儘可能的在多個分杈上進行投票。下面這張圖就展示了:

共識演算法的比較:Casper vs Tendermint

-在簡單的PoS設計中競爭鏈上的期待投票數高於單一鏈上期待的投票數-

在工作量證明中,對於在多個鏈上進行挖礦的礦工“懲罰”是他們必須分開他們的計算力(非常稀缺的資源)。在現代非簡併的PoS設計中,這種成本必須嵌入到協議裡面以此模仿物理PoW挖礦的限制。

Vitalik Buterin在2014年1月引入的“slasher”概念或協議內懲罰可以減輕這個攻擊。Jae Kwon在同一年進一步推算了此方法,這是實現Tendermint共識協議的第一個迭代進展。苛刻以及允許這種懲罰的條件,對於所有的非簡併BFT協議都是有幫助的,甚至在本文中出現的三種共識都採用了。

遠端攻擊

遠端攻擊來源於使用者不得不撤回保證金的權利。這就產生了一個基本問題,因為這意味著攻擊者可以從任意長度的距離建立一個分杈而不用擔心被削減。一旦保證金被解除繫結,激勵不從某個高度區塊前進行長距離投票就被取消了。換句話說,當超過2/3的驗證者解除了繫結,那麼他們就可以惡意的創造包含之前驗證者集的第二條鏈,這可能導致任意的交易。

對於權益證明協議這是相當致命的,因為安全模型必然是“主觀”的。當參與網路要求大量的社會資訊,那麼這個安全模型就會被稱為是“主觀的”。一個新節點加入網路之後,對於當前網路的狀態可能會得出不同的結論,因為他們的決策是基於主觀資訊的,即社會聲譽。在相反面,工作量證明的安全模型必然是“客觀的”,因為當前網路狀態總是工作量最多的那個狀態,新節點對於網路狀態的結論總是相同的,因為他們的決策是基於客觀資訊。

PoS的遠端攻擊在弱主觀性模型下進行了糾正,這要求接入到網路中的後續新節點:

  • 當前必須是被繫結的
    。只相信
    當前
    有保證金的驗證節點
  • 解除繫結保證金必須要經過一個”解凍”期。解除繫結之後,代幣需要數週到數月的“解凍”時間,用以實現“同步性”前提(即延遲的訊息)
  • 禁止在N個塊之前恢復,其中N是保證金的長度。 這個規則使任何長程分杈無效。
  • 可選擇的將驗證者集存放在PoW的鏈上
共識演算法的比較:Casper vs Tendermint

Casper(s)和Tendermint採用一種簡單的鎖定機制(“Tendermint”中俗稱“凍結”)來鎖定股權一段時間(幾周到幾個月後“解凍”),以防止任何惡意聯合驗證者 違反安全。在CFFG演算法中,一個分杈選擇規則永遠只能修改最終塊之後的塊阻止了遠端攻擊。通過使用時間戳,在CFFG中的長距離分叉試圖修改比最終塊還要更早的塊的時候會被協議直接忽略掉。

卡特爾形式

第三,最後的障礙是面臨任意價值的任何經濟形式都將面對一個真正的寡頭壟斷問題,就算本土加密貨幣也不例外。

“加密貨幣令人難以置信的集中,挖礦算力也是一樣。寡頭壟斷競爭是很多現實市場的常態。少數相對富有的驗證者之間的協調比多數相對貧窮驗證者之間的協調要容易的多。在我們這種情況下,卡特爾形式是完全被預料到的。”
——Vlad Zamfir,Casper的歷史第4章節

Tendermint依靠額外協議管理方法來與寡頭壟斷驗證者進行對抗。雖然在審查制度方面沒有任何協議措施,但依靠帶外社會資訊解決卡特爾形成,其中的基本原理是:使用者最終將不可避免地注意到卡特爾的形成,社會上也會對此到處八卦,然後放棄或者投票重新組織受到攻擊的區塊鏈。

到目前為止,Vlad的Casper協議是唯一一個明確使用共識內審查激勵來打擊卡特爾形式一種模式。

概述

有很多不同的方式來實現權益證明的演算法,但是權益證明設計的兩個主要原理是基於鏈的PoS和基於拜占庭容錯(BFT)的PoS。Tendermint是基於拜占庭容錯的PoS設計,CTFG是基於鏈的PoS設計,而CFFG則混合了兩者。

電腦科學中的CAP理論返回在分散式資料系統中提供超過2/3擔保的不可能性:可用性、一致性、分割槽容錯。基於鏈的PoS演算法傾向於選擇可用性高的而不選擇一致性高的,因為可用性高意味著所有的交易都能被處理,不過要以犧牲整個網路中一致性狀態複製為代價。基於BFT的卻相反,會傾向於選擇高一致性。

基於BFT的權益證明

拜占庭容錯共識演算法源於30多年的豐富研究。Tendermint(2014)是Castro和Liskov在1999年引入的實用拜占庭容錯(PBFT)演算法的第一個PoS的改編版。基於BFT的PoS協議偽隨機的安排一個驗證者在多輪投票的過程中提出一個區塊。但是,提交和最終化區塊取決於大多數——所有驗證者中2/3的驗證者在提交的區塊中籤名。在區塊最終化之前可能需要進行幾輪(譯者注:這種多輪投票和現實世界的波爾卡舞蹈類似, 這也是polkadot 名字的由來)簽名。BFT系統只能容錯1/3的失敗,其中失敗包括故障或是惡意的攻擊。

Tendermint核心

Tendermint主要包含兩個主要的技術:區塊鏈共識引擎和通用的應用介面。共識引擎被稱為Tendermint核心模組,確保相同的交易在每個機器中都按照相同的順序被記錄下來。應用介面被稱為應用區塊連結口(ABCI),讓交易可以被任何程式語言編寫的程式處理。

在核心模組中,Tendermint基於迴圈投票機制進行工作,這也是共識協議的原理。一個回合被分成3個處理步驟:驗證者提出一個塊、傳送提交意圖、簽名後提交一個新區塊。這種機制為原子廣播提供了一個安全的狀態複製機,增加了一個責任層——安全故障可以完全歸結於Tendermint。

Tendermint共識演算法從驗證者集開始。驗證者們都維護了一份區塊鏈的全拷貝,並且可以用公鑰來識別驗證者的身份。在每個新的塊高度他們輪流的提出一個區塊。每輪投票都只有一個驗證者可以提出塊,並且要用驗證者相應的私鑰對此進行簽名,這樣的話如果有錯誤發生就可以找到為此負責的驗證者。然後剩下的驗證者就需要對每個提議都進行投票,投票都需要用自己的私鑰進行簽名。這些組成一個回合。不過可能因為網路的非同步需要好幾個回合才能提交一個新塊。

共識演算法的比較:Casper vs Tendermint

驗證者提交塊的時候由於幾種原因可能會失敗:當前的提議可能下線了,或者網路可能遇到了延遲。Tendermint允許驗證者可以被跳過(就是輪到一個驗證者出塊的時候但是此驗證者沒出塊)。驗證者在移到下一輪投票之前等待一小段時間來接收提議者(此輪出塊的驗證者)提出的整個區塊。這種對超時的依賴讓Tendermint成為一個弱同步協議,而不是一個非同步協議。不過,剩下的協議是非同步的,並且驗證者只有在接收到了超過2/3的驗證者集訊息時才會進行處理事物。正是因為這樣,所以Tendermint需要大多數的驗證者可以100%正常執行,如果1/3或更多的驗證者離線或離線,網路就會停止執行了。

假設少於1/3的驗證者是拜占庭,Tendermint保證安全永遠不會被破壞——也就是,驗證者(2/3以上)永遠不會在同一個高度提交衝突的區塊。因此,基於Temdermint的區塊鏈永遠不會分叉。

目前為止,Tendermint的設計決策確實是把安全性和不可改變性地位放在了靈活性之上。在現實世界上有相當高的可能性是,系統真的會停止執行,參與者將會需要在協議外組織在某種軟體上更新後重啟系統。

在數字加密貨幣社群中只有少數人理解 Casper以及為什麼它很有價值的時候,Tendermint就為Casper研究奠定了基礎。這個洞察力就是:如果一個鏈的本身是高度容錯的,那麼你就可以依賴鏈來對於誰來生產區塊做出一個好的決定,但是如果鏈的本身就是不可靠的,那麼你就陷入了雞和雞蛋的問題中去了,這也是之前所有其他共識演算法的滅頂之災。

這個設計決策被認為不如可用性優先的協議例如以太坊和比特幣。比特幣中的權衡是:如果它的網路被分裂了,比特幣在各種攻擊的情況下就失去了它的安全保證。這其實就是一個不可修改理論,也就是你的置信區間是100%的時候,那麼你跟隨的就是一條正確的鏈,你會使用這條鏈來選擇誰來生產下個區塊,但是一旦你轉移到一條不安全的鏈上之後,並沒有一條明確的路徑讓你回到正確的鏈上。

Tendermint的明確屬性

  • 可證明的活躍性
  • 安全閾值:1/3的驗證者
  • 公有/私有鏈相容
  • 即時的最終確定性:1-3秒,取決於驗證者數量
  • 一致性優先
  • 在弱同步性網路的共識安全

基於鏈的權益證明

基於鏈的權益證明模仿了工作量證明共識演算法,在此權益證明中協議讓偽隨機選擇出來的驗證者產生一個新塊,新塊是雜湊連線(包含上個塊的雜湊值)到前一個最長鏈的父區塊上。基於鏈的PoS非常依賴同步的網路,通常優先考慮可用性而非一致性。Casper(s)對於傾向於活躍性而非安全性環境而言,它就是Tendermint核心思想的一個改編。

CFFG

CTFG是一個明確的PoS構造,但是CFFG是一個覆蓋在已存在的以太坊PoW提議機制上的PoS——融合了PoW和PoS兩者,由Vitalik Buterin帶領實現。

比特幣和以太坊的PoW共識協議都不會做“最終”決定,並且區塊可能會潛在的被重新組織到一些過去區塊高度。當區塊沒有機會再被修改的時候才能稱為“最終確定”的。因為工作量證明沒有提供這樣的修改保證,所以它被認為是共識不安全的。相反,當我們持續加長鏈的時候區塊的最終確定性概率也越來越高。為了為以太坊區塊鏈增加想要的最終確定性和51%的攻擊阻力,CFFG實現的邏輯就完美的提供了這種效果。

CFFG將通過多個步驟推出,以保守的方式將以太坊的PoW安全模式逐漸過渡到PoS安全模式。Casper的第一個迭代將會是實現這裡討論的混合PoW/PoS協議,Casper的最後一個迭代很有可能吸取CFFG和CTFG的教訓,朝著一個完整的PoS協議發展。

CFFG是基於鏈的PoS和基於BFT的PoS的之間的混合體,因為它吸取了兩者的思想。它的模組化覆蓋設計讓現在的PoW鏈的更新變得更加容易,因為它對於將系統升級到完全不同的共識模式而言是一種更保守的方法。

Casper的應用邏輯存在於智慧合約的內部。要想在Casper中成為驗證者,必須要有ETH並且要將ETH儲存到Casper智慧合約中作為槓桿的權益。在Casper第一次迭代中區塊提議的機制會被保留:它依然使用Nakamoto PoW共識,礦工可以建立區塊。不過為了最終化區塊,Casper的PoS覆蓋掌握控制權,並且擁有自己的驗證者在PoW礦工之後進行投票。

Casper的PoS共識最重要的一個部分就是檢查點(checkpoints)。Casper在50區塊增量的時候評估最終確定性就稱之為檢查點,每50個塊片段就稱之為週期(epoch)。通過驗證者在每個週期傳送投票訊息時觸發這個處理過程。

在一個週期前最終化檢查點需要2個週期才能完成,也就是需要兩輪投票。例如,當超過2/3的驗證者(也就是大多數)給一個檢查點c投票了,那麼就說這個檢查點已經被”審判”了。下一個週期,當大多數人給檢查點c投票了,會發生兩件事情:c變成了被審判的並且c已經最終化了。c這個週期也就代表著最後一個最終化的週期(LFE)。

回顧一下,一個區塊最終化需要兩個條件:

  • 大多數(超過2/3)驗證者在週期1的時候給區塊1進行了投票,因此審判了區塊1
  • 大多數(超過2/3)驗證者在週期2的時候給區塊2進行了投票,區塊2是區塊1的子區塊,因此在週期2的時候最終化了區塊1

在理想執行中,一個區塊的最終化是按照下面的步驟的:

區塊1的2/3投票→審判區塊1→2/3投票區塊2→最終化區塊1
  • 其中區塊2是區塊1的子區塊
共識演算法的比較:Casper vs Tendermint

當一個檢查點被最終化之後驗證者就會得到報酬。不過,如果有兩個最終化的檢查點在相同高度上分杈時,那麼就破壞了安全性,這個時候就達到了消減的條件,最少1/3的保證金將會被消減掉。當安全性被破壞的時候可以將錯誤歸因的證據當作交易廣播給PoW的礦工。然後PoW就將這個證據交易組成一個區塊來進行挖礦,提交了這個證據的驗證者會得到查詢者的費用。當此事發生的時候,簽署了在衝突區塊的有罪驗證者將會在兩條鏈上被消減掉。

現在如果一個礦工進行蠻力攻擊,那麼會發生什麼?現在Casper的最終化區塊鏈可以防止PoW的攻擊者,就算是51%或者更多的計算力重寫最新檢查點之外的歷史也會被阻止。因此,Casper協議提供了安全。不像CTFG,因為CFFG就是不同提議機制上的一層覆蓋,Casper不能確保活躍性,因為活躍性是取決於提議機制的。

驗證者是被激勵著集合在權威鏈上的,因為如果他們持續在不同的鏈上進行投票將會受到懲罰。Slasher 2.0的形成讓驗證者不僅僅會為雙重投票而受罰也要為在不正確的鏈上進行投票而受到懲罰。不過這也造成了一個“洩氣”的窘境,因為驗證者擔心如果出現一個分杈而自己不確定到底哪個才是權威的,然後投錯票之後被消減所以選擇退出投票。

CFFG的明確屬性

  • 最終化:超過20分鐘最終化。每隔50塊(一個週期)就最終化一次區塊,防止PoW挖礦暴利攻擊
  • 共識安全性
  • 可證明的活躍性
  • 優先可用性

CTFG

CTFG是Vlad Zamfir的正確構造(CBC)共識協議專用於對抗寡頭壟斷的真實世界的環境。CTFG是工作量證明中GHOS或GHOST協議的PoS改編版,用於其分杈選擇規則。CTFG背後的指導設計原則是基於加密經濟學的,使用旨在實現評估安全的正規方法。與前面詳細說明的CFFG混合協議不同,CTFG是純粹的權益證明的概念。

“Casper剛剛開始的時候只是簡單的‘友好的幽靈’,它對於PoS而言是GHOST的改編,完善的激勵讓卡特爾‘友善地’變成‘非卡特爾’的驗證者。”
——Vlad Zamfir,Casper的歷史第5章

與工作量證明類似,CTFG會為一致性和可用性進行權衡。特別,在區塊沒有被最終化的時候,隨著在鏈中的深度越深的它們就會越安全。CTFG與CFFG有一點相似,鏈頭部的處理總是比區塊最終化的處理要快很多。

Casper的PoS提議機制與Tendermint提議機制最大的區別是相比較偽隨機選擇領導者,前者的驗證者可以基於自己見到的塊提出塊。

Casper提供的一個獨特功能是引數化安全閾值。與比特幣中使用6個確認來確定一個經濟最終狀態類似,CTFG中的“評估安全”提供了一個驗證者可以有一個與其他驗證者不同的安全閾值功能。Casper的設計目標是在網路維持PoS低開銷的時候能夠允許驗證者選擇自己的容錯閾值。

Casper對Tendermint的核心優勢在於網路隨時可以容納一定數量的驗證者。因為Tendermint中的區塊在建立的時候需要最終化,所以區塊的確認時間應該短一點。為了達到短區塊時間,Tendermint PoS能夠容納的驗證者數量就需要有個限制。由於CTFG和CFFG到在區塊建立的時候都不需要安全性,所以以太坊網路相對於cosmos容納100個驗證者來說,可以容納驗證者的數量會更加的多一點。

CTFG的明確屬性

  • 可用性。Casper的節點在它們達成共識之前可以塊分杈
  • 非同步安全性
  • 生存。Casper的決策可以在部分同步中存活,但是不能在非同步中存活
  • 卡特爾阻力。Casper的整個前提是建立在抵制寡頭壟斷攻擊者基礎之上,因此不會有任何勾結的驗證者可以超越協議
  • 安全性。取決於每個驗證者的評估安全閾值

未來的工作

公鏈在產品上執行是一個比較新生的技術。在這個範例中到目前為止顯示出不會腐敗的唯一安全模型就是工作量證明。權益證明的設計空間還非常的大,而且工程學上權衡的理解也遠遠不夠,因為權益證明是一個研究前沿也沒有足夠的資料。不用多說,要達到一個最佳的PoS共識演算法,我們還有很多未來工作需要完成。

Tendermint的一個改進可能是新的提出機制,或者將Tendermint的多輪投票過程壓縮成一輪投票。

第二個未來工作的領域可能是利用更高階的加密技術讓區塊頭的簽名更小一點。因為我們是通過Cosmos來建立一個“區塊鏈的網際網路”,所以將輕客戶端證明從一條鏈上移到另一條鏈上就是我們的核心工作。從這個觀點來看的話,使用更加高階的密碼學將區塊頭的大小減少三十倍或者更多是非常有利的。目前,100驗證者,Tendermint的區塊頭接近4KB,它們都是驗證者的簽名。我們可以使用高階的加密技術讓100個簽名從3.2KB減少到64位元組。

還有一些優化p2p層的方法,這樣我們就可以顯著減少點對點需要最終化塊的流量。在未來的工作中,不僅僅是壓縮區塊頭中的資料量,還會減少傳送到對端的資料量。這樣的話,在Cosmos網路初始100個驗證者的閾值之上,Tendermint還可以增加更大的驗證者集。

原文連結: https://blog.cosmos.network/consensus-compare-casper-vs-tendermint-6df154ad56ae

作者: Tendermint

翻譯&校對: 許莉 & 郭光華

本文轉載自許莉的簡書: http://www.jianshu.com/p/df8200207d14


相關文章