Vitalik探討改進以太坊Casper CBC協議

買賣虛擬貨幣
上週三,以太坊創始人Vitalik Buterin在布拉格舉行的Devcon4大會上,公佈了以太坊發展路線(也被稱為以太坊2.0)的最新資訊,其中有一些內容,譯者在之前的文章《以太坊2.0協議核心Beacon鏈詳解》中已經有所提及,而更新的內容包括新鏈將以Serenity為名(之前被稱為Shasper,意指分片和Casper的結合),其包含了Casper、分片、EWASM以及其他一些協議,它會是一條新的區塊鏈,並與當前的以太坊PoW鏈同時存在,且相互連線。而在第一階段,以太坊開發者們將交付基礎beacon鏈,第二階段則是推出分片資料鏈,第三階段就是啟用狀態交易(EWASM),最後則是迭代、改進以及新增新技術。

而在本文當中,我們將探討beacon鏈的Casper共識機制,Casper共識機制其實有兩個大的版本,一個是Casper FFG(Vitalik版),而另一個則是本文要講到的Casper CBC(Vlad版)。

以下內容譯自Vitalik最新發布的帖子《

Casper CBC 的工作流程大致如下:

1.驗證者發出訊息;
2.每則訊息指定驗證者正在投票的區塊,並且還指定了驗證者從其他驗證者處收到的最新訊息。
3.驗證者正在投票的區塊,必須等於或繼承自GHOST分叉選擇規則的頭部區塊(使用其他驗證者的最新訊息作為輸入)
4.唯一的削減條件是(i)上述規則,(ii)驗證者不能生成具有相同序列號的兩則訊息,(iii)在後面的訊息中,驗證者不能引用具有(比早期訊息中的驗證者所引用的訊息)更早序列號的訊息;
5.最終確定性是內生的:在某些時候,當有多輪驗證者對X的後代進行投票時,從數學上講,如果沒有大量驗證者發出無效訊息,頭部就不可能切換到非X塊;而少於這個量的限制,可使用各種啟發式演算法進行檢測和測量。

下面是一個GHOST分叉選擇規則的例項。 字母A,B,C,D,E代表著最近發生的5次投票。


第一個選擇在綠色和黃色塊之間。最後綠色塊獲勝了,這是因為有三張選票來自綠色塊,而只有兩張選票來自其競爭者黃色塊。第二次選擇是在紅色塊和藍色塊之間。而藍色塊以2:1的比分獲勝,而藍色塊只有一個橙色的子塊,所以橙色塊是獲勝者。

這樣做而導致的效率問題是顯而易見的:每則訊息都需要引用它已經看到的所有其它訊息,這可能會導致O(N^2)的資料複雜性;

本文探討了一種緩解資料複雜性的特定策略,相較於每個驗證者的投票,都是在每個其他驗證者訊息的GHOST分叉選擇規則進行評估,其中驗證者被明確地分配給m個其他驗證者的私人委員會(可能是32≤m≤256),並且在他們的訊息當中,必須包含對這些m個驗證者簽名的引用。

這種引用可以按序列號,或者透過這些簽名已包含在鏈中的位置來完成。削減條件可簡單地檢查這些訊息實際上是否代表GHOST分叉選擇評估m則其他訊息,並且計數器總是遞增的。

更具體地說:

1.對於接受一則訊息的鏈,要麼 (i) 訊息必須對鏈中的區塊進行投票,要麼(ii)該訊息投票的鏈外(off-chain)區塊必須被納入一個叔塊(uncle);
2.對於接受一個叔塊的鏈,這個叔塊的父塊必須 (i)是該鏈的一部分,或者(ii)已經被納入了鏈中,並作為一個叔塊;
3.對於一條接受一則訊息的鏈,引用其最新集的所有訊息,都必須被接受;
4.每則訊息都有一個序列號。對於一條接受帶有序列號為n訊息的鏈,它必須已接受了來自序列號為0....n−1驗證者的訊息;
5.驗證者可以對具有相同序列號的兩則訊息進行削減處理,或者也可以削減一則投票x的訊息,其中訊息中包含的證據不能證明投票x;

如果委員會足夠大,它們將接近整個驗證者集。並且你可以試探性地確定驗證者的數量。 下面是相關的程式碼:
github.com ethereum/research/blob/659f0b31f9337b3e7ee4bde45cdb93c0ed4fd390/graph_cbc/graph_cbc.py


import random

VALIDATORS = 5000
EDGES = 255
FINALITY = 4000

assert EDGES % 2 == 1

neighbors = list(range(VALIDATORS))
edgelist = neighbors * EDGES
random.shuffle(edgelist)
edges = [edgelist[i*EDGES:i*EDGES+EDGES] for i in range(VALIDATORS)]

last_votes = '1' * FINALITY + '0' * (VALIDATORS - FINALITY)

while 1:
new_zeroes = []
for i in range(VALIDATORS):
votes_for_0 = len([e for e in edges[i] if last_votes[e] == '0'])
if votes_for_0 * 2 > EDGES:


注意,這部分程式碼是擷取的,完整程式碼可訪問:https://github.com/ethereum/research/blob/659f0b31f9337b3e7ee4bde45cdb93c0ed4fd390/graph_cbc/graph_cbc.py
結果就是m ≈ 256 ,容錯率似乎接近20%,非常接近 Casper CBC兩輪內最大的可能值25%。雖然我們失去了幾個百分點的安全性,但我們獲得了一個令人驚訝的簡約協議表示,否則的話,就可能需要一些相當複雜的資料結構。

此外,請注意,這種Casper CBC的風格,基本上與Avalanche(雪崩協議)的工作方式非常相似,其中每個節點透過對其他節點委員會進行調查而獲得共識。這裡的主要區別在於,委員會是透過協議選擇的,削減條件會強制執行合規性,而GHOST則被用作分叉選擇規則,以擴充套件N元共識鏈,從而有效地實現經濟安全。這表明可能存在著一個更為通用的框架,它可以有效地包含Casper CBC以及Avalanche;

進一步的工作:

1.Casper CBC的容錯性,可透過增加的等待回合數,來提高到 (1/3-ϵ)。那麼我們是否可以用一種類似的技術,將容錯率提高到20%以上呢?

2.有沒有辦法,在這個設定當中讓分片自然地發生呢?一般而言,這種目標,可用某種DAG技術來替換鏈式機構來完成,其中每個區塊都知道其分片的父級,以及其他分片中的的第十個最新和較舊的區塊,並且期望驗證者,僅完全驗證尚未被足夠大的驗證者樣本所驗證的區塊;


更多數字貨幣資訊:www.qukuaiwang.com.cn/news

免責聲明:

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

推荐阅读

;