原文作者:Vitalik Buterin

以太坊虛擬機(EVM) 中的許多資源都具有以下屬性:它們對突增容量(即我們可以為一個或幾個區塊能夠處理的容量多少)和持續容量(即我們可以長時間擁有的容量多少)有非常不同的限制。舉一些例子:

EVM使用量:區塊處理時間偶爾在2 秒可能沒問題,但是每個區塊都花費這麼長時間則會使保持節點同步變得非常困難

區塊數據:客戶端有足夠的帶寬來處理2 MB 的區塊,但沒有足夠的磁盤空間來存儲它們

見證數據:與數據相同的問題- 客戶端有足夠的帶寬來處理中大型見證,但沒有足夠的磁盤空間來存儲它們

填充的狀態大小:基本上沒有限制讓狀態在單個區塊中增加多少(如果狀態在一個塊中從45 GB 激增到46 GB,但之後的狀態增長恢復正常,誰會注意到?)只要見證人可以處理它,但我們不能在每個區塊中都出現快速的狀態增長

我們當前使用的方案是將所有資源組合成一個單一的多維資源(“gas”),在處理這些差異方面做得很差。例如,平均而言,交易數據加上調用數據會消耗區塊中約3% 的gas。因此,最壞情況區塊包含的數據比平均情況多約67 倍(包括來自EIP 1559 的2 倍鬆弛(slack))數據。見證(witness)的大小是相似的:平均情況下的見證只有幾百kB,但最壞的情況下,即使進行了Verkle gas 改革,見證的大小也有幾兆字節,增加了10-20 倍。

將所有資源硬塞到單個虛擬資源(gas)中會迫使最壞情況/平均情況比率變成基於使用情況,當基於使用情況的比率以及我們知道客戶端可以處理的突發限制和持續限制的比率非常不一致時,會導致非常不理想的gas 成本。

本文為這個問題提出了一個替代解決方案:多維EIP 1559。

假設有n 個資源,每個資源都有一個突增限制bi 和一個持續目標Si(我們需要bi>>si)。我們希望任何單個區塊中的資源i 的數量永遠不會超過bi,並且資源i 的長期平均消耗等於Si。

解決方案很簡單:我們為每個資源維護一個單獨的EIP 1559 目標(targeting)方案!我們維護一個基本費用(basefees)向量f1...fn,其中fi 是一個單位資源i 的基本費用(basefee)。我們設計一個硬性規則,即每個塊消耗的資源i 不能超過bi 單位。 fi 由一個targeting規則調整(我們將使用指數調整,因為我們現在知道它具有更好的屬性):

為了在以太坊環境中完成這項工作,其中只有一種資源(gas)從父調用傳遞到子調用,我們仍然以gas 收取所有費用。

選項1(更簡單但不那麼純粹):我們保持執行gas 成本固定,保持當前的EIP 1559;讓f1 成為基本費用(basefee)。所有“特殊”資源(調用數據、存儲使用……)的gas 價格變為fi/f1。區塊既有當前的gas 限制,也有每個資源的限制b1...bn。優先費用的運作方式與今天相同。

選項2(更難但更純粹):gas basefee 固定為1 wei(或者,如果我們想要,可以為1 gwei)。使用每種資源(其中執行一次)的gas 價格變為fi。沒有區塊gas限制;每個資源只有b1...bn 的限制。在這個模型中,“gas”和“ETH”成為真正的同義詞。優先費用通過指定百分比來運作;支付給區塊生產者的優先費用等於basefee乘以該百分比(一種更高級的方法是指定n 個優先費用的向量,每個資源一個)。

多維定價與背包問題(knapsack problem)異議

歷史上對多維定價模型的主要反對觀點是,它們對區塊構建者強加了一個困難的優化問題:區塊構建者不能簡單地按照每gas費用從高到低接受交易,他們必須不同維度之間平衡,並解決多維背包問題。這將為性能明顯優於庫存(stock)算法的專有優化礦工創造空間,從而導致中心化。

這個問題在兩個關鍵方面已經比以前弱得多:

礦工可提取價值(MEV) 已經為經過優化的礦工創造了機會,因此stock算法的“船已經出港”以有意義的方式被優化。提議者/建造者分離(PBS) 解決了這個問題,將區塊生產的規模經濟從共識層隔離開來。 EIP 1559 意味著任何達到限制的資源都屬於邊緣情況而不是平均情況,因此樸素的算法只會在少數異常區塊中表現不佳。

要了解為什麼(2) 是這種情況,我們需要注意一個非常重要的事實:在多維EIP 1559 中,每個資源的“鬆弛(Slack)”參數(maximumtarget)可能遠高於2x。這是因為今天的2x Slack參數創建了一個突增/持續差距,該差距疊加在來自不可預測使用的爆發/持續差距之上,而在多維EIP 1559 中,鬆弛參數代表整個突發/持續差距。例如,我們可以將calldata 使用量瞄準為~256 kB(比今天多8 倍),在此之上有一個8 倍的Slack參數(bisi),並且仍然具有與今天相當的突增限制。如果見證gas 成本不變,我們可以將見證大小綁定為又一約2 MB,並且見證大小的Slack參數為約6 倍。對240 個最新區塊的調查表明,即使在4 倍的calldata Slack參數下,這些區塊中只有1 個會達到限制!

這顯示了多維EIP 1559 的一個很好的效果:它會使優先費用拍賣的邊緣情況更加罕見,並且更快地清除突增交易。

哪些資源可以多維定價?

我們可以從基礎開始:

EVM 執行發送calldata見證數據存儲大小增長

有了分片之後,也可以將分片數據添加到此列表中。這已經給我們帶來了很多好處,能夠支持更多的可擴展性,同時降低突增使用帶來的風險。

從長遠來看,我們甚至可以使定價更加精細:

通過讀取與寫入拆分見證按分支與塊分割見證單獨定價每個單獨的預編譯調用每個單獨的操作碼

這樣做的主要價值在於它會增加另一層DoS 保護:如果每個操作碼僅被分配,例如100 毫秒的最大預期執行時間,那麼如果攻擊者發現一個操作碼或預編譯的速度降低了10 倍,他們只能將900 毫秒的預期執行時間添加到塊中。這與今天形成鮮明對比的是,他們可以使用該操作碼或預編譯填充整個區塊,因此任何單個操作碼或預編譯減速10 倍都可能使攻擊者創建無法在單個間隔及時處理的區塊。