去中心化特性決定了區塊鏈有達成共識的需要。區塊鏈的共識機制從比特幣的 PoW 開始逐漸發展出新模式,如 PoS、BFT 等。而波卡採用了混合的共識算法。共識機制一直都會是區塊鏈技術發展的重點領域。

原文標題:《From Bitcoin to Polkadot: A brief history of consensus and finality in blockchains》
原文作者:Edward A Thomson
翻譯:藍狐筆記社羣 HQ

爲了更好地理解爲什麼我們需要在區塊鏈技術中引入共識算法,我們需要了解比特幣的區塊鏈技術都解決了哪些問題?最爲關鍵的問題有兩個:

  • 雙重支付
  • 中心化的貨幣發行

本文首先介紹比特幣解決上述問題的方法,其次討論共識的一些精妙之處,如容錯性和最終性(最終確定性的簡稱),最後以一些項目爲例子進行討論,以及探討未來的方向。

從比特幣到波卡:一部共識算法進化史

比特幣如何解決雙重支付和貨幣發行問題?

要理解爲什麼容錯性對區塊鏈如此重要,有必要解釋一下比特幣解決的兩個問題(雙花和中心化貨幣發行)。

換句話說,爲了防止任意超發,比特幣以一種可預測、透明且去中心化的方式發行貨幣。管理貨幣轉賬和發行過程的機制的就是共識算法,能夠確保整個交易歷史的一致性(共識)。

共識算法在區塊鏈技術時代並不是新玩意兒,強調比特幣爲什麼具有創新性是很重要的:因爲在公有的無須許可的網絡中,即使有潛在的惡意行爲者出現,比特幣也可以達成共識。

PoW 的共識算法

衆所周知,像比特幣這種 PoW 的區塊鏈,節點通過獲得創建新區塊所產生的新幣獎勵,來維護整個網絡的安全。該獎勵提供了一種激勵機制,使礦工在儘可能快速創造新區塊的同時,始終表現誠實。

獲勝的關鍵在於,創造新區塊需要解出一個獨特且計算困難的數學難題。它數學題的難度從根本上限制了新區塊產生的速度,且答案的唯一性可以使網絡識別出獲勝節點(通過他們的地址)。雖然惡意行爲不會受到特意懲罰,但並沒有動力去做,因爲不誠實的行爲存在機會成本。

存在的一個問題是,節點之間的通信不是即時的,因此處於網絡中不同地理區域的節點可能會收到自稱已解出難題的不同區塊(網絡分區 / 分叉)。兩個不同的節點 (礦工)有可能碰巧都合法地解出了難題,但是由於全網不同區域間不是即時通信,網絡中的不同分區就會選擇基於不同的獲勝區塊來構建區塊鏈(臨時性)。這會導致臨時分叉,但由於總有新區塊被添加到每個分支上,最終總會出現一個較長的分支。

選擇最長的區塊分支,實際上是比特幣爲實現共識而制定的規則,該規則被稱爲最長鏈規則。較短分支上的區塊則會被丟棄,並且所有不在主分支上的交易最終都會被添加到主分支的區塊中。請注意,非法交易(例如:那些試圖進行雙重支付的交易)則不會被包含在構成最長鏈的區塊中。包含此類交易的區塊也將被丟棄,因爲任何「貨幣」都只能被花費一次。這裏需要注意的是,大多數節點都是誠實的(至少 51%),並且這些節點不會嘗試去破壞協議。

理論上講,一條新的最長鏈可以通過擁有更強的挖礦算力創造出來。但是這對於靠近「鏈的頭部」的區塊(最新產生的區塊)來說,風險是最大的。區塊在整個鏈上的深度越深,它被逆轉的可能性就越小。

這說明 PoW 鏈上的區塊總是會有被逆轉的可能,那麼這些區塊中的交易也就可能都沒發生。在一條被惡意創造的鏈上,交易是不會被保存進新區塊中,原因如上所述。

比特幣白皮書中建議,等待 6 個區塊的時間便足以確保交易不會被拒絕,因爲此時區塊被丟棄的可能性非常小。我們可以從這裏認識「最終確定性」(以下簡稱最終性):無法被逆轉的區塊可以被稱作是「最終確定的」。在比特幣及其他 PoW 區塊鏈中,最終性並不是那麼完美,因爲區塊總有被逆轉的可能。

以上說明,比特幣具有強大的抵抗故障的魯棒性,並且可以在公共和無須許可的網絡中以去中心化的方式發行貨幣。通過探索確保最終性的方法,能夠確保更高水平的安全性。這一觀點將在後文的容錯部分中進行探討。

PoS 區塊鏈

還應該注意的是,一些權益證明(PoS) 區塊鏈的運行方式與比特幣類似。大多數 PoS 鏈用選舉產生區塊來代替挖礦。與 PoW 鏈讓獲勝礦工創建下個區塊不同,PoS 鏈的新區塊是由隨機選擇的節點(「領導者」)來創建。

被選中(創建新區塊)的概率是由權益的數量來決定的。這個理念是,持有的幣越多,說明更希望區塊鏈取得成功,因此這樣的節點將獲得更大概率來創建下個區塊。

NXT 是最早的 PoS 鏈之一,使用這種隨機(選舉)領導者的方法來創建新區塊。NXT 的共識機制與比特幣相同:創建的新區塊都會被添加到最長鏈上。通過遵守這個規則,任何分叉問題都能夠被解決,節點則繼續在最長鏈上創建區塊。

拜占庭協議與容錯性

當參與者出現違反協議的操作時,(網絡)就會出現錯誤。對區塊鏈來說,因爲可能存在惡意行爲者試圖利用協議的弱點,所以我們希望協議足夠安全,可以抵禦任何故障。任何可抵禦任意故障的協議,也足夠安全去防範隨機故障及惡意行爲者。

即使有一小部分參與者的行爲表現異常,拜占庭容錯(BFT)協議也能正常工作。行爲不當的節點,可能是發生了意外故障,也可能是惡意行爲。當然,這裏假設大多數參與者都是遵守協議的。這種觀點在一篇名爲「拜占庭將軍問題」的研究論文中提到。該問題討論的是,多個參與者如何就一個簡單的信息達成一致。(藍狐筆記注:拜占庭問題可以參考藍狐筆記之前的文章《簡單讀懂拜占庭容錯》)

當在拜占庭協議中達成共識時,商定好的結果一定是正確的。也就是說,商定的結果可以被看作是確定性的正確,而不是概率性的。當應用在區塊鏈時,拜占庭算法保證了交易的最終性。這意味着一旦在區塊中達成協議,區塊就會最終確定,其中的交易也不能被逆轉。

顯然這與比特幣和其他 PoW 鏈不同。如上所述,那些鏈僅能達成一定概率的確定性。比特幣的共識類型通常被稱爲「中本聰共識」,很容易看出來,爲什麼它會和拜占庭容錯混淆,因爲二者都是可容錯的,但只有後者才能保證最終確定性。更深層次的混淆,來自於比特幣的區塊創建與共識算法高度重疊。但事實上並不需要這樣。

以太坊未來路線的提案之一,就是像現在一樣繼續由礦工生產區塊,但會讓一些節點充當驗證者來提供最終確定性,從而加強共識。驗證者在已創建的區塊上進行投票。通過給某個區塊投票,即表示他們認爲該區塊是正確的。一旦有三分之二的驗證者投票,那麼這個區塊就可以被認爲是最終確定的了。這種在挖礦後的拜占庭共識機制被稱爲「最終確定性組件」。

發展探索

大多數正在開發的新項目都將區塊創建與共識進行分離。未來的一些區塊鏈也將採用混合共識算法。這一部分將介紹一些正在探索的未來方向。

Cosmos (ATOM)

Cosmos 的區塊創建也是由(通過權益的權重比例)隨機選擇的領導者完成,但是 Cosmos 的共識中沒有最長鏈規則。相應地,它採用了被稱爲 Tendermint 的拜占庭算法。這意味着每個區塊都能保證最終確定性。此外,如果驗證者不能就單個區塊達成共識,按照 Cosmos 的設計,Cosmos 將會暫時停下來,以防止分叉。

Polkadot 波卡(DOT)

Polkadot 採用混合共識算法。區塊將由隨機領導者創建,該領導者會將下個區塊添加到最長鏈上。Polkadot 還將採用拜占庭協議,但不是每輪投票只產生一個區塊,而是在一次投票中最終確定多個區塊。

採用混合共識機制的一個好處是,區塊鏈可以在最長鏈上連續生產區塊,同時在不影響鏈活性(即鏈永遠不會被停止)的情況下,最終實現拜占庭最終確定性。

目前在 Polkadot 當前的測試網絡 PoC-2 (也叫做 Krumme Lanke) 中,其共識類似於 Cosmos。區塊由隨機選擇的驗證者節點生成,在通過拜占庭協議將其最終確定後,再生產下個區塊。

Cardano (ADA)

簡單來說,Cardano 的共識算法類似於比特幣(最長鏈規則)。與 NXT 相同,區塊的生產由隨機選擇的領導者完成。Cardano
團隊已竭盡全力解決了一些在隨機選擇領導者時出現的問題。他們已經確保選擇領導者的隨機性與目前比特幣出塊方式一致。

然而比特幣是沒有領導者的,區塊由隨機礦工生產。挖礦難題的解集將分佈在擁有最大哈希算力的礦工附近。

Ethereum 以太坊

以太坊也曾經嘗試通過加入一個在出塊後保證最終確定性的步驟,來加強共識算法的方式。區塊仍舊通過 PoW 生成,但是會有一組驗證者節點對已出區塊的正確性進行投票。這就是所謂的「最終確定性組件」。也就是說,該方法結合了最長鏈規則和拜占庭容錯算法:即兩種共識算法的混合。

最近似乎有跡象表明,以太坊將可能使用權益證明(PoS) 取代 PoW,使以太坊與正在開發的新鏈保持一致。區塊將由一個隨機領導者來創建,然後由一個最終確定化組件來最終確定。

優化方法

區塊鏈的「舊時代」主要圍繞使用 PoW 挖礦及使用最長鏈規則,來增強網絡共識。後來爲了用更節能的方式,開始嘗試使用 PoS 取代挖礦。過去的 PoS 鏈仍然使用最長鏈規則;然而,近年來的趨勢是將拜占庭容錯協議也納入共識機制:而不使用最長鏈規則(Cosmos), 或者讓兩者共存(以太坊和 Polkadot)。