介紹
2024 年 5 月 13 日,Vitalik 提出了 EIP-7706,提出了對現有 Gas 模型的補充計劃。該提案隔離了 calldata 的 gas 計算,並定製了類似於 Blob gas 的基本費用定價機制,進一步降低了 Layer 2 (L2) 的運營成本。相關提案可追溯到 2022 年 2 月提出的 EIP-4844。鑒於時間差距很大,本文回顧了相關材料,以概述乙太坊 Gas 機制的最新發展,使讀者能夠快速瞭解更新。
在最初的設計中,乙太坊採用了一種簡單的拍賣機制來為交易費用定價,要求用戶通過設置 gas 價格來主動競價他們的交易。一般來說,由於使用者支付的交易費用歸礦工所有,礦工根據最高出價確定交易的優先順序,假設沒有礦工可提取價值 (MEV) 的考慮。核心開發人員發現了此機制的四個主要問題:
交易費用波動和共識成本之間的不匹配:對於一個活躍的區塊鏈來說,對交易包含有充足的需求,這意味著區塊可以很容易地被填滿。然而,這也導致了巨大的費用波動。例如,當平均 Gas 價格為 10 Gwei 時,向區塊添加另一筆交易的邊際成本是平均 Gas 價格為 1 Gwei 時的 10 倍,這是不可接受的。
對使用者造成不必要的延遲:由於每個區塊的硬氣限制和歷史交易量的自然波動,交易通常會等待幾個區塊才能被包含。這對整個網路來說效率低下,因為沒有靈活性機制來允許一個區塊變大,下一個區塊變小,以滿足不同的區塊到區塊的需求。
定價效率低下:簡單的競價機制導致價格發現效率低下,使用戶難以設定合理的價格。這通常會導致使用者多付交易費用。
沒有區塊獎勵的區塊鏈的不穩定性:當挖礦的區塊獎勵被取消並採用純費用模式時,可能會導致不穩定,例如創建竊取交易費用的“叔叔區塊”,增加強大的自私挖礦攻擊的載體。
隨著 EIP-1559 的引入和實施,Gas 模型經歷了第一次重大反覆運算。該機制由 Vitalik 和其他核心開發人員於 2019 年 4 月 13 日提出,並在 2021 年 8 月 5 日的倫敦升級期間採用,放棄了拍賣模式,轉而採用由基本費用和優先權費用組成的雙重定價模式。基本費用通過預定的數學模型進行定量調整,該模型基於母區相對於浮動和遞歸天然氣目標的天然氣消耗量。
基本費用計算和影響:如果前一個區塊的天然氣使用量超過天然氣目標,則基本費用增加;如果達不到天然氣目標,則基本費用會降低。這種調整很好地反映了供需動態,並提高了合理天然氣預測的準確性,避免了由於操作不當而導致的天然氣價格過高,因為基本費用的計算是由系統確定的,而不是使用者指定的。具體計算代碼如下:
從內容中我們可以推斷,當parent_gas_used大於parent_gas_target時,當前區塊的基費會比前一個區塊的基費增加一個偏移值。該偏移量的確定方法是將parent_base_fee乘以總氣體使用量與上一個塊中天然氣目標的偏差,然後取天然氣目標的餘數和一個常數,以及該餘數和 1 之間的最大值。相反,當parent_gas_used小於parent_gas_target時,邏輯同樣適用。
此外,基本費用將不再作為獎勵分發給礦工,而是將被燒毀。這使得ETH的經濟模型通貨緊縮,有助於穩定其價值。另一方面,優先權費,類似於使用者向礦工的小費,可以自由定價,允許在礦工的排序演算法中進行一定程度的重用。
到 2021 年,Rollup 開發已進入成熟階段。我們知道,OP Rollup 和 ZK Rollup 都涉及壓縮 L2 數據,並通過 calldata 將一些證明數據上傳到鏈上,以便數據可用性或直接鏈上驗證。這導致維持 L2 終結性的大量 gas 成本,最終由使用者承擔,導致大多數 L2 協定的成本高於預期。
同時,乙太坊也面臨著區塊空間競爭的挑戰。每個區塊都有一個 gas 限制,這意味著一個區塊中所有交易的總 gas 消耗量不能超過這個限制。當前 gas 限制設置為 30,000,000,理論上,每個區塊的限制為 1,875,000 位元組 (30,000,000 / 16),其中 EVM 處理的每個調用數據位元組需要 16 個 gas 單位,因此每個區塊的最大數據容量約為 1.79 MB。L2 排序器生成的 Rollup 相關數據通常很大,與其他主網使用者的交易產生競爭,並減少單個區塊中可以包含的交易數量,從而影響主網的 TPS。
為了解決這個問題,核心開發人員於 2022 年 2 月 5 日提出了 EIP-4844,該 EIP-4844 是在 2024 年第二季度初 Dencun 升級後實施的。此提案引入了一種稱為 Blob 事務的新事務類型。與傳統事務不同,Blob 事務包括一種新的數據類型,即 Blob 數據,與 calldata 不同,EVM 無法直接存取它,而只能通過其哈希(也稱為 VersionedHash)訪問。此外,與常規事務相比,Blob 事務具有更短的 GC 週期,可防止塊數據變得過於臃腫。Blob 數據還具有固有的 gas 機制,類似於 EIP-1559,但在其數學模型中使用了自然指數函數,在處理事務大小波動時提供了更好的穩定性。自然指數函數的斜率也是一個自然指數函數,這意味著無論當前網路交易規模處於何種狀態,blob gas的基礎費用都能更充分地回應快速交易激增,從而有效地抑制交易活動。另一個關鍵特性是,當水平軸為 0 時,函數值為 1。
base_fee_per_blob_gas = MIN_BASE_FEE_PER_BLOB_GAS e*(excess_blob_gas / BLOB_BASE_FEE_UPDATE_FRACTION)
在這裡,MIN_BASE_FEE_PER_BLOB_GAS 和 BLOB_BASE_FEE_UPDATE_FRACTION 是常數,而excess_blob_gas由父塊中的總斑點氣體消耗量與常數TARGET_BLOB_GAS_PER_BLOCK之間的差值決定。當總斑點氣體消耗量超過目標值時,使差值為正,e**(excess_blob_gas / BLOB_BASE_FEE_UPDATE_FRACTION) 大於 1,導致base_fee_per_blob_gas增加,反之亦然。
這種機制允許低成本執行利用乙太坊的共識能力對大量數據進行公證的場景,以確保可用性,而不會佔用交易打包容量。例如,Rollup 排序器可以使用 Blob 事務將關鍵的 L2 資訊封裝到 Blob 數據中,並通過 EVM 中的 VersionedHash 實現鏈上驗證。
應該注意的是,TARGET_BLOB_GAS_PER_BLOCK 和 MAX_BLOB_GAS_PER_BLOCK 的當前設置對主網施加了限制,平均目標是每個塊處理 3 個 blob (0.375 MB),每個塊最多處理 6 個 blob (0.75 MB)。這些初始限制旨在最大程度地減少此 EIP 引起的網路壓力,並期望在未來的升級中增加這些限制,因為網路在更大的塊大小下表現出可靠性。
在瞭解了當前的乙太坊 Gas 模型之後,讓我們深入研究 EIP-7706 提案的目標和實施細節。該提案由Vitalik於2024年5月13日提出,旨在為稱為 calldata 的特定資料欄位重新定義 Gas 模型,這與之前對 Blob 資料的更改非常相似。此外,該提案還優化了相應的代碼邏輯。
基本概念
EIP-7706 中 calldata 的基本費用計算邏輯反映了 EIP-4844 中指定的 blob 數據的基本費用計算。兩者都利用指數函數根據實際氣體消耗量與父區塊中目標值之間的偏差來調整基本費用。
該提案的一個值得注意的方面是引入了新的參數設計,LIMIT_TARGET_RATIOS = [2, 2, 4]。以下是細分:
LIMIT_TARGET_RATIOS[0]:執行操作氣體的目標比率。
LIMIT_TARGET_RATIOS[1]:Blob 數據 gas 的目標比率。
LIMIT_TARGET_RATIOS[2]:calldata gas 的目標比率。
這些比率用於計算父區塊中三種類型氣體的氣體目標值,方法是將氣體限值除以相應的比率。
氣體限制設置如下:
gas_limits[0]
遵循現有的調整公式。
gas_limits[1]
等於 MAX_BLOB_GAS_PER_BLOCK
。
gas_limits[2]
等於 gas_limits[0] / CALLDATA_GAS_LIMIT_RATIO
。
假設電流 gas_limits[0]
為 30,000,000 CALLDATA_GAS_LIMIT_RATIO
,並且預設為 4,這意味著當前的 calldata
氣體目標大約為:
[ \frac{30,000,000}{4 \times 4} = 1,875,000 ]
根據目前的 calldata
氣體計算邏輯:
每個非零位元組消耗 16 個 Gas。
每個零位元組消耗 4 個 Gas。
假設非零位元組和零位元組在段 calldata
中均勻分佈,則每位元組的平均耗電量為10 Gas。因此,當前的 calldata
gas 目標對應於大約 187,500 位元組, calldata
大約是當前平均使用量的兩倍。
提案的好處
這種調整大大降低了 calldata
達到氣體限制的可能性,通過經濟建模和防止濫用將使用量保持在 calldata
一致的水準。此設計的主要目的是促進第 2 層解決方案的增長,從而在與 blob 數據一起使用時降低排序器成本。
總之,EIP-7706 不僅完善了 calldata
Gas 模型,而且還通過控制和優化與數據相關的 Gas 消耗,對乙太坊進行了戰略定位,以實現第 2 層解決方案的高效擴展。
介紹
2024 年 5 月 13 日,Vitalik 提出了 EIP-7706,提出了對現有 Gas 模型的補充計劃。該提案隔離了 calldata 的 gas 計算,並定製了類似於 Blob gas 的基本費用定價機制,進一步降低了 Layer 2 (L2) 的運營成本。相關提案可追溯到 2022 年 2 月提出的 EIP-4844。鑒於時間差距很大,本文回顧了相關材料,以概述乙太坊 Gas 機制的最新發展,使讀者能夠快速瞭解更新。
在最初的設計中,乙太坊採用了一種簡單的拍賣機制來為交易費用定價,要求用戶通過設置 gas 價格來主動競價他們的交易。一般來說,由於使用者支付的交易費用歸礦工所有,礦工根據最高出價確定交易的優先順序,假設沒有礦工可提取價值 (MEV) 的考慮。核心開發人員發現了此機制的四個主要問題:
交易費用波動和共識成本之間的不匹配:對於一個活躍的區塊鏈來說,對交易包含有充足的需求,這意味著區塊可以很容易地被填滿。然而,這也導致了巨大的費用波動。例如,當平均 Gas 價格為 10 Gwei 時,向區塊添加另一筆交易的邊際成本是平均 Gas 價格為 1 Gwei 時的 10 倍,這是不可接受的。
對使用者造成不必要的延遲:由於每個區塊的硬氣限制和歷史交易量的自然波動,交易通常會等待幾個區塊才能被包含。這對整個網路來說效率低下,因為沒有靈活性機制來允許一個區塊變大,下一個區塊變小,以滿足不同的區塊到區塊的需求。
定價效率低下:簡單的競價機制導致價格發現效率低下,使用戶難以設定合理的價格。這通常會導致使用者多付交易費用。
沒有區塊獎勵的區塊鏈的不穩定性:當挖礦的區塊獎勵被取消並採用純費用模式時,可能會導致不穩定,例如創建竊取交易費用的“叔叔區塊”,增加強大的自私挖礦攻擊的載體。
隨著 EIP-1559 的引入和實施,Gas 模型經歷了第一次重大反覆運算。該機制由 Vitalik 和其他核心開發人員於 2019 年 4 月 13 日提出,並在 2021 年 8 月 5 日的倫敦升級期間採用,放棄了拍賣模式,轉而採用由基本費用和優先權費用組成的雙重定價模式。基本費用通過預定的數學模型進行定量調整,該模型基於母區相對於浮動和遞歸天然氣目標的天然氣消耗量。
基本費用計算和影響:如果前一個區塊的天然氣使用量超過天然氣目標,則基本費用增加;如果達不到天然氣目標,則基本費用會降低。這種調整很好地反映了供需動態,並提高了合理天然氣預測的準確性,避免了由於操作不當而導致的天然氣價格過高,因為基本費用的計算是由系統確定的,而不是使用者指定的。具體計算代碼如下:
從內容中我們可以推斷,當parent_gas_used大於parent_gas_target時,當前區塊的基費會比前一個區塊的基費增加一個偏移值。該偏移量的確定方法是將parent_base_fee乘以總氣體使用量與上一個塊中天然氣目標的偏差,然後取天然氣目標的餘數和一個常數,以及該餘數和 1 之間的最大值。相反,當parent_gas_used小於parent_gas_target時,邏輯同樣適用。
此外,基本費用將不再作為獎勵分發給礦工,而是將被燒毀。這使得ETH的經濟模型通貨緊縮,有助於穩定其價值。另一方面,優先權費,類似於使用者向礦工的小費,可以自由定價,允許在礦工的排序演算法中進行一定程度的重用。
到 2021 年,Rollup 開發已進入成熟階段。我們知道,OP Rollup 和 ZK Rollup 都涉及壓縮 L2 數據,並通過 calldata 將一些證明數據上傳到鏈上,以便數據可用性或直接鏈上驗證。這導致維持 L2 終結性的大量 gas 成本,最終由使用者承擔,導致大多數 L2 協定的成本高於預期。
同時,乙太坊也面臨著區塊空間競爭的挑戰。每個區塊都有一個 gas 限制,這意味著一個區塊中所有交易的總 gas 消耗量不能超過這個限制。當前 gas 限制設置為 30,000,000,理論上,每個區塊的限制為 1,875,000 位元組 (30,000,000 / 16),其中 EVM 處理的每個調用數據位元組需要 16 個 gas 單位,因此每個區塊的最大數據容量約為 1.79 MB。L2 排序器生成的 Rollup 相關數據通常很大,與其他主網使用者的交易產生競爭,並減少單個區塊中可以包含的交易數量,從而影響主網的 TPS。
為了解決這個問題,核心開發人員於 2022 年 2 月 5 日提出了 EIP-4844,該 EIP-4844 是在 2024 年第二季度初 Dencun 升級後實施的。此提案引入了一種稱為 Blob 事務的新事務類型。與傳統事務不同,Blob 事務包括一種新的數據類型,即 Blob 數據,與 calldata 不同,EVM 無法直接存取它,而只能通過其哈希(也稱為 VersionedHash)訪問。此外,與常規事務相比,Blob 事務具有更短的 GC 週期,可防止塊數據變得過於臃腫。Blob 數據還具有固有的 gas 機制,類似於 EIP-1559,但在其數學模型中使用了自然指數函數,在處理事務大小波動時提供了更好的穩定性。自然指數函數的斜率也是一個自然指數函數,這意味著無論當前網路交易規模處於何種狀態,blob gas的基礎費用都能更充分地回應快速交易激增,從而有效地抑制交易活動。另一個關鍵特性是,當水平軸為 0 時,函數值為 1。
base_fee_per_blob_gas = MIN_BASE_FEE_PER_BLOB_GAS e*(excess_blob_gas / BLOB_BASE_FEE_UPDATE_FRACTION)
在這裡,MIN_BASE_FEE_PER_BLOB_GAS 和 BLOB_BASE_FEE_UPDATE_FRACTION 是常數,而excess_blob_gas由父塊中的總斑點氣體消耗量與常數TARGET_BLOB_GAS_PER_BLOCK之間的差值決定。當總斑點氣體消耗量超過目標值時,使差值為正,e**(excess_blob_gas / BLOB_BASE_FEE_UPDATE_FRACTION) 大於 1,導致base_fee_per_blob_gas增加,反之亦然。
這種機制允許低成本執行利用乙太坊的共識能力對大量數據進行公證的場景,以確保可用性,而不會佔用交易打包容量。例如,Rollup 排序器可以使用 Blob 事務將關鍵的 L2 資訊封裝到 Blob 數據中,並通過 EVM 中的 VersionedHash 實現鏈上驗證。
應該注意的是,TARGET_BLOB_GAS_PER_BLOCK 和 MAX_BLOB_GAS_PER_BLOCK 的當前設置對主網施加了限制,平均目標是每個塊處理 3 個 blob (0.375 MB),每個塊最多處理 6 個 blob (0.75 MB)。這些初始限制旨在最大程度地減少此 EIP 引起的網路壓力,並期望在未來的升級中增加這些限制,因為網路在更大的塊大小下表現出可靠性。
在瞭解了當前的乙太坊 Gas 模型之後,讓我們深入研究 EIP-7706 提案的目標和實施細節。該提案由Vitalik於2024年5月13日提出,旨在為稱為 calldata 的特定資料欄位重新定義 Gas 模型,這與之前對 Blob 資料的更改非常相似。此外,該提案還優化了相應的代碼邏輯。
基本概念
EIP-7706 中 calldata 的基本費用計算邏輯反映了 EIP-4844 中指定的 blob 數據的基本費用計算。兩者都利用指數函數根據實際氣體消耗量與父區塊中目標值之間的偏差來調整基本費用。
該提案的一個值得注意的方面是引入了新的參數設計,LIMIT_TARGET_RATIOS = [2, 2, 4]。以下是細分:
LIMIT_TARGET_RATIOS[0]:執行操作氣體的目標比率。
LIMIT_TARGET_RATIOS[1]:Blob 數據 gas 的目標比率。
LIMIT_TARGET_RATIOS[2]:calldata gas 的目標比率。
這些比率用於計算父區塊中三種類型氣體的氣體目標值,方法是將氣體限值除以相應的比率。
氣體限制設置如下:
gas_limits[0]
遵循現有的調整公式。
gas_limits[1]
等於 MAX_BLOB_GAS_PER_BLOCK
。
gas_limits[2]
等於 gas_limits[0] / CALLDATA_GAS_LIMIT_RATIO
。
假設電流 gas_limits[0]
為 30,000,000 CALLDATA_GAS_LIMIT_RATIO
,並且預設為 4,這意味著當前的 calldata
氣體目標大約為:
[ \frac{30,000,000}{4 \times 4} = 1,875,000 ]
根據目前的 calldata
氣體計算邏輯:
每個非零位元組消耗 16 個 Gas。
每個零位元組消耗 4 個 Gas。
假設非零位元組和零位元組在段 calldata
中均勻分佈,則每位元組的平均耗電量為10 Gas。因此,當前的 calldata
gas 目標對應於大約 187,500 位元組, calldata
大約是當前平均使用量的兩倍。
提案的好處
這種調整大大降低了 calldata
達到氣體限制的可能性,通過經濟建模和防止濫用將使用量保持在 calldata
一致的水準。此設計的主要目的是促進第 2 層解決方案的增長,從而在與 blob 數據一起使用時降低排序器成本。
總之,EIP-7706 不僅完善了 calldata
Gas 模型,而且還通過控制和優化與數據相關的 Gas 消耗,對乙太坊進行了戰略定位,以實現第 2 層解決方案的高效擴展。