EMasterTPETH Supply Hub
EN한국어

Methodology

This page documents the exact method behind every figure on the dashboard so each one can be independently reproduced. It also states which figures this site measures itself and which it quotes — those are different claims and are worth separating.

Measured here vs quoted

FigureOriginHow
Burn — base fee and blobMeasured here Block headers across a 7,200-block window
Median base fee, gas usedMeasured here Per-block header fields from the same window
L2 bridge escrow balancesMeasured here eth_getBalance on each canonical escrow
Total supply, staked ETHQuoted Aggregated consensus-layer feed. Summing every account balance is not something a public JSON-RPC endpoint can do, and the beacon-side sum needs full consensus state
Net issuance, annual rateDerived Combines the measured burn with the quoted supply and stake

The measured figures need no API key and no third party: a public RPC endpoint is sufficient. The quoted figures are the reason this page does not claim that everything here is self-measured.

Base-fee burn

EIP-1559 burns the base fee of every transaction. We fetch 7,200 consecutive block headers (≈24 hours at 12-second slots) and sum baseFeePerGas × gasUsed per block. The window is scaled to exactly 24h using the real timestamp span of the first and last block, so short-term slot variance does not distort the daily rate.

If a few blocks inside the window fail to fetch (up to 5%), the sum would understate the daily rate by exactly the missing fraction — so we apply a density correction that imputes missing blocks at the window average, and the dashboard displays the window coverage whenever it is below 100%. Beyond 5% missing, the whole window is withheld instead (see data-quality rules below).

Blob burn (EIP-4844)

Blob-carrying transactions additionally burn baseFeePerBlobGas × blobGasUsed. We take the per-block blob base fee from eth_feeHistory — the client computes it — rather than deriving it by hand from excessBlobGas, because the update fraction changes across forks and blob-parameter-only upgrades. Hand-derivation silently breaks at every such fork; the client value does not.

Supply and staking

These two figures are quoted, not measured here — see the table above for why. Total supply is assembled from consensus-layer sums: execution balances + beacon balances − processed deposits (execution side in wei, beacon side in gwei — a classic unit trap). The staked amount is the beacon balance sum. Note that the deposit-contract balance alone only ever grows: withdrawals are credited at the system level elsewhere, so reading the contract balance as "current stake" overstates it.

Issuance estimate

Annual consensus issuance is bounded by approximately 166.32 × √(staked ETH). Actual issuance runs slightly below the bound (it depends on participation and sync-committee duty), so the net-issuance figure on the dashboard is a conservative upper estimate of inflation pressure. When the verdict flips near zero, treat it as "approximately balanced" rather than a hard sign change.

L2 bridge escrows

We read the native ETH balance of each canonical bridge escrow contract directly. Two rules: locked ETH is not subtracted from supply (it is still ETH on L1), and a 0.0 balance on a known escrow is treated as "address migrated" — bridge contracts move during upgrades, and counting a stale address as zero would silently understate the total.

Data-quality rules

Divergence checks

Every cycle the collector compares its own burn measurement against an independent reference and records the difference. Agreement is typically within a few percent — window boundaries never line up exactly — and a larger gap raises a data-quality warning rather than being published silently. These comparisons are an internal check on our own arithmetic; they are not the source of any figure shown on the dashboard.

Update cadence & reproduction

The collector runs every 6 hours. To reproduce any number you need nothing but a public Ethereum RPC: fetch the block range shown on the dashboard, apply the formulas above, and compare. If you find a discrepancy beyond RPC-lag noise, something is wrong — tell us on the blog.