乾貨:V神親自撰文,詳解以太坊CBC Casper

買賣虛擬貨幣

我們都知道,以太坊網路擁堵、手續費用太高一直備受投資者詬病,為了解決這個問題,V神團隊採用了Casper和分片技術。

那麼什麼是Casper呢?V神親自撰文進行了詳細的介紹。(原文作者為以太坊創始人Vitalik Buterin。以下內容以Vitalik為第一人稱。

Casper是個驗證系統,換句話說,為了加入,需要在權益當中有所存款,存款需要傳送存款的交易,這是正常在以太坊上的交易。

Casper的設計基本上是非常通用和抽象的,幾乎在任何資料結構上都能達成共識;

你可以使用CBC來決定是選擇0還是1,你可以在CBC上執行一個簡單的逐個區塊的鏈,甚至可以將CBC用在292維超立方體DAG上。

但為簡單起見,我們首先將注意力集中在一個具體案例上:一個簡單的基於鏈的結構。

我們假設有一個由N個驗證者組成的固定驗證者集(也就是“投注節點”;我們還假設每個節點都投了相同數量的加密貨幣,如果不是這樣的情況可以透過將多個驗證者ID分配給一些節點來模擬),時間被分解為十秒時隙(slot),並且驗證者k可以在時隙k,N + k,2N + k等中建立區塊。

每個區塊指向一個特定的父塊。顯然,如果我們想要創造一些最簡單的東西,我們可以採用這種結構,在它上面實施最長鏈的規則,並稱之為一天。

綠色鏈是最長鏈,長度為6,因此被認為是“規範鏈(canonical chain)”

然而,這裡我們比較在意的是增加一些“最終確認(Finality)”的概念——一些區塊可以非常牢固地建立在鏈中,以至於它不能被競爭區塊所取代,除非非常大比例(例如1/4)的驗證者提交了一個可歸因的錯誤——可以明顯並以加密的方式驗證是惡意的錯誤。

如果很大一部分驗證者確實採取惡意行動來逆轉區塊,那麼可以將不當行為的證據提交給鏈,以沒收那些驗證者的全部保證金,使得最終確認的逆轉非常昂貴(可能要花費數億美元)。

 LMD GHOST

我們將一步一步來。首先,我們替換分叉選擇規則(在多條可能的鏈中選擇哪條鏈是“規範鏈”,即使用者應該關注的鏈),不再使用最長鏈規則而是使用“最新訊息驅動GHOST(LMD GHOST)”。

為了說明LMD GHOST如何執行,我們將修改上面的例子。為了使其更具體,假設驗證者集的大小為5,我們將其標記為A、B、C、D、E,因此驗證者A在slot0和slot5處生成區塊,驗證者B在slot1和6處生成區塊,以此類推。

評估LMD GHOST 分叉選擇規則的客戶端僅關注每個驗證者簽名的最新(即最高時隙)訊息(即區塊):

△最新訊息以藍色表示

現在,我們將僅使用這些訊息作為“最貪婪的觀察子樹(Greedy Heaviest Observed Subtree,GHOST)”分叉選擇規則的源資料:從創世塊開始,然後每次都會有一次分叉,選擇更多最新訊息支援的那一側區塊的子樹,並繼續執行此操作,直到到達沒有子區塊的區塊。

我們可以為每個區塊計算支援該區塊或其後續區塊的最新訊息的子集:

現在,為了計算起始區塊,我們從頭開始,然後在每次分叉時選擇更大的數字:首先,選擇底部鏈,因為它有4個支援它的最新訊息,而頂部鏈只有1個,然後在下次分叉支援中間鏈。結果與以前的最長鏈相同。

實際上,在一個執行良好的網路中(即孤兒區的出現率很低),幾乎所有的時間裡LMD GHOST和最長鏈規則都會給出完全相同的結果。

但在極端的情況下,情況並非總是如此。例如,考慮以下鏈,它有三區塊分叉:

根據鏈的長度標號。如果我們遵循最長鏈規則,則上面為主鏈

按最新訊息的數量並使用GHOST規則對來區塊計數(來自每個驗證者的最新訊息以藍色顯示)。

底部鏈具有更新訊息的支援,因此如果我們遵循LMD GHOST規則,底部鏈獲勝,但尚不清楚這三個區塊中的哪一個優先。

LMD GHOST方法是有利的,部分原因在於它可以更好地在高延遲條件下提取資訊。

如果兩個驗證者建立具有相同父區塊的兩個區塊,則它們實際上應該被計為父塊合作投票,即使它們同時為自己競爭選票。最長鏈規則無法捕捉到這種細微差別;基於GHOST的規則可以。

檢測最終確認

LMD GHOST方法還有另一個不錯的特性:它具有粘性(sticky)。例如,假設在兩輪中,4/5的驗證者投票給同一條鏈(我們假設五個驗證者中沒有投給這條鏈的B正在攻擊):

怎樣才能成為規範鏈呢?五個驗證者中的四個在E的第一個區塊之上繼續構建區塊,並且所有四個驗證者都承認E在LMD分叉選擇中獲得最大的序號。僅僅透過檢視鏈的結構,我們就可以知道驗證者必須在不同時間至少看到的一些訊息。以下是四個驗證者的檢視:

每個驗證者生產的區塊以綠色表示,從每個其他驗證者中看到的最新訊息以藍色表示。

注意,所有四個驗證者都可以看到B的一個或兩個區塊,而D和E可以看到C的第二個區塊,使得C的第二個區塊成為他們檢視中的最新訊息;然而,鏈結構本身並沒有給我們證明確實是這樣。幸運的是,正如我們將在下面看到的,這種模糊性對我們來說無關緊要。

A的檢視包含支援底鏈的四條最新訊息,而沒有一條訊息支援B的區塊。因此,在(我們的模擬)A眼中,有利於底鏈的得分至少為4-1。 

C、D和E的檢視描繪了類似的情況,其中有四條支援底鏈的最新訊息。因此,所有四個驗證者都處於不能改變主意的位置,除非另外兩個驗證者率先改變他們的想法,將得分改為2-3去支援B的區塊。

請注意,我們對驗證者檢視的模擬是並非最新即時的,這是因為,舉個例子,它沒有捕獲到D和E可能已經看到C更新的區塊。

但是,這不會改變頂鏈vs底鏈的支援情況,因為我們可以說任何驗證者的新訊息都會與之前的訊息具有相同的意見,除非另外兩個驗證者已經先轉換了支援物件。

最小可行攻擊。 A和C非法轉換到支援B的區塊(並且可能因此受到懲罰),給它3-2的優勢,此時D和E可以合法轉換。

由於諸如LMD GHOST之類的分叉選擇規則具有這種粘性,並且客戶端可以檢測到分叉選擇規則何時“卡在”一個特定區塊上,我們可以使用它作為實現非同步安全共識的方式。

安全預言機

實際上,檢測鏈卡在某個區塊上的所有可能情況(在CBC術語中,區塊是“決定的”還是“安全的”)是非常困難的,但我們可以提出一套啟發式的思路(“安全預言機”)來幫助我們。其中最簡單的是clique oracle。

如果存在某個驗證者子集V,構成總驗證者集的p(p> 1/2),則所有區塊都支援某個區塊B,然後使另一輪區塊仍然支援B(引用它們的第一輪區塊),然後我們可以推理如下:

由於兩輪訊息傳遞,我們知道該子集V都支援B,B得到良好的支援,因此除非有足夠的其他人首先轉換,否則它們都不能合法地轉換。


為了讓某個競爭B'擊敗B,B'可以合法擁有的支援最初最多為1-p(不屬於clique的人),並且為了贏得LMD GHOST分叉選擇,其支援需要達到1 / 2,所以至少1/2 - (1-p)= p - 1/2需要非法轉化以使其達到LMD GHOST規則支援B'的程度。

舉個例子,請注意p = 3/4 clique oracle提供1/4的安全級別,並且只要3/4的節點線上,就可以生成滿足clique的一組區塊。


因此,在BFT的意義上,就活躍性和安全性而言,使用兩輪clique oracle可以達到的容錯水平是1/4。

這種達成共識的方法有很多好處。首先,短期鏈選擇演算法和“最終確認演算法”並不是兩個笨拙地粘在一起的不同元件(不得不承認,他們在Casper FFG中是這樣);相反,它們都是同一個連貫整體的一部分。

其次,由於安全檢測是客戶端的,因此無需在協議中選擇任何閾值;客戶可以自行決定什麼級別的安全性足以將區塊視為最終確認。

未來拓展方向 

CBC可以透過多種方式進一步擴充套件。首先,人們可以提出其他安全預言機;更完備的clique oracle可以達到1/3的容錯能力。

其次,我們可以新增驗證者輪轉機制。最簡單的方法是每一次滿足q = 3/4 clique oracle時允許驗證者集改變一小部分,當然我們也可以做其他事情。

第三,我們可以不侷限於鏈式結構,關注一下增加每單位時間訊息密度的結構,例如Serenity信標鏈的證明結構:

在這種情況下,將證明與區塊分開是值得的;區塊是實際增長底層DAG的物件,而證明對分叉選擇規則有幫助。

在Serenity信標鏈規範中,每個區塊可能有數百個與之對應的證明。但是,無論你採用哪種方式,CBC Casper的核心邏輯都是一樣的。

為了使CBC Casper的安全性“在加密經濟層面上可執行”,我們需要增加有效性和削減條件。

首先,我們將從有效性規則開始。一個區塊包含父塊和它知道的一組證明,但這些證明還不是鏈的一部分(類似於當前以太坊PoW鏈中的“叔塊”)。考慮到鏈中和區塊本身包含的資訊,為了使區塊有效,區塊的父塊必須是執行LMD GHOST 分叉選擇規則的結果。

虛線是叔連結,例如。當E建立一個區塊時,E注意到C還不是鏈的一部分,因此包括對C的引用。

我們現在可以只用一個削減條件來提高CBC Casper的安全性:你不能做兩個證明M1和M2,除非M2在M2證明的鏈中或M2在M1證明的鏈中。

有效性和削減條件相對容易描述,雖然實際中實現它們需要檢查雜湊鏈並在共識中執行分叉選擇規則,因此它不像接收兩條訊息並檢查這些數字之間的幾個不等式那麼簡單,就像你可以在Casper FFG中為NO_SURROUND和NO_DBL_VOTE的削減條件所做的那樣。

CBC Casper的活躍性基於任何基礎鏈演算法的活躍性(例如,如果它是每個時隙一個區塊,那麼它取決於一個同步假設,即所有節點將在時隙N+1開始之前看到在時隙N中產生的所有內容)。

鏈不可能以一種無法繼續執行下去的方式“卡住”;有可能從任何情況到達最終確認新區塊,即使有攻擊者或者網路延遲高於底層鏈演算法所需的延遲。

假設在某個時間T,網路“平靜下來”並再次滿足同步假設。然後,每個人都會匯聚在鏈的同一個檢視上,帶著同一個起始區塊H。然後,驗證者將開始簽名支援H或H的後續區塊的訊息。於是,鏈就可以順利執行,並最終滿足一個clique oracle,此時H會被最終確定。

高延遲導致的混亂網路

網路延遲消退,大多數驗證者在執行分叉選項時看到所有的相同區塊或至少足夠多的區塊以獲取同一個起始區塊,並開始基於這個區塊構建,進一步加強了它在分叉選擇規則中的優勢。

鏈在低延遲的情況下平穩執行。很快,會滿足一個clique oracle。

這就是差不多所有內容了。在實施方面,可以說CBC比FFG複雜得多,但就解釋協議及其提供的特點來看,它還是非常簡單易懂的。



免責聲明:

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

推荐阅读

;