Rollup 去中心化:Aztec 的去中心化 Sequencer 方案解析
作者: 0xhhh , EthStorage
编辑:Faust,《極客web3》
自 Rollup 成為顯學以來,定序器 Sequencer 去中心化始終是以太坊/Celestia 社區的關注焦點,同時也是 Layer2 研發工作中難以逾越的大山。對此,不同的 Rollup 方案均提出過關於節點去中心化的設想,為這一話題提供了無比廣闊的想象空間。
本文作者以知名 ZKRollup 項目 Aztec 為例,以近期 Aztec Labs 提出的名為 B52 、 Fernet 的 2 個提案為切入點 ,為廣大讀者解析 ZKR 如何實現定序器節點的去中心化。
提案 B52 : Permissionless 的定序器方案
提案 B52 打算實現以下目標(理想情況下):
去中心化的 sequencer 網絡,由 L2 節點自己選舉每一輪的 proposer
去中心化的 prover 網絡, prover 節點硬體要求低
Rollup 整體具備很好的抗審查性 .
L2 產生的 MEV 價值由 L2 節點獲取
L2 區塊被提交到 DA 層時,可以獲得比較有效的最終性 Finality ,不可逆轉的 finality 則要等 Validity Proof (有效性證明)提交完畢
L2 Token 可以擁有不錯的經濟模型
L2 區塊和交易數據都在 L2 的 p 2 p 網絡中傳播
L2 繼承 L1 的安全性 (B52 提案對 Rollup 結構的假設,Proposer 實質就是 Sequencer) 該方案將整個 L2 出塊流程劃分成三個時間階段:
Block Proposal Window ( BPW )
Block Acceptance Window ( BAW )
State advances
其中,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 在 p 2 p 網絡中接收到不同 Pro p oser 提出的 BP 後,會投票給能讓自己獲得最多 reward 的 BP 。不過投票的組成很特殊:
Vote ={ BlockHash , Index of Pro of Tree }
BlockHash 是 Prover 要投票的 Proposal 的哈希,而 Index of Pro of Tree 則是 Prover 要參與構建的 Pro of 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 Pro of 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 個階段:
- Proposal Phase 2. Proving Phase 3. Finalization
Proposal Phase :PROPOSALPHASEL1_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 以及 pro of of VDF 一起發送到 L2 的 p 2 p 網絡中。
ProvingPhase :PROVINGPHASEL1_BLOCKS= 50 L1 blocks(該階段會維持50個L1區塊,大概10 min)
Prover 從 L2 的 p 2 p 網絡中接收所有 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塊
解決方式: 增加叔塊機制,避免每個 L2 slot (出塊時隙)只有一個完整的候選區塊。
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 的抗審查問題。