作者:NashQ,Celestia研究員;編譯:Faust,極客Web3
譯者注:出於讓Rollup模型更容易理解、更方便剖析的目的,Celestia研究員NashQ將Rollup的定序器(Sequencer)分成了兩個邏輯實體——聚合器和Header生成者。同時,他將交易排序過程分爲了三個邏輯步驟:包含、排序和執行(inclusion, ordering, and execution)。
在這種分析思路引導下,主權Rollup的6大重要變體更加清晰易懂。NashQ細致討論了不同Rollup變體的審查抗性和活性,還探討了每種Rollup變體的節點在信任最小化狀態下的最低配置(就是指要達到Trustless狀態,Rollup用戶至少要運行哪些類型的節點)。
雖然本文是站在Celestia的視角解析Rollup,與以太坊社區分析Rollup模型的方式有所不同,但考慮到以太坊Rollup與Celestia主權Rollup的諸多互通之處,以及後者日益增強的影響力,對於以太坊愛好者而言,此文也極其值得一讀。
什么是Rollup?
Rollup是將其“交易數據”發布到另一個區塊鏈並繼承其共識和數據可用性的區塊鏈。
爲什么我特意使用“交易數據”這個詞而不是“區塊”呢?這涉及到rollup區塊和rollup數據之間的區別,最簡潔的rollup只需要像下文中第一種變體那樣的rollup數據。
Rollup區塊是一種數據結構,它表示某個區塊高度下的區塊鏈账本。Rollup區塊由rollup數據和rollup header組成。其中,Rollup數據可以是一批交易,或一批交易間的狀態變化。
變體1:悲觀Rollup / Based Rollup
構建Rollup的最簡單方法是讓用戶將交易發布到另一個區塊鏈上,我們將後者稱爲共識和數據可用性層(DA-Layer),在下面我會簡稱爲DA層(譯者注:近似於以太坊社區常說的Layer1)。
在我要介紹的第一種Rollup變體中,Rollup網絡的節點必須重新執行DA層包含的Rollup交易,以檢查账本的最終狀態。這便是悲觀Rollup!
悲觀Rollup是一種只支持全節點的Rollup,這些全節點需要重新執行Rollup账本包含的所有交易以檢查其有效性。
但在這種情況下,誰充當了Rollup的定序器Sequencer?實際上除了Rollup的全節點以外,沒有任何實體執行過Rollup账本包含的交易。一般來講,定序器會聚合交易數據,並生成一個Rollup header。但上文所說的悲觀Rollup沒有Rollup header!
爲了方便討論,我們可以將定序器拆分爲兩個邏輯實體:聚合器Aggregator和Header生成者。要生成Rollup Header,必須先執行交易,完成狀態轉換再計算得到對應的Header。但對於聚合器,它不需要完成狀態轉換,就可以進行聚合步驟。
排序Sequencing就是“聚合 + 創建Rollup Header”的過程 。
聚合aggregation是將交易數據批量打包爲一個批次Batch的步驟。一個批次一般包含很多筆交易(譯者注:Batch就是Rollup區塊中除Header以外的那部分數據)。
Header生成步驟則是創建Rollup Header的過程。Rollup Header是關於Rollup區塊的元數據,至少包含了對該區塊中交易數據的commitment(譯者注:這裏說的commitment是指對交易處理結果正確性的承諾)。
通過上述視角,就可以看出Rollup的各部分組件都由誰來充當。首先來看聚合器Aggregator這部分。前面提及的悲觀Rollup沒有Header生成過程,用戶將交易直接發布到DA層上,這意味着DA層網絡實質就充當了聚合器。
所以,悲觀Rollup就是將聚合步驟委托給DA層的Rollup變體,它沒有定序器Sequencer。有時候這類Rollup被稱爲“based rollup”。
Based Rollup具備和DA層相同的抗審查性及活性(活性衡量系統對用戶請求的反饋速度)。此類Rollup的用戶如果要達到信任最小化(最接近Trustless)的狀態,至少要運行一個DA層網絡的輕節點,及Rollup網絡的全節點。
變體2:使用共享聚合器的悲觀匯總
讓我們討論一下使用共享聚合器的悲觀匯總。這個構思由Evan Forbes在其關於共享定序器設計的論壇帖子中提出。其關鍵假設是,共享定序器是爲交易排序的唯一正規途徑。Evan如此解釋共享定序器的好處:
“爲了達到與Web2等效的用戶體驗,共享定序器可提供快速生成的Soft Commitment(不是很可靠的保障)。這些Soft Commitment提供了關於最終的交易次序的一些保障(就是承諾交易次序不會改變),並且可讓Rollup账本狀態更新的步驟提前進行(但此時還沒完成最終確定Finalize)。
一旦Rollup區塊數據確認發布到了基礎層Base Layer(此處應指DA層),Rollup账本的狀態更新就完成了最終敲定Finalize。”
上述Rollup變體仍然隸屬於悲觀Rollup範疇,因爲這類Rollup系統中只有全節點,沒有輕節點。每個Rollup節點都要執行所有的交易,來保證账本狀態更新的有效性。因爲這類Rollup沒有輕節點,就不需要Rollup Header,也就不需要Header生成者。(譯者注:一般而言,一條區塊鏈的輕節點不需要同步完整的區塊,只接收區塊頭即可)
由於沒有Rollup Header生成這個步驟,上述Rollup的共享定序器可以不必執行交易進行狀態更新(生成Header的先決條件),而只包含聚合交易數據的過程。所以我更傾向將其稱爲共享聚合器shared aggregator。
在這種變體中,Rollup用戶在信任最小化狀態下,至少需要運行DA層輕節點+共享聚合器網絡的輕節點+ Rollup全節點。
此時,需要通過共享聚合器網絡的輕節點來驗證發布的aggregator header(這裏指的不是Rollup Header)。上面提到,共享聚合器承擔了交易排序的工作,它在發布的aggregator header中,包含了一個密碼學commitment,對應着DA層上它發布的Batch。
這樣一來,Rollup節點運行者可以確認,自己從DA層收到的批次Batch,是由共享聚合器創建的,而非其他人。
包含Inclusion是將交易包含到區塊鏈中的過程。
排序Ordering是指將交易按照特定順序在區塊鏈中排列的過程。
執行Execution是指處理區塊鏈中的交易,完成狀態更新的過程。
由於共享聚合器承擔了包含和排序的工作,Rollup的抗審查性就取決於它。
如果假設L_ss是共享聚合器的活性,L_da是DA-Layer的活性,那么該Rollup模型的活性就是L = L_da && L_ss。換句話說,如果兩個部分中任意一個存在活性故障,則Rollup也存在活性故障。
爲簡單起見,我將活性作爲一個bool值來考察。如果共享聚合器故障了,Rollup就無法繼續運轉。如果DA層網絡故障了,共享聚合器可以繼續爲Rollup區塊提供Soft Commitment。但此時,Rollup的各項屬性將完全取決於共享聚合器網絡,而後者的各項屬性往往遠不及原本的DA層。
讓我們來繼續探討上述Rollup方案的抗審查性:
在該方案中,DA層不能對某些筆特定的交易進行審查(譯者注:交易審查往往可以拒絕讓某些交易上鏈),它只能針對共享聚合器提交的整個交易批次Batch展开交易審查(拒絕讓某個Batch包含進DA層)。
但按照Rollup的工作流程,共享聚合器在向DA層提交交易批次Batch時,早已完成了交易排序,不同批次間的順序也定完了。所以,DA層的這種交易審查,除了延遲Rollup的账本最終性確認外,沒有其他作用。
綜上,我認爲抗審查性的重點,是確保沒有任何一個實體可以控制或操縱系統內的信息流通,而活性則涉及維護系統的功能和可用性,即使存在網絡中斷和對抗行爲。雖然這與當前主流的學術定義衝突,但我仍然會使用我所闡述的概念定義。
變體 3:基於Based Rollup和共享聚合器的悲觀Rollup
盡管共享聚合器爲用戶和社區帶來了好處,但我們仍應避免過度依賴它,並且要允許用戶從共享聚合器撤出至DA層。我們可以將前面介紹的兩種Rollup變體組合,在使用共享聚合器的同時,允許用戶直接向DA層提交交易。
我們假設,最終的Rollup交易序列取決於共享聚合器提交的交易序列,以及用戶在DA層區塊中直接提交的Rollup交易。我們將這稱作Rollup的分叉選擇規則。
聚合在這裏分成了兩步。首先,共享聚合器發揮作用,聚合一些交易。然後,DA層可以將共享聚合器提交的批次Batch和用戶直接提交的交易進行聚合。
此時的抗審查性分析要更復雜些。DA層網絡節點可能在下一個 DA層區塊出塊前,對共享聚合器提交的Batch進行審查,在知曉了Batch內的交易數據後,DA層節點可以提取MEV價值,先用自己在Rollup網絡上的账戶發起搶跑交易,並將其搶先包含至DA層區塊,之後才包含Rollup共享聚合器提交的Batch。
顯然,第三類Rollup變體的soft commitment保障的交易次序最終確定性,要比前面提到的第二類Rollup變體更脆弱。在這種情況下,共享聚合器將MEV價值拱手送給了DA層節點。對此,我建議讀者觀看關於利用有利可圖的審查 MEV 的研究講座。
目前已經有一些設計方案出現,以降低DA層網絡節點執行此類MEV交易的能力,例如“重組窗口期”功能,這會使得Rollup網絡用戶直接向DA層提交的交易被延遲執行。Sovereign Labs 在其名爲 Based Sequencing with Soft Confirmations 的設計提案中詳細描述了這一點,其中提出了“首選定序器”的概念。
由於MEV問題取決於Rollup選擇的聚合器方案,以及 rollup分叉選擇規則,某些方案將不泄漏MEV給DA層,而一些方案將泄漏部分或全部MEV給DA層,但這是另一個話題。
至於活性,這種rollup 方案比僅允許共享聚合器向DA層提交交易的方案更具優勢。如果共享聚合器出現活性故障,用戶仍然可以向 DA層提交交易。
最後,讓我們談談信任最小化下的Rollup用戶最低配置:
至少要運行 DA層輕節點 + 共享聚合器輕節點 + Rollup 全節點。
此時,仍然需要驗證共享聚合器發布的aggregator header,使得rollup 全節點能夠根據分叉選擇規則區分交易批次。
變體4:Optimistic Based Rollup和中心化的Header生成者
讓我們討論一種被稱爲Based Optimistic Rollup 的變體及中心化的Header生成器。這種方案使用 DA層聚合Rollup交易,但引入了一個中心化的Header生成器來生成Rollup Header,以啓用 Rollup 輕節點。
Rollup 輕節點可以通過單輪欺詐證明,間接檢查 Rollup交易的有效性。輕節點會對Rollup Header的生成者持樂觀態度,並在欺詐證明窗口期結束後進行最終確認。另一種可能是,它從誠實的全節點那裏接收到欺詐證明,得知Header生成者提交了有錯誤的數據。
我不打算在此文詳細介紹單輪欺詐證明的工作原理,因爲這超出了本文涉及的範圍。單輪欺詐證明的好處是可以將欺詐證明窗口期從7天縮短到一定程度,具體的數值有待確定,但數量級比傳統的樂觀rollup更小。輕節點可以通過Rollup全節點組成的P2P網絡獲取欺詐證明,而不需要等待後續的爭議過程,因爲所有的判據都在單個欺詐證明中完整的提供了。
上述Rollup模型使用 DA層作爲聚合器,並繼承了它的審查抗性。此時的DA層負責包含和排序交易。中心化的Header生成者將從DA層中讀取Rollup交易序列,並據此構建對應的Rollup Header。Header生成者將把Header和Stateroot發布到 DA層。這些Stateroot是創建欺詐證明時所必需的。簡而言之,聚合器負責包含和排序交易,Header生成器會執行交易更新狀態得到Stateroot。
假設DA層(此時它也充當了Rollup的聚合器)是足夠去中心化的,並具有良好的抗審查性。此外,Header生成器不能更改聚合器發布的Rollup交易序列。現在,如果將Header生成器去中心化,帶來的唯一好處是更好的活性,但Rollup的其他屬性與第一種變體Based Rollup相同。
如果Header生成器發生活性故障,Rollup 也會發生活性故障。輕節點將無法跟進Rollup账本的進度,但全節點可以。此時,變體4所描述的Rollup退化成了變體1描述的Based Rollup。顯然,變體4描述的信任最小化最低配置是:
DA層輕節點+Rollup輕節點。
變體5:Based ZK-Rollup和去中心化的Prover Market
我們已經討論了悲觀Rollup(Based Rollup)和樂觀Rollup,現在是時候考慮ZK-Rollup了。最近Toghrul做了一個關於聚合器(Sequencer)和Header生成器(Prover)分離的演講(Sequencer-Prover Separation in Zero-Knowledge Rollups)。在這種模型中,將交易作爲Rollup數據而非State Diff進行發布要更容易處理,所以我會着重於討論前者。變體5是一個基於zk-rollup的去中心化Prover Market。
到目前爲止,你應該對Rollup的工作原理比較熟悉了。變體5將聚合器角色委托給了DA層節點,由後者進行包含和排序交易的工作。我會引用 Sovereign-Labs 的文檔,它對變體5中一筆交易的生命周期進行了很好的解釋:
用戶發布一個新的數據塊到L1鏈(DA層)上。一旦這些數據塊在L1鏈上被最終確定,它就在邏輯上具備最終性(不可更改)。L1鏈的區塊進入最終確定階段(就是不可回滾)後,Rollup的全節點會掃描這些區塊,按照次序處理所有與Rollup有關的數據塊,生成最新的Rollup狀態根Stateroot。此時,從Rollup全節點的角度來看,這些數據塊已經完成了最終確定。
在這個模型中,Header生成者由去中心化的Prover Market充當。
Prover證明者節點(在ZKVM內運行的全節點)的工作過程與普通的Rollup全節點有類似的地方——掃描DA層區塊鏈並按次序處理所有Rollup交易批次——生成對應的零知識證明並將其發布到DA層鏈上。(如果Rollup系統想激勵Prover證明者,要讓後者將生成的ZK證明發到DA層鏈上,否則就無法確定哪個Prover率先提交了ZK證明)。一旦某個交易批次對應的ZK證明被發布到鏈上,該交易批次在全體Rolup節點(包括輕節點)眼中就完成了最終確定。
變體5具備和DA層一樣的抗審查性。去中心化的Prover Market不能對Rollup交易展开審查,因爲DA層上已經確定了規範的交易次序,只是爲了獲得更好的活性及創建激勵市場,所以才將Header生成器(這裏指Prover)去中心化。
這裏的活性是 L = L_da && L_pm(Prover的活性)。如果Prover Market的激勵不一致,或者出現活性故障,Rollup輕節點將無法同步區塊鏈進度,但Rollup的全節點可以,對於全節點而言,這只不過又回退到了變體1所說的Based Rollup/悲觀Rollup。這裏的信任最小化最低配置與樂觀Rollup情況下相同,即
DA層輕節點+Rollup輕節點。
變體6:混合型Based Rollup+中心化的樂觀Header生成者+去中心化Prover
我們仍然讓DA層節點充當Rollup的聚合器,並委托其進行包含和排序交易的工作。
正如你從下圖中看到的,ZK Rollup 和樂觀Rollup都採用DA層上相同的有序交易批次,作爲Rollup账本來源。這是我們可以同時使用兩個證明系統的原因:DA層上的有序交易批次本身並不受證明系統的影響。
先談一下最終性。從 Rollup 全節點的角度來看,當 DA層自身的區塊完成最終敲定時,其包含的Rollup交易批次也是最終確定不可更改的了。但是我們更關心輕節點視角下的最終性。假設中心化的Header生成者抵押了一些資產,並在生成的Rollup Header上籤名,連帶將計算出的Stateroot提交到 DA層。
與前面的變體4一樣,輕節點將樂觀地信任Header生成者,相信它發布的Header沒錯,並等待來自全節點網絡的欺詐證明。如果欺詐證明的窗口期結束了,全節點網絡還沒發布欺詐證明,從 Rollup 輕節點的角度來看,Rollup 區塊就完成了最終確定。
關鍵之處在於,如果我們可以獲得一個 ZK證明,就不必再等待欺詐證明窗口期結束。除了單輪欺詐證明,我們可以用ZK證明取代欺詐證明,並丟掉惡意的Header生成器生成的錯誤Header!
當輕節點接收到對應某個Rollup交易批次的ZK證明時,這個批次就會完成最終確定。
現在我們有了快速的Soft Commitment和快速的最終性Finality。
變體6仍然具有與 DA層等同的抗審查性,因爲它是基於 DA層的。對於活性,我們將有 L = L_da && (L_op || L_pm),這意味着我們增加了活性保證。如果中心化的Header生成器或去中心化的Prover Market二者之一有活性故障,我們可以退化到二者中的另一種方案。
此種變體中,用戶信任最小化的最低配置是:
一個 DA層輕節點 + 一個 Rollup 輕節點。
摘要:
1.我們將Rollup的關鍵角色——定序器Sequencer拆分爲兩個邏輯成分:
聚合器和Header生成器。
2.我們將Sequencer的工作分爲三個邏輯過程:包含、排序和執行。
3.悲觀rollup和based rollup 是一種東西。
4.根據需求,您可以選擇不同的聚合器和Header生成器方案。
5.這篇文章中介紹的每個Rollup變種都遵循了相同的設計模式:
最後,我還有一些想法。請您思考:
經典的Rollup(指以太坊Rollup)如何歸類到上述的變體之中?
在所有變體中,我們只讓聚合器負責包含+排序,Header生成器來執行交易。如果聚合器僅負責包含交易,Header生成器負責排序和執行交易,該怎么做?考慮到引入鏈上拍賣步驟,我們可以把這三步工作徹底分开嗎?
什么是共享Header生產者/Header Producer Market?
誰捕獲了MEV價值?用戶能把它拿回來嗎?
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。