一文讀懂區塊鏈的共識機制

買賣虛擬貨幣

前言:本文簡單明瞭地闡述了達成共識的兩個主要流程:區塊的提議和區塊的共識達成。區塊的提議主要涉及到PoW和PoS機制,也就是工作量證明和權益證明的機制,用以抵抗女巫攻擊,安全地選出可靠的區塊提議者。區塊的共識達成則涉及到共識演算法,主要包括中本聰共識和經典共識。中本聰共識採用最長鏈規則,經典共識則可實現最終性。每種共識演算法都有自己的權衡取捨。本文作者Julian Koh 和Cheryl Sew Hoy,由“藍狐筆記”社群的“曉L”翻譯。

區塊鏈共識是2017年和2018年最廣為討論的區塊鏈子領域之一。可以看到,很多公司試圖從零開始構建新的智慧合約平臺,並與以太坊競爭,而其中的一個差異化或創新點就在區塊鏈的共識演算法方面。試圖理解這些演算法,並能對它們進行批判性比較,這對很多加密投資者來說,都是一項全職工作,毫無疑問,要掌握它們並不簡單。

為揭開這些“共識演算法”的神秘面紗,不少人做了很多工作。但是,對於普通人來說,它們太過於技術化。一些概念,例如同步、安全/活性證明、不可能結果,這些有助於人們通局瞭解。不過,在我看來,對於大多數人來說,完全理解並不特別重要。

本文重點是區塊鏈的共識演算法,而沒有提及更大的也是超級複雜的分散式系統領域。為了簡單易懂,還會放棄一些技術概念。

本文結束時,你應該理解PoW和PoS的區別,瞭解BFT的意思,最重要的是,當考慮在哪個區塊鏈上構建你的應用時,你應該知道它們的權衡是什麼。

什麼是共識?為什麼很重要?

簡單來說,區塊鏈是一種公共資料庫,其中使用者就什麼是正確的達成一致。比特幣是記錄所有交易的公共資料庫,保留了貨幣系統的完整性。有兩個主要問題需要理解:

1.就什麼達成共識?
2.如何達成共識?

我們需要有人提議,然後讓其他人選擇,直到達成某種形式的共識。就區塊鏈的情況,我們需要有人提議區塊,然後需要剩餘節點接受區塊。

一個簡單的例子如下:

4個人嘗試並安排共同的時間來做事。每個人提出其可用時間(空白格)。可以看到,有兩個共同可用的時間段,下午2點和6點。他們如何達成共識?在他們提出可用時間前,他們同意一個特定規則:每個人必須選擇最早的共同可用時間。在這種規則下,這意味著,他們將會在下午2點而不是下午6點見面。由此,他們達成了共識。

按照這種框架,我們將它類比擴充套件到比特幣區塊鏈:

人們就什麼達成共識?

人們就區塊資料達成共識。區塊中包含有效的比特幣交易。在比特幣中,任何人都可以提議區塊,只要他們率先解決一個計算謎題(PoW)。

人們如何達成共識?

人們同意接受最長鏈上的區塊。例如,如果鏈A的高度為100,而鏈B的高度為200,如果你收到鏈A上的區塊101和鏈B上的區塊201,你必須接受區塊201。有人在更短的鏈上新增區塊,可能是因為他們沒有意識到更長的鏈,但“最長鏈規則”確保一旦區塊在整個網路中傳播,每個人最終就相同的事情達成共識。

該框架支援所有共識演算法。不同演算法可以採用不同的方法來提議區塊,也可以使用不同的方式來對區塊達成共識。

提議區塊

考慮區塊提議時,最大的問題是誰來提議區塊。如果任何人隨時都可以提議區塊,會很難達成共識,因為這類似於人們不停地相互交談。必須以某種方式選出代表,這樣剩餘的人可以一次看到一個提議。

最幼稚的方式是讓協議隨機選擇一個人來提議新區塊。然而,在網際網路上,一個人可以透過執行相同程式的一百個例項來偽裝成一百個人。因此,我們需要創造某種形式的稀缺性,以抵抗女巫攻擊。(藍狐筆記注:女巫攻擊主要是指網路中的少數節點控制多個虛假身份,並利用這些身份控制網路中大量正常節點的攻擊方式。)。

因此,這個遊戲必須能夠抵擋單一駭客操縱很多人的攻擊。這正是PoW和PoS給你帶來的:一種讓計算機受到某些資源限制的方式。(藍狐筆記注:也就是說,透過設立門檻,比如PoW的算力投入和PoS的代幣投入,透過競爭性的方式,解決了誰有資格提議區塊並由此獲得獎勵的問題。)

PoW如下:為獲得提議區塊的權利,你必須率先完成計算密集型的任務。模擬一個虛擬的計算機拋硬幣任務,直到它得到連續100次的虛擬硬幣的正面。這是計算密集型的,沒有人能偽裝成一百人,因為這受制於其算力。

然而,透過採用這種“抗女巫攻擊”機制,人們已經建立了數千臺計算機組成的礦場,以便在算力競爭中勝出,從而獲得提議區塊的權利。這些伺服器礦場消耗巨量電力,因此它們集中於可獲得最便宜電力的國家或地區。

那麼,當大多數比特幣礦工位於中國時,這對於去中心化意味著什麼?這種地理上的中心化給系統的長久性構成了真正的威脅,因為這些挖礦公司很容易被監管。

PoS採用了跟PoW完成不同的“抗女巫攻擊”機制。既然要花錢購買比特幣挖礦計算機和購買電力,那麼,為什麼不只是用錢來選擇區塊生產者並將計算密集型過程跳過呢?PoS是這樣的想法:基於人們在系統中質押的錢多少來選擇區塊提議者,也就是人們在系統中擁有的代幣的比例。

在PoW中,擁有算力越多,被選為提議下個區塊的概率就越高。在PoS中,擁有的代幣越多,成為區塊生產者的概率就越高。

請注意,還沒有開始談論如何就區塊達成共識。有一種常見的誤解,認為PoW和PoS是共識演算法。其實它們不是。它們只是透過約束稀缺資源的方式來選擇區塊生產者。

區塊共識

這是事情變得有趣的地方,也是近年來大部分創新發生的地方。一旦有人提議區塊,我們如何達成共識?這是從上個世紀80年代以來電腦科學家們一直試圖解決的問題,以在一些計算機偶爾發生崩潰時,其計算機叢集也能同步。到了上世紀90年代,這些電腦科學家開始思考一個更難的問題:如果駭客可以控制其中的一些計算機呢?(藍狐筆記注:這兩個問題的區別在於,一個只是計算機部分崩潰,另一個是計算機沒有崩潰,而被惡意控制。)

他們能否構建足夠強健的系統,以確保所有非惡意的計算機依然能夠達成共識?這一特性被稱為“拜占庭容錯”(BFT),它是基於拜占庭將軍問題而來。BFT系統是一個相當小的研究課題,因為大多數系統並不需要這種級別的穩健性,因為大多數計算機叢集通常都屬於單一公司。直到區塊鏈的到來,才改變了這一局面。

在區塊鏈中,任何人都可以執行節點(叢集中的計算機),並且可以向其他節點傳送資訊或資料。這是一個真正對抗性的環境,因為惡意行為者可以假裝為誠實節點。例如,如果叢集中的10個惡意計算機向其他9個計算機傳送衝突資訊,該怎麼辦?

由於誠實計算機無法區分惡意和非惡意的計算機,這個問題變得非常棘手。解決這個問題有兩種主要方法:中本聰共識和經典共識。

中本聰共識

中本聰共識用於比特幣和大多數PoW系統中,由中本聰開創。它有一條單一規則:“當你看到提議的區塊擁有最多工作量證明,就接受它。”通常來說,具有最高編號的區塊擁有最多工作量證明。(藍狐筆記注:也就是比特幣的最長鏈規則,這是一種概率性的確認,確認的區塊深度越長,交易越難被逆轉。)

這意味著,對於你看到的區塊是否“正確”,你永遠沒有100%的確定。例如,如果你看到的最高區塊編號是99,你可以在區塊編號100接收到區塊A,因此你接受了。

突然,你在區塊編號103收到區塊B,而它在區塊編號100有不同的區塊。根據共識規則,你需要“反轉”之前接受的區塊A,轉而接受新的區塊歷史。

在這個系統中,超過系統算力50%的攻擊者將能夠持續構建最長鏈,因此,可以建立他們想要的任何區塊。透過這個例子,我們可以看到這些規則有助於人們就哪一條鏈是可接受的鏈達成一致。

經典共識

在中本聰共識2009年發明之前,電腦科學家對此問題有不同的解決方案,這問題有不同的特性。第一個拜占庭容錯共識演算法稱為實用拜占庭容錯演算法(PBFT)。它的工作原理是:讓一組參與者進行多輪投票,直到一定比例的投票者達成共識。

基於PoS之類的機制,選擇某人提議區塊。他將區塊傳送給其他已知的參與者。由其他參與者進行投票。

由於大多數參與者都對區塊投贊成票,系統中的每個人都將接受該區塊作為正確區塊。使用這種型別的共識,須有一組已知的投票者,但一旦他們投票透過,區塊就有了最終性。因此,就不存在區塊回滾的事情。如果存在爭議,那麼系統會停止。(藍狐筆記注:經典共識的最終確定性,與中本聰共識的概率性形成鮮明對比。)

PBFT演算法已經被用在區塊鏈上,區塊鏈中迄今為止,最突出的BFT演算法是Tendermint Core。Tendermint Core是區塊鏈上第一個不使用中本聰共識的共識演算法,而是基於20多年的電腦科學研究基礎上。

BFT演算法的主要侷限是它們通常僅限於一小部分投票者,因為所有投票者都需要事先知道。讓10萬人不斷地與其他人溝通以達成共識是極其困難的事情。到目前為止,Cosmos已經執行了可能是最大的公共BFT系統之一,他們的Game of Stakes測試網有超過200+的驗證者參與。(藍狐筆記注:Harmony的驗證者已經超過了200+。)

中本聰共識有其他變種,例如GHOST(新評分演算法,不僅僅是最長鏈),也有其他BFT共識的變種,例如Casper-BFT和Thunderella。

這些共識演算法變種的主要區別實際上只是其區塊提議方式的不同或參與共識的溝通人數不同而已。大多數情況下,在一個演算法系列中,它們之間有類似的權衡。還有一些新的共識形式,例如Avalanche,它們不屬於任何一個系列。

如何選擇共識演算法?

根據你想構建的應用型別,下面是選擇哪種共識演算法的指南問題,由此也會涉及到選擇何種智慧合約平臺。

1.你要構建的應用對最終性的急需程度?

對於一些應用來說,最終性非常重要,而另外一些應用,則不那麼重要。如果你構建的是用於微支付的新型支付系統,交易可以逆轉並不是世界的末日。類似地,如果你構建的是去中心化的社交網路,100%保證狀態更新立即完成並非是一個特別重要的特性。相反,如果你構建的是去中心化的交易所,最終性是使用者體驗中至關重要的部分。讓交易逆轉比不發生交易還要糟糕。作為參考,比特幣的最終性大約是1小時左右(藍狐筆記注:比特幣6個區塊確認完成,基本上可以確認交易完成,但這也不是100%的最終性,不過在6個區塊確認之後,要逆轉交易的難度非常之大。)以太坊的最終性大約6分鐘左右,而Tendermint Core有1秒的最終性。

2.你要構建的應用所需的快速程度?

如果你構建的是遊戲應用,每個動作前需要等待15秒鐘(甚至更長時間)是否合理?由於以太坊的區塊時間,基於以太坊區塊鏈構建的遊戲使用者體驗糟糕,因為它的吞吐量太低。然而,一個轉讓房屋證書所有權的應用可能非常適合在以太坊上執行。使用Cosmos SDK構建應用,允許開發者使用現成的Tendermint Core,它有更短的區塊時間和高吞吐量,每秒最高可以達到10,000筆交易。你可以透過為你的應用設定更少的驗證者數來實現這一目的,因為可以減少通訊開銷,提高應用處理速度。

3.你要構建的應用所需的“去中心化”程度?

一些應用,比如遊戲,可能並不需要顯著的抗審查特性,這只是去中心化的副產品。在理論上,驗證者可以建立卡特爾以及在遊戲中實現區塊/逆轉交易以獲取利潤,這些在應用中真的重要嗎?如果它不那麼重要,類似於EOS的區塊鏈可能適合你的應用場景,因為它有更快的交易速度且無需費用。

然而,有的應用,比如自治銀行,它對去中心化要求很高。儘管以太坊被認為是去中心化的,但有些支持者聲稱,以太坊礦池的集中也是其中心化趨勢一個重要體現,事實上,它只有11個驗證者(礦池)。

構建自己的區塊鏈而不是基於其他智慧合約平臺來構建應用的一大好處是,你可以為自己應用定製驗證方式。然而,構建自己的區塊鏈非常困難,因此,從這方面來說,使用Cosmos SDK非常有用,可以輕鬆構建自己的區塊鏈,並自定義應用所需的去中心化程度。

4.如果系統停止是否可以接受?

如果你構建的是類似於去中心化的共享騎行應用,那麼,確保服務全天候執行可能是最高優先順序的,即使出現一些偶然的錯誤,例如交易被逆轉。

Tendermint Core的一個屬性是,如果網路驗證者之間存在分歧,網路將選擇停止,而不是進行不正確的交易。一些應用,例如去中心化的交易所應用,需要不惜一切代價確保正確性。如果存在問題,可以暫停去中心化交易,而不是進行可逆轉的交易。

結論

不存在單個“最好”的共識演算法。每個演算法都有它自己的權衡取捨。但是,透過理解共識流程(提議和達成共識),並建立一個框架來思考你的應用可能需要何種共識演算法,能有助於你在選擇區塊鏈時,做出更明智的決策。當然,還有其他因素需要考慮,例如開發者工具、社羣等。

總的來說,PoW和PoS並不是共識演算法。它們是“抗女巫攻擊”的機制,可以幫助挑選區塊提議者。

兩種主要的共識家庭是中本聰共識和經典共識。這些演算法用於就區塊鏈中的區塊達成共識。每種共識演算法都有自己的權衡取捨。根據應用的場景來選擇共識演算法和智慧合約平臺。要考慮的因素:

l 最終性
l 速度
l 去中心化程度
l 活性

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;