作者:以太坊研究員 Justin Drake,ethresearch;編譯:陶朱,金色財經(jīng)
這篇文章的功勞要歸功于更廣泛的以太坊研發(fā)社區(qū)。關(guān)鍵貢獻(xiàn)源自 2017 年,多年來設(shè)計有了重大的增量解鎖。最近的 zkVM 工程突破引發(fā)了徹底的設(shè)計空間探索。本文只是盡最大努力嘗試為一個可能終于到來的大創(chuàng)意拼湊出一個連貫的設(shè)計。
我們提出了一種優(yōu)雅而強大的 EXECUTE 預(yù)編譯,將原生 L1 EVM 執(zhí)行引擎暴露給應(yīng)用層。原生執(zhí)行匯總(簡稱“原生匯總”)是一種使用 EXECUTE 來驗證批量用戶交易的 EVM 狀態(tài)轉(zhuǎn)換的匯總??梢詫⒃鷧R總視為“可編程執(zhí)行分片”,將預(yù)編譯包裝在派生函數(shù)中以處理 EVM 外的系統(tǒng)邏輯,例如排序、橋接、強制包含、治理。
由于 EXECUTE 預(yù)編譯由驗證器直接執(zhí)行,因此它享有 (zk)EL 客戶端多樣性并提供 EVM 等效性,該等效性在構(gòu)造上無錯誤,并且與通過 L1 硬分叉進(jìn)行的 EVM 升級向前兼容。對于希望完全繼承以太坊安全性的 EVM 等效匯總,像 EXECUTE 預(yù)編譯這樣的 EVM 自省形式是必要的。我們將完全繼承以太坊安全性的匯總稱為“無需信任的匯總”。
EXECUTE 預(yù)編譯大大簡化了 EVM 等效匯總的開發(fā),因為無需復(fù)雜的基礎(chǔ)設(shè)施(例如防欺詐游戲、SNARK 電路、安全委員會)即可進(jìn)行 EVM 模擬和維護(hù)。使用 EXECUTE,只需幾行 Solidity 代碼,使用簡單的派生函數(shù)即可部署最小的原生匯總和基于匯總,從而無需對排序、強制包含或治理進(jìn)行特殊處理。
最重要的是,原生匯總可以享受實時結(jié)算,而無需擔(dān)心實時證明,從而大大簡化了同步可組合性。
本文分為兩部分,首先介紹擬議的預(yù)編譯,最后討論原生匯總。
EXECUTE 預(yù)編譯接受輸入 pre_state_root、post_state_root、trace 和 gas_used。當(dāng)且僅當(dāng)滿足以下條件時,它才返回 true:
trace 是格式良好的執(zhí)行跟蹤(例如 L2 交易列表和相應(yīng)的狀態(tài)訪問證明)
trace 的無狀態(tài)執(zhí)行從 pre_state_root 開始,在 post_state_root 結(jié)束
trace 的無狀態(tài)執(zhí)行恰好消耗 gas_used gas
有一種 EIP-1559 式機制,用于計量和定價 L1 區(qū)塊中所有 EXECUTE 調(diào)用所消耗的累計 gas。具體來說,有一個累計 gas 限制 EXECUTE_CUMULATIVE_GAS_LIMIT,以及一個累計 gas 目標(biāo) EXECUTE_CUMULATIVE_GAS_TARGET。(當(dāng) L1 EVM 可由驗證者無狀態(tài)執(zhí)行時,累計限制和目標(biāo)可以與 L1 EIP-1559 機制合并。)
調(diào)用預(yù)編譯需要花費固定數(shù)量的 L1 gas、EXECUTE_GAS_COST,加上 gas_used * gas_price,其中 gas_price(以 ETH/gas 計價)由 EIP-1559 式機制設(shè)置。即使預(yù)編譯返回 false,也會提取全額預(yù)付款。
跟蹤必須指向來自調(diào)用數(shù)據(jù)、blob、狀態(tài)或內(nèi)存的可用以太坊數(shù)據(jù)。
如果 EXECUTE_CUMULATIVE_GAS_LIMIT 足夠小,驗證器可以簡單地重新執(zhí)行跟蹤以強制執(zhí)行 EXECUTE 調(diào)用的正確性?;谥匦聢?zhí)行的預(yù)編譯的初始部署可以作為墊腳石,類似于原始 danksharding 的簡單重新下載 blob 到完整 danksharding。請注意,簡單的重新執(zhí)行不會給驗證器帶來狀態(tài)增長或帶寬開銷,并且任何執(zhí)行開銷都可以在 CPU 核心之間并行化。
驗證器必須持有跟蹤的明確副本以進(jìn)行重新執(zhí)行,從而防止使用通過 DAS 采樣(而不是下載)的 blob 數(shù)據(jù)的指針。請注意,樂觀的本機匯總可能仍會以 blob 的形式發(fā)布匯總數(shù)據(jù),僅在欺詐證明游戲中回退到調(diào)用數(shù)據(jù)。還要注意的是,樂觀的原生匯總可以具有遠(yuǎn)遠(yuǎn)超過 EXECUTE_CUMULATIVE_GAS_LIMIT 的 gas 限制,因為 EXECUTE 預(yù)編譯只需要在小型 EVM 段上調(diào)用一次即可解決欺詐證明挑戰(zhàn)。
作為歷史記錄,2017 年 Vitalik 提出了類似的“EVM inside EVM”預(yù)編譯 ,稱為 EXECTX。
要解鎖較大的 EXECUTE_CUMULATIVE_GAS_LIMIT,自然會讓驗證者選擇性地驗證 SNARK 證明。從現(xiàn)在開始,我們假設(shè)一個時隙延遲執(zhí)行,其中無效塊(或無效交易)被視為無操作。(有關(guān)延遲執(zhí)行的更多信息,請參閱此 ethresearch 帖子、此 EIP 和 Francesco 的此設(shè)計 。)一個時隙延遲執(zhí)行會產(chǎn)生幾秒鐘(整個時隙)用于證明。它們還避免激勵 MEV 驅(qū)動的證明競賽,這將引入集中化向量。
請注意,即使 EXECUTE 由 SNARK 強制執(zhí)行,也沒有明確的證明系統(tǒng)或電路被納入共識。(請注意,EXECUTE 預(yù)編譯不會將任何明確的證明作為輸入。)相反,每個質(zhì)押操作員都可以自由選擇他們最喜歡的 zkEL 驗證器客戶端,類似于今天主觀選擇 EL 客戶端的方式。下一節(jié)“鏈下證明”將解釋此設(shè)計決策的好處。
從現(xiàn)在開始,我們假設(shè)執(zhí)行提議者在具有交替執(zhí)行和共識時隙的證明者-提議者分離 (APS) 的背景下是成熟的。為了激勵理性的執(zhí)行提議者及時生成證明(在 1 個時隙內(nèi)),我們要求證明者僅在執(zhí)行塊 n 的證明可用時才證明執(zhí)行塊 n+1。(我們建議在 p2p 層將塊 n+1 與塊 n 的 EXECUTE 證明捆綁在一起。)跳過證明的執(zhí)行提議者可能會錯過他們的時隙,導(dǎo)致錯過費用和 MEV。我們進(jìn)一步對錯過的執(zhí)行時隙施加固定懲罰,將其設(shè)置得足夠高(例如 1 ETH)以始終超過證明的成本。
請注意,在 APS 的背景下,共識塊的生成不會因錯過的執(zhí)行時隙而受阻。然而,及時生成證明對于輕客戶端來說很重要,這樣他們就可以在鏈端輕松讀取狀態(tài),而無需無狀態(tài)重新執(zhí)行。為了確保及時為輕客戶端生成證明,即使在下一個執(zhí)行提議者錯過其時隙的特殊情況下,我們也依賴于利他少數(shù)證明者假設(shè)。單個利他證明者足以在 1 個時隙內(nèi)生成證明。為了避免不必要的冗余證明,大多數(shù)利他證明者可以等待待命,并且僅在 1 個時隙內(nèi)沒有證明到達(dá)時才啟動,從而充當(dāng)最多 2 個時隙延遲的故障安全措施。
請注意,EXECUTE_CUMULATIVE_GAS_LIMIT 需要設(shè)置得足夠低,以使利他少數(shù)證明者假設(shè)可信(以及使執(zhí)行提議不會不切實際地復(fù)雜化)。保守的策略可以是設(shè)置 EXECUTE_CUMULATIVE_GAS_LIMIT,以便筆記本電腦(例如高端 MacBook Pro)可以訪問單時隙證明。更務(wù)實和積極的政策可能是瞄準(zhǔn)一小部分 GPU,并且一旦它們充分商品化,最終可能會瞄準(zhǔn) SNARK ASIC 證明器。
重申一下,我們建議不要將 zkEL EXECUTE 證明放在鏈上,而是在鏈下共享。不保存證明是一個好主意,由 Vitalik 首次提出,它有幾個優(yōu)點:
多樣性:驗證者可以自由地從他們信任的開發(fā)團(tuán)隊中選擇證明驗證器(包括證明系統(tǒng)和電路),類似于驗證者選擇他們信任的 EL 客戶端的方式。這通過多樣性提供了穩(wěn)健性。zkEL 驗證器客戶端(以及一些客戶端的基礎(chǔ) zkVM)是復(fù)雜的加密軟件。任何一個客戶端中的錯誤都不應(yīng)該導(dǎo)致以太坊崩潰。
中立性:擁有 zkEL 驗證器客戶端市場允許共識層不選擇技術(shù)贏家。例如,zkVM 市場競爭激烈,選擇獲勝供應(yīng)商(如 Risc0、Succinct 或許多其他供應(yīng)商)可能不會被視為中立。
簡單性:共識層不需要包含特定的 SNARK 驗證器,從而大大簡化了共識層的規(guī)范。只需包含狀態(tài)訪問證明的格式,而不是特定的證明驗證器實現(xiàn)細(xì)節(jié)。
靈活性:如果發(fā)現(xiàn)錯誤或優(yōu)化,受影響的驗證者可以更新他們的客戶端,而無需硬分叉。
擁有鏈下證明確實會帶來一些可控的復(fù)雜情況:
證明負(fù)載和 p2p 碎片化:由于沒有單一的規(guī)范證明,因此需要生成多個證明(每個 zkEL 客戶端至少一個)。每個 zkEL 客戶端定制(例如將一個 RISC-V zkVM 換成另一個)都需要不同的證明。同樣,每個 zkEL 版本升級都需要不同的證明。這將導(dǎo)致證明負(fù)載增加。如果每個證明類型都有單獨的八卦渠道,它還會進(jìn)一步碎片化 p2p 網(wǎng)絡(luò)。
少數(shù) zkEL:很難激勵少數(shù) zkEL 生成證明。理性執(zhí)行提議者可能只會生成足夠的證明,以達(dá)到絕大多數(shù)證明者,而不會錯過他們的時段。為了解決這個問題,可以從社會上鼓勵質(zhì)押運營商并行運行多個 zkEL 客戶端,類似于今天的 Vouch 運營商。運行 k-of-n 設(shè)置還有提高安全性的額外好處,特別是可以防止健全性漏洞,這種漏洞允許攻擊者為任意 EXECUTE 調(diào)用制作證明(這種情況對于傳統(tǒng)的 EL 客戶端來說并不常見)。
鏈下證明還會降低實時結(jié)算 L2 的效率:
無替代 DA:由于 EXECUTE 的跟蹤輸入需要提供給 L1 驗證者,因此實時結(jié)算的 L2(即立即更新其規(guī)范狀態(tài)根的 L2)必須消耗 L1 DA,即匯總。請注意,通過欺詐證明游戲延遲結(jié)算的樂觀 L2 沒有此限制,即可以是有效值。
狀態(tài)訪問開銷:由于跟蹤必須是無狀態(tài)可執(zhí)行的,因此它必須包括讀取或?qū)懭氲臓顟B(tài) trie 葉子,這比典型的 L2 塊引入了少量 DA 開銷。請注意,樂觀 L2 沒有此限制,因為僅在欺詐證明挑戰(zhàn)中才需要狀態(tài) trie 葉子,挑戰(zhàn)者可以重新計算 trie 葉子。
無狀態(tài)差異:由于給定跟蹤,證明應(yīng)該是無需許可的,因此無法進(jìn)行匯總狀態(tài)差異。但是,如果相應(yīng)的專門證明被納入共識,則可以壓縮無狀態(tài)訪問證明或 EVM 交易簽名。
鑒于當(dāng)今事實上向 RISC-V zkVM 的趨同,可能有機會將 RISC-V 狀態(tài)轉(zhuǎn)換本地暴露給 EVM(類似于 Arbitrum Stylus 環(huán)境中的 WASM)并保持 SNARK 友好性。
我們首先討論原生 Rollup 的命名,以解決幾個容易引起混淆的問題:
替代名稱:原生匯總以前被稱為 enshrined 匯總。(術(shù)語“規(guī)范匯總”也曾在 Polynya 12 中短暫使用過。)術(shù)語“enshrined”后來被放棄,取而代之的是“原生”,以表明現(xiàn)有的 EVM 等效匯總可以選擇升級為原生?!霸边@個名字是 Dan Robinson 和一位希望保持匿名的 Lido 貢獻(xiàn)者于 2022 年 11 月獨立提出的。
基于匯總:基于匯總和原生匯總是正交概念:“基于”與 L1 排序有關(guān),而“原生”與 L1 執(zhí)行有關(guān)。同時基于和原生的匯總被異想天開地稱為“超音速匯總”。
執(zhí)行分片:執(zhí)行分片(即 L1 EVM 鏈的 enshrined 副本)是一個與原生匯總相關(guān)的不同但相關(guān)的概念,比原生匯總早幾年。 (執(zhí)行分片之前是以太坊 2.0 路線圖的“第 2 階段”。)與原生 rollup 不同,執(zhí)行分片不可編程,即沒有自定義治理、自定義排序、自定義 gas 代幣等選項。執(zhí)行分片通常也以固定數(shù)量實例化(例如 64 或 1,024 個分片)。不幸的是,Martin K?ppelmann 在 2024 年 Devcon 上關(guān)于執(zhí)行分片的演講中使用了“原生 L2”一詞 7。
Native Rollups 有幾個好處,我們將在下面詳細(xì)介紹:
簡單性:原生 rollup VM 的大部分復(fù)雜性都可以通過預(yù)編譯來封裝。如今,與 EVM 相當(dāng)?shù)?optimism 和 zk-rollup 有數(shù)千行代碼用于其欺詐證明游戲或 SNARK 驗證器,這些代碼可以壓縮為一行代碼。原生 rollup 也不需要輔助基礎(chǔ)設(shè)施,如證明網(wǎng)絡(luò)、瞭望塔和安全委員會。
安全性:構(gòu)建無錯誤的 EVM 欺詐證明游戲或 SNARK 驗證器是一項非常困難的工程任務(wù),可能需要深度形式驗證。如今,每個 optimism 和 zk EVM rollup 在其 EVM 狀態(tài)轉(zhuǎn)換函數(shù)中都很可能存在嚴(yán)重漏洞。為了防范漏洞,集中排序通常被用作控制對抗性區(qū)塊生產(chǎn)的拐杖。原生執(zhí)行預(yù)編譯允許安全部署無需許可的排序。完全繼承 L1 安全性的無需信任的 rollup 還完全繼承了 L1 資產(chǎn)可互換性。
EVM 等效性:如今,rollup 與 L1 EVM 規(guī)則保持同步的唯一方法是讓治理(通常是安全委員會和/或治理代幣)鏡像 L1 EVM 升級。(EVM 更新仍然通過大約每年一次的硬分叉定期進(jìn)行。)治理不僅是一種攻擊媒介,嚴(yán)格來說,它背離了 L1 EVM,并阻止任何 rollup 實現(xiàn)真正的長期 EVM 等效性。另一方面,原生 rollup 可以與 L1 同步升級,無需治理。
SNARK gas 成本:在鏈上驗證 SNARK 的成本很高。因此,許多 zk-rollup 很少結(jié)算以盡量降低成本。由于 SNARK 未在鏈上驗證,因此可以使用 EXECUTE 預(yù)編譯來降低驗證成本。如果使用 SNARK 遞歸對一個塊中多個調(diào)用的 EXECUTE 證明進(jìn)行批處理,則 EXECUTE_GAS_COST 可以設(shè)置得相對較低。
同步可組合性:如今,與 L1 的同步可組合性需要同槽實時證明。對于 zk rollups 來說,實現(xiàn)超低延遲證明(例如 100 毫秒左右)是一項特別具有挑戰(zhàn)性的工程任務(wù)。使用單槽延遲狀態(tài)根,可以將本機執(zhí)行預(yù)編譯的證明延遲放寬到一個完整槽。
登載此文出于傳遞更多信息之目的,并不意味著贊同其觀點或證實其描述。文章內(nèi)容僅供參考,不構(gòu)成投資建議。投資者據(jù)此操作,風(fēng)險自擔(dān)。