Eth2 Staking 指南 #2

買賣虛擬貨幣

eth2 staking 指南 #0
eth2 staking 指南 #1:激勵機制

編者注:文章將 flp 不可能定理轉述為三元悖論的形式,令人費解;對 ”非同步“ 概念的運用,也與其本身的解釋不符。不用這麼做也可以把文章裡面的內容都解釋清楚的。一個相對中規中矩的對 flp 定理的描述,見 《分散式共識的工作原理,part-2》;對 eth2 所用的 ffg 的更詳細描述,可見《以太坊 2.0 :合理化與確定性》。

衷心感謝 sacha yves saint-leger 和 danny ryan 的審讀。

在這篇文章中,我們要討論 eth2 背後的共識機制。eth2 有一套精妙的方法來確定哪個區塊才是主鏈的頂端,以及哪個區塊應該算或者不算是主鏈的一部分。

經由混合兩種機制,eth2 希望不僅在網路平順時可以迅速且安全地達成共識,在網路遭到攻擊時也能遊刃有餘。

flp 三難

flp 不可能定理是分散式共識領域的核心成果,該定理指出:在一個由分散的計算機組成的系統中,不可能同時具備安全性、活性以及通訊完全非同步性;除非你對系統作了一些不合理的假設。

安全性 指的是,已經得到處理的事務不會再被撤銷;活性 指的是,新的事務總是能得到處理。非同步性 是指,訊息從發起方到接收方的傳輸時間是沒有上限的。

如果參與系統的節點能夠可靠地相互通訊、總是誠實地遵守協議而且永不宕機,那達成共識就不是一個難事。問題在於,現實中很難同時滿足這幾個要求。只要我們不作這樣不切實際的假設,flp 不可能定理就意味著:在設計一個分散式系統時,安全性、活性、完全非同步性,我們至少得犧牲一個。

ghost 與分叉選擇

eth2 使用 greedy heaviest observed subtree (ghost) 演算法作為其分叉選擇規則。在正常出塊過程中出現分叉時,ghost 規則會選擇得到最多投票的分叉作為主鏈(協議會把分叉區塊及其子孫區塊所得票數加總起來比較)。

換句話來說,每當出現分叉,ghost 都會選擇得到各驗證者最新訊息支援更多的區塊子樹(即,以驗證者最新發出的投票訊息確定 ta 支援哪一邊,然後選出得到更多驗證者支援的區塊及其子孫)(譯者注:之所以叫 ”子樹“,是因為分叉中可能還有分叉,形象上更像樹枝而不是鏈)。演算法會重複執行,直到找出一個沒有子孫的區塊(作為區塊鏈的頂端、最新區塊)。

與最長鏈規則相比,ghost 可以在網路通訊延遲較高時降低攻擊的破壞力,同時最小化重新確定主鏈時影響的區塊鏈深度(即重組的鏈深度)。這是因為,儘管一個攻擊者可以在自己所在的分叉上更高效地出塊從而製造出更長的鏈,但 ghost 會選擇另一個分叉,因為那條分叉所得的總票數更多。

實際上,eth2 使用了 ghost 演算法的一個變種,叫 ”最新訊息驅動型 ghost“(lmd-ghost),以適應 pos 的特點。lmd-ghost 背後的理念是,在計算鏈頂端時,只考慮每一個驗證者 最新 發出的投票,完全不考慮它們以往作出的投票。這就大幅降低了執行 ghost 演算法的計算開銷,因為在選擇分叉時所需考慮的分叉數量一定不會超過驗證者的數量(用大 o 表示法來說就是 o(v) )。

在 ghost 規則下,驗證者/礦工 總是可以嘗試新增新的區塊到區塊鏈上(活性),而且可以在區塊鏈上的任何一處嘗試出塊(非同步性)。因為它能滿足活性和完全非同步性,根據好朋友 flp 定理,我們知道它不可能達成安全性。

缺乏安全性的表現形式是,一條區塊鏈可以突然發生任意深度的回滾。顯然,這種事情是不可接受的,而 eth2 區塊鏈的處理辦法是,讓使用者自己來假設礦工的區塊需要多長時間才能傳遍全網,這就是為什麼我們發起的交易要等待一段時間(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 則相反,偏重安全性勝過活性,所以它會停止敲定區塊,直到網路足夠穩定、足夠多的驗證者再度作出一致投票。

(完)

eth2 staking 指南 #3:分片化的共識

原文連結: https://blog.ethereum.org/2020/02/12/validated-staking-on-eth2-2-two-ghosts-in-a-trench-coat/
作者: carl beekhuizen
翻譯: 阿劍

免責聲明:

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

推荐阅读

;