Nonceworks

Glamsterdam on Sepolia: a first ETH send now needs 204,600 gas

Written 11 October 2026

Written 2026-10-11 for teams that send transactions from a relayer, a bot or a keeper; the first-send and USDC numbers were re-run on 2026-10-22 with the same results, and the signed-gas probes were re-run that day at more gas limits. Glamsterdam has been live on Sepolia since block 11,856,337 (2026-10-06 13:53:36 UTC) and reaches Hoodi on 2026-10-26 at 17:42:48 UTC; mainnet has no date yet. We measured with eth_estimateGas and eth_call on public Sepolia endpoints at block 11,856,336, the last one before the fork, and at block 11,889,212 (2026-10-11 04:07 UTC), and we read 25 live blocks with their receipts. We sent no transactions. Method and sources are at the end.

What changed

Three EIPs in the upgrade reprice state (EIP-7773 lists the full set):

  • EIP-8037 prices new state at 1,530 gas per byte: 183,600 for a new account and 97,920 for a new storage slot (20,000 before), metered as a separate "state gas" dimension.
  • EIP-8038 raises a cold account access from 2,600 to 3,000 and the write part of a storage change from 2,800 to 10,000.
  • EIP-2780 splits the flat 21,000: a transfer to an existing account still costs 21,000, a transfer to yourself 12,000, and a transfer that creates an account pays the 183,600 on top.

All three are in Last Call until 2026-11-01, so the mainnet values can still change.

The number to know

ETH transfer Before After
To a never-used address 21,000 204,600
To an existing account 21,000 21,000
To yourself, value 0 21,000 12,000

204,600 is exact: eth_call with a 204,599 gas limit runs out of gas and 204,600 succeeds. eth_estimateGas returned 207,391 for the same transfer on reth 2.7.0, Tenderly and dRPC, a little above the minimum; a re-run on the reth endpoint later the same day returned the exact 204,600. On 2026-10-22 that endpoint, by then on reth 2.8.0, and Tenderly returned 207,391 again, and the 204,599 and 204,600 calls gave the same results at the original block and at block 11,970,584. Either way a client that estimates gets it right.

A transfer with too little gas is not rejected. It is included, uses its whole gas limit and moves no ETH, as EIP-2780 specifies ("the transaction is included, execution is skipped"). Sepolia already shows it. In the 25 blocks from 11,889,217 to 11,889,241 (04:08 to 04:12 UTC on 2026-10-11):

  • 34 plain ETH transfers failed this way: 13 with a 21,000 limit, 11 with 22,000 and 10 with 200,000, from 7 senders to 22 addresses. None of the 22 had code, and the three we checked fully had no balance and no nonce.
  • 10 first sends succeeded, each using exactly 204,600 gas.
  • 118 transfers with a 21,000 limit to existing accounts went through as before.

It has not stopped. In the 25 blocks from 11,970,550 to 11,970,574 (15:52 to 15:56 UTC on 2026-10-22), 26 plain ETH transfers failed the same way, 25 of them with a 21,000 limit and one with 100,000, from 20 senders to 7 addresses without code, and 50 first sends succeeded using exactly 204,600.

Measured before and after

eth_estimateGas on the same Sepolia contracts at the two blocks. Rows marked * gave identical results on a second provider, as did the first-send estimate above.

Operation Before After
USDC transfer to a never-used address * 62,760 153,921
USDC transfer to an existing holder 45,415 54,632
WETH9 transfer to a never-used address 51,723 141,691
WETH9 transferFrom to a never-used address * 51,961 141,930
Safe 1-of-1, ETH to a never-used address * 89,120 256,467
Safe 1-of-1, WETH9 to a never-used address 87,974 186,896
ERC-4337 SimpleAccountFactory v0.7, createAccount * 176,563 855,874
ERC-4337 EntryPoint v0.7, first nonce of a new sender * 44,081 126,806
ERC-4337 EntryPoint v0.7, depositTo a new account 45,776 134,527
Keeper test upkeep, first performUpkeep 53,921 143,495
Keeper test upkeep, later performUpkeep 36,389 44,806

The Safe rows run the real Safe proxy and SafeL2 v1.4.1 code with a one-owner setup supplied as a state override, so both runs see the same Safe. The keeper rows do the same with our UpkeepCounter test contract.

In this table, operations that create an account or a storage slot cost 2.1 to 4.8 times what they did (a bare first ETH send, 9.7 times). Operations on existing state cost about a fifth more: USDC to an existing holder +20%, a later perform +23%.

Pinned limits that now fail

Pinned limit Where we saw it After the fork
21,000 for ETH sends OpenZeppelin Relayer's fallback and docs examples; PoWFaucet's example config until 2026-10-12; 83 senders in the 2026-10-11 blocks above Fails for every never-used recipient
22,000 or 200,000 for ETH sends One Sepolia sender each, failing in the 2026-10-11 blocks above Anything under 204,600 fails the same way
65,000 for ERC-20 transfer OpenZeppelin Relayer's fallback Fails for new holders (USDC 153,921); still enough for a USDC transfer to an existing holder (54,632)
80,000 for transferFrom OpenZeppelin Relayer's fallback Fails for new holders (WETH9 141,930)
200,000 for any other call OpenZeppelin Relayer's fallback Fails for a first ETH send with data 0x, a Safe ETH send to a new address (256,467) and an account deployment (855,874)

Before the fork, 21,000 and 200,000 covered a plain ETH send to any address without code, and 65,000 covered a USDC transfer to a new holder (62,760). So a pin that worked until 2026-10-06 can fail now without any code change.

Gas a user signed fails at normal gas limits

Some limits are part of what a user signs, so whoever submits the transaction cannot change them. A signed limit sized for the old prices fails when the inner call creates state, at any transaction gas limit up to 16,777,216.

  • Safe. With gasPrice 0, Safe v1.4.1 gives the inner call all but 2,500 of the remaining gas, so only the transaction's own limit matters. With a non-zero gasPrice (refund-style relaying) the inner call gets exactly the signed safeTxGas (Safe.sol L203). A 1-of-1 Safe transaction moving WETH9 to a new holder with safeTxGas 60,000 and gasPrice 1 returns true in eth_call before the fork and false after, at a 1,000,000 gas limit. False is not a revert: the Safe still uses up the nonce and emits ExecutionFailure (L170, L214).
  • ERC-4337. EntryPoint v0.7 runs the account deployment with the signed verificationGasLimit (AA13 if it runs out), counts the nonce update against the same limit (AA26) and calls the account with exactly callGasLimit (EntryPoint.sol L431-L435, L650-L656, L341). The deployment alone went from 176,563 to 855,874 gas and a first nonce from 44,081 to 126,806, as whole transactions. Those limits are inside the hash the user signs (UserOperationLib.sol L54-L69), so the bundler cannot raise them.
  • Any fixed-gas call. A contract that calls another with 30,000 gas, where the callee writes a new storage slot, succeeds before the fork and fails after, at a 1,000,000 gas limit.

Above 16,777,216, the EIP lets whoever submits the transaction pay for that state. EIP-8037 caps a transaction's execution gas at 16,777,216 and puts the rest of its gas limit into a state-gas reservoir, which "is passed to a child frame in full: the 63/64 rule applies to gas_left only". New state is paid from the reservoir first, and what is left of it is returned to the sender. On 2026-10-22 the ethpandaops endpoint (reth 2.8.0) did this in eth_call, at block 11,889,212 and at the latest block: the Safe transaction above returned false at 16,777,216 and true at 16,900,000, 17,000,000, 20,000,000 and 30,000,000, and the 30,000-gas call failed at 16,777,216 and succeeded at the same higher limits. Other answers differ: Tenderly returned false for both at every limit we tried (up to 30,000,000); dRPC gave different results for the same 20,000,000 call; and on 2026-10-11 the ethpandaops endpoint, then on reth 2.7.0, returned false for both at 20,000,000. We sent no transaction, so what a block does with such a limit is not measured.

Gas paid from the reservoir is not visible to gasleft(): the GAS opcode "returns gas_left only (excluding the reservoir)". So the Safe refund, measured with gasleft() before and after the inner call (L200-L211), does not include it, and for ERC-4337 the EIP notes that the EntryPoint "cannot accurately attribute state-gas usage when it is funded by the reservoir". We did not test a bundle.

The Ethereum Foundation's replay of 929,731,274 past mainnet transactions under its EIP-8037 schedule finds 174,473,898 (18.77%) "fixable with a gas-limit increase" ("Runs out of gas at its original limit but completes with a higher one") and 2,687,652 (0.29%) "potentially broken" ("Fails even with a substantially raised gas limit"). ERC-4337 EntryPoints v0.6, v0.7 and v0.8 are the entry contract for 1,592,856 of the potentially broken ones, 59% (data, method).

OpenZeppelin Relayer 1.8.0 and 1.9.0

We ran the probes below on 1.8.0. Relayer 1.9.0, released on 2026-10-22, has the same default gas limits, the same estimate-failure fallback and the same replace path in its source, so what follows about gas limits applies to both. The post-fork block read was run on 1.8.0 only.

What holds:

  • The default path. Without gas_limit in the request, the relayer estimates and adds 10%: a first ETH send gets 225,060 to 228,130 (an estimate of 204,600 or 207,391, times 1.1).
  • Cancel and NOOP. make_noop sends a 0-value transfer to the relayer's own address with a 21,000 limit (on Arbitrum it estimates, falling back to 50,000). That needs 12,000 now.
  • Reading post-fork blocks: no errors in our run.

What fails for first sends:

  • The fallback when eth_estimateGas returns an error. The relayer then picks a limit from the shape of data: 21,000 with no data, 65,000 for transfer, 80,000 for transferFrom, 200,000 for anything else, including "0x". We ran the v1.8.0 image against Sepolia behind a proxy that failed eth_estimateGas, with a signer holding no ETH so every transaction stopped before signing, and it chose exactly those four limits (log line fallback to default gas limit).
  • Replace without gas_limit. replace_transaction does not estimate, and a missing gas_limit becomes 21,000 at signing. On a local anvil chain, a replacement sending 2 wei to a new address went into the pool with gas 21,000.
  • Your own gas_limit. A limit in the request is used as given, and the docs examples pass "gas_limit": 21000 for value sends.
  • Reported upstream: openzeppelin-relayer #949.

Upstream main (commit 487bfd2, 2026-10-22) has the same values. On 1.8.0 and 1.9.0: leave gas_limit out of new requests unless you computed it from a fresh estimate with room on top, always pass gas_limit on replace requests, and alert on the error-level log line failed to estimate gas limit. The line fallback to default gas limit, which names the limit chosen, is logged only at debug level (LOG_LEVEL=debug); the default level is info.

Keepers

Our keeper runner estimates performUpkeep, sends min(cap, estimate x 1.3), and skips the slot when the estimate is above the job's gas_limit_cap. Because it estimates, it stays correct. Two things move:

  • Caps. The first perform of our test upkeep went from 53,921 to 143,495. A cap set below that before the fork now skips those slots; the runner logs skip_gas_cap and raises the silence alert after the configured number of intervals. Nothing is sent above a cap.
  • Headroom. Creating our counter slot instead of updating it cost about 17,500 more before the fork and about 98,700 more after. A 30% margin absorbs one slot that turns new between simulation and inclusion only when the estimate is above about 58,000 before and 329,000 after. For the relayer's 10% margin the figures are about 175,000 and 987,000.

L2s and other EVM chains

As of 2026-10-11, none has scheduled these EIPs in what we read on GitHub:

  • OP Stack: a tracking issue, "Amsterdam on the OP Stack", opened 2026-09-24, "has no schedule yet" (optimism#23015).
  • Base: its Denim upgrade runs Osaka rules in the base/base source; a pull request mapping Denim to Amsterdam was closed without merging on 2026-09-24 (base#5003).
  • Gnosis: a Glamsterdam page since 2025-12-07 says the fork "activates all EIPs also activated on Ethereum mainnet", with no dates for Chiado or mainnet (gnosischain/specs).
  • XDC: per-EIP implementation issues opened 2026-10-09; "No network schedules it" (XDPoSChain#2730).
  • Arc: "EIP-8037 / Amsterdam is not active on any Arc chain" (arc-node#416).
  • Celo: its readiness issue covers Karst and Osaka, and "no Celo chain schedules a Karst/Osaka-based spec" (celo-kona#307). The Celo pull requests we found for Amsterdam are about its node and batcher working with Sepolia as the L1.
  • Taiko has a planning issue without dates (taiko-mono#22190); Hemi's EIP-8037 issue (op-geth#101) was closed as completed on 2026-09-14 with no activation named. Polygon's bor merged the upstream code on 2026-10-01 (bor#2455); we found no activation for it. We found nothing for Arbitrum, BNB Chain, Scroll or Linea.

L2 nodes on Sepolia did need updates to read the new L1 headers, for example "op-node fails after the Sepolia Glamsterdam upgrade" (QuarkChain/optimism#153).

What we did not measure

  • Mainnet. It has no date, and the values can change before Last Call ends.
  • Sent transactions. Everything here is eth_estimateGas and eth_call, plus other senders' receipts.
  • Other clients. Most numbers come from one endpoint that reported reth 2.7.0 at the time; the rows marked * and the signed-gas probes at a 1,000,000 gas limit matched on other providers. Above a 16,777,216 gas limit the providers disagree, as described under signed gas.
  • Logs and headers. Glamsterdam also adds a log for every ETH transfer (EIP-7708) and new header fields (EIP-7928, EIP-7843), which matter to indexers. This note covers gas.
  • The Ethereum Foundation replay is a counterfactual over past mainnet transactions, not a forecast.

A check of your own send paths

We can check one codebase, a repository or a service, for the pins above: fixed gas on value sends, the limits it falls back to when estimation fails, "no code, skip the estimate" shortcuts, gas fields in chain or network config, and limits your users sign (Safe safeTxGas with refunds, ERC-4337 verificationGasLimit and callGasLimit). Each hit is measured on Sepolia, and on Hoodi once it forks on 2026-10-26 at 17:42 UTC, with the numbers before and after. Each confirmed failure comes with a fix and a test, and one re-check once the values are final is included. It costs $299 per codebase, invoiced in USD; the pricing page lists it with our other fixed prices.

Method and sources

  • Endpoints: https://rpc.sepolia.ethpandaops.io (reth 2.7.0 on 2026-10-11 and 2.8.0 on 2026-10-22, all historical reads), https://sepolia.gateway.tenderly.co (cross-check), https://sepolia.drpc.org (fixed-gas call check), https://ethereum-sepolia-rpc.publicnode.com (latest blocks and the relayer run).
  • Blocks: before 11,856,336 (0xb4e9d0), after 11,889,212 (0xb56a3c).
  • First send: eth_estimateGas({"from":"0x0000000000000000000000000000000000000000","to":"0x5eed000000000000000000000000000000000001","value":"0x1"}, "0xb4e9d0") returns 0x5208 (21,000); with "0xb56a3c" it returns 0x32a1f (207,391) at 04:07 UTC, also on Tenderly and dRPC; the same endpoint returned 0x31f38 (204,600) at 19:20 UTC. With "gas":"0x31f37" (204,599) eth_call at 0xb56a3c returns "out of gas"; with "0x31f38" (204,600) it succeeds.
  • Contracts: USDC 0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238, WETH9 0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14, EntryPoint v0.7 0x0000000071727De22E5E9d8BAf0edAc6f37da032, SimpleAccountFactory v0.7 0x91E60e0613810449d098b0b5Ec8b51A0FE8c8985, SafeL2 v1.4.1 0x29fcb43b46531bca003ddc8fcb67ffe91900c762. Senders held real balances at both blocks, except the EntryPoint first-nonce row, whose sender is itself a fresh address; recipients were fresh addresses except in the existing-account rows.
  • Re-run on 2026-10-22 between 15:58 and 15:59 UTC: the first-send estimate, the 204,599 / 204,600 pair and both USDC rows at the same two blocks on the ethpandaops endpoint, the first-send estimate after the fork on Tenderly, and the 204,599 / 204,600 pair at block 11,970,584. One failed transfer from the 2026-10-22 blocks: 0x23287fe1... (21,000).
  • Signed-gas probes re-run on 2026-10-22 between 16:22 and 16:25 UTC with the 2026-10-11 call shapes (the Safe and the nested-call contracts supplied as state overrides) at gas limits from 1,000,000 to 30,000,000: on the ethpandaops endpoint at 11,889,212 (0xb56a3c) and at 11,970,701 (0xb6a88d, the latest block then), and on Tenderly and dRPC at 11,889,212. EIP-8037 reservoir rules as of ethereum/EIPs master f1ade09.
  • Failed transfers, two of the 34: 0x12f7d1ad... (21,000) and 0x7a2c2118... (200,000).
  • EIPs as of 2026-10-22 (ethereum/EIPs master f1ade09): EIP-7773 (Sepolia activation epoch 353024; Hoodi epoch 132352, 2026-10-26 17:42:48 UTC, as in the Ethereum Foundation's announcement; mainnet blank), EIP-8037, EIP-8038, EIP-2780.
  • OpenZeppelin Relayer v1.8.0: gas constants, fallback choice, where it is used, replacement data, signing default, NOOP, docs example.
  • OpenZeppelin Relayer v1.9.0 (commit 306f07e): gas constants, fallback choice, where it is used, replace path, replacement data, signing default, NOOP, docs example.
  • Ethereum Foundation replay: data files (generated 2026-08-24), method.
  • PoWFaucet: the example config set 21000 until d144d46 (2026-10-12) and sets 250000 now; the default was raised to 250,000 in #505.