原文: Multidimensional gas pricing
編譯:Odaily星球日報 Asher

在以太坊網路中,資源都是透過"Gas "這個單一資源來限制和定價的。 Gas 是處理特定交易或區塊所需的"計算工作量"的衡量。 Gas 融合了多種類型的"努力",其中最主要的是:
原始計算(如 ADD, MULTIPLY )
讀寫以太坊儲存(如 SSTORE, SLOAD, ETH transfers)
數據頻寬
產生區塊ZK-SNARK證明的成本
例如, 這筆交易總共花了47085 Gas。這其中包括:(i) 21000 Gas 的"基本費用";(ii) 1556 Gas 用於作為交易一部分的calldata 位元組;(iii) 16500 Gas 用於讀寫儲存;(iv) 2149 Gas 用於製作日誌;其餘用於執行EVM。用戶必須支付的交易費與交易消耗的 Gas 成正比。一個區塊最多可包含3000 萬 Gas,Gas 價格透過EIP-1559 目標機制不斷調整,確保區塊平均包含1500 萬 Gas。

這種方法有一個主要優點:由於所有交易都合併到一個虛擬資源中,因此市場設計非常簡單。優化交易以最小化成本很容易,優化區塊以收取盡可能高的費用也相對容易(不包括MEV ),而且沒有奇怪的激勵機制鼓勵某些交易與其他交易捆綁以節省費用。
但這種方法也存在一個主要的低效率問題:它將不同的資源視為可以相互轉換,而網路所能處理的實際基本限制卻並非如此。理解這個問題的一種方法是看下圖:

如果 𝑛 資源有明顯的安全限制,那麼一維Gas 可能會使吞吐量降低高達 𝑛 倍。因此,人們對多維 Gas 概念的興趣由來已久,透過EIP-4844 ,我們今天實際上已經可以在以太坊上使用多維 Gas 了。這篇文章探討了這種方法的好處,以及進一步提高這種方法的前景。
Blobs: 坎昆升級後的多維Gas
今年年初,平均區塊大小為150 kB 。其中很大一部分是卷積資料:為了安全起見,在鏈上儲存資料的L2 協定。這些資料的成本很高:儘管卷積上的交易成本比以太坊L1 上的相應交易成本低5-10 倍,但對於許多用例來說,即使是這樣的成本也太高了。
這個問題最終是透過在每個區塊中引入一個單獨的便於卷積的資料空間(稱為"Blobs")來解決的。
在坎昆升級後,一個以太坊區塊最多可包含(i) 3,000 萬Gas 和(ii) 6 個Blobs,每個Blobs 可包含約125 kB 的calldata。這兩種資源都有獨立的價格,由類似EIP-1559 的獨立定價機制調整,目標是每個區塊平均使用1 500 萬Gas 和3 個Blobs。
因此,卷積的成本降低了100 倍,卷積的交易量增加了3 倍多,而理論上的最大區塊大小僅略有增加:從1.9 MB 增加到2.6 MB。

滾動交易費用,由growthepie.xyz提供。 Dencun 分叉發生在2024 年3 月13 日,引入了多維定價的Blobs
多維Gas 和無狀態客戶端
未來,無狀態客戶端將面臨儲存證明的問題。無狀態客戶端是一種新型客戶端,能夠在本地儲存很少或不儲存任何資料的情況下驗證區塊鏈。它接受證明來驗證區塊中特定部分的以太坊狀態,無需自身儲存任何資料。
一個區塊平均進行約1000 次儲存讀寫操作,但理論上的最大值可能是上千萬次。現行計畫是透過將以太坊的狀態樹設計從Merkle Patricia 樹遷移到Verkle 樹來支援無狀態客戶端。然而,Verkle 樹並不具備量子抗性,也不適用於較新的STARK 證明系統。
因此,許多人希望透過二進位Merkle 樹和STARKs 支援無狀態客戶端,可以完全跳過Verkle,或在Verkle 遷移後的幾年再進行升級。雖然二進位哈希樹分支的STARK 證明具有許多優點,但產生證明的速度較慢,無法滿足高速的需求。
預計未來會有一段時間內能夠在不到一秒的時間內證明1000 個值的情況,但無法達到14,285個值的證明速度。為了解決這個問題,提出了多維Gas 的概念。這種方法可以分別限制和收費存儲訪問,確保每個區塊的平均存儲訪問量為1000 次,同時設置每個區塊的限制為2000 次,以提高網路的安全性和效率。
多維Gas 的更廣泛應用
狀態大小成長是另一個需要考慮的資源。當增加以太坊狀態大小時,全節點需要持有更多資料。與其他資源不同,狀態大小成長的限制主要源自於長期的持續使用而非短期高峰。因此,為了處理狀態大小成長的操作,可以考慮增加一個單獨的Gas 維度。這種方法的目標是設定一個浮動價格,以特定的平均使用量為目標,而不是設定每個區塊的限制。
這顯示了多維Gas 的強大特性,可以針對每種資源提出不同的問題:(i)每種資源的理想平均使用量是多少;(ii)每塊資源的安全最大使用量是多少。透過設定這些參數,可以根據網路的安全情況來調整Gas 的價格,而不是根據每個區塊的最大使用量來調整。在處理更複雜的情況時,可以使用多種Gas,例如,一個零到非零的SSTORE 作業可能需要消耗不同類型的Gas,如無狀態客戶端證明Gas 和儲存擴充Gas。
每筆交易最大值:取得多維 Gas 較弱但更簡單的策略
在單維Gas 系統中,交易的Gas 成本是根據數據和計算兩者消耗的Gas 來確定的。然而,在多維Gas 系統中可以根據交易消耗的主要資源來確定Gas 成本。這一方法提高了吞吐量,同時保持了安全性。
EIP-7623 提出了類似的方案,透過增加每個位元組的最低價格,減少了交易在區塊中所佔空間,但這也導致了一些問題,如單一資源消耗較多的交易仍需支付高額費用,同時也創造了數據密集型和計算密集型交易捆綁在一起以節省成本的動機。雖然這種方法有其局限性,但其帶來的好處也是值得的,但如果願意投入更多開發工作,那麼有更理想的解決方案。
多維EIP-1559 :更難但更理想的策略
多維EIP-1559 其核心是透過追蹤excess_blobs 參數來調整Blob 的基本費用,以確保區塊的平均使用量保持在目標水準。
當區塊包含的Blob 數量超過目標值時,基本費用會增加,以降低使用量;反之,則會減少。這種定價機制使得區塊內的交易價格動態調整,以維持區塊填充一半的狀態。同時,短期內的使用量激增也會觸發限制機制,保證了交易的合理競爭。
在以太坊中,Gas 的這種定價方式已經存在多年:早在2020 年,EIP-1559 就引入了非常類似的機制。隨著EIP-4844 的推出,現在對Gas 和Blob 分別採用兩種浮動價格。
對於用戶和區塊建構者而言,體驗與之前類似,但需要適應兩個單獨的費用。然而,對於開發者來說,需要重新設計EVM 功能,以適應多價格和多限制的環境,這可能會增加一些挑戰。
多維定價、EVM 和子調用
在EVM 中,有兩種Gas 限制:每個交易設定了總Gas 限制,以及合約調用其他合約時的單獨Gas 限制。這使得合約可以調用不信任的合約,同時確保調用後仍有剩餘Gas 用於其他計算。然而,要在不同類型的執行之間實現多維Gas 定價存在挑戰。這種多維度方案需要子呼叫為每種Gas 類型提供多個限制,這將對EVM 進行深入改變,並且不相容於現有應用程式。
多維度Gas 提議通常只停留在兩個維度:資料和執行。資料分配在EVM 外部,因此不需要內部變更即可分別定價。對於開發者來說,這意味著需要重新設計EVM 及其周圍基礎設施,以適應多個價格和多個限制。在某些情況下,優化也會變得更加困難,因為無法明確說出哪種方法更有效,這可能會影響開發流程。
雖然存在一些挑戰,但可以透過實現類似EIP-7623 的方案來解決這些問題。這種方案可以為儲存作業收取額外費用,並在交易結束時進行退款,以確保主呼叫仍具備足夠的Gas 來執行後續操作。
小結
無論哪種情況,值得強調的是,一旦開始引入多維執行 Gas,系統的複雜度就會顯著提高,這似乎是難以避免的。
因此,我們面臨著一個複雜的抉擇:是否願意在EVM 層面上接受更多的複雜性,以換取釋放L1 可擴展性的重大收益,如果是,那麼哪種具體的提案更適合協議經濟和應用開發人員?很有可能,最佳方案既不是先前提到的那些,也不是上面提到的那些,我們仍有餘地提出更優雅、更有效的解決方案。


