上周三,以太坊創(chuàng)始人Vitalik Buterin在布拉格舉行的Devcon4大會(huì)上,公布了以太坊發(fā)展路線(也被稱為以太坊2.0)的最新信息,更新的內(nèi)容包括新鏈將以Serenity為名(之前被稱為Shasper,意指分片和Casper的結(jié)合),其包含了Casper、分片、EWASM以及其他一些協(xié)議,它會(huì)是一條新的區(qū)塊鏈,并與當(dāng)前的以太坊PoW鏈同時(shí)存在,且相互連接。
而在第一階段,以太坊開發(fā)者們將交付基礎(chǔ)beacon鏈,第二階段則是推出分片數(shù)據(jù)鏈,第三階段就是啟用狀態(tài)交易(EWASM),最后則是迭代、改進(jìn)以及添加新技術(shù)。
而在本文當(dāng)中,我們將探討beacon鏈的Casper共識(shí)機(jī)制,Casper共識(shí)機(jī)制其實(shí)有兩個(gè)大的版本,一個(gè)是Casper FFG(Vitalik版),而另一個(gè)則是本文要講到的Casper CBC(Vlad版)。
以下內(nèi)容譯自Vitalik最新發(fā)布的帖子《Casper CBC lite via committees》
Casper CBC 的工作流程大致如下:
1.驗(yàn)證者發(fā)出消息;
2.每則消息指定驗(yàn)證者正在投票的區(qū)塊,并且還指定了驗(yàn)證者從其他驗(yàn)證者處收到的最新消息。
3.驗(yàn)證者正在投票的區(qū)塊,必須等于或繼承自GHOST分叉選擇規(guī)則的頭部區(qū)塊(使用其他驗(yàn)證者的最新消息作為輸入)
4.唯一的削減條件是(i)上述規(guī)則,(ii)驗(yàn)證者不能生成具有相同序列號(hào)的兩則消息,(iii)在后面的消息中,驗(yàn)證者不能引用具有(比早期消息中的驗(yàn)證者所引用的消息)更早序列號(hào)的消息;
5.最終確定性是內(nèi)生的:在某些時(shí)候,當(dāng)有多輪驗(yàn)證者對(duì)X的后代進(jìn)行投票時(shí),從數(shù)學(xué)上講,如果沒有大量驗(yàn)證者發(fā)出無效消息,頭部就不可能切換到非X塊;而少于這個(gè)量的限制,可使用各種啟發(fā)式算法進(jìn)行檢測和測量。
下面是一個(gè)GHOST分叉選擇規(guī)則的實(shí)例。 字母A,B,C,D,E代表著最近發(fā)生的5次投票。
第一個(gè)選擇在綠色和黃色塊之間。最后綠色塊獲勝了,這是因?yàn)橛腥龔堖x票來自綠色塊,而只有兩張選票來自其競爭者黃色塊。第二次選擇是在紅色塊和藍(lán)色塊之間。而藍(lán)色塊以2:1的比分獲勝,而藍(lán)色塊只有一個(gè)橙色的子塊,所以橙色塊是獲勝者。
這樣做而導(dǎo)致的效率問題是顯而易見的:每則消息都需要引用它已經(jīng)看到的所有其它消息,這可能會(huì)導(dǎo)致O(N^2)的數(shù)據(jù)復(fù)雜性;
本文探討了一種緩解數(shù)據(jù)復(fù)雜性的特定策略,相較于每個(gè)驗(yàn)證者的投票,都是在每個(gè)其他驗(yàn)證者消息的GHOST分叉選擇規(guī)則進(jìn)行評(píng)估,其中驗(yàn)證者被明確地分配給m個(gè)其他驗(yàn)證者的私人委員會(huì)(可能是32≤m≤256),并且在他們的消息當(dāng)中,必須包含對(duì)這些m個(gè)驗(yàn)證者簽名的引用。
這種引用可以按序列號(hào),或者通過這些簽名已包含在鏈中的位置來完成。削減條件可簡單地檢查這些消息實(shí)際上是否代表GHOST分叉選擇評(píng)估m(xù)則其他消息,并且計(jì)數(shù)器總是遞增的。
更具體地說:
1.對(duì)于接受一則消息的鏈,要么 (i) 消息必須對(duì)鏈中的區(qū)塊進(jìn)行投票,要么(ii)該消息投票的鏈外(off-chain)區(qū)塊必須被納入一個(gè)叔塊(uncle);
2.對(duì)于接受一個(gè)叔塊的鏈,這個(gè)叔塊的父塊必須 (i)是該鏈的一部分,或者(ii)已經(jīng)被納入了鏈中,并作為一個(gè)叔塊;
3.對(duì)于一條接受一則消息的鏈,引用其最新集的所有消息,都必須被接受;
4.每則消息都有一個(gè)序列號(hào)。對(duì)于一條接受帶有序列號(hào)為n消息的鏈,它必須已接受了來自序列號(hào)為0.。..n?1驗(yàn)證者的消息;
5.驗(yàn)證者可以對(duì)具有相同序列號(hào)的兩則消息進(jìn)行削減處理,或者也可以削減一則投票x的消息,其中消息中包含的證據(jù)不能證明投票x;
如果委員會(huì)足夠大,它們將接近整個(gè)驗(yàn)證者集。并且你可以試探性地確定驗(yàn)證者的數(shù)量。 下面是相關(guān)的代碼:
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
結(jié)果就是m ≈ 256 ,容錯(cuò)率似乎接近20%,非常接近 Casper CBC兩輪內(nèi)最大的可能值25%。雖然我們失去了幾個(gè)百分點(diǎn)的安全性,但我們獲得了一個(gè)令人驚訝的簡約協(xié)議表示,否則的話,就可能需要一些相當(dāng)復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
此外,請(qǐng)注意,這種Casper CBC的風(fēng)格,基本上與Avalanche(雪崩協(xié)議)的工作方式非常相似,其中每個(gè)節(jié)點(diǎn)通過對(duì)其他節(jié)點(diǎn)委員會(huì)進(jìn)行調(diào)查而獲得共識(shí)。這里的主要區(qū)別在于,委員會(huì)是通過協(xié)議選擇的,削減條件會(huì)強(qiáng)制執(zhí)行合規(guī)性,而GHOST則被用作分叉選擇規(guī)則,以擴(kuò)展N元共識(shí)鏈,從而有效地實(shí)現(xiàn)經(jīng)濟(jì)安全。這表明可能存在著一個(gè)更為通用的框架,它可以有效地包含Casper CBC以及Avalanche;
進(jìn)一步的工作:
1.Casper CBC的容錯(cuò)性,可通過增加的等待回合數(shù),來提高到 (1/3-?)。那么我們是否可以用一種類似的技術(shù),將容錯(cuò)率提高到20%以上呢?
2.有沒有辦法,在這個(gè)設(shè)置當(dāng)中讓分片自然地發(fā)生呢?一般而言,這種目標(biāo),可用某種DAG技術(shù)來替換鏈?zhǔn)綑C(jī)構(gòu)來完成,其中每個(gè)區(qū)塊都知道其分片的父級(jí),以及其他分片中的的第十個(gè)最新和較舊的區(qū)塊,并且期望驗(yàn)證者,僅完全驗(yàn)證尚未被足夠大的驗(yàn)證者樣本所驗(yàn)證的區(qū)塊。
評(píng)論
查看更多