作者:0xhhh,EthStorage;編譯:Faust,《極客web3》
導語:自Rollup成爲顯學以來,定序器Sequencer去中心化始終是以太坊/Celestia社區的關注焦點,同時也是Layer2研發工作中難以逾越的大山。對此,不同的Rollup方案均提出過關於節點去中心化的設想,爲這一話題提供了無比廣闊的想象空間。
本文作者以知名ZKRollup項目Aztec爲例,以近期Aztec Labs提出的名爲B52、Fernet的2個提案爲切入點,爲廣大讀者解析ZKR如何實現定序器節點的去中心化。
提案B52:Permissionless的定序器方案
提案B52打算實現以下目標(理想情況下):
1. 去中心化的sequencer網絡,由L2節點自己選舉每一輪的proposer
2. 去中心化的prover網絡,prover節點硬件要求低
3. Rollup整體具備很好的抗審查性.
4.L2產生的MEV價值由L2節點獲取
5. L2區塊被提交到DA層時,可以獲得比較有效的最終性Finality,不可逆轉的finality則要等ValidityProof(有效性證明)提交完畢
6. L2 Token可以擁有不錯的經濟模型
7. L2區塊和交易數據都在L2的p2p網絡中傳播
8. L2繼承L1的安全性
該方案將整個L2出塊流程劃分成三個時間階段:
Block Proposal Window(BPW)
BlockAcceptance Window(BAW)
State advances
其中,BPW(區塊提議)階段是多個定序器Seuqnecer提出不同的區塊並競爭、Prover選擇某個備選區塊給出投票的過程。
BAW(區塊採納)是Prover給區塊構造有效性證明Validity Proof,並將其提交的過程。
Block Proposal Window(區塊提議階段):
BPW可以再細分爲Block Proposal, Block Voting, Aggregation三個階段。
Block Proposal(BP)階段中任何人都可以收集交易,並廣播自己的BP內容。BP內容會包含三個部分: txs order hash, prover reward percentage, burn token amount
txs order hash: Proposer 從L2的交易池(mempool) 中選擇最有價值的一批交易並排序,然後將這批交易的哈希值放進自己構建的區塊中。
prover reward percentage: Sequencer分享給Prover的區塊獎勵百分比
burn token amount: Proposer提議銷毀的L2 Native Token數量,接着它將自己提出的BP發送到L2 p2p網絡中
Block Voting 投票階段:
Prover 在p2p網絡中接收到不同Proposer提出的BP後,會投票給能讓自己獲得最多reward的BP。不過投票的組成很特殊:
Vote={BlockHash, Index of Proof Tree}
BlockHash是Prover要投票的Proposal的哈希,而Index of Proof Tree則是Prover要參與構建的Proof Tree的葉子索引值(後面會解釋)
Aggregation聚合:Proposer在L2 p2p網絡中收集Prover們針對BP的投票,將其聚合並放進BP中,提交到L1上(每個BP一般只包含與自己有關的投票記錄)。
在此,需要強調BP被選中並納入Rollp账本的先決條件:
擁有最高的分數:
SCORE(y) = NUM_PROVERS (x)^3 * BURN_BID(z)^2`
NUM_PROVERS (x)是該BP獲得的Prover投票數量,BURN_BID是該BP所提議銷毀的L2 Token數量。由於BURN_BID越高,BP提議者最後獲得的獎勵越少,所以這個數值要設置得當。
同時,該BP需要在Block Proposal Window結束前被提交到L1上,對應的有效性證明Proof要在Block Acceptance Window結束前被上傳到L1。
需要注意:BP的分數計算中,投票數量佔的比重最大,其次才是burn token的數量。同時,B52方案允許多個proposer(其實就是sequencer)針對一個有效的BP名額展开競爭
B52方案僅需要Proposer(sequencer)在自己的BP中指定burn token的數量(類似於EIP1559的方式)而無需事先stake token,這可以讓網絡更加permissionless(無准入許可),同時也有利於L2的原生Token產生通縮。
此外,BP中不包含完整的交易數據,只包含交易序列的哈希,道理類似於以太坊PBS方案,旨在避免MEV被其他Proposer窺探並搶跑。
Block Acceptance Window(區塊採納階段)詳解:
在Block Proposal Window結束後,Prover需要reveal揭示他們的BP對應的完整交易數據。Prover投票的BP如果被選中的話(分數最高,可通過L1合約查詢),它們就需要構造投票時給出的Index of Proof Tree所對應的Sub Proof Tree。
假設Aztec的區塊包含2^13=16384的交易數量,並且有2048個prover,那么每個prover構造2^3=8筆交易組成的sub proof tree.然後prover把自己構造的sub proof tree廣播到L2 p2p網絡中。proposer接收之後,會把所有的sub proof tree聚合成一個block proof。
接着Propsoer將聚合的proof提交到L1的Rollup合約,合約會驗證這個proof以及對應狀態轉換結果的正確性。這裏要注意,Prover如果故意不提交proof的話,不僅無法獲得Proposer許諾的區塊獎勵分紅,還會被slash,因爲要成爲Prover是需要提前質押Token的。因此,與Proposer(Sequencer)不同,Prover並不是Permissionless的。
State Advances(狀態推進階段)詳解:
在 Block Acceptance Window結束之後,Rollup合約會選擇一個分數最高的區塊納入Rollup账本,並且把區塊獎勵Reward按照Proposer(Sequencer)事先聲明的比例,分別發送給Proposer和Prover。
以上便是Aztec的B52方案。但本文作者認爲,B52提案存在一些潛在問題:
問題一: 假如一個分數最高的區塊的validity proof是不完整的。提案中給出的解決方法是,假如Proposer只提供了50%的proof,那么他也只能獲得50%的區塊獎勵,從而確保Proposer沒有動力故意不提交完整的proof。同時Prover自己也可以直接向合約直接提交proof。
按照提案的敘述,是可以接受一個區塊沒有完整交易的validity proof。這點其實是不合理的:因爲:zkrollup都是在給出validity proof的同時,才聲明這個區塊對應的新狀態有效。
如果proposer最後提交到L1的聚合proof缺失了某個交易的proof,很顯然在這筆交易之後發生的所有交易的狀態轉換證明都是不成立的(因爲交易是順序執行並且有狀態依賴的),我們也就無法確認這個區塊對應的新狀態是有效的。
因此這個時候,合理的方式應該是進入無限等待的Block Acceptance Window,直到所有交易的proof都提交完成。
問題二:假如得分最高的區塊是非法區塊(B52方案裏也沒有解釋這點)。BP僅僅包含交易序列的哈希,所以惡意的proposer實際上可以故意構造有問題的交易,比如雙花交易。那么這個時候,實際上需要在L1合約增加一個任何人都可以提交illeagal proof的函數, 這個illeagal proof用於證明得分最高的BP是一個非法區塊。
並且這種舉報應該是有獎勵的,我們可以把proposer 發送到合約中的burn token都獎勵給提交illegal proof的舉報者節點。
有趣的思考:關於叔塊和多余的Prover Work: B52方案實際上會在每輪分數最高且有效的BP出現後,把這一輪出現的其他BP(已經提交完整proof)作爲叔塊,分配一定的叔塊獎勵。
這實際上沿用了ETH POW共識機制的做法,爲了避免算力過度集中,需要分配一部分出塊獎勵給未被採納的區塊提出者(礦工),以保障小礦池/個體礦工的利益,避免算力被大礦池壟斷。因此採用以太坊表現不錯的叔塊機制也是一個很聰明的選擇。
B52提案在Rollup去中心化方面的意義:Proposer是去中心化且不需要質押的,准入門檻低;但是因爲需要自己Build最有價值的區塊,以及需要收集其他Prover的投票,並聚合所有Proof,實際上Proposer的硬件門檻沒有提案中敘述的那么低(比如帶寬可能不會很低)。
所以,最終還是會成爲一個比較中心化的網絡,類似Mev-Boost Builder,因爲最終能出塊的proposer往往也是最擅長捕捉MEV的Block Builder。
同時,B52方案裏的Prover需要質押資產,但因爲僅僅需要生成sub tree proof,相比於那些需要完整生成整個block proof的方案來說,Prover的去中心化程度會更好(硬件要求可以放低了)。
活性Liveness:總體的網絡Liveness是不錯的,因爲L2有自己的p2p網絡來廣播交易和投票/BP,並且Sequencer和Prover都比較去中心化。但是需要解決我們上面提到的兩個問題,一個是得分最高的區塊一定是合法的區塊,第二個是需要等待完整的block proof提交到L1才能進入一個新狀態。所以需要一個更有效的激勵機制,避免整個Rollup網絡由於缺失某一部分tx proof而無法正常工作(停機)。
抗審查性Censorship Resistance:如果我們能保證任何人都能發布區塊提議BP,並且保證不只是Proposer可以提交block proof,那么網絡會有很好的抗審查性 。
最終性Finality:L2的finality 跟網絡的liveness息息相關,因爲最終的verified finality 還是需要等待Block Proof的提交,但實際上你也可以相信一個得分最高的BP對應的區塊內容(只要它裏面不包含惡意交易)。
這個區塊會在Block Acceptance Window 开始時被揭示reveal,意味着作爲用戶,僅僅需要等待一個Block Proposal Window的時間,你提交的交易所在的區塊就可以被採納。
繼承L1安全性:作爲一個通過提交validity proof來更新狀態的L2,是可以繼承L1的安全性。
提案Fernet:引入VDF選拔合法Proposer
Fernet 方案簡介:通過VDF在每輪出塊周期內,爲Committee(就是Sequencer節點集合)中不同的節點設定一個預估的分數,最終分數最高的Sequencer提議的區塊會成爲有效塊。
首先,如何加入Committee?實際上需要在L1質押16個ETH,並且在質押操作完成後等待4個L1區塊後,加入Sequencer Committee。至於退出Sequencer Committee,則需要調用L1合約裏的Unstake函數,之後再過3天才能拿回自己質押的剩余金額。
然後,什么是VDF?Verifiable Delay Function就是可驗證延遲函數,該數學函數滿足嚴格的串行執行特性,它會執行一些計算步驟,並至少會消耗一段可預估的時間。我們把VDF算出來的數值記作Score,它滿足均勻正態分布,因此當Sequencer算出VDF Score後,就可以判斷自己被選中爲合法Proposer的概率有多大。
Sequencer的VDF計算如下:
Score = VDF( privatekey , public inputs )
public inputs = { current block number , randao }
randao是一個隨機數,用來防止Sequencer提前計算未來所有區塊高度下自己的VDF Score
Fernet整個流程主要分爲3個階段:
1. Proposal Phase 2. Proving Phase 3. Finalization
Proposal Phase:PROPOSAL_PHASE_L1_BLOCKS = 2 Ethereum blocks (該階段會維持2個L1 block的時間)
這個階段开始,每個Sequencer都會用VDF算出自己在當前出塊高度下對應的VDF Score。如果Sequencer認爲自己的VDF Score很有可能贏得這次區塊的出塊權(假設Score滿足正態分布),那么他會提交一個Proposal到L1的Rollup合約。Proposal包含:交易序列的哈希、指向哪個之前的L2區塊。
unproven block:只提交了Proposal到Rollup合約的區塊block contents。接着,Sequencer需要把unproven block對應的 block contents 以及proof of VDF 一起發送到L2的p2p網絡中。
ProvingPhase:PROVING_PHASE_L1_BLOCKS= 50 L1 blocks(該階段會維持50個L1區塊,大概10 min)
Prover從L2的p2p網絡中接收所有Block Contents中對應的交易,並會爲VDF Score更高的區塊構建Proof。Proof的構建也是採取多個Prover並行協作的方式(類似B52方案) 。
因此需要Sequencer在最後將多個不同的交易對應的Proof聚合成一個Block Proof(包含VDF Proof),提交到L1的Rollup合約。任何人都可以將已經提交Block Proof的Block Contents提交到Rollup合約上。
Finalization:需要提交一筆L1的交易來Finalize區塊,一個最終可以被Finalize的區塊需要滿足:提交了Block Contents和Block Proof,指向的前一個區塊必須是Finalize的。在滿足以上條件的基礎上,還要擁有最高的Score。
流水线出塊機制:需要注意的是,Fernet採用的是流水线出塊機制.當第N塊的Proposal階段結束時,第N+1個塊的Proposal就开始了(Aptos等公鏈也有類似的做法)。但對於第N+1個塊來說,它需要等待第N個塊Finalize後,它才能提交L1的Final Block交易,並且驗證通過成爲Final Block 。
潛在的攻擊維度:假如VDF Score最高的Sequencer故意不在L2 p2p中廣播Block Contents, 那么有可能導致區塊重組reorg。
reorg的L2區塊數量計算:1+PROVING_PHASE_L1_BLOCKS / PROPOSAL_PHASE_L1_BLOCKS =1+50/2=26塊
解決方式:增加叔塊機制,避免每個L2slot(出塊時隙)只有一個完整的候選區塊。
Fernet在去中心化上的意義:Sequencer通過質押16個ETH加入Sequencer Committee,准入門檻並不高(但也不低)。Prover不需要任何質押,但假如Prover不生成Proof也沒有懲罰。這與B52方案基本是相反的。
活性Liveness:整體網絡的 Liveness 是可以保證的,因爲VDF+叔塊機制可以保證每一輪不止有一個出塊者。
MEV:MEV的考量是最特殊的,該方案計劃引進PBS,這樣作爲Sequencer計算出一個高分的VDF Score後,就可以直接找Block Builder構造一個更有價值的區塊。
抗審查性Censorship Resistance:Fernet 也將採用跟以太坊一致的PBS機制,因此本質上 Fernet 抗審查的問題等價於以太坊 PBS 的抗審查問題。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。