V神最新發文:針對信標鏈的終結性模型替代設計構想

買賣虛擬貨幣

原文標題:《基於委員會的累積終結性模型》

作者:Vitalik Buterin

本文提出了一種以太坊信標鏈(Beacon Chain)的擬議替代設計,在未來長期內可以切換到該設計(取代當前計劃切換的 CBC)。該替代設計旨在提供一些關鍵屬性:

在正常情況下提供有意義的單槽(single-slot)經濟終結性(即類似 Tendermint 的屬性):使單槽重組的成本高得多,即使是多數人串通的情況下也能執行,從而降低共識可提取價值 (CEV)

擺脫對 LMD GHOST 分叉選擇的嚴重依賴,避免已知的缺陷以及需要引入複雜的混合分叉選擇規則來修復這些缺陷。

可能允許更低的最小存款大小和更高的驗證器數量

儲存經濟終結性最終接近一個非常大的數字(數百萬 ETH)的屬性

1

準備工作

讓 CONSENSUS 成為一種非同步安全的共識演算法(例如 Tendermint、Casper FFG ……)。我們假設這種共識演算法有一些槽(slot)或檢視的概念,它在每個固定時間段嘗試達成共識。我們還假設它將一種加權驗證器集作為輸入(現有的 BFT 共識演算法可以輕鬆修改以新增此屬性)。

在下面的設計中,我們修改了 CONSENSUS,以便在每個檢視中,需要最終性的集合是不同的。也就是說,CONSENSUS 將一個函式 get_validator_set(view_number: int) -> Map[Validator, int](代表驗證器餘額的 int)作為輸入,而不是驗證器集,它可以為新檢視生成驗證器集。get_validator_set 應該具有以下屬性:驗證器集根據從一個檢視到下一個檢視的最大1/r值進行更改,其中 r(例如 r=8192 )是恢復期長度。更正式地說,我們想要:

其中 丨x丨 返回 x 中值的絕對值之和, diff 返回每個鍵值的差值(例如 diff({a: 0.1, b:0.2}, {b:0.1, c:0.3}) = {a:0.1,b:0.1,c:-0.3})。

在實踐中,兩個相鄰驗證器集之間的差異將包括現有驗證器洩漏餘額,以及以與洩漏餘額相等的速率引入新驗證器。

請注意,這意味著如果兩個終結性的檢視數量相差足夠遠,則這時候可以在不削減的情況下進行雙重終結性確定;這是有意為之,並且該協議以與當今 Casper FFG 處理不活動洩漏的方式相同的方式圍繞它工作。

2

機制

我們使用兩級分叉選擇:

選擇LATEST_FINALIZED_BLOCK

從LATEST_FINALIZED_BLOCK,應用一些其他叉選擇(例如LMD GHOST)來選擇head

共識演算法的檢視在每個插槽都會被嘗試,將基於 get_post_state(LATEST_FINALIZED_BLOCK)資料的驗證器集生成函式作為輸入傳入。在檢視 i 中,一個有效的提案必須包含從 LATEST_FINALIZED_BLOCK 到插槽 LATEST_FINALIZED_BLOCK.slot + i 處的區塊的鏈。如果提示的父級是分叉選擇的贏家,這時驗證者才需要準備並提交提案。

如果 CONSENSUS 在某個檢視中成功,則該檢視中的提案將成為新的 LATEST_FINALIZED_BLOCK,更改未來輪次的驗證器集。如果失敗,它將在下一個槽/檢視中進行下一次嘗試。

注意:插槽應始終等於當前檢視編號加上每個先前驗證器集中成功完成的檢視編號的總和。

我們有以下處罰:

由共識演算法確定的定期削減處罰

不活躍懲罰:如果這條鏈未能實現終結性,所有未參與的人都會受到懲罰。此懲罰旨在將 r/2個 插槽後的餘額削減一半。

3

屬性

如果一個區塊獲得終結性,那麼要終結確定一個競爭區塊,需要發生以下情況之一:

某些委員會被破壞,其中 他們中≥1/3會被削減以對不同的區塊實現雙重終結性

最近的委員會離線,在 r/3個插槽之後,委員會輪換足夠多,以便能夠在不削減的情況下使一個不同的區塊獲得終結性。然而,這是以嚴重的不活躍懲罰為代價的(≥1/3的攻擊者餘額)

在任何一種情況下,即使還原一個終結區塊也至少需要銷燬 DEPOSIT_SIZE * COMMITTEE_SIZE / 3個 ETH。如果我們設定 COMMITTEE_SIZE = 131,072(ETH2 委員會中每個插槽的驗證器數量在理論上最大 400 萬個驗證器限制),則該值為 1,398,101 個ETH。

該方案的其他一些重要屬性包括:

驗證器的負載將非常穩定,無論存入多少驗證器,處理每個插槽的COMMITTEE_SIZE交易

驗證者的負載會更低,因為當他們沒有被要求加入委員會時,他們可以休眠

在不犧牲安全性的情況下,可以允許休眠的驗證器快速退出+撤回

4

擴充套件:具有較小委員會的鏈終結性

如果出於效率原因,我們必須減小 COMMITTEE_SIZE,我們可以進行以下調整:

我們沒有選擇最新的終結性區塊,而是選擇作為最長終結性區塊鏈末端的終結區塊(但拒絕恢復超過COMMITTEE_LOOKAHEAD)

get_validator_set應該只使用來自狀態超過COMMITTEE_LOOKAHEAD之前的資訊

檢視編號應該只是插槽編號(這可以更容易地推斷出在不同鏈中使用相同的驗證器集嘗試達成共識的情況,這隻有在可能破壞一些終結性的情況下才會發生)

這保留了上述所有屬性,但它也引入了一個新屬性:如果一個區塊獲得多個終結性(即該區塊被終結,並且其後代鏈獲得 k-1 個更多終結,總共 k 個影響該區塊的順序終結性),然後恢復該區塊需要違反多個委員會的終結性保證。這允許多個委員會的安全級別疊加:一個人需要 COMMITTEE_SIZE * DEPOSIT_SIZE * k / 3 ETH 來恢復k個終結性,最多 k = COMMITTEE_LOOKAHEAD,此時委員會分歧。

還要注意,出於 p2p 子網安全的原因,先行機制無論如何都值得做,所以用它來設計系統可能是一個好主意,如果需要的話,讓客戶端來決定他們如何處理終極性反轉。

5

具體值的例子

請注意,“打破終結性所需的 ETH”數量假設攻擊者控制的驗證器數量遠遠超過質押總量的一半(即數百萬 ETH);這個數量是攻擊者將失去的。並不是任何擁有 2,730 - 174,762 ETH 的人都可以進入並銷燬該 ETH 以逆轉單一插槽的終結性。

免責聲明:

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

推荐阅读