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
| Step | Action | Purpose |
|---|---|---|
| 1 | Discover support | Confirm 8037 catalog entry; shapes include transaction |
| 2 | Run transaction | Execute a value tx on amsterdam or osaka; read gasUsed and txStateGas |
{
"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 twice — osaka (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 spec | EIP-8037 |
| Coverage index | Coverage |
Changelog
- v0.42026-09-08Moved first-touch observation to run_transaction (paid gas + txStateGas).
- v0.32026-09-08Lead with approxTxGasUsed (21000 + call-frame) on messageCall; gasUsed stays call-frame.
- v0.22026-09-08Named catalog row — simulate gasUsed on Amsterdam vs Osaka; first-touch and new-slot encoding notes; gasLimit 21000 call-frame OOG.
- v0.12026-09-07Runnable via simulate gasUsed (Amsterdam vs Osaka first-touch); named catalog row deferred to the engine module.