關於區塊大小:Gas 上限與可擴展性

作者:Toni Wahrstätter

最近關於提高以太坊區塊 Gas 上限的討論非常多。有些人基於摩爾定律主張增大區塊大小,有些人基於個人直覺,有些人則只是在隨意散布消息,還有些人擔心其他鏈如 Solana 會在用戶廣泛採用方面超越以太坊。

接下來,我想展示一些圖表和數據,這可能有助於我們做出一個在不影響以太坊去中心化的前提下最大化 Gas 上限的決策。

從最初講起

與比特幣不同,以太坊沒有固定的區塊大小限制,而是依賴於一種靈活的區塊大小機制,這種機制由某種單位 “gas” 來衡量。在以太坊中,Gas 是一個衡量執行操作(如交易或智能合約)所需計算量的單位。以太坊中的每項操作都需要一定數量的 Gas 來完成,每個區塊都有一個 Gas 上限,這決定了一個區塊可以包含多少操作。

最開始,2015 年時以太坊每個區塊有 5000 Gas 的上限制。這個上限很快被提高到約 300 萬,然後在 2016年稍後 提高到約 470 萬。隨著 Tangerine Whistle 硬分叉 (EIP-150) 在 2016年 的實施,作為對 DoS 攻擊的回應,通過重新定價各種 IO 密集型操作碼,Gas 上限被提高到 550 萬。在這些攻擊之後,礦工持續提高 Gas 上限,在 2017 年 7 月 到約 670 萬,2017 年 12 月 到約 800 萬,2019 年 9 月 到約 1000 萬,2020 年 8 月 到 1250 萬,最終在 2021 年 4 月 3 日 到約 1500 萬。

隨時間變化的 Gas 使用情況

此後,隨著 Spurious Dragon、Byzantium、Constantinople、Istanbul 和 Berlin 硬分叉的激活,某些操作碼的定價進一步得到了細化。這些細化的例子包括 EIP-145、EIP-160、EIP-1052、EIP-1108、EIP-1884、EIP-2028、EIP-2200、EIP-2565 和 EIP-2929。

以太坊費用市場最重大的變化發生在 2021 年 8 月的倫敦硬分叉 (EIP-1559) 的引入。EIP-1559 引入了 base fee,該費用會根據對區塊空間的需求隨時間/區塊高度動態調整。同時引入了 “target size”,將其設定為每個區塊 1500 萬 Gas。這個 target 用於指導 base fee 的動態調整。如果一個區塊中使用的總 Gas 數量超過這個 target,那麼下一個區塊的 base fee 就會增加。相反,如果使用的總 Gas 數量低於 target,則 base fee 減少。這個機制旨在創建一個更可預測的費用市場,並通過穩定交易開銷改善用戶體驗。此外,EIP-1559 還引入了 base fee 的銷毀機制,永久地從流通量中移除了那部分 Ether。這增強了協議的可持續性,同時創造了所謂的超穩健貨幣迷因 (ultra sound money meme)。

在 EIP-1559 下,還設有一個最大(或「硬上限」)Gas 上限,設為 target 的兩倍,即 3000 萬 Gas。這意味著一個區塊可以打包總使用量高達 3000 萬 Gas 的交易。

倫敦分叉後的 Gas 使用情況

自那時起,以太坊的區塊 Gas 上限保持不變,截至 2024 年,仍然是每個區塊 3000 萬 Gas。

我們準備好增加區塊大小了嗎?

最近,一些人對以太坊的 Gas 上限表示擔憂,並要求將其增加。在 Reddit 上的最新以太坊基金會 AMA 中,Vitalik 表示考慮了將 Gas 上限增加 33% 至 4000 萬的想法。他的推理基於摩爾定律,該定律指出微晶片上的電晶體數量大約每兩年翻一番,從而使得計算能力相應增加。這一原則表明,網絡性能,包括處理和執行交易的能力,也可以隨時間增加。

來自以太坊基金會的研究人員 Dankrad 和 Ansgar 也支持在評估 Dencun 升級後的情況後增加 Gas 上限的想法。此外,以太坊基金會的 Pari 發表了一篇帖子,探索潛在的 Gas 上限增加途徑。像 Geth 的 Peter 和 Marius 這樣的其他人則對增加 Gas 上限表示擔憂,特別是在沒有適當的工具/監控到位的情況下。這些擔憂主要和這些問題相關:加速狀態增長、同步時間和重組塊率。

區塊大小是什麼?

區塊的大小可以通過兩種方式衡量:

Gas 使用量

區塊大小(以字節為單位)

雖然這兩種衡量方式相關聯,但必須獨立考慮。

例如,一個包含許多非零 calldata 字節的區塊在字節大小上可能很大,而實際的 Gas 使用量 (每非零字節需要 16 Gas) 可能仍然相對較小。

先不考慮壓縮後的情況,在遵守 Geth 每筆交易 128 KB 限制的前提下, 當前可以達到的最大區塊大小約為 6.88 MB 。這樣一個的區塊裡將最大化打包 128 KB 交易的數量。實際計算出來的結果是,包含約 130,900 字節的零字節 calldata(每字節 4 Gas)的 55 筆交易,以及一個填滿剩餘空間的交易。然而,經過 snappy 壓縮後,這樣的區塊最終大小約為 0.32 MB,這可以忽略不計。

而另一種情況,考慮最大可能性的區塊大小,包含 15 筆攜帶非零字節 calldata 的交易,壓縮後大小可達約 1.77 MB。

因此,截至今日,1.77 MB 代表執行層區塊的真實區塊大小上限。

譯者註:

在上面的幾個段落中,作者在固定 gas 上限 30 M 的情況下,想要讓 block size 最大,嘗試計算最多可以把區塊塞到多大。

如果固定 gas 上限,要讓 block size 變大,那麼只能塞 calldata(因為計算/STORE之類的字節碼其實是不會消耗區塊存儲空間的)。

所以,要讓區塊變大,無非就是儘量往交易塞 calldata。然後,有「塞 0 calldata」 和 「塞非 0 calldata」 兩種方法,需要計算才能知道哪種能讓 block size 更大。最終結果是「塞非 0 calldata」 的 block size 更大。

基於 Geth 客戶端限制每筆交易最多 128 KB 這一前提,下面開始計算兩個例子。

case 1: 56 個大小為 130,900 B (< 128 KB) 的交易(裡面都是零 calldata,4 gas/B):用的 gas = 56* (130,900 * 4+21000) = 30497600 > (30 M),所以最多只能塞 55 個上述交易+ 1 個小於上述交易的交易。對應的區塊大小約為 55*128 = 7040 kB = 6.875 MB。然而,由於 calldata 全是 0,所以壓縮後區塊大小約為 0.32 MB。

case 2: 15 個大小為 130,900 B (< 128 KB) 的交易(裡面都是非零 calldata,16 gas/B):用的 gas = 15 *(130900 *16+21000) = 31731000 > 30 M。對應的區塊大小約為 14 *128 = 1792 kB = 1.75 MB ~ 15 * 128 = 1.875 M。然而,由於 calldata 是非零,不好壓縮,所以壓縮後區塊大小約為 1.77 MB。)

就這個最大區塊大小而言,我們可以識別出幾個影響它的因素:

Gas 上限 :Gas 上限會影響最大區塊大小,這是毋庸置疑的。上限越高,區塊中可以塞進的數據就越多。

操作和數據的定價 :操作的 gas 越便宜,區塊內就能執行越多次操作。雖然像 CALLDATALOAD CALLDATACOPY 這樣的操作,它們的開銷都是 3 Gas,相對便宜;但其他操作碼如 CREATE 則更昂貴。區塊中使用的操作碼越昂貴,該區塊中用於 calldata (或其他操作)的空間就越少。

客戶端限制 :雖然客戶端限制的影響不那麼明顯,但比如像 Geth 客戶端這樣對每筆交易的 128 kb 限制也可以影響最終區塊大小。由於每筆交易的固定費用是 21k Gas,客戶端每筆交易的大小限制越低,就需要更頻繁地支付固定費用,從而「浪費」本可以用於 calldata 的 gas。所以最終,這個限制可以導致最大區塊大小減少約 0.07 MB。需要注意的是,客戶端限制只影響交易的廣播,並不影響已經被確認的區塊。

首先,讓我們看看每個區塊的 Gas 上限:

區塊 Gas 上限對最大區塊大小的影響

像以太坊這樣的區塊鏈,提高區塊 Gas 上限是最直接和明顯的擴容方式。更高的上限意味著更多的數據空間。然而,這也意味著需要每個運行全節點的人傳播和下載更大的區塊。如上圖所示,「最壞情況(即前面通過計算得出的最大區塊大小)」下的區塊大小與區塊 Gas 上限的增加大致呈線性關係。通過創建塞滿儘可能多的非零字節 calldata 交易的區塊,就可以達到這樣的最大區塊大小。

接下來,讓我們看看另一個影響因素 —— 以太坊的定價機制。在當前的例子中,具體就是目前被設定為 16 Gas 的非零字節 calldata 的開銷:

每非零字節 Calldata 開銷對最大區塊大小的影響

如上圖所示,增加非零 calldata 的開銷會讓區塊大小減小。換句話說,將開銷降低到比如說每字節 8 Gas,會使最壞情況下的區塊大小翻倍。這很直觀,因為降低價格允許將雙倍數量的數據放入區塊中。

那麼 EIP-4844 (Proto-Danksharding)上線後呢?

我不會在這裡詳細介紹 4844,因為 eip4844.com 上有很好的文檔,但簡單來說,EIP-4844 引入了類似「sidecar (挎鬥)」結構的數據類型,叫做 blob,每個 blob 可塞進約 125 kb 的數據。Blob 數據費用機制與 EIP-1559 類似,也存在一個「target」,用於錨定 blob 數量。在 Dencun 硬分叉中,target 設為每個區塊 3 個 blob,最大限制設為每個區塊 6 個 blob。值得注意的是,blob 擁有自己的費用市場,創建了所謂的多維費用市場。這意味著 blob 不必與標準交易競爭,而是與 EIP-1559 機制下的費用解耦。

到目前為止,一切順利。讓我們看看這次升級如何影響以太坊的平均區塊大小。

新增 blob 之後對壓縮後的信標鏈平均區塊大小的影響

截至今日,採用 snappy 壓縮後的信標鏈區塊的平均區塊大小約為 125 KB。有了 4844,我們每個區塊再增加 375 KB,從而使當前平均區塊大小增加 4 倍。如果達到最大數量的 blob,我們實質上將當前區塊大小增加了七倍。

最壞情況下的區塊大小從約 1.77 MB 增加到約 2.5 MB。這個估算沒有將區塊的 CL (共識層) 部分考慮在內。但不管怎樣,在遭受 DoS 攻擊的情況下,我們必須做好應對這種最大區塊大小的準備。

總結

最終,如果要提高當前的區塊 Gas 上限,我們需要在實施前進行徹底的研究和分析。雖然像 Coinbase、Binance、Kraken 或 Lido 節點運營商這樣的成熟的實體能夠應對超過 4000 萬的區塊 Gas 上限的情況,但獨立質押者可能會比較困難。

因此,這樣的決策必須經過深思熟慮,以確保我們不會犧牲去中心化。

最後,構建一個像 Facebook 那樣容量大、性能強的東西相對容易,但重要的是不能失去我們大多數人所追求的東西:去中心化。

  • Related Posts

    以太坊的潛力 不只在現貨ETF的通過

    Jessy,比特鏈視界 對於以太坊一致唱衰的情緒,在以太坊現…

    以太坊治理反思:為什麼對 EIP-3074 事件感到不滿?

    來源:布嚕說 本文闡述了我對近期 EIP-3047 事件的思…

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

    You Missed

    歷史性轉折:比特幣正在成為避險資產

    • By jakiro
    • 19 4 月, 2025
    • 3 views
    歷史性轉折:比特幣正在成為避險資產

    是什麼讓加密貨幣rug pull事件頻發?

    • By jakiro
    • 18 4 月, 2025
    • 8 views
    是什麼讓加密貨幣rug pull事件頻發?

    Wintermute Ventures:我們為什麼投資Euler?

    • By jakiro
    • 18 4 月, 2025
    • 9 views
    Wintermute Ventures:我們為什麼投資Euler?

    川普可以將鮑威爾炒魷魚嗎?會帶來什麼經濟風險?

    • By jakiro
    • 18 4 月, 2025
    • 10 views
    川普可以將鮑威爾炒魷魚嗎?會帶來什麼經濟風險?

    Glassnode:我們正在經歷牛熊轉換嗎?

    • By jakiro
    • 18 4 月, 2025
    • 9 views
    Glassnode:我們正在經歷牛熊轉換嗎?

    The Post Web加速器首批8個入選項目速覽

    • By jakiro
    • 17 4 月, 2025
    • 11 views
    The Post Web加速器首批8個入選項目速覽
    Home
    News
    School
    Search