關於Blob市場、基礎費用調整和最佳化
特別感謝Ansgar、Barnabé、Alex、Georgios、Roman和Dankrad的意見和討論,以及Bert、Gajinder和Max在這個話題上的努力!
總結:
所有建議的更新在理論上都是有意義的。我們是否應該在Pectra中實施它們,這取決於具體情況。
- 提高最低Blob費用可以加快價格發現。
- 自動化Blob gas更新分數可以使其具有未來可擴充套件性。
- 標準化超額gas可以防止在增加目標後分叉導致Blob基礎費用下降的邊緣情況,但如果我們不這樣做也不會發生任何壞事。
- 使基礎費用縮放對稱可以確保機制保持不變(在0和6個Blob的極端情況下,縮放±12.5%)
我建議將所有這些變更總結在EIP-7762中,並在我們將目標/最大值從3/6改為4/6時一起釋出。如果我們擔心Pectra新增更多變更可能會變得太大,我建議按以下順序實施,重要性遞減:
- 增加Blob數量。
a) 保守地做4/6,或者如果我們更有信心的話,做6/9。
b) 釋出EIP-7623以確保EL有效載荷大小顯著減小,為更多Blob騰出空間。 - 釋出概述的基礎費用變更。
Blob費用機制概述
隨著EIP-4844的推出,以太坊為其費用市場增加了一個新的維度。Blob附帶自己的基礎費用,為資料提供專用空間,允許應用程式和Rollup在不需要EVM執行的情況下在鏈上釋出資訊。
Blob費用結構由基礎費用更新規則管理,該規則近似於以下公式:
base_fee_per_blob_gas = MIN_BASE_FEE_PER_BLOB_GAS * e**(excess_blob_gas / BLOB_BASE_FEE_UPDATE_FRACTION)
在這個等式中,excess_blob_gas
代表Blob gas使用總量與目標量(TARGET_BLOB_GAS_PER_BLOCK
每塊)的差額。與EIP-1559費用機制類似,該公式是自我調整的:隨著超額Blob gas的增加,base_fee_per_blob_gas
呈指數上升,這會抑制過度使用並推動超額回到Rollup認為基礎費用是"公平"價格的水平。
該過程如下進行:如果第N塊消耗X
個Blob gas,那麼在第N+1塊,excess_blob_gas
增加X - TARGET_BLOB_GAS_PER_BLOCK
。因此,第N+1塊的base_fee_per_blob_gas
會以e**((X - TARGET_BLOB_GAS_PER_BLOCK) / BLOB_BASE_FEE_UPDATE_FRACTION)
的因子進行調整。
引數BLOB_BASE_FEE_UPDATE_FRACTION
控制Blob基礎費用的最大可能變化率。該費率設定為實現大約1.125
每塊的最大增加和減少,基於e**(TARGET_BLOB_GAS_PER_BLOCK / BLOB_BASE_FEE_UPDATE_FRACTION)
。
在初始推出時,Blob價格預計會很低,並逐步上升,直到市場找到平衡或"公平"價格(即價格發現)。EIP-4844引入的Blob費用市場遵循與EIP-1559類似的結構,具有根據需求動態調整的基礎費用。
達到"價格發現"的時刻
截至2024年11月,以太坊已達到一定需求水平,Rollup將不再無論基礎費用如何都發布Blob,而是釋出一定數量的Blob以保持基礎費用相當穩定。人們喜歡稱之為"價格發現"階段,儘管它只意味著在某個特定時間點,某個特定基礎費用X被視為公平價格。在"價格發現"時,Rollup將不再無視Blob基礎費用而持續釋出6個Blob,因為它已不再可忽略。然而,在沒有增加供給(即更多可用Blob)的情況下,對Blob的需求增加將導致Blob費用上升。對於以下內容,請原諒我使用這個簡化的"價格發現"概念,儘管價格每12秒都會隨每個時隙發現。
建議的調整及其優缺點
展望即將到來的Pectra分叉,對擴充套件Blob(從3/6到4/6或更復雜的6/9)的需求很明顯,這可能需要對Blob費用市場進行調整。
在以下部分,我將概述4個對Blob費用市場的潛在變更,並討論每個變更的相關利弊。
- 調整最低基礎費用:最簡單的調整之一是修改
MIN_BASE_FEE
引數,正如Max Resnick所建議的。 - 自動化Blob基礎費用更新分數:一個簡單的變更,以確保Blob基礎費用更新分數隨目標Blob數量的變化而縮放。
- 標準化超額gas:Bert Kellerman和Gajinder提出的另一個建議是"標準化"超額gas使用的計算。
- 對稱化基礎費用更新:調整基礎費用公式的一個建議。
1. 增加MIN_BASE_FEE_PER_BLOB_GAS (EIP-7762)
Blob基礎費用從0開始,然後緩慢上升,直到達到價格發現的點。每~6個塊(6個Blob),基礎費用翻倍,但從1 wei到一個更合理的價格(例如5 gwei)還有很長的路要走。在達到那個水平之前,價格可能會大幅波動,Rollup基本上獲得了"過於便宜"的去中心化應用。
上述EIP提議將最低基礎費用從1 wei提高到約0.034 gwei。這將縮短達到價格發現的時間,從而更快地推動Rollup向被視為"公平"的更穩定價格範圍發展。
對於基礎費用從1上升到5 gwei,需要...
\frac{\ln\left(\frac{\text{base_fee_target}}{\text{base_fee_start}}\right)}{\text{growth_rate}} = \frac{\ln(5 \times 10^9 / 1)}{0.117} \approx 190 \text{ blocks}ln(base_fee_targetbase_fee_start)growth_rate=ln(5×109/1)0.117≈190 個塊,而且所有這些塊都需要有6個Blob。這相當於大約38分鐘。
MIN_BASE_FEE_PER_BLOB_GAS
,我們將把這個持續時間降低到...
\frac{\ln(5 \times 10^9 / 2^{25})}{0.117} \approx \text{42 blocks},相當於8.4分鐘。
有一個非常重要的警告/實施細節:
我們必須在更新MIN_BASE_FEE_PER_BLOB_GAS
時重置多餘的gas。
原因是,否則我們會在分叉後立即看到不可預測的、極端的blob基礎費用峰值。這是因為最低基礎費用充當基礎費用的乘數,對它的小調整可能會極大地影響基礎費用,如果在此之前累積的多餘gas沒有被重置。
這裡有一個例子:一個看似"無關緊要"的從1 wei增加到5 wei的增加就足以使基礎費用飆升,然後rollups將不得不等待一段時間,直到價格再次平靜下來。
總結
優點:
- 更快的"價格發現"。
- 在供給 < 需求的時候,波動性更小。
缺點:
- 需要觸碰協議,而我們通常不會"微調"那些沒有問題的東西。
- 由於多餘的gas被重置,我們必須再次經歷價格發現的階段,儘管從一個更高的水平開始,從而縮短了這個時間。
這可以簡單地歸結為"固化與最佳化",在我看來,沒有對錯,儘管我個人認為不觸碰協議也有價值。
2. 自動化Blob基礎費用更新比例
這個變化非常簡單:目前,更新比例設定為3338477,如EIP-4844中所指定的。這個數字是透過做\frac{target\_gas}{ln(1.125)}得到的。如果我們現在用這個公式替換硬編碼的數字,我們就可以確保維持所需的\pm 12.5%變化。
3. 多餘gas的標準化
這是一個旨在避免在增加blob目標後分叉出現陡峭基礎費用下降的提議。
為了避免在增加blob目標的分叉後立即出現基礎費用的突然下降,這個提議建議調整我們計算多餘gas的方式。通常,基礎費用應該平穩變化 - 每個時隙最多12.5%。透過標準化多餘gas,我們可以確保基礎費用保持穩定,不會超出預期的12.5%限制而急劇下降,從而保持費用調整的可預測性和漸進性。
簡單地說,我們不是累積多餘gas,而是累積標準化的多餘gas。這樣目標blob數量就不重要了。
透過在多餘gas計算中引入標準化因子,我們可以調整累積的多餘gas,使其與新目標保持成比例。這確保了基礎費用平穩調整,即使目標發生變化,費用動態也能保持一致。
標準化涉及使用恆定因子縮放多餘gas,使其無論目標值如何,都能以一致的方式反映偏離目標的程度。這種方法將基礎費用調整保持在預期的限制範圍內,防止突然下降或飆升,從而擾亂網路的費用市場。
總結
優點
- 避免了目標增加後分叉導致的基礎費用下降。
- 為blob使用者提供更多可預測性
缺點
- 另一個潛在的"微最佳化"。
使blob基礎費用更新對稱於目標
透過將目標改為target=\frac{max}{2}不再成立,我們改變了目標與最小/最大值之間的距離。例如,將blob目標設為4,最大值設為6,則向上有2個blob的空間,向下有4個blob的空間。
現在,負面方向的空間比正面方向的空間大,基礎費用可以下降得更快,而不是上升。
一個簡單的修復方法如下:
我們首先確定gas使用量與目標之間的差額(與我們現在做的一樣)。然後我們應用一個縮放因子,該因子只是target/(max-target)
應用於"空間"較少的一側(例如,在4/6目標/最大值時應用於"向上"一側)。
calc_excess_blob_gas
函式將如下所示:
定義 計算超額blob gas(父區塊頭: Header) -> int:縮放因子 = 目標blob gas每塊 / (最大blob gas每塊 - 目標blob gas每塊)blob gas差值 = 父區塊頭.blob gas使用 - 目標blob gas每塊如果 blob gas差值 > 0:縮放差值 = blob gas差值 * 縮放因子否則:縮放差值 = blob gas差值超額blob gas = 最大(0, 父區塊頭.超額blob gas + 縮放差值)返回 超額blob gas
當然,這隻在最大-目標<目標的情況下有效max−target<target的情況下,我們甚至可以更一般化,但我想這可能沒什麼用。
為了更好地理解這個對稱化過程的影響,讓我們來看一個簡單的例子:
- 假設我們有三個槽位:
- 前兩個槽位各包含6個blob。
- 最後一個槽位包含0個blob。
- 這導致總共有12個blob跨越這3個槽位。
- 目標設定為每塊4個blob,最大為6個blob。
對稱與非對稱基礎費用調整:
對稱基礎費用:
- 基礎費用大約增加12.5%兩次(對應兩個6-blob槽位),然後減少12.5%一次(對應0-blob槽位)。
- 經過這些調整後,基礎費用最終高於其初始值。
非對稱基礎費用:
- 在6-6-0 blob序列之後,基礎費用保持不變。
這個例子突出了對稱調整的好處:
- 6-6-0 blob序列推動我們走向極端(最大利用率followed by none),這是不可取的。
- 理想情況下,負載應該在三個槽位之間更均勻分佈(例如,每個塊4個blob)。
- 對稱基礎費用透過"懲罰"不均勻使用(6個blob而不是4個)來抑制極端行為,從而促進更平衡的負載。
- 當然,人們可以爭辯說blob使用者可能不關心推高基礎費用,因為他們可能只需要在每個時期釋出幾次blob,因此不關心他們6-blob釋出之後的槽位。不過,這種論點是短視的。
總結
優點
- 確保"價格發現"的速度與現在一樣快。
- 確保"極端"(0和6個blob)導致相同百分比的增加/減少。
缺點
- 又一個"微最佳化",即使不這樣做一切也可能很好。
- 引入一些路徑依賴性。例如,在gas\_used= target \pm 1\ blobsgas_used=target±1 blobs之間跳躍會導致基礎費用隨時間穩步上升。透過避免釋出超過目標的blob,可以抵消這種行為,甚至可能激勵更平衡的釋出策略。