導語:自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 層時,可以獲得比較有效的最終性F inality,不可逆轉的finality 則要等Validity Proof(有效性證明)提交完畢
6. L2 Token 可以擁有不錯的經濟模型
7. L2 區塊和交易數據都在L2 的p2p 網絡中傳播
8. L2 繼承L1 的安全性

(B52 提案對Rollup 結構的假設,Proposer 實質就是Sequencer)
該方案將整個L2 出塊流程劃分成三個時間階段:
- 區塊提案窗口(BPW)
- 區塊接受窗口(BAW)
- 國家進步
其中,BPW(區塊提議)階段是多個定序器Seuqnecer 提出不同的區塊並競爭、Prover 選擇某個備選區塊給出投票的過程。
BAW(區塊採納)是Prover 給區塊構造有效性證明Validity Proof,並將其提交的過程。
Block Proposal Window(區塊提議階段):
BPW 可以再細分為Block Proposal, Block Voting, Aggregation三個階段。


(Block Proposal Window 流程示意圖)
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。不過投票的組成很特殊:
投票={BlockHash, 證明樹索引}
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 Acceptance Window 示意圖,圖中寫成了Proof Acceptance)
在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 計算如下:
分數 = VDF( 私鑰 , 公共輸入 )
公共輸入 = { 當前區塊號 , randao }
randao 是一個隨機數,用來防止Sequencer 提前計算未來所有區塊高度下自己的VDF Score
Fernet 整個流程主要分為3 個階段:
1. 提案階段 2. 證明階段 3. 定稿

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。

(流水線式出塊流程,前一個區塊的提議階段剛結束,就開始下一個區塊的提議階段,而無需等待之前區塊的Proving 階段結束)
流水線出塊機制:需要注意的是,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 的抗審查問題。