Skip to content

EIP-7976 — Calldata floor ​

EIP-7976Calldata floor

Runnable

Live on the hosted MCP — free on Amsterdam. Connect an agent and ask.

Amsterdam (Glamsterdam) vs FusakaRuns withrun_transaction

What became possible ​

When does calldata cost 64 gas per byte, and when does a normal call still pay 4 and 16?

On Glamsterdam a transaction that mostly carries data pays 64 gas for every calldata byte, zero or not. A call that does enough work keeps the ordinary price: 4 gas per zero byte and 16 per nonzero byte. Fusaka is the same rule at 10 per zero byte and 40 per nonzero byte. Zero bytes are the ones that jump.

The MCP server runs your transaction. It does not ship demo transactions.

Access-list bytes pay that same 64 gas rate (EIP-7981). That rule is already on when you run under Glamsterdam. Pass accessList on this verb; leave 7981 out of eips.

Try asking your agent ​

The hosted MCP is live (Connect). Copy a prompt into your agent — each quote is self-contained.

Job

Fusaka vs Amsterdam

Call an existing account on Amsterdam with calldata of 100 zero bytes — what is intrinsic gas on Fusaka versus Amsterdam?

Look forabout 22,000 on Fusaka and 21,400 on Glamsterdam

Agent will likely call run_transaction

Lesson

Amsterdam

Call an existing account on Amsterdam with empty calldata — does the 64-gas-per-byte floor add anything beyond the 15,000 zero-value call?

Look forgasUsed staying at 15,000

Agent will likely call run_transaction

Check

Amsterdam

On Amsterdam, a contract call has gasLimit 15,000 but calldata is 200 zero bytes — does the transaction fail before execution?

Agent will likely call run_transaction

What the server does ​

  1. Discover support

    Confirm the 7976 row; tools is run_transaction.

  2. Run transaction

    Same calldata on fusaka then glamsterdam; read gasUsed.

Prefund the recipient when it should already exist, so the run does not also create an account. gasUsed is what the sender pays, including the transaction base.

Access-list floor (EIP-7981) ​

Empty calldata, one listed address, one storage key — same shape as the exploration’s “bytes hidden in an access list” example:

json
{
  "from": "0x00000000000000000000000000000000000000c1",
  "to": "0x00000000000000000000000000000000000000d3",
  "accessList": [
    {
      "address": "0x00000000000000000000000000000000000000d3",
      "storageKeys": ["0x0000000000000000000000000000000000000000000000000000000000000000"]
    }
  ],
  "accounts": [
    { "address": "0x00000000000000000000000000000000000000d3", "balance": "1000000000000000000" }
  ],
  "fork": { "baseHardfork": "glamsterdam" }
}

On Glamsterdam expect gasUsed: "23228"; on fusaka the same payload is 25300 (no floor on list bytes).

Fork caveat

Run the same transaction twice — fusaka (baseline), then glamsterdam (preview). One hundred zero bytes and no other work: 22,000 on Fusaka and 21,400 on Glamsterdam (the per-byte floor rose, and the transaction base moved under EIP-2780). One hundred nonzero bytes: 25,000 on Fusaka and 21,400 on Glamsterdam. An empty call to an existing account stays 15,000 on Glamsterdam — the floor adds nothing.

Twins and spec ​

Canonical spec
EIP-7976
Spec date
2026-07-07
Coverage index
EIP catalogue
EIP-7976 MCP Catalogue Changelog
EIP-7976 MCP Catalogue Changelog
  1. v0.22026-10-04Document accessList for EIP-7981 floor (23228 vs 25300 on a one-key list).
  2. v0.12026-10-01Runnable twin — run_transaction gasUsed shows the 64-gas floor against Fusaka 10/40.

Get started = connect and ask questions. Reference = catalogues and tool schemas. Internals = for builders.