原文作者| Taiko Labs
編譯| Odaily星球日報( @OdailyChina )
譯者| 叮噹( @XiaMiPP )
編按:還記得當年分片(Sharding)的熱鬧嗎?那時候它可是區塊鏈界的“流量密碼”,結果以太坊冷靜一想,放棄了這個燙手山芋。如今,本地 Rollup 捲土重來,透過執行預編譯合約(EXECUTE Precompile)和優化以太坊區塊處理結構,不僅讓 Rollup 更安全、更靈活,還順手給以太坊L1來了個橫向大擴容,為未來的實時證明開了條路。
以下為 Taiko 實驗室發布的原文內容,由Odaily星球日報編譯。由於本文的技術性較強,為確保文章的可讀性,Odaily 進行了適當的刪減,盡可能清晰易懂呈現。
引言
分片(Sharding)在 2017-2020 年間是個熱門話題。當時,Harmony、Zilliqa 和 Elrond 等不同團隊在其區塊鏈中實施了分片技術。這種技術本質上是將網路劃分為多個較小的、並行運行的鏈(稱為「分片」),這些分片可以同時處理交易,以此作為擴展分散式系統的一種直接方式。
分片也是以太坊 2.0 時代被社群認真討論的話題。然而,以太坊最終決定不採用分片方案,主要基於以下四個挑戰:
1. 思維模式的不同(Mindset Differentiations)
在這種分片模式下,協議本身會自上而下強制規定確切的分片數量。這些分片是按照預先定義模板運行的單一鏈,缺乏可編程性,本質上只是L1(第一層區塊鏈)的多個相同副本。
2. 樂觀安全性(Optimistic Security)
當時,為了確保分片的誠實性,需要使用樂觀證明(Optimistic Proofs),而零知識(ZK)技術尚未成熟。這意味著必須在鏈上系統性地管理詐欺證明(Fraud-Proof)邏輯。
3. 複雜性(Complexity)
在L1 層實現分片會顯著增加協定的複雜性,特別是在管理快速的預確認(Preconfirmation)和較慢的最終確認(Final Confirmation)系統,以及協調不同安全等級的分片方面。
4. 共識過載(Overload Consensus)
在L1 層追求更高的可擴展性可能會增加中心化風險。如果在基礎層(Base Layer)實現分片,這種風險可能會影響整個協議,而不像現在那樣僅限於單一L2(第二層擴展方案)。
本地Rollup(Native Rollups)本質上可以被視為分片的一種回歸,但這次有所不同。我們已經吸取了教訓,並且具備了更好的技術和經驗。
什麼是本地Rollup?
需要記住,Rollup 由資料、排序(Sequencing)和執行(Execution)模組組成。本地Rollup 直接使用以太坊本身的執行環境(Execution Environment)作為其執行模組。我們可以將其稱為L1 的可程式執行分片( Programmable Execution Shards )。
要理解如何將L1 執行環境當作Rollup 使用,可能會有些複雜。為了在Rollup 中消費L1 執行環境,我們需要能夠在EVM 內部執行另一個EVM(EVM inside EVM)。因此,L1 需要能夠感知本地Rollup 在每個區塊中的狀態轉換(State Transition)。要實現這一點,我們需要一個<預編譯合約(Precompile)>來提供支援。
EXECUTE 預編譯合約
EXECUTE預編譯合約提供了一個機制,使得一個EVM 上下文能夠驗證另一個EVM 上下文的執行結果,同時保持相同的執行規則和狀態轉換邏輯。
預編譯合約接受三個輸入參數:
pre_state:執行前的32 位元組狀態根(State Root)
post_state:執行後的32 位元組狀態根
witness_trace:執行軌跡,包含交易和狀態存取證明
預編譯合約的核心是斷言(Assertion) :它會驗證從pre_state 開始執行trace 是否能得到post_state。如果狀態轉換函數有效,預先編譯組合會傳回true。
執行軌跡需要對所有驗證者可用(以blobs 或calldata 形式),以便驗證者可以重新執行計算並驗證狀態轉換的正確性。值得注意的是,該預編譯合約不會將證明(Proof)作為輸入。這意味著協議本身不會強制執行任何特定的證明系統,而是透過p2p 網路的Gossip 頻道傳播不同類型的證明。
Gas 計費模型
以太坊的運算資源有限,因此Gas 機制用於管理這些資源。 EXECUTE 預編譯合約實作了一個Gas 計費模型來管理運算資源:
基本成本(Base Cost ) :預編譯合約會收取固定的Gas 費用EXECUTE_GAS_COST ,再加上執行軌跡使用的Gas 乘以目前Gas 價格。
累計Gas 限制( Cumulative Gas Limit ) :類似於EIP-1559 機制,管理和定價所有EXECUTE 調用在L1 區塊中的總Gas 消耗:
EXECUTE_CUMULATIVE_GAS_LIMIT:一個區塊中所有EXECUTE 呼叫的最大Gas 限制。
EXECUTE_CUMULATIVE_GAS_TARGET:目標Gas 使用量,以便進行高效定價。
這個模型類似於 blob 中的資料可用性(DA)定價機制。
需要記住,本地Rollup 和L1 的SNARK 化(SNARKifying the L1)這兩個概念經常被混淆在一起。 SNARK 化L1 是一種縱向擴展(Vertical Scaling )方法,透過SNARK 化執行(如zkEVM)和共識(如Beam)來消除Gas 限制,從而提升L1 的效能。而本地Rollup 則是橫向擴展( Horizontal Scaling )L1,透過可程式化方式建立任意數量的EVM 副本,實現更高的可擴展性。
為什麼本地Rollup 更有優勢?
1. 安全性
目前的Rollup 設計需要安全委員會(Security Councils)來更新鏈,以應對潛在的漏洞。而本地Rollup 則依賴以太坊的<社會共識(Social Consensus)>進行治理。營運商無需擔心擔心漏洞問題,因為以太坊社群會負責維護和修復。
2. 簡化L1 同步可組合性(Synchronous Composability)
基於L1 的Rollup 接近實現同步可組合性,但要求L1 和L2 的區塊由同一建構者(Builder)同時建構。本地Rollup 可以直接透過EXECUTE 預編譯合約驗證另一個本地Rollup 的狀態,而無需額外的信任假設。
3. 向前相容性(Forward Compatibility)
隨著L1 EVM 進化,本地Rollup 會自動繼承所有改進,而不需要單獨適配,實現與以太坊發展路線的長期相容性。
初始實作方案:重新執行
在本機Rollup 的背景下,重新執行(Re-execution)被視為初始實作方案。重新執行指的是驗證者直接執行交易軌跡(transaction trace) ,以驗證本地Rollup 的狀態轉換是否有效,而不是依賴SNARK 證明。如果EXECUTE_CUMULATIVE_GAS_LIMIT維持在較小範圍內,這種重新執行對於驗證者來說仍然是可管理的。
優化執行方案:即時證明(Real-Time Proving)
在重新執行(Re-execution)模式下,驗證者必須自行處理所有交易,其吞吐量受EXECUTE_CUMULATIVE_GAS_LIMIT參數的限制。而<即時證明(Real-time Proofs)>可以顯著提高這一限制,因為驗證者只需驗證證明,而無需重新執行所有交易。
隨著產業快速向即時證明發展,我們需要採取措施擴大本地Rollup 的證明窗口。為了爭取更多的證明時間,需要調整目前以太坊的區塊處理結構。
如何延長證明窗口?
目前以太坊的區塊處理流程
在現有的結構下,以下所有步驟必須在 12 秒內完成(每 4 秒一個階段),才能進入下一個區塊:
區塊N 提議交易
在驗證/確認區塊之前,必須完成:
執行所有交易
計算狀態變更
計算狀態根(stateRoot)
計算交易回執和日誌(receipts logs)
只有完成上述所有步驟後,區塊才能被驗證和確認。
依照目前的流程,如果要實現與L1 的同步可組合性,證明必須在4 秒內完成。然而,目前ZK 技術尚未成熟,還無法在4 秒內產生以太坊區塊的證明,因此我們需要在證明流程上引入更大的彈性。
為了給本地Rollup 爭取更多證明時間,我們需要調整以太坊目前的區塊處理結構。例如:
延遲state_root 計算:將state_root 計算從關鍵路徑中移除,使其在驗證者空閒時間計算。
延遲執行(Delayed Execution):將區塊驗證與交易執行分離,優化共識效率,同時為證明產生提供更長時間。
常見問題(FAQ)
Taiko 將使用哪種類型的證明?
不會採用單一類型的證明。我們希望證明者(provers)和客戶端(clients)都具有多樣性。驗證者可以根據自身選擇主觀決定使用哪一種證明方式。
關於不同證明類型的多樣性,請參閱EthProofs。
誰來生成證明?
任何人都可以產生證明。即使只有一個證明者,鏈仍然可以正常運作。目前仍存在一個開放性問題:如何在協議層面激勵證明者。
證明之間是否會達成共識?
不會。證明不會在鏈上進行共識,而是透過鏈下(off-chain)傳播。網路中只需要達成共識,某個地方有有效的證明。