Skip to content

EIP-8037 — State creation gas

Status: Ready for the public MCP (not launched). Use the website exploration today.

What became possible

Why isn't 21,000 gas enough for a simple ETH transfer anymore? EIP-8037 splits gas into an execution dimension and a state dimension. Creating a new account (first-touch value transfer) charges state-creation gas — about 183,600 (120 × 1530) — on top of familiar execution gas. A first write to an empty storage slot charges about 97,920 (64 × 1530).

The MCP server runs a value-bearing transaction (run_transaction) and returns paid gasUsed (gasUsedScope: transaction). On Amsterdam it also returns txRegularGas / txStateGas. Compare Osaka vs Amsterdam — preview includes state gas; baseline does not. A first-touch transfer is about 21,000 vs 204,600.

What you can ask your agent

Once the public MCP is live (Connect), try prompts like:

  • “Run a 1 wei transfer to an empty account on Amsterdam — what gas would a wallet need?”
  • “Same transfer on Osaka vs Amsterdam — how does paid gas differ?”
  • “Why would a wallet that still uses a gas limit of 21000 fail a first-touch transfer after Amsterdam?”
  • “If the recipient already has a balance, does Amsterdam still add state-creation gas?”
  • “My contract writes a new storage slot on Amsterdam — how much extra paid gas vs Osaka?”

These are inspiration prompts — curiosity, understanding, or builder checks.

What the server does

StepActionPurpose
1Discover supportConfirm 8037 catalog entry; shapes include transaction
2Run transactionExecute a value tx on amsterdam or osaka; read gasUsed and txStateGas
json
{
  "from": "0x00000000000000000000000000000000000000ee",
  "to": "0x00000000000000000000000000000000000000aa",
  "value": "1",
  "fork": { "baseHardfork": "amsterdam" }
}

to should be an empty / never-funded account so Amsterdam includes first-touch state gas. Repeat with "baseHardfork": "osaka". Prefund to via accounts to collapse account-creation gas. Optional gasLimit: "21000" shows Amsterdam failing.

SSTORE programs may also use Run bytecode.

Fork caveat

Run the same transaction twiceosaka (baseline), then amsterdam (preview). Lead with gasUsed (paid tx gas): about 21,000 vs 204,600 for first-touch. On Amsterdam, txStateGas is the state dimension (~183,600).

Twins and spec

Link
Website exploration (interactive textbook)EIP-8037 on feelyourprotocol.org
Canonical specEIP-8037
Coverage indexCoverage

Changelog

EIP-8037 MCP Catalogue Changelog
  1. v0.42026-09-08Moved first-touch observation to run_transaction (paid gas + txStateGas).
  2. v0.32026-09-08Lead with approxTxGasUsed (21000 + call-frame) on messageCall; gasUsed stays call-frame.
  3. v0.22026-09-08Named catalog row — simulate gasUsed on Amsterdam vs Osaka; first-touch and new-slot encoding notes; gasLimit 21000 call-frame OOG.
  4. v0.12026-09-07Runnable via simulate gasUsed (Amsterdam vs Osaka first-touch); named catalog row deferred to the engine module.

Use = end-user reference. Internals = architecture and operations. Each section carries its own micro-changelog.