以太坊狀態模型的不足之一是平均狀態增長與最壞情況狀態增長之間的巨大差異,使用 EIP-1559 對網絡臨時成本和永久成本分開定價是一種解決思路。

撰文:Vitalik Buterin,以太坊聯合創始人
編譯:白計劃團隊

本文系 Vitalik 在以太坊研究者論壇裏提出的一個最新討論,該討論是繼以太坊研究科學家 BarnabéMonnot 提出的關於 EIP1559 切實實施的思路進行的再次結合。

以下爲原文翻譯,團隊對部分詞彙進行了批註及少許刪改。

Vitalik Buterin 最新討論:以太坊 Gas 費的分開定價與雙軌 EIP-1559

正如我在此前的《關於資源定價的立場文件》中詳細討論的那樣,以太坊中的 Gas 實際上是支付三種不同的資源:

  1. 帶寬(必須下載的事務數據)
  2. 計算(驗證和執行交易的時間)
  3. 存儲(歷史記錄,但更重要的是狀態陳述,例如帳戶餘額,隨機數,約代碼,合約存儲)

白計劃批註:《關於資源定價的立場文件》是一份區塊鏈資源定價的草案,其中 Vitalik 通過數學演算推論了相應的定價方式。

該草案內容包含:價格與數量、社會成本曲線、首次和二次拍賣、可調整收費計劃、存儲維護費,以及包含爲什麼固定費用並未得到充分利用?

帶寬和計算是短暫的成本,存儲不像這兩個成本,它會超出短暫的限制。

在一個塊的時間內,一個節點可以進行多少次計算或下載數據是有限度的,一旦該塊通過,下載和驗證所需的量就達到了極限。塊的大部分都消失了(將來只有少數同步節點需要對其進行處理)。

而存儲是持續的成本。如果一個單獨的塊狀態增加了 100MB,該塊當下可以處理好,但是一系列的塊將使以太坊無法使用。狀態增長的「爆發」影響可以忽略不計,但長期影響是最嚴重的,一旦建立的一個超大狀態就永遠給網絡增添了負擔。

不過,隨着狀態變爲無狀態(白計劃注:即無狀態以太坊方案),(超大)狀態的長期影響會大大減少:狀態不會給網絡造成永久負擔,它只會負擔大約一年的時間,在那一年中,只有一小部分節點需要實際存儲那個(超大)狀態。但這種長期(一年)成本仍然是真實存在的,並且需要將其定價。

平均大小與最壞情況的存儲大小

在當前(狀態)協議(普遍認爲是不可持續的)和狀態到期的改進協議中,對狀態建模的不足之一是平均狀態增長與最壞情況狀態增長之間的巨大差異。

考慮當前的協議。如今,該狀態的總大小約爲 5.5 億個對象,約 32GB (不包括 trie 開銷)。如果我們剔除上一年所有 not touched 的狀態,那總量很容易下降一半以上。

現在,最壞的情況是什麼?

合同代碼的創建按每字節 200Gas 的費用收費,因此,如果將一個區塊分成 3 個事務,每個事務創建一個合同,我們可以爲 12334800Gas+3*55000Gas 來製作 3 個 20558 字節的合同,以增加合同創建的開銷。

這樣,在單個塊中,存儲大小可以增加 20600*3=61800 字節。

假設平均出塊時間爲 13.1 秒 1 個,每年都有 31556925/13.1=2408925 塊,總的來說,狀態可以按 61800*2408925=148871600381.67938 字節增長,即約 138 GB。

這個差異約爲 10 倍。(白計劃注:下文數據 16GB 根據上下文理解是以太坊目前一年的狀態總量大小)

非常重要的是,消費者硬件 RAM 可以容納實際大小可能是 16GB (如果不能,我們可以調整 Gas 價格或狀態有效期以使其適合),而 138GB 則不能被存儲。

如果我們可以使最壞的情況接近平均情況,那就太好了。

雙軌 EIP-1559

解決此問題的自然方法是對臨時成本和永久成本使用 EIP-1559 定價,但調整期有所不同。

對於臨時成本,價格可以一次調整 10%以上。但是,對於永久性成本,將使價格調整慢得多。

如果我們採用 AMM 成本曲線機制作爲基礎,對於存儲,我們可以考慮一條曲線,目標速率爲每月 1GB,而成本的增加取決於我們比目標高出多少:

例如,每超出目標 1GB,存儲成本就可能翻倍。在這種情況下,存儲塊價格可能需要 3 天左右的才能翻一番。如果存儲增長超過 10GB,則存儲成本將是正常價格的 1000 倍,在經濟上無法繼續存儲。

有兩種方法可以實現此目的:

1. 用 Gas 購買存儲。也就是說,使用 SSTORE 創建新的存儲插槽,像現在一樣消耗 Gas,但是消耗的 Gas 量將是可變的。這樣做的缺點是,它會形成(變相)激勵措施,用戶寧願在 Gas 價格較低的週末補充存儲空間。

2. 用 ETH 購買存儲。交易(和調用)除了需要 Gas 外,還需要提供另一種資源(我們可以稱其爲 mana),該資源將採用與 Gas 相似的機制,但參數不同。這樣做的缺點是使調用規則變得複雜,並且需要添加新的 CALL 操作碼。

請注意,這裏有一個混合選項:

3. 可以以 ETH 定價存儲,但以 Gas 收費(因此,如果基本費用上漲了 2 倍,則填充存儲插槽所需的 Gas 將自動減半)。我們可以將用於擴展存儲的 ETH 排除在 EIP 1559 Gas 價格更新規則甚至是區塊限制範圍之外。

4. 將 Gas 更全面地改造爲三個概念:Gas,執行點和存儲點。1Gas=1wei; 分配 Gas 的交易只是意味着它正在將其某些 wei 轉換爲可用於支付資源的特殊形式。就 call 和 subcall 之間的傳遞方式而言,此形式的工作方式與 Gas 相同。

但是,AMM 現在管理兩項成本:執行點成本和存儲點成本。當執行過程處理當前消耗 N 個 Gas 的操作碼時,它將花費 N 個執行點,這意味着需要 N* execution_point_cost 支付 Gas。填充存儲槽需要 1 個存儲點,因此需要 storage_point_cost 充入 Gas。

最後,還要注意,狀態限期的路線圖裏有望刪除退款。這是因爲技術原因:存儲插槽無法「變空」且資格獲得退款,因此只能將它們設置爲零,並且零記錄必須保持該狀態,直到該時期結束並且該狀態可以到期爲止。這大大降低了早期在存儲租金嘗試時遇到的複雜性問題。

特別感謝 @barnabe 在早期提出了類似的想法。

來源鏈接:mp.weixin.qq.com