newsence
來源篩選

EVM Stack and Memory Usage Statistics Report

ethresear.ch

This report analyzes over 2 million EVM calls on the Ethereum mainnet to provide empirical data on stack height, memory allocation, and call depth distribution. The findings reveal that the vast majority of transactions operate well below the EVM's theoretical resource limits, with 90% of calls using less than 1 KiB of memory.

newsence

EVM 堆疊與記憶體使用統計報告

ethresear.ch
2 天前

AI 生成摘要

本報告分析了以太坊主網上超過 200 萬次 EVM 調用,提供關於堆疊高度、記憶體分配和調用深度分佈的實證數據。研究結果顯示,絕大多數交易的運行遠低於 EVM 的理論資源限制,其中 90% 的調用使用的記憶體少於 1 KiB。

以太坊主網 | 1,297 個區塊 | 區塊高度 24,409,278–24,514,399

概覽

指標 | 數值
--- | ---
分析區塊數 | 1,297
區塊範圍 | 24,409,278 – 24,514,399
EVM 呼叫總數 | 2,092,522
交易總數 | 255,696
平均每次交易呼叫數 | 8.2
平均每個區塊呼叫數 | 1613
平均每個區塊交易數 | 197


1. EVM 堆疊高度 (項目數)

每次 EVM 呼叫中觀察到的最大操作數堆疊深度(每次呼叫取一個樣本)。

指標 | 數值
--- | ---
樣本總數 | 2,092,522
最小值 | 0
p50 | 8
p75 | 16
p90 | 32
p95 | 32
p99 | 32
p99.9 | 64
最大值 | 651

分佈

     0 |  153 (0.0%)     1 |  0 (0.0%)     2 | ██ 36,066 (1.7%)     4 | ████████████████ 265,738 (12.7%)     8 | ██████████████████████████████████████████████████ 795,021 (38.0%)    16 | ████████████████████████████████████████████████ 763,410 (36.5%)    32 | █████████████ 219,094 (10.5%)    64 |  13,003 (0.6%)   128 |  34 (0.0%)   256 |  0 (0.0%)   512 |  3 (0.0%)

累積分佈

< 1 | 0.0%
< 4 | 1.7%
< 8 | ███████ 14.4%
< 16 | ██████████████████████████ 52.4%
< 32 | ████████████████████████████████████████████ 88.9%
< 64 | █████████████████████████████████████████████████ 99.4%
< 128 | █████████████████████████████████████████████████ 100.0%


2. EVM 記憶體大小 (位元組)

每次 EVM 呼叫分配的最大記憶體(以位元組為單位)。

指標 | 數值
--- | ---
樣本總數 | 2,092,522
最小值 | 0B
p50 | 128B
p75 | 256B
p90 | 512B
p95 | 1KiB
p99 | 4KiB
p99.9 | 16KiB
最大值 | 578.8KiB

分佈

    0B |  8,786 (0.4%)   32B |  4,675 (0.2%)   64B | ██████████████ 332,614 (15.9%)  128B | ██████████████████████████████████████████████████ 1,168,239 (55.8%)  256B | ██████████ 241,638 (11.5%)  512B | █████ 132,630 (6.3%)  1KiB | █████ 128,496 (6.1%)  2KiB | ██ 48,946 (2.3%)  4KiB |  17,222 (0.8%)  8KiB |  6,135 (0.3%) 16KiB |  1,869 (0.1%) 32KiB |  411 (0.0%) 64KiB |  599 (0.0%)128KiB |  255 (0.0%)256KiB |  4 (0.0%)512KiB |  3 (0.0%)

累積分佈

< 1B | 0.4%
< 64B | 0.6%
< 128B | ████████ 16.5%
< 256B | ████████████████████████████████████ 72.4%
< 512B | █████████████████████████████████████████ 83.9%
< 1KiB | █████████████████████████████████████████████ 90.3%
< 2KiB | ████████████████████████████████████████████████ 96.4%
< 4KiB | █████████████████████████████████████████████████ 98.7%
< 8KiB | █████████████████████████████████████████████████ 99.6%
< 16KiB | █████████████████████████████████████████████████ 99.8%
< 32KiB | █████████████████████████████████████████████████ 99.9%
< 64KiB | █████████████████████████████████████████████████ 100.0%


3. 交易呼叫深度

每次交易的最大呼叫嵌套深度(每次交易取一個樣本)。

指標 | 數值
--- | ---
樣本總數 | 255,696
最小值 | 0
p50 | 1
p75 | 2
p90 | 4
p95 | 4
p99 | 8
p99.9 | 8
最大值 | 35

分佈

     0 | ██████████████████████████████████████████████████ 116,269 (45.5%)     1 | ██████████████████████████ 61,369 (24.0%)     2 | █████████████████ 40,994 (16.0%)     4 | ████████████ 29,283 (11.5%)     8 | ███ 7,547 (3.0%)    16 |  233 (0.1%)    32 |  1 (0.0%)

累積分佈

< 1 | ██████████████████████ 45.5%
< 2 | ██████████████████████████████████ 69.5%
< 4 | ██████████████████████████████████████████ 85.5%
< 8 | ████████████████████████████████████████████████ 97.0%
< 16 | █████████████████████████████████████████████████ 99.9%
< 32 | █████████████████████████████████████████████████ 100.0%


4. 交易峰值堆疊 (項目數)

交易過程中所有活動呼叫幀的峰值總計堆疊項目數(每次交易取一個樣本)。

指標 | 數值
--- | ---
樣本總數 | 255,696
最小值 | 0
p50 | 16
p75 | 32
p90 | 64
p95 | 128
p99 | 128
p99.9 | 256
最大值 | 664

分佈

     0 |  153 (0.1%)     1 |  0 (0.0%)     2 | ██ 6,900 (2.7%)     4 | ██ 6,704 (2.6%)     8 | ██ 7,128 (2.8%)    16 | ██████████████████████████████████████████████████ 140,607 (55.0%)    32 | ██████████ 30,782 (12.0%)    64 | ████████████████ 45,555 (17.8%)   128 | █████ 16,426 (6.4%)   256 |  1,434 (0.6%)   512 |  7 (0.0%)

累積分佈

< 1 | 0.1%
< 4 | █ 2.8%
< 8 | ██ 5.4%
< 16 | ████ 8.2%
< 32 | ███████████████████████████████ 63.2%
< 64 | █████████████████████████████████████ 75.2%
< 128 | ██████████████████████████████████████████████ 93.0%
< 256 | █████████████████████████████████████████████████ 99.4%
< 512 | █████████████████████████████████████████████████ 100.0%


5. 交易峰值記憶體 (位元組)

交易過程中所有活動呼叫幀的峰值總計記憶體(每次交易取一個樣本)。

指標 | 數值
--- | ---
樣本總數 | 255,696
最小值 | 0B
p50 | 256B
p75 | 1KiB
p90 | 4KiB
p95 | 8KiB
p99 | 16KiB
p99.9 | 128KiB
最大值 | 584.2KiB

分佈

    0B | ███ 6,168 (2.4%)   32B |  93 (0.0%)   64B | ████ 9,477 (3.7%)  128B | ██████████████████████████████████████████████████ 95,450 (37.3%)  256B | █████████████████████████████ 56,335 (22.0%)  512B | █████ 11,236 (4.4%)  1KiB | ██████████ 19,891 (7.8%)  2KiB | ████████████ 24,416 (9.5%)  4KiB | █████████ 18,152 (7.1%)  8KiB | ████ 8,852 (3.5%) 16KiB | █ 3,602 (1.4%) 32KiB |  1,250 (0.5%) 64KiB |  392 (0.2%)128KiB |  247 (0.1%)256KiB |  131 (0.1%)512KiB |  4 (0.0%)

累積分佈

< 1B | █ 2.4%
< 128B | ███ 6.2%
< 256B | █████████████████████ 43.5%
< 512B | ████████████████████████████████ 65.5%
< 1KiB | ██████████████████████████████████ 69.9%
< 2KiB | ██████████████████████████████████████ 77.7%
< 4KiB | ███████████████████████████████████████████ 87.2%
< 8KiB | ███████████████████████████████████████████████ 94.3%
< 16KiB | ████████████████████████████████████████████████ 97.8%
< 32KiB | █████████████████████████████████████████████████ 99.2%
< 64KiB | █████████████████████████████████████████████████ 99.7%
< 128KiB | █████████████████████████████████████████████████ 99.9%
< 512KiB | █████████████████████████████████████████████████ 100.0%


核心結論

  • 堆疊 (Stack): 88.9% 的 EVM 呼叫使用少於 32 個堆疊項目。p99 = 32,觀察到的最大值 = 651(EVM 限制為 1024)。

  • 記憶體 (Memory): 90.3% 的 EVM 呼叫使用少於 1 KiB 的記憶體。p99 = 4KiB,觀察到的最大值 = 578.8KiB。

  • 呼叫深度 (Call depth): 45.5% 的交易沒有進行內部呼叫。85.5% 的深度保持在 4 以下。觀察到的最大值 = 35。

  • 交易峰值堆疊: p50 = 16,p99 = 128,觀察到的最大值 = 664。

  • 交易峰值記憶體: p50 = 256B,p99 = 16KiB,觀察到的最大值 = 584.2KiB。

  • 每次交易呼叫數: 中位數 7.7,最小值 1.0,跨區塊最大值 253.6。


研究方法

數據是透過對 的 EVM 執行過程進行檢測收集而來。

指標說明

  • 堆疊高度 (Stack height) — 單次 EVM 呼叫中觀察到的最大 EVM 操作數堆疊項目數量。每次呼叫取一個樣本。

  • 記憶體大小 (Memory size) — 單次 EVM 呼叫中分配的最大 EVM 記憶體(以位元組為單位)。每次呼叫取一個樣本。

  • 呼叫深度 (Call depth) — 交易過程中達到的最大 CALL/CREATE 嵌套深度。每次交易取一個樣本。

  • 交易峰值堆疊 (Tx peak stack) — 交易過程中所有活動呼叫幀的峰值總計堆疊項目數。每次交易取一個樣本。

  • 交易峰值記憶體 (Tx peak memory) — 交易過程中所有活動呼叫幀的峰值總計記憶體(以位元組為單位)。每次交易取一個樣本。

HDR 直方圖

數值使用 log2 分桶記錄到 HDR (高動態範圍) 直方圖中。這是 的簡化變體,每個 2 的冪次方為一個桶:

  • 桶 0:數值 = 0

  • i (i > 0):數值範圍在 [2^(i−1), 2^i)

這提供了 21 個桶,涵蓋從 0 到超過 100 萬的數值,並具有恆定的相對誤差:每個桶跨越 2 倍的範圍。

百分位數估計

百分位數 (p50, p75, p90, p95, p99, p99.9) 是從直方圖桶計數中計算出的近似值。對於給定的百分位數 p,我們找到第一個累積計數達到 p × N(其中 N 是總樣本數)的桶,並將該桶的下界報告為百分位數值。這意味著報告的百分位數可能會低估真實值,誤差最高可達 2 倍(即一個桶的寬度)。最小值和最大值則是精確追蹤的。

        1 則貼文 - 1 位參與者        [閱讀完整主題](https://ethresear.ch/t/evm-stack-and-memory-usage-statistics-report/24209)