在這篇文章中,即將要討論 Eth2 背後的共識機制。編者註:在文章將 FLP 不可能定理轉述為三元悖論的形式,令人費解;對「異步」概念的運用,也與其本身的解釋不符。不用這麼做也可以把文章裡面的內容都解釋清楚的。本文源自於Ethereum 的 Carl Beekhuizen 之文章《Validated, staking on eth2: #2 – Two ghosts in a trench coat》,由專欄作者 以太坊愛好者 編譯、撰寫及整理。
一個相對中規中矩的對FLP定理的描述,見《分佈式共識的工作原理,Part-2》;對Eth2所用的FFG的更詳細描述,可見《以太坊2.0 :合理化與確定性》。
Eth2 有一套精妙的方法來確定哪個區塊才是主鏈的頂端,以及哪個區塊應該算或者不算是主鏈的一部分。經由混合兩種機制,Eth2 希望不僅在網路平順時可以迅速且安全地達成共識,在網路遭到攻擊時也能游刃有餘。
FLP 不可能原理
FLP不可能定原理是分佈式共識領域的核心成果,該定理指出:
在一個由分散的計算機組成的系統中,不可能同時具備安全性、活性以及通信完全異步性;除非你對系統作了一些不合理的假設。
安全性指的是,已經得到處理的事務不會再被撤銷;活性指的是,新的事務總是能得到處理。異步性 是指,消息從發起方到接收方的傳輸時間是沒有上限的。
如果參與系統的節點能夠可靠地相互通信、總是誠實地遵守協議而且永不當機,那達成共識就不是一個難事。問題在於,現實中很難同時滿足這幾個要求。只要我們不作這樣不切實際的假設,FLP不可能原理就意味著:在設計一個分散式系統時,安全性、活性、完全異步性,我們至少得犧牲一個。
GHOST 與分叉選擇
Eth2 使用 Greedy Heaviest Observed Subtree (GHOST) 協議作為其分叉選擇規則。在正常出塊過程中出現分叉時,GHOST 協議會選擇得到最多投票的分叉作為主鏈(協議會把分叉區塊及其子區塊所得票數加總起來比較)。
換句話來說,每當出現分叉,GHOST 都會選擇得到各驗證者最新消息支持更多的 *區塊子樹(Subtree)。即,以驗證者最新發出的投票消息確定它支持哪一邊,然後選出得到更多驗證者支持的區塊及其子區塊。
*之所以叫「子樹」,是因為分叉中可能還有分叉,形像上更像樹枝而不是鏈。算法會重複運行,直到找出一個沒有子區塊的區塊(作為區塊鏈的頂端、最新區塊)。
與最長鏈規則相比,GHOST 可以在網路通信延遲較高時降低攻擊的破壞力,同時最小化重新確定主鏈時影響的區塊鏈深度(即重組的鏈深度)。這是因為,儘管一個攻擊者可以在自己所在的分叉上更高效地出塊從而製造出更長的鏈,但GHOST會選擇另一個分叉,因為那條分叉所得的總票數更多。
實際上,Eth2使用了GHOST算法的一個變種,叫「最新消息驅動型GHOST」(LMD-GHOST),以適應 PoS 的特點。LMD-GHOST背後的理念是,在計算鏈頂端時,只考慮每一個驗證者最新發出的投票,完全不考慮它們以往作出的投票。這就大幅降低了運行GHOST算法的計算開銷,因為在選擇分叉時所需考慮的分叉數量一定不會超過驗證者的數量(用大O表示法來說就是O(v) )。
在GHOST規則下,驗證者/礦工總是可以嘗試添加新的區塊到區塊鏈上(活性),而且可以在區塊鏈上的任何一處嘗試出塊(異步性)。因為它能滿足活性和完全異步性,根據好朋友 FLP 定理,我們知道它不可能達成安全性。
缺乏安全性的表現形式是,一條區塊鏈可以突然發生任意深度的回滾。顯然,這種事情是不可接受的,而 Eth1 區塊鏈的處理辦法是,讓用戶自己來假設礦工的區塊需要多長時間才能傳遍全網,這就是為什麼我們發起的交易要等待一段時間(X個區塊)的確認。Eth2 則是另闢蹊徑。
FFG,友好的確定性小工具
完全不具備安全性的區塊鍊是沒有用的,因為沒有什麼東西是確定的,用戶也確定不了鏈的最新狀態。所以 Eth2 使用了Casper the Friendly Finality Gadget (Casper FFG) 算法。Casper FFG 是一種機制,在運行中偏重安全性而非活性,也就是說,它所達成的共識都是確定不移的,雖然在糟糕的網路條件下可能無法達成共識。
FFG 其實是傳統的實用拜占庭容錯算法(PBFT)的密碼經濟變種,基本思路是把共識過程分為兩個節點:第一階段是由節點各自表示他們認同的狀態(justification),第二階段是表示他們看到其他驗證者也認可該狀態(finalisation)。
Eth2不會在每一個 slot 都運行一次FFG(slot是出塊的時間單位,預計一個slot出一個區塊),而是每32 個 slot 執行一次(32個slot所組成的時間段也叫epoch) 。首先,驗證者用簽名表示他們認同這一個 epoch 中的32個區塊;如果有2/3的驗證者都認同,則這個epoch就得到了合理化(jutification)。在下一個epoch,驗證者有另一次機會用投票來表示他們看到上一個epoch已被合理化;如果2/3的驗證者都表示上一個epoch得到了辯護,則這上一個epoch就得到敲定(finalisation ),而且將變成Eth2主鏈中不可變更的一部分。
FFG實現了一種聰明的辦法。驗證者的投票實際上是由兩種子投票組成的;一個投給該驗證者想要辯護的epoch,另一個投給相對更早的、得到過辯護、等待被敲定的epoch。這就大量節省了節點之間的額外通訊開銷,有助於讓驗證者團體的規模能夠上升到百萬級別。
Two ghosts in a trench coat
(直譯為:兩隻精靈,披著一件風衣)
Eth2 中的共識過程既依賴於 LMD-GHOST(它支持添加新的區塊並確定區塊鏈的頂端),也依賴於Casper FFG(它來最終決定一個區塊到底是或不是主鏈的一部分) 。GHOST偏愛活性,讓區塊可以快速且高效地添加到鏈上,FFG最後通過敲定epoch來提供安全性。
兩大協議結合的方式是:總是從被FFG敲定的最後一個區塊開始運行GHOST分叉選擇。因為最後一個被敲定的區塊必然位於主鏈上,因此GHOST就無需考慮更早的區塊了。
正常情況下,驗證者會根據GHOST所確定的區塊鏈頂端,在頂端一直生產區塊並獲取其它驗證者的認可;不久之後(可能幾個epoch之後),這些區塊會根據FFG的規則,先是得到辯護,然後被敲定。
如果有人攻擊網路以及/或者大比例的驗證者離線,GHOST允許剩下的驗證者繼續出塊;不過,因為GHOST雖然具備活性但不具備安全性,在這種過程中主鏈可能會切換,因為節點在不斷收發新的消息,出塊也還在繼續。FFG則相反,偏重安全性勝過活性,所以它會停止敲定區塊,直到網路足夠穩定、足夠多的驗證者再度作出一致投票。
【以太坊2.0 Staking 指南系列】
📍相關報導📍
以太坊 2.0 將近,Santiment 數據分析指出:市場上的 FOMO 情緒正逐漸在發酵
以太坊|ETH2.0 將創造經濟轉變的七個理由
專欄|在分析了以太坊排名前 10000 的地址後,挖掘出 32 個秘密發現
讓動區 Telegram 新聞頻道再次強大!!立即加入獲得第一手區塊鏈、加密貨幣新聞報導。
LINE 與 Messenger 不定期為大家服務