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.
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:
| Trigger | BAL bytes charged |
|---|---|
| Cold account access | 20 |
| Cold storage access (key) | 32 |
| Storage value change (once per slot) | 32 |
| Value-bearing call / transfer | 32 |
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.