# Geth: Amsterdam state-creation and block gas review

Public-source review dated 2026-10-27. Scope: EIP-8037 interacting with EIPs 7778 and 8038, including the EIP-2780/7702 transaction setup those rules depend on. No client, EVM, test suite, transaction, network node, or RPC was executed. Sources were read through public GitHub APIs, pinned raw files, EIP pages, and public test-release records.

**Outcome: no demonstrated, reachable consensus bug found in the reviewed paths.** One explicit EELS/client settlement difference is recorded below in the requested six-part format, with reachability unproved. It is not promoted to a confirmed bug. The known child-frame debt-repayment issue is fixed at the Geth pin. Public Hive result verification is incomplete because the specified listing returned HTTP 403.

## Pins and specification versions

These are the branch heads returned by the named public commit APIs during this review, not release-tag guesses:

| Repository / branch | Pinned commit | Committer timestamp (UTC) | Head lookup |
|---|---|---|---|
| Geth / master | `8817f99f92852f8ac53e596de6202dd9e3494065` | 2026-10-27 03:32:47 | [API](https://api.github.com/repos/ethereum/go-ethereum/commits/master) |
| execution-specs / forks/bogota (default) | `7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b` | 2026-10-27 17:40:55 | [API](https://api.github.com/repos/ethereum/execution-specs/commits/forks/bogota) |
| Nethermind / master | `d48833af88ec4224c86afadd1c596e8f619c406b` | 2026-10-27 12:00:20 | [API](https://api.github.com/repos/NethermindEth/nethermind/commits/master) |
| EIPs / master | `d4c575521d99ec881a444ab3af604e684b5f0743` | 2026-10-27 16:04:29 | [API](https://api.github.com/repos/ethereum/EIPs/commits/master) |
| consensus-specs / master | `8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2` | 2026-10-27 16:28:12 | [API](https://api.github.com/repos/ethereum/consensus-specs/commits/master) |

All source citations below contain these immutable hashes and exact line ranges. Source code was fetched from `raw.githubusercontent.com/<repository>/<hash>/<path>`; the GitHub blob URLs are line-addressable citations, not the source-reading mechanism. The Amsterdam directory on the execution-specs default branch was used; Bogota rules were not substituted for Amsterdam rules.

### Fork inventory

The scheduled list comes from [EIPS/eip-7773.md#L21-L40](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7773.md#L21-L40), also [rendered EIP-7773](https://eips.ethereum.org/EIPS/eip-7773#eips-scheduled-for-inclusion). Amsterdam's EL list agrees with its 14 execution EIPs: [src/ethereum/forks/amsterdam/__init__.py#L5-L20](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/__init__.py#L5-L20). Gloas identifies its incorporated changes, including CL changes and cross-layer interfaces, at [specs/gloas/beacon-chain.md#L159-L182](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L159-L182).

“Version” here means the exact EIP file at the EIPs pin above, plus the pinned executable EL specification or CL document; these EIP files do not provide independent semantic-version numbers. Every row links its current pinned EIP text and front-matter status. This inventory supplies context, not a review of the other clients or EIPs assigned elsewhere.

| Scheduled EIP | Layer / subject | Current status and pinned EIP version |
|---|---|---|
| 2780 | EL: resource-based intrinsic gas | Last Call; [EIPS/eip-2780.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-2780.md#L1-L13) |
| 7688 | CL: forward-compatible consensus structures | Review; [EIPS/eip-7688.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7688.md#L1-L13) |
| 7708 | EL: ETH transfer logs | Last Call; [EIPS/eip-7708.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7708.md#L1-L13) |
| 7732 | CL: enshrined proposer-builder separation | Last Call; [EIPS/eip-7732.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7732.md#L1-L13) |
| 7778 | EL: block gas without refunds | Last Call; [EIPS/eip-7778.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7778.md#L1-L13) |
| 7843 | EL, CL interface: SLOTNUM | Last Call; [EIPS/eip-7843.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7843.md#L1-L13) |
| 7928 | EL: block access lists | Last Call; [EIPS/eip-7928.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7928.md#L1-L13) |
| 7954 | EL: maximum contract size | Last Call; [EIPS/eip-7954.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7954.md#L1-L13) |
| 7976 | EL: calldata floor | Last Call; [EIPS/eip-7976.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7976.md#L1-L13) |
| 7981 | EL: access-list cost | Last Call; [EIPS/eip-7981.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7981.md#L1-L13) |
| 7997 | EL: deterministic factory | Last Call; [EIPS/eip-7997.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7997.md#L1-L13) |
| 8024 | EL: stack access instructions | Last Call; [EIPS/eip-8024.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8024.md#L1-L13) |
| 8037 | EL: state creation gas | Last Call; [EIPS/eip-8037.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8037.md#L1-L13) |
| 8038 | EL: state-access gas | Last Call; [EIPS/eip-8038.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8038.md#L1-L13) |
| 8045 | CL: exclude slashed proposers | Last Call; [EIPS/eip-8045.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8045.md#L1-L13) |
| 8061 | CL: exit/consolidation churn | Last Call; [EIPS/eip-8061.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8061.md#L1-L13) |
| 8246 | EL: SELFDESTRUCT burn removal | Last Call; [EIPS/eip-8246.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8246.md#L1-L13) |
| 8282 | EL/CL: builder execution requests | Last Call; [EIPS/eip-8282.md#L1-L13](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8282.md#L1-L13) |

The meta EIP separately lists networking EIPs 7975, 8070, 8136, 8159, 8189 and informational EIPs 7904, 8261; they are not silently added to its “Scheduled for Inclusion” list. Gloas's references to 8070/8261 therefore do not contradict the 18-row scheduled inventory. Sources: [EIPS/eip-7773.md#L42-L57](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7773.md#L42-L57), [specs/gloas/beacon-chain.md#L165-L182](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L165-L182).

For the three reviewed EIPs, the current status is Last Call, deadline 2026-11-01. Their operative versions are the pinned EIP files plus EELS Amsterdam at `7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b`. The tests retain their own reference revisions: EIP-7778 `4897aec97160c72d2080acf928b132f2efc1a886`, EIP-8037 `19bdfb4f97064dfbeb3d41d31efac211265b49a6`, EIP-8038 `f83531466a3862853424a81d000727b3043ef2cc`. These are test metadata, not substituted current heads. Sources: [tests/amsterdam/eip7778_block_gas_accounting_without_refunds/spec.py#L14-L16](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/tests/amsterdam/eip7778_block_gas_accounting_without_refunds/spec.py#L14-L16), [tests/amsterdam/eip8037_state_creation_gas_cost_increase/spec.py#L26-L28](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/tests/amsterdam/eip8037_state_creation_gas_cost_increase/spec.py#L26-L28), [tests/amsterdam/eip8038_state_access_gas_cost_increase/spec.py#L14-L16](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/tests/amsterdam/eip8038_state_access_gas_cost_increase/spec.py#L14-L16).

### Activation / disclosure boundary

The meta EIP leaves mainnet activation unset, and the pinned Geth mainnet chain specification has no Amsterdam activation. Gloas is listed as unstable/TBD by consensus-specs. Thus this report discusses Amsterdam-only behavior, including the negative state-gas branch that depends on Amsterdam state metering. It does not report a candidate in active mainnet logic. Sources: [meta activation](https://eips.ethereum.org/EIPS/eip-7773#activation), [params/chainspecs/mainnet.json#L1-L51](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/params/chainspecs/mainnet.json#L1-L51), [params/config.go#L741-L744](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/params/config.go#L741-L744), [README.md#L17-L34](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/README.md#L17-L34).

## D1 — negative net state gas: EELS clamps; Geth and Nethermind reject

**Disposition:** observable function-level spec difference; **no valid transaction witness established**. Retained because the assignment explicitly asks to report this difference, including when other clients share it.

1. **Spec rule, verbatim.** EELS settlement contains:
   ```python
   settled_state_gas_used = StateGas(Uint(max(0, state_gas_used)))
   ```
   [src/ethereum/forks/amsterdam/vm/gas.py#L1211-L1227](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L1211-L1227). The function documents negative net state usage, and derives execution gas from the clamped state amount. [src/ethereum/forks/amsterdam/vm/gas.py#L1174-L1201](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L1174-L1201). The EIP-8037/7778 block-accounting context is [EIP-8037, interaction with EIP-7778](https://eips.ethereum.org/EIPS/eip-8037#interaction-with-eip-7778). The clamp is an **EELS code rule**, not a claim that the EIP prose explicitly mandates a negative top-level case.

2. **Geth rule, verbatim.**
   ```go
   if st.gasRemaining.UsedStateGas < 0 {
       return 0, 0, fmt.Errorf("negative topmost frame state gas usage, %d", st.gasRemaining.UsedStateGas)
   }
   ```
   [core/state_transition.go#L1046-L1050](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L1046-L1050). This error propagates from settlement out of transaction execution, rather than becoming a failed-but-included EVM transaction: [core/state_transition.go#L795-L799](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L795-L799); transaction application propagates consensus errors at [core/state_processor.go#L263-L286](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_processor.go#L263-L286).

3. **Diverging condition, in words.** A transaction would have to finish with negative **transaction-wide**, not merely child-frame, net state creation gas, while all its other validity and settlement arithmetic remains valid. EELS would account zero state gas and continue settlement; Geth would reject the transaction's block. No block/state/transaction satisfying that precondition through the reviewed valid-input paths was found. A child clearing a slot created by its parent is insufficient: its negative local counter is merged with the parent's matching positive charge. Injecting a negative counter into a test object is not a transaction trigger.

4. **Nethermind comparison.** It agrees with Geth's rejection policy. At [src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs#L1967-L1978](https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs#L1967-L1978):
   ```csharp
   if (blockStateGas < 0)
       return InvalidStateGas(Logger, $"EIP-8037 invariant violated: negative block state gas ({blockStateGas}).");
   ```
   The typed invalid result is constructed at [src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs#L96-L100](https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs#L96-L100). Separate failure/collision guards also reject negative state usage at [src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs#L1731-L1773](https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs#L1731-L1773). Its regression tests deliberately inject corrupted gas objects using reflection rather than construct valid triggering transactions: [src/Nethermind/Nethermind.Evm.Test/Eip8037StateGasInvariantTests.cs#L20-L52](https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm.Test/Eip8037StateGasInvariantTests.cs#L20-L52). The test author's assertion of unreachability is supporting evidence, not an independent proof.

5. **Confidence and attempted disproof.** High confidence in the textual/branch difference; low confidence that it represents a reachable protocol bug. I traced:
   - zero-to-nonzero-to-zero SSTORE: the 97,920 state-gas refill cancels the previous charge;
   - a child clearing a parent's slot: a negative child counter is allowed, then offset on merge; the reservoir repays outstanding parent spill;
   - child REVERT and exceptional halt: both erase that child's net state contribution and restore its entry reservoir; only REVERT returns remaining execution gas;
   - failed CALL/CREATE account-creation charges: refund follows a matching conditional charge;
   - delegation set/clear/set: no state refill on clearing, and indicator creation is charged at most once per authority.
   
   These attempts **disprove the obvious proposed triggers**, rather than supply a working exploit. Supporting implementation: [core/vm/gas_table.go#L711-L739](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/gas_table.go#L711-L739), [core/vm/gascosts.go#L159-L166](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/gascosts.go#L159-L166), [core/vm/gascosts.go#L208-L249](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/gascosts.go#L208-L249), [core/vm/gascosts.go#L273-L292](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/gascosts.go#L273-L292), [core/vm/instructions.go#L674-L680](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/instructions.go#L674-L680), [core/vm/instructions.go#L771-L777](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/instructions.go#L771-L777), [core/state_transition.go#L1193-L1215](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L1193-L1215). EELS correspondence: [src/ethereum/forks/amsterdam/vm/instructions/storage.py#L141-L158](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/storage.py#L141-L158), [src/ethereum/forks/amsterdam/vm/gas.py#L493-L517](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L493-L517), [src/ethereum/forks/amsterdam/vm/gas.py#L594-L647](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L594-L647), [src/ethereum/forks/amsterdam/vm/eoa_delegation.py#L295-L319](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/eoa_delegation.py#L295-L319).

6. **Severity.** **Valid block rejected**, conditional on finding a valid-input witness; consequently a potential consensus split with EELS-conforming acceptance. No demonstrated operational severity is assigned without that witness. This is not evidence of an existing Geth/Nethermind split: both clients reject the boundary value.

**Known-check:** exact clamp-versus-reject report **not found** in the completed GitHub searches listed below. The broader repayment and old authorization-refund issues are known, distinct, and not proof of D1. Hive status is **unverified (HTTP 403)**, not “not found.” The supplied brief itself identified the clamp/reject discrepancy, so this report makes no discovery/novelty claim.

## Rules checked and found consistent

“Consistent” means a static comparison of the cited paths, not an executed test or a proof covering all possible states. The EIP pages read were [8037](https://eips.ethereum.org/EIPS/eip-8037), [7778](https://eips.ethereum.org/EIPS/eip-7778), and [8038](https://eips.ethereum.org/EIPS/eip-8038). Detailed comparisons below cite the pinned executable specification, avoiding ambiguity from mutable rendered text.

| Rule / boundaries examined | Geth at the pin | Pinned reference and conclusion |
|---|---|---|
| CPSB 1530; account/storage/indicator sizes 120/64/23 | [params/protocol_params.go#L223-L227](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/params/protocol_params.go#L223-L227); block context supplies CPSB at [core/evm.go#L70-L85](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/evm.go#L70-L85) | [src/ethereum/forks/amsterdam/vm/gas.py#L39-L59](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L39-L59). Products: account 183,600; slot 97,920; indicator 35,190 state gas. No old parameter set found in these Amsterdam paths. |
| Execution cap 16,777,216; total cap 4,294,967,295 | [params/protocol_params.go#L31-L32](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/params/protocol_params.go#L31-L32), [core/state_transition.go#L590-L598](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L590-L598) | [src/ethereum/forks/amsterdam/vm/gas.py#L153-L154](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L153-L154), [src/ethereum/forks/amsterdam/transactions.py#L634-L641](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/transactions.py#L634-L641). Equality permitted; greater-than rejected. Legacy Osaka's total cap is not reused for Amsterdam. |
| Intrinsic/floor must fit execution cap independently of total gas allowance | [core/state_transition.go#L729-L754](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L729-L754) | [src/ethereum/forks/amsterdam/transactions.py#L671-L684](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/transactions.py#L671-L684). Neither a large reservoir nor a high total limit legitimizes an oversized intrinsic cost/floor. |
| State-independent intrinsic gas; decomposition and calldata/access-list boundary arithmetic | [core/state_transition.go#L72-L159](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L72-L159), [core/state_transition.go#L162-L194](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L162-L194), [core/state_transition.go#L196-L255](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L196-L255) | [src/ethereum/forks/amsterdam/transactions.py#L730-L798](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/transactions.py#L730-L798). Creation's fixed execution access cost is intrinsic, but account creation is runtime; 7,816 applies even to subsequently invalid auth tuples. Overflow checks guard variable-length sums in Geth. |
| Reservoir initialization subtracts intrinsic first | [core/state_transition.go#L521-L537](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L521-L537) | [src/ethereum/forks/amsterdam/vm/gas.py#L1133-L1137](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L1133-L1137). Execution gets the smaller of remaining total allowance and remaining execution cap; excess goes to reservoir. |
| Execution before state; reservoir before spill | [core/vm/gascosts.go#L111-L136](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/gascosts.go#L111-L136) | [src/ethereum/forks/amsterdam/vm/gas.py#L379-L436](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L379-L436). Cannot fund an execution charge from the reservoir. A failed combined charge does not partially mutate the Geth gas budget. |
| LIFO state refill | [core/vm/gascosts.go#L159-L166](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/gascosts.go#L159-L166) | [src/ethereum/forks/amsterdam/vm/gas.py#L594-L616](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L594-L616). Refills repay current-frame execution spill, then reservoir, and subtract the amount from net state usage. |
| SSTORE pricing and stipend sentry | [core/vm/gas_table.go#L680-L739](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/gas_table.go#L680-L739) | [src/ethereum/forks/amsterdam/vm/instructions/storage.py#L85-L158](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/storage.py#L85-L158). All cases in the matrix below agree; the sentry uses execution gas only and rejects at or below 2,300. A large reservoir does not bypass it. |
| CALL: positive value plus EIP-161-empty recipient; pre-funded recipient exempt | [core/vm/gas_table.go#L601-L643](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/gas_table.go#L601-L643), [core/vm/operations_acl.go#L471-L529](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/operations_acl.go#L471-L529) | [src/ethereum/forks/amsterdam/vm/instructions/system.py#L499-L560](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/system.py#L499-L560). State charge precedes the 63/64 split; memory/value/access/delegation execution costs precede state charge. CALLCODE has no new-account state charge. |
| CALL failure before entry, REVERT, exceptional halt | [core/vm/evm.go#L291-L301](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/evm.go#L291-L301), [core/vm/evm.go#L349-L355](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/evm.go#L349-L355), [core/vm/instructions.go#L751-L777](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/instructions.go#L751-L777) | [src/ethereum/forks/amsterdam/vm/instructions/system.py#L370-L397](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/system.py#L370-L397), [src/ethereum/forks/amsterdam/vm/instructions/system.py#L442-L454](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/system.py#L442-L454). Returned budget is absorbed and the conditional account charge is refilled. The reverted destination is rechecked for emptiness in Geth. |
| CREATE/CREATE2: preflight before destination charge; balance-only destination exempt | [core/vm/evm.go#L504-L546](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/evm.go#L504-L546), [core/vm/instructions.go#L635-L680](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/instructions.go#L635-L680), [core/vm/instructions.go#L689-L726](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/instructions.go#L689-L726) | [src/ethereum/forks/amsterdam/vm/instructions/system.py#L88-L129](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/system.py#L88-L129). Depth, balance, nonce-overflow failures do not charge a new destination. Conditional state charge is in the parent before forwarding. |
| CREATE collision and failed child; no obsolete storage-only collision rule | [core/vm/evm.go#L585-L598](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/evm.go#L585-L598), [core/vm/instructions.go#L674-L680](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/instructions.go#L674-L680) | [src/ethereum/forks/amsterdam/vm/instructions/system.py#L107-L129](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/system.py#L107-L129), [src/ethereum/forks/amsterdam/vm/instructions/system.py#L173-L185](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/system.py#L173-L185). Nonzero nonce/code collision burns child's execution allocation and preserves reservoir. A storage-only target is not rejected by this collision condition; no claim is made here about unrelated historical-state implementation. |
| Top-level CREATE: conditional runtime account charge; rollback; collision | [core/state_transition.go#L833-L879](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L833-L879) | [src/ethereum/forks/amsterdam/vm/interpreter.py#L173-L183](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L173-L183), [src/ethereum/forks/amsterdam/vm/interpreter.py#L267-L293](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L267-L293). No 183,600 intrinsic reservation for a pre-funded target. Failed deployment refills its account state charge; exceptional halt also burns refilled execution spill. |
| Code deposit: size checks; hash execution gas before byte-state gas | [core/vm/evm.go#L661-L690](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/evm.go#L661-L690) | [src/ethereum/forks/amsterdam/vm/interpreter.py#L361-L389](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L361-L389). 6 gas per rounded-up 32-byte word for hash work; 1,530 per deposited byte in state gas. Failed deposit rolls back the frame. Zero length and exact word boundary have matching formulas. |
| SELFDESTRUCT new beneficiary; zero/nonzero balance, warm/cold recipient; no deletion refill | [core/vm/gas_table.go#L648-L675](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/gas_table.go#L648-L675), [core/vm/instructions.go#L932-L978](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/instructions.go#L932-L978) | [src/ethereum/forks/amsterdam/vm/instructions/system.py#L705-L777](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/system.py#L705-L777). New-account state cost and 9,000 write cost only for a positive balance to an empty beneficiary. Cold access is 3,000; warm adds zero beyond opcode base. No state-gas rebate for destruction of same-transaction-created code/storage. |
| GAS and 63/64 exclude reservoir | [core/vm/instructions.go#L550-L553](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/instructions.go#L550-L553), [core/vm/instructions.go#L646-L656](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/instructions.go#L646-L656), [core/vm/operations_acl.go#L517-L529](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/operations_acl.go#L517-L529), [core/vm/gascosts.go#L174-L187](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/gascosts.go#L174-L187) | [src/ethereum/forks/amsterdam/vm/gas.py#L666-L710](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L666-L710), [src/ethereum/forks/amsterdam/vm/gas.py#L801-L861](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L801-L861). Entire reservoir is handed to the child; only execution gas enters the forwarding cap. |
| Child success merge and spill repayment | [core/vm/gascosts.go#L273-L292](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/gascosts.go#L273-L292) | [src/ethereum/forks/amsterdam/vm/__init__.py#L220-L244](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/__init__.py#L220-L244), [src/ethereum/forks/amsterdam/vm/gas.py#L619-L647](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L619-L647). Reservoir credit repays outstanding debt, debiting the reservoir by the same amount. PR 35633 is present. Geth also runs repayment after failed-child absorption; restored entry reservoir and the parent's spill invariant make that extra step a no-op in the reviewed failure cases. |
| Child rollback/halt restore | [core/vm/gascosts.go#L208-L249](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/gascosts.go#L208-L249) | [src/ethereum/forks/amsterdam/vm/gas.py#L493-L517](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L493-L517), [src/ethereum/forks/amsterdam/vm/interpreter.py#L450-L468](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L450-L468). REVERT returns execution plus refunded spill; exceptional halt burns it. Both restore entry reservoir and discard child state usage. |
| EIP-8038 account/storage access constants and authorization base | [params/protocol_params.go#L101-L125](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/params/protocol_params.go#L101-L125) | [src/ethereum/forks/amsterdam/vm/gas.py#L75-L100](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L75-L100), [src/ethereum/forks/amsterdam/vm/gas.py#L147-L163](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L147-L163). Account cold/warm 3,000/100; storage cold/warm 2,100/100; write 9,000/10,000; clear refund 11,616; create access 12,000; CALL value cost 11,300. Auth base derives as 1,616 + 3,000 + 3,000 + 200 = 7,816. |
| EXTCODESIZE/EXTCODECOPY second-read surcharge | [core/vm/operations_acl.go#L149-L175](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/operations_acl.go#L149-L175), [core/vm/operations_acl.go#L198-L219](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/operations_acl.go#L198-L219), [core/vm/eips.go#L600-L604](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/eips.go#L600-L604) | [EIPS/eip-8038.md#L125-L127](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8038.md#L125-L127). Additional warm-read 100 is paid for code size/copy, without applying it to BALANCE or EXTCODEHASH. |
| 7702: runtime new-account/first-write/net-new-indicator charge; no clearing rebate | [core/state_transition.go#L1150-L1221](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L1150-L1221) | [src/ethereum/forks/amsterdam/vm/eoa_delegation.py#L231-L319](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/eoa_delegation.py#L231-L319). Exempt already-priced sender and value recipient writes; charge other authority writes once; invalid authorizations do not receive runtime charges. Set/clear/set does not charge indicator twice, and clearing does not refill it. |
| Authorization pre-dispatch OOG versus dispatched-frame failure | [core/state_transition.go#L887-L920](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L887-L920), [core/state_transition.go#L942-L947](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L942-L947), [core/vm/gascosts.go#L174-L195](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/gascosts.go#L174-L195) | [src/ethereum/forks/amsterdam/vm/interpreter.py#L159-L163](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L159-L163), [src/ethereum/forks/amsterdam/vm/interpreter.py#L267-L288](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L267-L288), [src/ethereum/forks/amsterdam/vm/gas.py#L459-L555](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L459-L555). Preparatory failure rolls back authorizations; later EVM failure retains them. Geth keeps their gas in the transaction parent budget while the EVM child starts with zero usage counters. |
| Top-level CALL new recipient and delegation resolution | [core/state_transition.go#L995-L1035](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L995-L1035), [core/state_transition.go#L922-L938](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L922-L938) | [src/ethereum/forks/amsterdam/vm/interpreter.py#L119-L130](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L119-L130), [src/ethereum/forks/amsterdam/vm/interpreter.py#L184-L196](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L184-L196), [src/ethereum/forks/amsterdam/vm/eoa_delegation.py#L84-L109](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/eoa_delegation.py#L84-L109). Empty precompile accounts are not excluded from the value-driven account charge. Delegation-target access is cold/warm priced before execution. |
| Settlement: snapshot total/state before refund; execution floor separate from receipt floor | [core/state_transition.go#L1050-L1096](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L1050-L1096) | [src/ethereum/forks/amsterdam/vm/gas.py#L1211-L1227](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L1211-L1227). On nonnegative net state usage, execution block charge is max(pre-refund total minus state, floor), state charge is net state, sender charge is max(total minus capped refund, floor). D1 is the negative boundary exception. |
| 20% refund cap; fee payout and unused reservoir return | [core/state_transition.go#L1060-L1086](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L1060-L1086), [core/state_transition.go#L1099-L1106](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L1099-L1106), [core/state_transition.go#L1237-L1247](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L1237-L1247), [core/state_transition.go#L801-L818](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L801-L818) | [src/ethereum/forks/amsterdam/vm/gas.py#L1211-L1227](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L1211-L1227), [src/ethereum/forks/amsterdam/fork.py#L992-L1001](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L992-L1001). Refund cap uses total pre-refund usage; returned ETH includes leftover execution and reservoir, with final floor applied. Coinbase tip uses paid gas, not max of block dimensions. |
| Two-dimensional pre-inclusion check | [core/state_transition.go#L688-L701](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L688-L701), [core/gaspool.go#L61-L72](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/gaspool.go#L61-L72) | [src/ethereum/forks/amsterdam/vm/gas.py#L1073-L1085](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L1073-L1085). Reserve min(2^24, tx.gas) against remaining execution and full tx.gas against remaining state. No intrinsic subtraction and no net/refunded reservation. |
| Header gas used and block validity | [core/gaspool.go#L92-L103](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/gaspool.go#L92-L103), [core/gaspool.go#L140-L150](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/gaspool.go#L140-L150), [core/state_processor.go#L155-L163](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_processor.go#L155-L163), [core/block_validator.go#L151-L155](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/block_validator.go#L151-L155) | [src/ethereum/forks/amsterdam/fork.py#L335-L340](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L335-L340), [src/ethereum/forks/amsterdam/fork.py#L1068-L1072](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L1068-L1072). max(sum execution, sum state), not sum of transaction maxima or sum of receipt gas. Each dimension bounded before acceptance. |
| Parallel block processor preserves ordered inclusion and receipt accumulation | [core/state_processor_parallel.go#L240-L255](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_processor_parallel.go#L240-L255), [core/state_processor_parallel.go#L442-L461](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_processor_parallel.go#L442-L461) | [src/ethereum/forks/amsterdam/vm/gas.py#L1073-L1085](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L1073-L1085), [src/ethereum/forks/amsterdam/fork.py#L1068-L1074](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L1068-L1074). Per-worker local gas pools are not the final inclusion authority; ordered gather repeats the full 2D reservation check. |
| Receipt gas and cumulative receipt encoding inputs | [core/state_processor.go#L295-L299](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_processor.go#L295-L299), [core/state_processor.go#L311-L327](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_processor.go#L311-L327), [core/gaspool.go#L100-L103](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/gaspool.go#L100-L103) | [src/ethereum/forks/amsterdam/fork.py#L628-L662](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L628-L662), [src/ethereum/forks/amsterdam/fork.py#L1068-L1074](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L1068-L1074). Post-refund/post-floor scalar per transaction, summed for receipt cumulative gas; intentionally can differ from header gas. No new two-component receipt encoding is introduced by these paths. |
| First Amsterdam block base fee | [consensus/misc/eip1559/eip1559.go#L59-L101](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/consensus/misc/eip1559/eip1559.go#L59-L101) | [src/ethereum/forks/amsterdam/fork.py#L387-L421](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L387-L421), [src/ethereum/forks/amsterdam/fork.py#L455-L461](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L455-L461). Both use parent's recorded gasUsed and parent target, without retrospectively re-executing/repricing the last pre-fork block. Later parents carry the new maximum-of-dimensions gasUsed. |
| System-call allowance and block exclusion | [core/state_processor.go#L360-L373](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_processor.go#L360-L373), [core/state_processor.go#L384-L409](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_processor.go#L384-L409), [core/state_processor.go#L479-L505](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_processor.go#L479-L505) | [src/ethereum/forks/amsterdam/fork.py#L748-L780](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L748-L780) and [EIPS/eip-8037.md#L288-L300](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8037.md#L288-L300). Execution 30,000,000 plus reservoir 16 × 64 × 1,530 = 1,566,720, total 31,566,720. Geth's local/message gasLimit remains 30M, but its actual GasBudget adds the reservoir; this is not a missing 1,566,720 execution allowance. Calls bypass transaction cap and block gas pool. |
| Fork gating | [params/config.go#L741-L744](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/params/config.go#L741-L744), [params/config.go#L1302-L1311](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/params/config.go#L1302-L1311), [core/vm/evm.go#L156-L170](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/evm.go#L156-L170), [core/vm/jump_table.go#L106-L113](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/jump_table.go#L106-L113), [core/vm/eips.go#L588-L614](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/eips.go#L588-L614) | Geth uses the Amsterdam fork predicate and combined opcode activation for 8037/8038; settlement selects 7778 behavior with Amsterdam too. Nethermind exposes separate 7778/8037/8038 flags, all enabled by [src/Nethermind/Nethermind.Specs/Forks/25_Amsterdam.cs#L14-L27](https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Specs/Forks/25_Amsterdam.cs#L14-L27). An artificial mixed flag configuration is not evidence of an Amsterdam consensus difference. |

### SSTORE case matrix

Here x, y, z are distinct nonzero values where needed; O/C/N mean transaction-original/current/new. Access A is 2,100 if cold, 100 if warm. These outcomes were compared directly across Geth [core/vm/gas_table.go#L693-L739](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/gas_table.go#L693-L739), EELS [src/ethereum/forks/amsterdam/vm/instructions/storage.py#L90-L158](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/storage.py#L90-L158), and the [EIP-8038 SSTORE table](https://eips.ethereum.org/EIPS/eip-8038#sstore-pricing). State refill is immediate LIFO, not part of the capped transaction refund counter.

| O → C → N | Execution charge | Refund-counter adjustment | State charge / refill |
|---|---:|---:|---:|
| any → C → C | A | 0 | 0 |
| 0 → 0 → x | A + 10,000 | 0 | charge 97,920 |
| x → x → y | A + 10,000 | 0 | 0 |
| x → x → 0 | A + 10,000 | +11,616 | 0 |
| 0 → x → 0 | A | +10,000 | refill 97,920 |
| 0 → x → y | A | 0 | 0 |
| x → y → x | A | +10,000 | 0 |
| x → y → 0 | A | +11,616 | 0 |
| x → 0 → x | A | −11,616 + 10,000 | 0 |
| x → 0 → y | A | −11,616 | 0 |
| x → y → z | A | 0 | 0 |

Cold/warm alternatives on the first clean write were checked separately. Subsequent same-slot writes are normally warm; the implementation determines access from the actual access set rather than assuming warmth from “dirty” status. For 0 → x → 0, execution-gas restoration comes from repaying the state spill, while the additional 10,000 execution refund remains subject to the final 20% cap. Neither should be confused with returning the old 20,000 scalar SSTORE cost.

## Known-check record

Searches were public GitHub issue-search API queries with **no state or type restriction**: they cover open and closed issues and pull requests. The numbers below are returned search totals, not counts of confirmed bugs. The 165-result broad “state access” query was paginated through both pages. An initial API search-rate-limit response was resolved by later reads; it is not counted as a successful negative search. Search indexing and the reviewed tracker bodies are not exhaustive proof that no report exists.

| Query | Returned items | Relevance to D1 |
|---|---:|---|
| [repo:ethereum/go-ethereum 8037](https://api.github.com/search/issues?q=repo%3Aethereum/go-ethereum%208037&per_page=100) | 40 | No exact negative-net-state clamp/reject report identified |
| [repo:ethereum/go-ethereum "state creation"](https://api.github.com/search/issues?q=repo%3Aethereum/go-ethereum%20%22state%20creation%22&per_page=100) | 20 | No exact negative-net-state clamp/reject report identified |
| [repo:ethereum/go-ethereum 7778](https://api.github.com/search/issues?q=repo%3Aethereum/go-ethereum%207778&per_page=100) | 9 | No exact negative-net-state clamp/reject report identified |
| [repo:ethereum/go-ethereum "block gas accounting"](https://api.github.com/search/issues?q=repo%3Aethereum/go-ethereum%20%22block%20gas%20accounting%22&per_page=100) | 6 | No exact negative-net-state clamp/reject report identified |
| [repo:ethereum/go-ethereum 8038](https://api.github.com/search/issues?q=repo%3Aethereum/go-ethereum%208038&per_page=100) | 5 | No exact negative-net-state clamp/reject report identified |
| [repo:ethereum/go-ethereum "state access"](https://api.github.com/search/issues?q=repo%3Aethereum/go-ethereum%20%22state%20access%22&per_page=100) | 165 | No exact negative-net-state clamp/reject report identified |
| [repo:ethereum/go-ethereum "state-access gas"](https://api.github.com/search/issues?q=repo%3Aethereum/go-ethereum%20%22state-access%20gas%22&per_page=100&page=1) | 8 | No exact negative-net-state clamp/reject report identified |
| [repo:ethereum/go-ethereum "negative" "state gas"](https://api.github.com/search/issues?q=repo%3Aethereum/go-ethereum%20%22negative%22%20%22state%20gas%22&per_page=100) | 5 | No exact negative-net-state clamp/reject report identified |
| [repo:ethereum/go-ethereum "state gas" "clamp"](https://api.github.com/search/issues?q=repo%3Aethereum/go-ethereum%20%22state%20gas%22%20%22clamp%22&per_page=100) | 1 | No exact negative-net-state clamp/reject report identified |
| [repo:ethereum/go-ethereum "negative topmost"](https://api.github.com/search/issues?q=repo%3Aethereum/go-ethereum%20%22negative%20topmost%22&per_page=100&page=1) | 0 | No exact negative-net-state clamp/reject report identified |

The negative/state-gas search returned five items; its recent open hit [issue 35546](https://github.com/ethereum/go-ethereum/issues/35546) concerns RPC semantics, not D1. The clamp search's sole hit is [PR 35845](https://github.com/ethereum/go-ethereum/pull/35845), closed/merged, about lifting the execution cap for eth_call. Neither is evidence of a reachable negative-state settlement case. Historical unrelated hits were not treated as Amsterdam bug confirmations.

### Known related reports, differentiated from D1

| Public record | State read from API | Disposition at the pin |
|---|---|---|
| [PR 35633: repay debt after child absorption](https://github.com/ethereum/go-ethereum/pull/35633) | Closed, merged 2026-09-04 | **Known, fixed**. Geth's absorb path repays min(reservoir, spilled), debiting reservoir and debt. Not a fresh candidate. |
| [PR 36020: minimal gas after Amsterdam](https://github.com/ethereum/go-ethereum/pull/36020) | Closed, merged 2026-10-27 | **Known, merged**; merge commit is exactly the reviewed Geth head. No stale pre-merge minimal-gas finding reported. This networking change was checked for provenance, not expanded into a networking audit. |
| [PR 35128: double-refund of 7702 auth-base gas](https://github.com/ethereum/go-ethereum/pull/35128) | Open, unmerged | **Known historical report** against bal-devnet-7. Current Geth no longer refills indicator state gas on clear; its tracking prevents repeat charge. Open PR status alone does not establish the old behavior persists at master. |
| [PR 35173: EIP-8037 spec change](https://github.com/ethereum/go-ethereum/pull/35173) | Closed, merged | Historical unconditional CREATE charging/LIFO implementation. Current source uses the later conditional charge; the old PR description is not the current specification. |
| [PR 35318: EIP-2780 and EIP-8037 changes](https://github.com/ethereum/go-ethereum/pull/35318) | Closed, merged | Known transaction-setup/spec-alignment work; reviewed the current runtime charges rather than assume old intrinsic-state charges. |
| [PR 35277](https://github.com/ethereum/go-ethereum/pull/35277) / [PR 35279](https://github.com/ethereum/go-ethereum/pull/35279) | Both closed; 35277 unmerged, 35279 merged | Known floor/auth/spec alignment. Correct floor base and auth costs were checked at the pin. |
| [PR 35216](https://github.com/ethereum/go-ethereum/pull/35216) / [PR 35454](https://github.com/ethereum/go-ethereum/pull/35454) | Closed, merged | Known EIP-8038 implementation/parameter work. Pin has the 3,000/2,100/9,000/10,000 parameter set. |
| [PR 33754](https://github.com/ethereum/go-ethereum/pull/33754), [PR 33756](https://github.com/ethereum/go-ethereum/pull/33756), [PR 33765](https://github.com/ethereum/go-ethereum/pull/33765) | Closed, unmerged | **Known old receipt/block-gas separation reports**. Current sequential and parallel paths use separate receipt and dimension accumulators, so those descriptions are not reported as current bugs. No reliance on their claimed local test results. |

Implementation evidence for the “fixed/current” statements is in the checked-rules table: GasBudget.Absorb; authorization processing; settlement; receipt creation; parallel ordered gather. PR state and merge dates were obtained from public `/repos/ethereum/go-ethereum/pulls/<number>` API responses, not inferred from “closed.”

### Execution-spec-tests release trackers and public results

The [Test Release Tracker search](https://api.github.com/search/issues?q=repo%3Aethereum%2Fexecution-specs%20%22Test%20Release%20Tracker%22&per_page=100) returned 36 items. The following Glamsterdam tracker bodies were read, including their EIP/test references (linked child PRs were not all independently reviewed):

- [#2915: Test Release Tracker: glamsterdam-devnet@v6.0.0](https://github.com/ethereum/execution-specs/issues/2915) — closed.
- [#3001: Test Release Tracker: glamsterdam-devnet@v6.0.1](https://github.com/ethereum/execution-specs/issues/3001) — closed.
- [#3043: Test Release Tracker: glamsterdam-devnet@v6.1.0](https://github.com/ethereum/execution-specs/issues/3043) — closed.
- [#3049: Test Release Tracker: glamsterdam-devnet@v6.1.1](https://github.com/ethereum/execution-specs/issues/3049) — closed.
- [#3034: Test Release Tracker: glamsterdam-devnet@v7.0.0](https://github.com/ethereum/execution-specs/issues/3034) — closed.
- [#3132: Test Release Tracker: glamsterdam-devnet@v7.1.0](https://github.com/ethereum/execution-specs/issues/3132) — closed.
- [#3147: Test Release Tracker: glamsterdam-devnet@v7.2.0](https://github.com/ethereum/execution-specs/issues/3147) — closed.
- [#3123: Test Release Tracker: glamsterdam-devnet@v7.2.1](https://github.com/ethereum/execution-specs/issues/3123) — closed.
- [#3167: Test Release Tracker: glamsterdam-devnet@v8.0.0](https://github.com/ethereum/execution-specs/issues/3167) — closed.
- [#3295: Test Release Tracker: glamsterdam-devnet@v8.1.0](https://github.com/ethereum/execution-specs/issues/3295) — closed.
- [#3311: Test Release Tracker: glamsterdam-devnet@v8.1.1](https://github.com/ethereum/execution-specs/issues/3311) — closed.
- [#3452: Test Release Tracker: glamsterdam-devnet@v8.1.2](https://github.com/ethereum/execution-specs/issues/3452) — closed.
- [#3479: Test Release Tracker: glamsterdam-devnet@v8.1.3](https://github.com/ethereum/execution-specs/issues/3479) — closed.
- [#3518: Test Release Tracker: glamsterdam-devnet@v8.1.4](https://github.com/ethereum/execution-specs/issues/3518) — closed.
- [#3217: Test Release Tracker: tests@v21.0.0 (Glamsterdam Testnet)](https://github.com/ethereum/execution-specs/issues/3217) — open.

Relevant evidence:

- [Tracker 3518](https://github.com/ethereum/execution-specs/issues/3518), closed, identifies the v8.1.4 specification change as parent-spill repayment on successful child merge and lists associated cross-frame/refund tests. This corroborates **known/fixed PR 35633**, not a new negative-state settlement bug.
- [Tracker 3295](https://github.com/ethereum/execution-specs/issues/3295), closed, records the revised access/write/refund parameter set. Thus older devnet gas constants are not an appropriate oracle for this pin.
- [Tracker 3217](https://github.com/ethereum/execution-specs/issues/3217), still open in the API response, aggregates Amsterdam test coverage including total-gas cap, flat 2D admission, system-call gas, rollback, code deposit, delegation spill and child merge. No exact D1 clamp-versus-reject report was identified in this body or the other listed bodies. Its open state is not interpreted as absence of a release.
- [tests@v21.0.2 release](https://github.com/ethereum/execution-specs/releases/tag/tests%40v21.0.2) describes a patch with no Frontier-through-Amsterdam consensus changes and changes to fixture coverage/invalid-transaction BAL construction. A published test release is not a client pass/fail report.
- [Required Hive listing](https://hive.ethpandaops.io/glamsterdam/listing.jsonl): direct public fetch returned **HTTP 403 Forbidden**; the web reader also could not access it. No test-run IDs, client revisions, failure counts, or passing results could be extracted. **D1's Hive known-status remains unverified.** No attempt was made to access private infrastructure or run a node to replace this evidence.

## Final disproof assessment and limits

The strongest suspicion was that a negative child state-gas counter might trigger Geth's transaction-level rejection. It fails under the reviewed accounting: a successful child merge restores the corresponding parent charge; rollback removes the child's contribution; net transaction-wide negative gas was not constructed. Nethermind's invariant tests also use deliberately corrupted internal values. D1 remains a boundary discrepancy requiring a reachable witness, not an asserted exploitable consensus split.

I also rejected four tempting false positives:

- Missing child repayment: present at the pin and publicly merged in PR 35633.
- System-call “30M limit”: execution budget is 30M **plus** a separate 1,566,720 state reservoir, exactly the specified 31,566,720 total.
- Receipt/header gas inequality: required because receipt gas includes refund/floor settlement while the header reports the maximum block dimension.
- Multiple Nethermind EIP flags versus one Geth Amsterdam flag: all three are activated together for the actual Amsterdam ruleset.

The source tests were inspected, not run. Relevant disproof coverage includes [core/vm/eip8037_test.go#L760-L837](https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/eip8037_test.go#L760-L837) and [tests/amsterdam/eip8037_state_creation_gas_cost_increase/test_state_gas_cross_frame_refund.py#L952-L1069](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/tests/amsterdam/eip8037_state_creation_gas_cost_increase/test_state_gas_cross_frame_refund.py#L952-L1069); these are evidence of intended cases, not evidence of a passing run on either pin. No dynamic reproduction, full client build, exhaustive symbolic proof, or private issue search was performed. The public Hive access failure prevents a complete public-results known-check; all “not found” statements are limited to the named successful searches and tracker bodies.

## URLs read / reproducibility index

All line-linked file citations above are at immutable pins. The source-reading URL corresponding to each is obtained by replacing `https://github.com/<repo>/blob/` with `https://raw.githubusercontent.com/<repo>/` and removing the line fragment. The major source groups actually consulted were:

- Geth: protocol parameters, chain/fork rules and mainnet schedule; state transition; gas pool; sequential/parallel processors and block validator; gas budget, gas tables, access/delegation charging, EVM frame lifecycle and opcode handlers; EIP activation/jump table; EIP-1559 base-fee calculation; EIP-8037 source tests. The exact file/range URLs appear in the findings and rules table.
- EELS: all seven requested Amsterdam files (`vm/gas.py`, `vm/instructions/storage.py`, `vm/instructions/system.py`, `vm/interpreter.py`, `vm/eoa_delegation.py`, `transactions.py`, `fork.py`), plus frame merge in `vm/__init__.py`, fork inventory in `__init__.py`, the three test reference-spec files, and cross-frame refund tests.
- Nethermind: transaction settlement and invariant guards, gas policy, 2D admission helper, Amsterdam fork flags, and negative-state-gas invariant tests. Additional comparison sources: [src/Nethermind/Nethermind.Evm/GasPolicy/EthereumGasPolicy.cs#L129-L223](https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/GasPolicy/EthereumGasPolicy.cs#L129-L223), [src/Nethermind/Nethermind.Evm/GasPolicy/Eip8037BlockGasInclusionCheck.cs#L18-L57](https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/GasPolicy/Eip8037BlockGasInclusionCheck.cs#L18-L57).
- EIP text: [7773](https://eips.ethereum.org/EIPS/eip-7773), [8037](https://eips.ethereum.org/EIPS/eip-8037), [7778](https://eips.ethereum.org/EIPS/eip-7778), [8038](https://eips.ethereum.org/EIPS/eip-8038), plus pinned raw files for all 18 scheduled EIPs. EIP-2780 was read as the intrinsic/runtime dependency, not treated as a separate review assignment.
- CL context: pinned consensus-specs README and Gloas beacon-chain document, cited in the inventory. No consensus client review is claimed.
- Repository discovery: public recursive tree endpoints for [Geth](https://api.github.com/repos/ethereum/go-ethereum/git/trees/8817f99f92852f8ac53e596de6202dd9e3494065?recursive=1), [execution-specs](https://api.github.com/repos/ethereum/execution-specs/git/trees/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b?recursive=1), [Nethermind](https://api.github.com/repos/NethermindEth/nethermind/git/trees/d48833af88ec4224c86afadd1c596e8f619c406b?recursive=1); branch-head APIs are in the pin table.
- Known-check pages/APIs: every search, PR, tracker, and release URL in the known-check section. PR metadata was read through public API; Geth code conclusions use pinned raw source, not GitHub HTML/search snippets.
- Attempted but unreadable result source: [Glamsterdam Hive listing](https://hive.ethpandaops.io/glamsterdam/listing.jsonl).

Artifact checks: verified UTF-8 decoding, size below 64,000 bytes, balanced code fences, required report sections, and immutable hashes in all source-code citations. Cited source line ranges were checked against the fetched pinned files. These are document checks, not behavioral certification. The result is left untracked; no dependencies or auxiliary deliverables are required.
