← Back to overview
Minimal set Status: Draft

EIP-8279

Block Access List Byte Floor

Meters the bytes that opcodes add to the Block Access List at runtime and folds them into the transaction floor, closing the "mixed block" bypass left open by EIP-8131.

Prices BAL bytes at 64 gas / byteWorst case 1.55 MB → 0.89 MB~42% block-content reduction+4.06% gas on 3.79% of txs
View the specification ↗

The problem

EIP-7928 introduces Block Access Lists (BALs), but they open a back door. An attacker can combine cold SLOADs (which add 32 BAL bytes for only 2,100 gas) with cheap calldata to pack roughly 1.55 MB into a 60M-gas block. EIP-8131 prices the static content of a transaction, but it never sees the BAL bytes that opcodes generate while the transaction runs. That’s the gap.

What it does

EIP-8279 meters BAL bytes as they are produced at runtime and charges them into the same floor accumulator at the uniform 64 gas per byte rate. Before each insertion into the BAL, meter_bal_data() charges for the bytes about to be added:

TriggerBAL bytes charged
Cold account access20
Cold storage access (key)32
Storage value change (once per slot)32
Value-bearing call / transfer32

It also extends EIP-8131’s static seed by 51 BAL bytes per authorization (address + delegation marker + nonce).

Why it matters for scaling

Together with EIP-8131 this makes the whole-block byte ceiling hold at block_gas_limit / 64 even for adversarial mixed blocks, the case the anchor analysis identified as the binding constraint (mixed blocks reach 2.25× the plain transfer block’s byte density). Worst-case content drops from ~1.55 MB to ~0.89 MB, a roughly 42% reduction, restoring the clean bandwidth bound.

Impact

  • Affects 3.79% of mainnet transactions, adding ~4.06% gas, concentrated in calldata-heavy and cold-storage-heavy workloads.
  • Keeps block size a simple function of the gas limit, the property the higher limit depends on.