區塊鏈100講:共識算法的比較-Casper vs Tendermint

image

1

權益證實的漫漫長路

權益證實的定義能夠查看理解權益證實(https://link.jianshu.com/?t=https://blog.cosmos.network/understanding-the-basics-of-a-proof-of-stake-security-model-de3b3e160710)。git

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

因此,故障容錯算法獲得普及,例如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(https://github.com/tendermint/tendermint.com/blob/5c111743a03d2c6ed2e0b14bd3091cac8974c8da/docs/tendermint_v02.pdf)。編程語言

2

權益證實的陷阱

無利害關係分佈式

起初,有多種不一樣的說法來描述權益證實的通常陷阱,無利害關係就在這時被提出。Jae Kwon 2014年5月以「錯誤選擇謬論」的不幸名字第一次提到這個問題(https://github.com/tendermint/tendermint.com/blob/5c111743a03d2c6ed2e0b14bd3091cac8974c8da/docs/tendermint_v02.pdf)。模塊化

在2014年7月Vitalik把比特幣開發者所描述的確切定義的問題普及推廣爲「無利害關係」。問題呈現出此狀況:驗證者經過在給定高度爲多個有衝突的區塊投票能夠有效的破壞安全性而不用付出任何代價。

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

image

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

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

Vitalik Buterin在2014年1月引入的「slasher」概念或協議內懲罰能夠減輕這個攻擊。Jae Kwon在同一年進一步推算了此方法(https://tendermint.com/static/docs/tendermint.pdf),這是實現Tendermint共識協議的第一個迭代進展。苛刻以及容許這種懲罰的條件,對於全部的非簡併BFT協議都是有幫助的,甚至在本文中出現的三種共識都採用了。

遠程攻擊

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

對於權益證實協議這是至關致命的,由於安全模型必然是「主觀」的。當參與網絡要求大量的社會信息,那麼這個安全模型就會被稱爲是「主觀的」。一個新節點加入網絡以後,對於當前網絡的狀態可能會得出不一樣的結論,由於他們的決策是基於主觀信息的,即社會聲譽。在相反面,工做量證實的安全模型必然是「客觀的」,由於當前網絡狀態老是工做量最多的那個狀態,新節點對於網絡狀態的結論老是相同的,由於他們的決策是基於客觀信息。

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

  • 當前必須是被綁定的。只相信當前有保證金的驗證節點

  • 解除綁定保證金必需要通過一個"解凍"期。解除綁定以後,代幣須要數週到數月的「解凍」時間,用以實現「同步性」前提(即延遲的消息)

  • 禁止在N個塊以前恢復,其中N是保證金的長度。 這個規則使任何長程分杈無效。

  • 可選擇的將驗證者集存放在PoW的鏈上

image

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

卡特爾形式

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

「加密貨幣使人難以置信的集中,挖礦算力也是同樣。寡頭壟斷競爭是不少現實市場的常態。少數相對富有的驗證者之間的協調比多數相對貧窮驗證者之間的協調要容易的多。在咱們這種狀況下,卡特爾形式是徹底被預料到的。」

——Vlad Zamfir,Casper的歷史第4章節

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

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

3

概述

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

計算機科學中的CAP理論(https://en.wikipedia.org/wiki/CAP_theorem)返回在分佈式數據系統中提供超過2/3擔保的不可能性:可用性、一致性、分區容錯。基於鏈的PoS算法傾向於選擇可用性高的而不選擇一致性高的,由於可用性高意味着全部的交易都能被處理,不過要以犧牲整個網絡中一致性狀態複製爲代價。基於BFT的卻相反,會傾向於選擇高一致性。

基於BTF的權益證實

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

Tendermint核心

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

在覈心模塊中,Tendermint基於循環投票機制進行工做,這也是共識協議的原理。一個回合被分紅3個處理步驟:驗證者提出一個塊、發送提交意圖、簽名後提交一個新區塊。這種機制爲原子廣播提供了一個安全的狀態複製機,增長了一個責任層——安全故障能夠徹底歸結於Tendermint。

Tendermint共識算法從驗證者集開始。驗證者們都維護了一份區塊鏈的全拷貝,而且能夠用公鑰來識別驗證者的身份。在每一個新的塊高度他們輪流的提出一個區塊。每輪投票都只有一個驗證者能夠提出塊,而且要用驗證者相應的私鑰對此進行簽名,這樣的話若是有錯誤發生就能夠找到爲此負責的驗證者。而後剩下的驗證者就須要對每一個提議都進行投票,投票都須要用本身的私鑰進行簽名。這些組成一個回合。不過可能由於網絡的異步須要好幾個回合才能提交一個新塊。

image

驗證者提交塊的時候因爲幾種緣由可能會失敗:當前的提議可能下線了,或者網絡可能遇到了延遲。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的子區塊

image

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

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

驗證者是被激勵着集合在權威鏈上的,由於若是他們持續在不一樣的鏈上進行投票將會受到懲罰。slasher 2.0(https://link.jianshu.com/?t=https://docs.google.com/document/d/13_FSQ1Koq8uLvqTaSvZdb6OT2SpUZZq53vFiiDQj4qM/edit?usp=sharing)的造成讓驗證者不只僅會爲雙重投票而受罰也要爲在不正確的鏈上進行投票而受到懲罰。不過這也形成了一個「泄氣」的窘境,由於驗證者擔憂若是出現一個分杈而本身不肯定到底哪一個纔是權威的,而後投錯票以後被消減因此選擇退出投票。

CFFG的明確屬性

  • 最終化:超過20分鐘最終化。每隔50塊(一個週期)就最終化一次區塊,防止PoW挖礦暴利攻擊

  • 共識安全性

  • 可證實的活躍性

  • 優先可用性

CTFG

CTFG是Vlad Zamfir的正確構造(CBC)共識協議專用於對抗寡頭壟斷的真實世界的環境。CTFG是工做量證實中GHOS(https://eprint.iacr.org/2013/881.pdf)或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的整個前提是創建在抵制寡頭壟斷攻擊者基礎之上,所以不會有任何勾結的驗證者能夠超越協議

  • 安全性。取決於每一個驗證者的評估安全閾值

4

將來的工做

公鏈在產品上運行是一個比較新生的技術。在這個範例中到目前爲止顯示出不會腐敗的惟一安全模型就是工做量證實。權益證實的設計空間還很是的大,並且工程學上權衡的理解也遠遠不夠,由於權益證實是一個研究前沿也沒有足夠的數據。不用多說,要達到一個最佳的PoS共識算法,咱們還有不少將來工做須要完成。

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

第二個將來工做的領域多是利用更高級的加密技術讓區塊頭的簽名更小一點。由於咱們是經過Cosmos來創建一個「區塊鏈的互聯網」,因此將輕客戶端證實從一條鏈上移到另外一條鏈上就是咱們的核心工做。從這個觀點來看的話,使用更加高級的密碼學將區塊頭的大小減小三十倍或者更可能是很是有利的。目前,100驗證者,Tendermint的區塊頭接近4KB,它們都是驗證者的簽名。咱們可使用高級的加密技術讓100個簽名從3.2KB減小到64字節。

還有一些優化p2p層的方法,這樣咱們就能夠顯著減小點對點須要最終化塊的流量。在將來的工做中,不只僅是壓縮區塊頭中的數據量,還會減小發送到對端的數據量。這樣的話,在Cosmos網絡初始100個驗證者的閾值之上,Tendermint還能夠增長更大的驗證者集。

內容來源:簡書

做者:Lilymoana

原文地址:Consensus Compare: Casper vs. Tendermint

翻譯做者:許莉

如下是咱們的社區介紹,歡迎各類合做、交流、學習:)

image

相關文章
相關標籤/搜索