我並不打算在這篇文章裡詳細敘述ZK 和Optimistic Rollups 的運作原理,如果我要花時間去解釋Rollups 的本質,那麼這篇文章將會過於冗長。所以這篇文章是基於你已經對這些技術有一定的了解,當然你不需要是專家,但至少應該知道ZK 和Optimistic Rollups 是什麼以及他們大概的運作機制。無論如何,請盡情享受閱讀本文。
我們先從Optimistic Rollup 開始談起
混合了ZK 和Optimistic Rollup 的系統最初是以Optimism 的Bedrock 架構為藍本的Optimistic Rollup。 Bedrock 被設計成與以太坊最大程度的兼容(「EVM 等效」),這是通過運行一個幾乎與以太坊客戶端完全相同的執行客戶端來實現的。 Bedrock 利用以太坊即將到來的共識/執行客戶端分離模型,顯著減小了與EVM 的差異(當然這過程中總會有一些變化,但我們可以處理)。
和所有優秀的Rollup 一樣,Optimism 從以太坊中提取區塊/交易數據,然後在共識客戶端中以某種確定的方式對這些數據進行排序,並將這些數據饋送到L2 執行客戶端進行執行。這種架構解決了”理想的Rollup”謎題的前半部分,並為我們提供了一個等效於EVM 的L2。
當然,我們現在還需要解決的問題是:以可驗證的方式將Optimism 內部發生的事情告訴以太坊。如果這個問題沒有解決,智能合約就無法根據Optimism 的狀態來做決定。這將意味著用戶可以向Optimism 存款,但無法提取他們的資產。雖然某些情況下單向Rollup 是可以實現的,但在大部分情況下,雙向Rollup 更為有效。
通過提供對該狀態的某種承諾,以及證明該承諾是正確的證據,我們就可以將所有Rollup 的狀態告知給以太坊。換句話說,我們正在證明「Rollup 程序」被正確執行。 ZK 和Optimistic Rollups 之間的唯一實質性區別就是這個證明的形式。在ZK Rollup 中,你需要提供一個明確的零知識證明來證明程序的正確執行。而在Optimistic Rollup 中,不提供明確的證據就可以對承諾做出聲明,通過挑戰和質疑你的聲明,其他用戶可以強制你參與一場來回推敲和挑戰的「遊戲」,以此確定最終誰是對的。
我並不打算詳細講述Optimistic Rollup 的挑戰部分。值得注意的是,這個環節的最新技術是將你的程序(在Optimism 的情況下是Geth EVM + 一些邊緣的部分)編譯成一些簡單的機器架構,如MIPS。我們這樣做是因為我們需要在鏈上建立一個程序的解釋器,而建立一個MIPS 解釋器比建立一個EVM 解釋器要容易得多。 EVM 也是一個不斷變化的目標(我們有定期的升級分叉),而且且並不能完全包含我們想要證明的程序(裡面也有一些非EVM 的東西)。
一旦你為你的簡單機器架構構建了一個鏈上的解釋器,並且創建了一些離線工具,你就應該有一個完全功能的Optimistic Rollup。
轉向ZK Rollup
總的來說,我堅信Optimistic Rollups 將在接下來的幾年中佔據主導地位。有人認為ZK Rollups 最終會超越Optimistic Rollups,但我並不同意這種看法。我覺得Optimistic Rollups 當前的相對簡單性和靈活性意味著它們可以逐漸轉變為ZK Rollups。如果我們能找到一種模式來實現這種轉變,那麼就沒必要費力去建立一個更不靈活、更脆弱的ZK 生態系統,我們可以簡單地部署到一個已經存在的Optimistic Rollup 生態系統中。
因此,我的目標是創建一種架構和遷移路徑,使現有的現代OP 生態系統(比如Bedrock)能夠無縫地轉變為ZK 生態系統。我相信這不僅是可行的,而且是一種超越當前zkEVM 方法的方式。
我們首先從我前文中描述的Bedrock 架構開始。請注意,我已經(簡短地)解釋過,Bedrock 設有一個挑戰遊戲,可以驗證L2 程序(運行EVM + 一些額外內容的MIPS 程序)某些執行的有效性。這種方法的一個主要缺點是,我們需要預留一段時間,讓用戶有機會檢測到並成功挑戰一個錯誤的程序結果提案。這會在資產提取過程中增加相當多的時間(在當前的Optimism 主網上是7 天)。
然而,我們的L2 只不過是一個在簡單機器(比如MIPS)上運行的程序。我們完全有可能為這種簡單的機制構建一個ZK 電路。然後,我們可以利用這個電路來明確地證明L2 程序的正確執行。在不對當前的Bedrock 代碼庫做任何修改的情況下,你就可以開始為Optimism 發布有效性證明了。實際操作起來就是這麼簡單。
為什麼這個方法可靠?
簡單澄清一下:雖然在這一部分,我提到了”zkMIPS”,但實際上我是把它作為代表所有通用且簡化的零知識證明虛擬機(zkVM)的術語。
zkMIPS 比zkEVM 更容易
構建一個zkMIPS(或其他任何類型的zk 虛擬機)相比zkEVM 有一個重大優勢:目標機器的架構簡單且靜態。 EVM 經常發生變化,Gas 價格會調整,操作碼也會改變,一些元素會被添加或移除。而MIPS-V 自1996 年以來就沒有改變過。將焦點集中在zkMIPS 上,你就在處理一個固定的問題空間。每當EVM 更新時,你都無需更改甚至重新審核你的電路。
zkMIPS 比zkEVM 更靈活
另一個關鍵觀點是,zkMIPS 比zkEVM 更具靈活性。通過zkMIPS,你可以隨心所欲地更改客戶端代碼,執行各種優化,或者改進用戶體驗,而無需對應的電路更新。你甚至可以創建一個核心組件,將任何區塊鏈變為ZK Rollup,而不僅僅是以太坊。
你的任務轉變成了證明時間
零知識證明的時間沿著兩個軸度進行擴展:約束的數量和電路的大小。通過專注於像MIPS 這樣的簡單機器的電路(而不是像EVM 這樣的更複雜的機器),我們能夠顯著減少電路的大小和復雜度。然而,約束的數量取決於執行的機器指令的數量。每個EVM 操作碼都被分解成多個MIPS 操作碼,這意味著約束的數量顯著增加,你的總體證明時間也顯著增加。
然而,減少證明時間也是一個深植於Web2 領域的問題。考慮到MIPS 機器架構短期內不太可能改變,我們可以高度優化電路和證明器,而不必考慮EVM 的未來變化。我對僱傭一位資深硬件工程師來優化一個明確定義的問題感到非常自信,這樣的工程師的數量可能是構建和審核一個不斷變化的zkEVM 目標的工程師數量的十倍甚至百倍。諸如Netflix 這樣的公司可能有大量的硬件工程師在優化轉碼芯片,他們很可能願意用一堆風險投資基金來迎接這個有趣的ZK 挑戰。
像這樣的電路的初始證明時間可能超過了7 天的Optimistic Rollup 提款期。隨著時間的推移,這個證明時間只會減少。通過引入ASIC 和FPGA,我們可以顯著加快證明時間。有了一個靜態的目標,我們可以構建更優化的證明器。
最終,這個電路的證明時間會低於當前的7 天Optimism 提款期,我們可以開始考慮移除Optimism 的挑戰過程。運行一個證明器7 天可能仍然過於昂貴,所以我們可能會希望再等一段時間,但是這一點是站得住腳的。你甚至可以同時運行兩種證明系統,這樣我們可以盡快開始使用ZK 證明,並在證明器出於任何原因失敗時回到Optimism 證明。準備好的時候,可以以完全透明於應用程序的方式去除Optimism 證明,於是,你的Optimistic Rollup 就變成了ZK Rollup。
你可以去關心其他重要的問題
運行一個區塊鍊是一個複雜的問題,它不僅僅涉及到編寫大量的後端代碼。在Optimism,我們的許多工作都集中在通過提供有用的客戶端工具來提高用戶和開發者的體驗。我們也在「軟性」問題上投入了大量的時間和精力:與項目進行對話,理解他們的痛點,設計激勵機制。你在鏈軟件上投入的時間越多,就越沒有時間去處理這些其他事情。雖然你總可以試圖僱傭更多的人,但組織並不是線性擴展的,每一個新的僱員都會增加內部的溝通成本。
由於零知識電路的工作可以直接應用在已經運行的鏈上,你可以同時進行核心平台的構建和證明軟件的開發。由於客戶端可以在不改變電路的情況下進行修改,你可以解耦你的客戶端和證明團隊。採用這種方式的Optimistic Rollup 可能在實際鏈上的活動方面比零知識競爭者領先多年。
結論
非常坦白地說,我認為zkMIPS 證明器沒有任何明顯的不足,除非它不能隨著時間大幅優化。我認為對應用的唯一真正影響是,可能需要調整不同操作碼的gas 成本,以反映這些操作碼增加的證明時間。如果真的無法將此證明器優化到合理的水平,那麼我承認我失敗了。但如果真的可以優化這個證明器,那麼zkMIPS/zkVM 的方法可能會完全取代現在的zkEVM 方法。這聽起來可能是一種激進的說法,但不久前,單步樂觀故障證明已經完全被多步證明所取代。