WEEX 唯客博客, 原文標題:《Possible futures of the Ethereum protocol, part 6: The Splurge》作者:Vitalik Buterin編譯:zhouzhou,BlockBeats 以下為原文內容(為便於閱讀理解,原內容有所整編): 有些事物很難歸入單一類別,在以太坊協議設計中,有許多「細節」對以太坊的成功非常重要。實際上,約一半的內容涉及不同類型的 EVM 改進,其餘部分則由各種小眾主題構成,這就是「繁榮」的意義所在。 2023 年路線圖:繁榮 繁榮:關鍵目標 將 EVM 變為高性能和穩定的「最終狀態」 將賬戶抽象引入協議,允許所有用戶享受更安全和便捷的賬戶 優化交易費用經濟,提高可擴展性同時降低風險 探索先進的密碼學,使以太坊在長期內顯著改善 本章內容 EVM 改進 賬戶抽象 EIP-1559 改進 VDF(可驗證延遲函數) 混淆和一次性簽名:密碼學的遠期未來 EVM 改進 解決了什麼問題?目前的 EVM 難以進行靜態分析,這使得創建高效實現、正式驗證代碼和進行進一步擴展變得困難。此外,EVM 的效率較低,難以實現許多形式的高級密碼學,除非通過預編譯顯式支持。 它是什麼,如何運作?當前 EVM 改進路線圖的第一步是 EVM 對象格式(EOF),計劃在下一個硬分叉中納入。EOF 是一系列 EIP,指定了一個新的 EVM 代碼版本,具有許多獨特的特徵,最顯著的是: ·代碼(可執行,但無法從 EVM 中讀取)與數據(可讀取,但無法執行)之間的分離 ·禁止動態跳轉,僅允許靜態跳轉 ·EVM 代碼無法再觀察與燃料相關的信息 ·添加了一種新的顯式子常式機制 EOF 代碼的結構 繁榮:EVM 改進(續) 舊式合約將繼續存在並可創建,儘管最終可能會逐步棄用舊式合約(甚至可能強制轉換為 EOF 代碼)。新式合約將受益於 EOF 帶來的效率提升——首先是通過子常式特性稍微縮小的位元組碼,隨後則是 EOF 特定的新功能或減少的 gas 成本。 在引入 EOF 后,進一步的升級變得更加容易,目前發展最完善的是 EVM 模塊算術擴展(EVM-MAX)。EVM-MAX 創建了一組專門針對模運算的新操作,並將其放置在一個無法通過其他操作碼訪問的新內存空間中,這使得使用諸如 Montgomery 乘法等優化成為可能。 一個較新的想法是將 EVM-MAX 與單指令多數據(SIMD)特性結合,SIMD 作為以太坊的一個理念已經存在很長時間,最早由 Greg Colvin 的 EIP-616 提出。SIMD 可用於加速許多形式的密碼學,包括哈希函數、32 位 STARKs 和基於格的密碼學,EVM-MAX 和 SIMD 的結合使得這兩種性能導向的擴展成為自然的配對。 一個組合 EIP 的大致設計將以 EIP-6690 為起點,然後: 允許 (i) 任何奇數或 (ii) 任何最高為 2768 的 2 的冪作為模數 對於每個 EVM-MAX 操作碼(加法、減法、乘法),添加一個版本,該版本不再使用 3 個立即數 x、y、z,而是使用 7 個立即數:x_start、x_skip、y_start、y_skip、z_start、z_skip、count。在 Python 代碼中,這些操作碼的作用類似於: ·for i in range(count):mem[z_start + z_skip * count] = op(mem[x_start + x_skip * count],mem[y_start + y_skip * count]) 實際實現中,這將以并行方式處理。 可能添加 XOR、AND、OR、NOT 和 SHIFT(包括循環和非循環),至少對於 2 的冪模數。同時添加 ISZERO(將輸出推送到 EVM 主堆棧),這將足夠強大以實現橢圓曲線密碼學、小域密碼學(如 Poseidon、Circle STARKs)、傳統哈希函數(如 SHA256、KECCAK、BLAKE)和基於格的密碼學。其他 EVM 升級也可能實現,但迄今為止關注度較低。 現有研究鏈接 EOF: https://evmobjectformat.org/ EVM-MAX: https://eips.ethereum.org/EIPS/eip-6690 SIMD: https://eips.ethereum.org/EIPS/eip-616 剩下的工作及權衡 目前,EOF 計劃在下一個硬分叉中納入。儘管總是有可能在最後一刻移除它——之前的硬分叉中曾有功能被臨時移除,但這樣做將面臨很大挑戰。移除 EOF 意味著未來對 EVM 的任何升級都需在沒有 EOF 的情況下進行,雖然可以做到,但可能更困難。 EVM 的主要權衡在於 L1 複雜性與基礎設施複雜性,EOF 是需要添加到 EVM 實現中的大量代碼,靜態代碼檢查也相對複雜。然而,作為交換,我們可以簡化高級語言、簡化 EVM 實現以及其他好處。可以說,優先考慮以太坊 L1 持續改進的路線圖應包括並建立在 EOF 之上。 需要做的一項重要工作是實現類似 EVM-MAX 加 SIMD 的功能,並對各種加密操作的 gas 消耗進行基準測試。 如何與路線圖的其他部分交互? L1 調整其 EVM 使得 L2 也能更容易地進行相應調整,如果二者不進行同步調整,可能會造成不兼容,帶來不利影響。此外,EVM-MAX 和 SIMD 可以降低許多證明系統的 gas 成本,從而使 L2 更加高效。它還使得通過用可以執行相同任務的 EVM 代碼替代更多的預編譯變得更加容易,可能不會大幅影響效率。 賬戶抽象 解決了什麼問題? 目前,交易只能通過一種方式進行驗證:ECDSA 簽名。最初,賬戶抽象旨在超越這一點,允許賬戶的驗證邏輯為任意的 EVM 代碼。這可以啟用一系列應用: ·切換到抗量子密碼學 ·輪換舊密鑰(廣泛被認為是推薦的安全實踐) ·多重簽名錢包和社交恢複錢包 ·使用一個密鑰進行低價值操作,使用另一個密鑰(或一組密鑰)進行高價值操作 允許隱私協議在沒有中繼的情況下工作,顯著降低其複雜性,並消除一個關鍵的中央依賴點 自 2015 年賬戶抽象提出以來,其目標也擴展到了包括大量「便利目標」,例如,某個沒有 ETH 但擁有一些 ERC20 的賬戶能夠用 ERC20 支付 gas。以下是這些目標的匯總圖表: MPC(多方計算)是一種已有 40 年歷史的技術,用於將密鑰分成多個部分並存儲在多個設備上,利用密碼學技術生成簽名,而無需直接組合這些密鑰部分。 EIP-7702 是計劃在下一個硬分叉中引入的一項提案,EIP-7702 是對提供賬戶抽象便利性以惠及所有用戶(包括 EOA 用戶)的日益認識的結果,旨在在短期內改善所有用戶的體驗,並避免分裂成兩個生態系統。 該工作始於 EIP-3074,並最終形成 EIP-7702。EIP-7702 將賬戶抽象的「便利功能」提供給所有用戶,包括今天的 EOA(外部擁有賬戶,即受 ECDSA 簽名控制的賬戶)。 從圖表中可以看到,雖然一些挑戰(尤其是「便利性」挑戰)可以通過漸進技術如多方計算或 EIP-7702 解決,但最初提出賬戶抽象提案的主要安全目標只能通過回溯並解決原始問題來實現:允許智能合約代碼控制交易驗證。迄今為止尚未實現的原因在於安全地實施,這一點是一項挑戰。 它是什麼,如何運作? 賬戶抽象的核心是簡單的:允許智能合約發起交易,而不僅僅是 EOA。整個複雜性來自於以一種對維護去中心化網路友好的方式實現這一點,並防範拒絕服務攻擊。 一個典型的關鍵挑戰是多重失效問題: 如果有 1000 個賬戶的驗證函數都依賴於某個單一值 S,並且當前值 S 使得內存池中的交易都是有效的,那麼有一個單一交易翻轉 S 的值可能會使內存池中的所有其他交易失效。這使得攻擊者能夠以極低的成本向內存池發送垃圾交易,從而堵塞網路節點的資源。 經過多年的努力,旨在擴展功能的同時限制拒絕服務(DoS)風險,最終得出了實現「理想賬戶抽象」的解決方案:ERC-4337。 ERC-4337 的工作原理是將用戶操作的處理分為兩個階段:驗證和執行。所有驗證首先被處理,所有執行隨後被處理。在內存池中,只有當用戶操作的驗證階段只涉及其自身賬戶並且不讀取環境變數時,才會被接受。這可以防止多重失效攻擊。此外,對驗證步驟也強制實施嚴格的 gas 限制。 ERC-4337 被設計為一種額外協議標準(ERC),因為在當時以太坊客戶端開發者專註於合併(Merge),沒有額外的精力來處理其他功能。這就是為什麼 ERC-4337 使用了名為用戶操作的對象,而不是常規交易。然而,最近我們意識到需要將其中至少部分內容寫入協議中。 兩個關鍵原因如下: 1.EntryPoint 作為合約的固有低效性:每個捆綁約有 100,000 gas 的固定開銷,以及每個用戶操作額外的數千 gas。 2. 確保以太坊屬性的必要性:如包含列表所創建的包含保證需要轉移到賬戶抽象用戶。 此外,ERC-4337 還擴展了兩個功能: ·支付代理(Paymasters):允許一個賬戶代表另一個賬戶支付費用的功能,這違反了驗證階段只能訪問發送者賬戶本身的規則,因此引入了特殊處理以確保支付代理機制的安全性。 ·聚合器(Aggregators):支持簽名聚合的功能,如 BLS 聚合或基於 SNARK 的聚合。這對於在 Rollup 上實現最高的數據效率是必要的。 現有研究鏈接 關於賬戶抽象歷史的演講:https://www.youtube.com/watch?v=iLf8qpOmxQc ERC-4337:https://eips.ethereum.org/EIPS/eip-4337 EIP-7702:https://eips.ethereum.org/EIPS/eip-7702 BLSWallet 代碼(使用聚合功能):https://github.com/getwax/bls-wallet EIP-7562(寫入協議的賬戶抽象):https://eips.ethereum.org/EIPS/eip-7562 EIP-7701(基於 EOF 的寫入協議賬戶抽象):https://eips.ethereum.org/EIPS/eip-7701 剩下的工作及權衡 目前主要需要解決的是如何將賬戶抽象完全引入協議,最近受到歡迎的寫入協議賬戶抽象 EIP 是 EIP-7701,該提案在 EOF 之上實現賬戶抽象。一個賬戶可以擁有一個單獨的代碼部分用於驗證,如果賬戶設置了該代碼部分,則該代碼將在來自該賬戶的交易的驗證步驟中執行。 這種方法的迷人之處在於,它清晰地表明了本地賬戶抽象的兩種等效視角: 1. 將 EIP-4337 作為協議的一部分 2. 一種新的 EOA 類型,其中籤名演算法為 EVM 代碼執行 如果我們從對驗證期間可執行代碼複雜性設定嚴格界限開始——不允許訪問外部狀態,甚至在初期設定的 gas 限制也低到對量子抗性或隱私保護應用無效——那麼這種方法的安全性就非常明確:只是將 ECDSA 驗證替換為需要相似時間的 EVM 代碼執行。 然而,隨著時間的推移,我們需要放寬這些界限,因為允許隱私保護應用在沒有中繼的情況下工作,以及量子抗性都是非常重要的。為此,我們需要找到更靈活地解決拒絕服務(DoS)風險的方法,而不要求驗證步驟必須極度簡約。 主要的權衡似乎是「快速寫入一種讓較少人滿意的方案」與「等待更長時間,可能獲得更理想的解決方案」,理想的方法可能是某種混合方法。一種混合方法是更快地寫入一些用例,並留出更多時間來探索其他用例。另一種方法是在 L2 上首先部署更雄心勃勃的賬戶抽象版本。然而,這面臨的挑戰是,L2 團隊需要對採用提案的工作充滿信心,才能願意進行實施,尤其是要確保 L1 和/或其他 L2 未來能夠採用兼容的方案。 我們還需要明確考慮的另一個應用是密鑰存儲賬戶,這些賬戶在 L1 或專用 L2 上存儲賬戶相關狀態,但可以在 L1 和任何兼容的 L2 上使用。有效地做到這一點可能要求 L2 支持諸如 L1SLOAD 或 REMOTESTATICCALL 的操作碼,但這也需要 L2 上的賬戶抽象實現支持這些操作。 它如何與路線圖的其他部分互動? 包含列表需要支持賬戶抽象交易,在實踐中,包含列表的需求與去中心化內存池的需求實際上非常相似,儘管對於包含列表來說靈活性稍大。此外,賬戶抽象實現應該儘可能在 L1 和 L2 之間實現協調。如果將來我們期望大多數用戶使用密鑰存儲 Rollup,賬戶抽象設計應以此為基礎。 EIP-1559 改進 它解決了什麼問題?EIP-1559 於 2021 年在以太坊上激活,顯著改善了平均區塊包含時間。 等待時間 然而,當前 EIP-1559 的實施在多個方面並不完美: 1. 公式略有缺陷:它並不是以 50% 的區塊為目標,而是針對約 50-53% 的滿區塊,這取決於方差(這與數學家所稱的「算術-幾何均值不等式」有關)。 2. 在極端情況下調整不夠迅速。 後面用於 blobs 的公式(EIP-4844)是專門設計來解決第一個問題的,整體上也更簡潔。然而,EIP-1559 本身以及 EIP-4844 都未嘗試解決第二個問題。因此,現狀是一個混亂的中間狀態,涉及兩種不同的機制,並且有一種觀點認為,隨著時間的推移,兩者都需要進行改進。 此外,還有其他與 EIP-1559 無關的以太坊資源定價的弱點,但可以通過對 EIP-1559 的調整來解決。其中一個主要問題是平均情況與最壞情況的差異:以太坊中的資源價格必須設置得能夠處理最壞情況,即一個區塊的全部 gas 消耗佔用一個資源,但實際的平均使用遠低於此,導致了低效。 什麼是多維 Gas,它是如何運作的? 解決這些低效問題的方案是多維 Gas:為不同資源設定不同的價格和限制。這個概念在技術上獨立於 EIP-1559,但 EIP-1559 的存在使得實現這一方案更為容易。如果沒有 EIP-1559,最優地打包一個包含多種資源約束的區塊就是一個複雜的多維背包問題。而有了 EIP-1559,大多數區塊在任何資源上都不會達到滿負荷,因此「接受任何支付足夠費用的交易」這樣簡單的演算法就足夠了。 目前我們已經有了用於執行和數據塊的多維 Gas;原則上,我們可以將其擴展到更多維度:如 calldata(交易數據),狀態讀取/寫入,和狀態大小擴展。 EIP-7706 引入了一種新的 gas 維度,專門針對 calldata。同時,它還通過將三種類型的 gas 統一到一個(EIP-4844 風格的)框架中,簡化了多維 Gas 機制,從而也解決了 EIP-1559 的數學缺陷。EIP-7623 是一種更為精準的解決方案,針對平均情況與最壞情況的資源問題,更嚴格地限制最大 calldata,而不引入整個新維度。 一個進一步的研究方向是解決更新速率問題,尋找一種更快速的基礎費用計算演算法,同時保留 EIP-4844 機制所引入的關鍵不變數(即:在長期內,平均使用量正好接近目標值)。 現有研究鏈接 EIP-1559 FAQ: EIP-1559 FAQ 關於 EIP-1559 的實證分析: Empirical analysis 允許快速調整的改進提案: Proposed improvements EIP-4844 FAQ 中關於基礎費用機制的部分: EIP-4844 FAQ EIP-7706: EIP-7706 EIP-7623: EIP-7623 多維 Gas: Multidimensional gas 剩下的工作和權衡是什麼? 多維 Gas 的主要權衡有兩個: 1. 增加協議複雜性:引入多維 Gas 會使協議變得更複雜。 2. 增加填充區塊所需的最優演算法複雜性:為了使區塊達到容量的最佳演算法也會變得複雜。 協議複雜性對於 calldata 來說相對較小,但對於那些在 EVM 內部的 Gas 維度(如存儲讀取和寫入)來說,複雜性就會增加。問題在於,不僅用戶設置 gas 限制,合約在調用其他合約時也會設置限制。而目前,它們設置限制的唯一方式是單維的。 一個簡單的解決方案是將多維 Gas 僅在 EOF 內部可用,因為 EOF 不允許合約在調用其他合約時設置 gas 限制。非 EOF 合約在進行存儲操作時需要支付所有類型 Gas 的費用(例如,如果 SLOAD 佔用區塊存儲訪問 gas 限制的 0.03%,那麼非 EOF 用戶也會被收取 0.03% 的執行 gas 限制費用)。 對多維 Gas 進行更多研究將有助於理解這些權衡,並找到理想的平衡點。 它如何與路線圖的其他部分互動? 成功實施多維 Gas 可以大大降低某些「最壞情況」的資源使用,從而減少優化性能的壓力,以支持例如 STARKed 哈希基礎的二叉樹等需求。對於狀態大小增長設定一個明確的目標,將使客戶端開發者在未來進行規劃和需求估算變得更加容易。 如前所述,EOF 的存在使得實現更極端版本的多維 Gas 變得更加簡單,因為其 Gas 不可觀察的特性。 可驗證延遲函數(VDFs) 它解決了什麼問題? 目前,以太坊使用基於 RANDAO 的隨機性來選擇提議者,RANDAO 的隨機性是通過要求每個提議者揭示他們提前承諾的秘密,並將每個揭示的秘密混合到隨機性中來工作的。 每個提議者因此有「1 位操控權」:他們可以通過不出現來改變隨機性(有成本)。這種方式對於尋找提議者來說是合理的,因為你放棄一個機會而獲得兩個新提議機會的情況非常少見。但對於需要隨機性的鏈上應用程序來說,這並不理想。理想情況下,我們應該找到一個更穩健的隨機性來源。 什麼是 VDF,它是如何運作的? 可驗證延遲函數是一種只能順序計算的函數,無法通過并行化加速。一個簡單的例子是重複哈希:for i in range(10**9): x = hash(x)。輸出結果,使用 SNARK 證明其正確性,可以用作隨機值。 這個思路是輸入基於時間 T 可用的信息進行選擇,而在時間 T 時輸出尚不可知:輸出只有在某人完全運行計算后才會在 T 之後的某個時刻可用。因為任何人都可以運行計算,所以不存在隱瞞結果的可能性,因此也沒有操控結果的能力。 可驗證延遲函數的主要風險是意外優化:有人發現以比預期更快的速度運行該函數,從而操控他們在時間 T 揭示的信息。 意外優化可以通過兩種方式發生: 1. 硬體加速:有人製造出比現有硬體更快運行計算循環的 ASIC。 2. 意外并行化:有人找到一種方法,通過并行化運行函數以更快的速度,即使這樣做需要 100 倍的資源。 創建成功的 VDF 的任務是避免這兩種問題,同時保持效率實用(例如,基於哈希的方法一個問題是實時對哈希進行 SNARK 證明需要重型硬體)。硬體加速通常通過一個公共利益參與者自行創建和分發接近最佳的 VDF ASIC 來解決。 現有研究鏈接 VDF 研究網站: vdfresearch.org 關於以太坊中 VDF 的攻擊思考,2018 年: Thinking on attacks 針對提議的 VDF MinRoot 的攻擊: Attacks against MinRoot 剩下的工作和權衡是什麼? 目前,沒有一種 VDF 構造能夠完全滿足以太坊研究人員在所有方面的要…