@@ -72,6 +72,52 @@ None required - the existing framework supported writing these tests.
7272
7373---
7474
75+ ## 2026-06 - CREATE2 Failed Deposit Storage State-Gas Refund - Amsterdam
76+
77+ ### Description
78+
79+ A consensus divergence was found via goevmlab differential fuzzing in
80+ go-ethereum's Amsterdam (bal-devnet-7) EIP-8037 implementation: when a ` CREATE2 `
81+ whose init code writes new storage slots fails its code deposit — either because
82+ the deposited code is rejected by EIP-3541, or because the EIP-8037 code-deposit
83+ state gas cannot be paid — the create frame reverts, but only the new-account
84+ state-creation gas is refunded; the init's storage-slot state-creation gas
85+ (` STATE_BYTES_PER_STORAGE_SET * COST_PER_STATE_BYTE ` per slot) is not. The
86+ transaction over-reports gas used (by ` num_slots * 97920 ` ), so the sender and
87+ coinbase balances — and the post-state root — diverge from the reference spec
88+ and from revm/nethermind/besu/erigon/ethrex.
89+
90+ ### Root Cause Analysis
91+
92+ - State-creation gas charged inside a ` CREATE ` /` CREATE2 ` init frame must be fully
93+ reverted when the create fails, for both the new account and any storage slots
94+ the init wrote. The existing ` eip8037 ` suite covered the create-init storage
95+ charge on the success path and same-tx slot-reset refunds, but never isolated
96+ the refund of storage-slot state gas on a create * failure* .
97+ - The new-account state-gas refund on failure was already correct, which masked
98+ the missing storage-slot refund: a failing create with no init storage agrees
99+ across clients, so only the combination "failing create + init storage"
100+ exposes it.
101+ - Differential fuzzing (goevmlab) surfaced it where direct enumeration had not.
102+
103+ ### Steps Taken To Avoid Recurrence
104+
105+ - Added a parametric regression test over the failure mechanism (EIP-3541 reject
106+ and code-deposit OOG) and the number of init storage slots (` 0 ` , ` 1 ` , ` 3 ` ). The
107+ ` slots=0 ` case is a negative control (account-creation refund only) that must
108+ not diverge; the ` slots>=1 ` cases isolate the storage-slot state-gas refund on
109+ create failure and scale the discrepancy with the slot count.
110+
111+ ### Implemented Test Case
112+
113+ - ` tests/amsterdam/eip8037_state_creation_gas_cost_increase/test_state_gas_create.py::test_create2_failed_deposit_refunds_storage_state_gas `
114+
115+ ### Framework/Documentation Changes
116+
117+ None required - the existing framework supported writing this test.
118+
119+ ---
120+
75121## TEMPLATE
76122
77123## Date - Title - Fork
0 commit comments