ETH2.0 都要來了你還不知道Casper 嗎? (二)
在在中,我們介紹了Vitalik原始論文中的Casper FFG,其借助PoS對PoW產生的區塊進行確認來提高系統的安全性,但這只是一種過渡的方案,在以太坊2.0中會使用一個純PoS的Casper協議,這篇文章中將為大家介紹在以太坊2.0中將要使用的Casper協議。
二級標題
首先我們看看以太坊2.0的架構是什麼樣子,如圖1所示,在以太坊2.0中會有一條稱之為Beacon chain的主鏈,其通過PoS的Casper產生。在beacon chain下,存在1024個分片,每個分片可以獨立地處理數據。

圖片描述
圖片描述
圖片描述
用戶想要成為Validator,首先要向以太坊1.0中的一個特殊合約發送一筆交易抵押一定數量的ETH(目前最小值為32ETH),然後用戶會得到關於這筆交易的一個證明。用戶通過向以太坊2.0展示這個證明,在驗證通過後成為Validator,如圖2所示:
圖片描述
圖片描述圖片描述完整的Merkle樹的證明,就可以驗證這幣交易的合法性。通過驗證的用戶成為以太坊2.0中的Validator。
二級標題
二級標題
二級標題
以太坊2.0中Capser的出塊過程
在上一篇文章中,我們介紹的Casper是通過PoW進行出塊,使用PoS對區塊進行最終的確定。因此,純PoS的Casper一個需要解決的問題是如何產生區塊。在正式介紹協議過程前,我們先明確幾個定義:
Validators 集合: V = V1 … Vn,假設每個Validator擁有相同的stake;

圖片描述
圖片描述
圖片描述
圖3 以太坊2.0中Casper共識過程
1、每一個epoch開始,通過隨機數生成器產生隨機數,將Validator集合V平均分為64份,得到S1、S2,…,S64。
5、對於每一個slot i,Si中除proposer_i 外的剩餘Validator在收到了slot i的block(B_i)或等待了3s後,其公佈一個在他看來的當前鏈的頭部。
LMD GHOST(Lastest Message Driven GHOST)
二級標題
在介紹這種新的最優鏈選擇算法之前,讓我們回憶一下以太坊1.0的最優鏈選擇算法——GHOST。 GHOST算法的主要思想是,對於一條區塊鏈因為時間延遲和惡意節點的存在會產生許多的分叉,當發現分叉時,選擇子樹的總Difficulty最大作為最優鏈,如圖4所示:

圖片描述
圖片描述
GHOST協議在在PoW協議中是沒有問題,但是PoS協議天然受到Lang Range 攻擊的影響,即攻擊者可以通過少量資金購買曾經擁有大量stake但是目前為空的賬戶,回到過去,在過去的位置進行分叉產生大量的非法的區塊,GHOST協議將無法保證系統的安全性。如圖5所示:
圖片描述
圖片描述
圖片描述
圖5:Lang Range
攻擊攻擊者通過在過去位置產生黃色的區塊,子樹B的總Difficulty為10,紫色區塊將成為最優鏈上的點。雖然在投票前需要抵押token,但是在贖回自己的token後,攻擊者就可以在其還是Validator的epoch中肆意妄為,不擔心token會被罰沒。
2、M=[M1,…,因此,為了解決這個問題,以太坊2.0設計了一個新的算法——LMD GHOST(Lastest Message Driven GHOST)。 LMD GHOST的主要思想是,對一條存在分叉的鏈,在找尋鏈的頭部過程中,當其遇到分叉點時,選擇當前epoch中Validator支持多的那棵子樹。協議的主要過程為:
對於一條存在分叉的鏈:
1、H等於創世區塊;
Mn] 是Validator的最新消息;
至此我們已經介紹鏈以太坊2.0中的Casper如何進行出塊,接下來將是最後一個部分,如何對候選區塊進行最終的確認。
二級標題
二級標題
二級標題
區塊確認在上一篇文章中,我們解釋了justified和finalized的checkpoint,finalized的checkpoint之前的節點被最終確認。概括的說,以太坊2.0中的Casper將每個epoch當成一個checkpoint,attestation對checkpoint進行投票,進而確定checkpoint的justified和finalized狀態,確定justified和finalized的核心邏輯和上文中描述的類似。接下來,來說明一下block如何進入到justified和finalized狀態。
如何justify block現在Casper將一個epoch分成64個slot,最後一個slot稱之為epoch_boundary_slot,用它的hash寫作epoch_boundary_hash代表一個epoch,將一個epoch看作一個checkpoint。讓鏈維護一個map,我們叫他justified_hashes,存儲的格式是
。為Validator 的attestation增加兩個字段epoch_boundary_hash(上一個epoch中slot最小的block的hash) 和latest_justified_hash(epoch_boundary_hash引用區塊中的justified_hash epoch最新的block的hash),只有當attestation中的latest_justified_hash 等於justified_hashes中的slot最新的hash,這個attestation才合法。
加入justified_hashes。
如何finalize block
一個epoch_boundary_block成為justified的條件是超過2/3的Validator在其attestation中epoch_boundary_hash指向該block,當一個block被含在justified_hashes中表示,該block是justified,並且證明該block已經是justified的狀態被記錄到了鏈上。
如何finalize block
在確認了justified的狀態後,下一步需要確定如何讓block進入finalize狀態。
如果B4和B3在justified_hashes中,投票給B4作為epoch_boundary_block的attestation選擇B3作為latest_justified_hash,finalize B3。二級標題
二級標題
其他的一些小事
二級標題
其他的一些小事
為了Casper完整的運行,還有一些小事需要解決,由於篇幅比較短小我們放在一起來說吧。
懲罰條件
為了抵禦noting at stake攻擊,用戶通過抵押token成為Validator進行PoS,當Validator非法操作時,沒收其抵押的token,來防止壞人作惡。 Validator的懲罰條件為:
1、同一個Validator不能在相同的epoch中發出兩個不同的attestation。 2、同一個Validator不能發出兩個attestation,他們的epoch_boundary_block 分別為t1和t2,latest_justified_hash 為s1和s2,且s1
這個懲罰條件和上一篇文章中的懲罰條件是相同的。
Validator更換條件
dynasty(B)表示從block B開始到創世區塊之間,finalized epoch的個數。兩個dynasty之間可以更換1/64的Validator。


