| Client | Branch | Commit | Spec commit (execution-specs, forks/bogota) |
|---|---|---|---|
| Geth | master | [8817f99f92852f8ac53e596de6202dd9e3494065](https://api.github.com/repos/ethereum/go-ethereum/commits/master) | `7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b` |
| Nethermind | master | [d48833af88ec4224c86afadd1c596e8f619c406b](https://api.github.com/repos/NethermindEth/nethermind/commits/master) | `7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b` |
| Besu | main | [aa06c4f8dfc461e483d46c6a1ac72b5bfef8d945](https://api.github.com/repos/besu-eth/besu/commits/main) | `7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b` |

# Amsterdam EIP-7708 / EIP-8246: merged public-source reviews

This merges item-geth, item-nethermind and item-besu, reviewed 2026-10-27. All three inputs were present and nonempty. Two candidates are retained, both from Besu tooling/factory paths; Geth and Nethermind retained none. No new finding is added. Conclusions, confidence, severity and known status are the source reviewers' assessments; static review is not proof of correctness. No node/network execution or new conformance research was performed for this merge.

Additional source pins: [execution-specs forks/bogota](https://api.github.com/repos/ethereum/execution-specs/commits/forks/bogota) at `7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b`; [EIPs master](https://api.github.com/repos/ethereum/EIPs/commits/master) at `d4c575521d99ec881a444ab3af604e684b5f0743`; [consensus-specs master](https://api.github.com/repos/ethereum/consensus-specs/commits/master) at `8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2` (Geth/Nethermind context only). Besu supplied no EIPs-repository pin.

Compared the Amsterdam subtree of default branch `forks/bogota`: [repository metadata](https://api.github.com/repos/ethereum/execution-specs).

[EIP-7773](https://eips.ethereum.org/EIPS/eip-7773#eips-scheduled-for-inclusion) lists these 18 scheduled EIPs: 2780, 7688, 7708, 7732, 7778, 7843, 7928, 7954, 7976, 7981, 7997, 8024, 8037, 8038, 8045, 8061, 8246, 8282. Its separate networking/informational sections are not extra entries in that scheduled list. Pinned meta source: [EIPS/eip-7773.md#L21-L61][gE1]. The EL Amsterdam change list includes the two assigned EIPs: [__init__.py#L1-L43][gS32]. CL fork context is Gloas, with fork version `0x07000000` and epoch still TBD in [specs/gloas/fork.md#L19-L30][gC1]; no CL conformance review is implied.

| Assigned EIP | Current text reviewed | Version identity |
|---|---|---|
| 7708, ETH Transfers Emit a Log | [EIP text](https://eips.ethereum.org/EIPS/eip-7708); Last Call, deadline 2026-11-01 | [EIPS/eip-7708.md#L1-L39][gE2]; latest file-changing commit at lookup: `f1ade090fd315895461fc3e249cb1a675aeb55a9` (2026-10-22). [File history API](https://api.github.com/repos/ethereum/EIPs/commits?path=EIPS/eip-7708.md&per_page=1) |
| 8246, Remove SELFDESTRUCT Burn | [EIP text](https://eips.ethereum.org/EIPS/eip-8246); Last Call, deadline 2026-11-04 | [EIPS/eip-8246.md#L1-L48][gE3]; latest file-changing commit at lookup: `f1ade090fd315895461fc3e249cb1a675aeb55a9` (2026-10-22). [File history API](https://api.github.com/repos/ethereum/EIPs/commits?path=EIPS/eip-8246.md&per_page=1) |

Last Call is document maturity, not evidence of mainnet activation. The pinned Geth mainnet chainspec omits Amsterdam activation: [params/chainspecs/mainnet.json#L1-L51][gG47].

This bounded merge covers only the two assigned EIPs and the three supplied execution clients. Current versions of the other scheduled EIPs and reviews of other execution/consensus clients are not supplied by these items.

## Candidates

Geth: none retained. Nethermind: none retained. Besu candidates follow verbatim, except for the requested identifiers (`C1` → `besu-1`, `C2` → `besu-2`, including internal references). Besu file citations are at its pin above; EELS paths are relative to `src/ethereum/forks/amsterdam/` at the spec pin; Geth paths are at its pin. Abbreviated paths and unlinked line references are preserved as supplied, rather than silently completed.

### besu-1 — `EVMExecutor` / `evmtool run` still delete self-destructed accounts, burning the balance (EIP-8246)

1. **Spec** (https://eips.ethereum.org/EIPS/eip-8246): "During transaction finalization, all
   accounts marked for selfdestruction, instead of being deleted, are modified as follows:
   1. nonce is reset to 0, 2. balance is unchanged, 3. code is cleared, 4. all storage is cleared."
   Spec code: `fork.py#L1088-L1089` calls `clear_account_preserving_balance`
   (`state_tracker.py#L494-L511` — sets `nonce = 0`, `code_hash = EMPTY_CODE_HASH`, destroys
   storage, keeps the balance; `modify_state` then deletes it only if it is left empty per
   EIP-161).

2. **Client code**:
   - `evm/src/main/java/org/hyperledger/besu/evm/fluent/EVMExecutor.java#L175`:
     `initialMessageFrame.getSelfDestructs().forEach(worldUpdater::deleteAccount);`
   - `ethereum/evmtool/src/main/java/org/hyperledger/besu/evmtool/EvmToolCommand.java#L567`:
     `initialMessageFrame.getSelfDestructs().forEach(updater::deleteAccount);`

   Both unconditionally delete the account (balance included) at end of execution, bypassing the
   fork-aware `MainnetTransactionProcessor.settleSelfDestructs`
   (`ethereum/core/.../MainnetTransactionProcessor.java#L987-L1001`, called at `#L650`), which
   under `isSelfDestructBalancePreserved()` correctly resets nonce, clears code/storage and
   preserves the balance.

3. **Divergence condition**: Any transaction executed through `EVMExecutor.execute` (the fluent
   EVM runner used by Besu's own benchmarks/tests) or `evmtool run` under the Amsterdam spec in
   which a same-transaction-created contract SELFDESTRUCTs while retaining a nonzero balance.
   The reported post-state (state root, account existence, balance) is wrong: the account is
   deleted and the ETH burned, where the spec keeps a balance-only account with nonce 0, empty
   code and empty storage. Not a block-validation path — `AbstractBlockProcessor`/
   `eth_call`'s `TransactionSimulator` go through `MainnetTransactionProcessor`, which is correct.

4. **Geth**: agrees with spec — `core/state/statedb.go#L857-L895` (`finaliseAmsterdam`):
   self-destructed accounts are replaced by a fresh object carrying only the balance
   (`o := newObject(s, obj.address, obj.origin); o.setBalance(...)`), or deleted only when the
   balance is zero. Geth has no separate ad-hoc executor path that bypasses finalisation.

5. **Confidence: high.** Code is unconditional `deleteAccount`; the bug is already acknowledged.
   Disproof attempt: checked whether `EVMExecutor`/`EvmToolCommand` reach a fork-aware settle step
   later — they do not; `worldUpdater.commit()` follows the delete directly.

6. **Severity: cosmetic** — affects `evmtool run` / fluent-API post-state output only; the
   consensus block-processing path implements EIP-8246 correctly.

   **Known-check: KNOWN.** besu-eth/besu issue #11474 "EVMExecutor and evmtool run still delete
   self-destructed accounts under Amsterdam, burning the balance EIP-8246 preserves" — open.
   Fix PR #11526 "Settle self-destructs per EIP-8246 in EVMExecutor and evmtool run" — open.
   https://github.com/besu-eth/besu/issues/11474 , https://github.com/besu-eth/besu/pull/11526

### besu-2 — `MainnetEVMs.amsterdam(BigInteger, EvmConfiguration)` builds the "Amsterdam" EVM on `PragueGasCalculator` (EIP-8246 + EIP-7708)

1. **Spec**: EIP-8246 spec quote as in besu-1; also EIP-7708 (https://eips.ethereum.org/EIPS/eip-7708):
   a LOG3 with `TRANSFER_TOPIC` is issued for "any nonzero-value-transferring SELFDESTRUCT to a
   different account" — the spec defines no Burn log. Spec code: `vm/instructions/system.py`
   `selfdestruct` (`#L705-L772`) emits `emit_transfer_log` only when `beneficiary != originator`
   (`#L766-L767`) and never zeroes the balance.

2. **Client code**: `evm/src/main/java/org/hyperledger/besu/evm/MainnetEVMs.java#L1096-L1097`:
   `public static EVM amsterdam(final BigInteger chainId, final EvmConfiguration evmConfiguration)`
   `return amsterdam(new PragueGasCalculator(), chainId, evmConfiguration);`
   `PragueGasCalculator` does not override `isSelfDestructBalancePreserved()`, so the
   `GasCalculator` default `false` applies
   (`evm/.../gascalculator/GasCalculator.java#L433-L435`). Consequently, in
   `SelfDestructOperation.execute`
   (`evm/.../operation/SelfDestructOperation.java#L135-L149`):
   `emitBurnLog = willBeDestroyed && !isSelfDestructBalancePreserved()` becomes true, so a
   same-tx-created contract self-destructing to itself emits the non-spec Burn LOG2
   (`EIP7708TransferLogEmitter.BURN_TOPIC`, `#L72`, `emitSelfDestructLog` `#L129-L143`), and
   `originatorAccount.setBalance(Wei.ZERO)` at `#L148-L149` burns the balance. All Amsterdam
   state-gas/EIP-8037 metering is also absent (Prague calculator: e.g. cold access 2600 vs the
   Amsterdam spec's 3000 in `vm/gas.py#L77`). The same pattern exists for the `bogota`, `polis`,
   `bangkok`, `futureEips`, `experimentalEips` overloads (`MainnetEVMs.java#L1180, 1251, 1322,
   1393, 1468`), which all pin `new PragueGasCalculator()`.

3. **Divergence condition**: Anything obtaining an "Amsterdam" EVM through `EvmSpec.amsterdam(...)`
   (`evm/.../fluent/EvmSpec.java#L486-L488`) — i.e. the fluent `EVMExecutor` API used by Besu
   tests and the `evmtool` benchmark executors — gets pre-Amsterdam SELFDESTRUCT semantics plus
   a spurious Burn log that EIP-7708 does not define. The production protocol spec is NOT
   affected: `MainnetProtocolSpecs.java#L1118` explicitly sets
   `.gasCalculator(AmsterdamGasCalculator::new)`, and `AmsterdamGasCalculator` returns
   `isSelfDestructBalancePreserved() == true` (`AmsterdamGasCalculator.java#L380-L382`).

4. **Geth**: agrees with spec — all Amsterdam behaviour keys off a single `chainRules.IsAmsterdam`
   flag (`core/vm/instructions.go#L964-L967`, `core/state/statedb.go#L780-L781`,
   `core/evm.go#L146-L147`); there is no second "Amsterdam-with-wrong-gas-calculator" EVM object.

5. **Confidence: medium.** The code plainly constructs Amsterdam opcodes over the Prague gas
   calculator (`new PragueGasCalculator()` is verbatim in the source). Disproof attempt: searched
   for non-test callers of `EvmSpec.amsterdam`/`EVMExecutor`; found only tests, JMH benchmarks and
   `evmtool` benchmarks — `evmtool run`/`t8n` use `component.getProtocolSpec()` (the real
   protocol spec), and no JSON-RPC path uses the fluent API. Reachability in any consensus or
   production RPC path could not be confirmed, hence medium rather than high.

6. **Severity: cosmetic** — wrong semantics confined to a test/bench factory; combining with besu-1,
   `evmtool`/`EVMExecutor` runs under "Amsterdam" both burn the balance and emit a non-spec log.

   **Known-check: not found.** Queries: `repo:besu-eth/besu EvmSpec amsterdam`,
   `repo:besu-eth/besu "PragueGasCalculator" amsterdam`, `repo:besu-eth/besu evmtool 8246`
   (returned only #11474/#11526 and unrelated items). Related root cause partially covered by
   issue #11474 (open) / PR #11526 (open).

## Cross-client comparison

Each cell summarizes only the reviewed path. Production consensus semantics and tooling/factory paths are separate rows because Besu reports different behavior there. “Agrees with spec” means the supplied static review found consistency; “not checked” means that particular path/rule was not established. Evidence keys G, N and B refer to the checked-rule tables below, numbered in their original row order.

| Rule (evidence row) | Geth | Nethermind | Besu |
|---|---|---|---|
| Top-level value transfer before execution (G1, N1, B1) | agrees with spec | agrees with spec | agrees with spec |
| CALL value, chronological ordering and rejected calls (G2, N2, B2) | agrees with spec | agrees with spec | agrees with spec |
| CALLCODE self-transfer, no log (G3, N3, B3) | agrees with spec | agrees with spec | agrees with spec |
| DELEGATECALL / STATICCALL, no value-transfer log (G3, N3, B4) | agrees with spec | agrees with spec | agrees with spec |
| CREATE / CREATE2 endowment, collision and initialization failure (G4, N4, B5) | agrees with spec | agrees with spec | agrees with spec |
| Zero-value transfers (G2, N5, B15) | agrees with spec | agrees with spec | agrees with spec |
| Self-transfers (G2, N5, B16) | agrees with spec | agrees with spec | agrees with spec |
| Precompiles and failure rollback (G5, N6, B17) | agrees with spec | agrees with spec | agrees with spec |
| EIP-7702 recipient versus code address (G5, N7, B17) | agrees with spec | agrees with spec | agrees with spec |
| Log emitter, three topics, padded addresses, uint256 data (G8, N8, B10) | agrees with spec | agrees with spec | agrees with spec |
| No extra LOG3 opcode gas (G9, N9, B11) | agrees with spec | agrees with spec | agrees with spec |
| Frame/transaction revert and failed-child logs (G10, N10, B12) | agrees with spec | agrees with spec | agrees with spec |
| SELFDESTRUCT distinct beneficiary and zero balance (G12, N11, B6) | agrees with spec | agrees with spec | agrees with spec |
| SELFDESTRUCT to self preserves balance (G13, N11, B7; production) | agrees with spec | agrees with spec | agrees with spec |
| Clearing eligibility limited to same-tx creation (G13, N12, B8) | agrees with spec | agrees with spec | agrees with spec |
| Finalization clears metadata/storage, preserves balance, deletes empty result (G14, N13, B9; production) | agrees with spec | agrees with spec | agrees with spec |
| Late funding and repeated destruction (G14, N13) | agrees with spec | agrees with spec | not checked |
| Fee-recipient overlap at finalization (N13) | not checked | agrees with spec | not checked |
| Later CREATE2 into preserved balance-only account (G15) | agrees with spec | not checked | not checked |
| Dead-beneficiary gas and execution/state charge order (G16, N14, B14) | agrees with spec | agrees with spec | agrees with spec |
| Warm-beneficiary extra read gas (N14) | not checked | agrees with spec | not checked |
| Fees, base-fee burn and withdrawals excluded (G7, N15, B13) | agrees with spec | agrees with spec | agrees with spec |
| Protocol system calls and receipt exclusion (G6, N16, B13) | agrees with spec | agrees with spec | agrees with spec |
| Receipts and bloom (G11, N17, B19) | agrees with spec | agrees with spec | agrees with spec |
| RPC log index includes surviving transfer logs (G11, N18, B19) | agrees with spec | agrees with spec | agrees with spec |
| BAL: log-only emitter is not an accessed account (G17, N19, B18 / Besu known-check #3520) | agrees with spec | agrees with spec | agrees with spec |
| BAL: retained balance, metadata clearing, net-zero suppression (G17, N20, B18) | agrees with spec | agrees with spec | agrees with spec |
| BAL: destroyed-account storage writes become/remain reads (G18, N20) | agrees with spec | agrees with spec | not checked |
| Fork transition gating (G19, N gating paragraph, Besu summary/B20) | agrees with spec | agrees with spec | agrees with spec |
| No obsolete Burn logs on production Amsterdam path (G8/G13, N11/N13, B20) | agrees with spec | agrees with spec | agrees with spec |
| Created-account marker rollback differs internally, no observable divergence established (Besu deviation note) | not checked | not checked | agrees with spec |
| SELFDESTRUCT refund bookkeeping tracer-only, no gas refund (Besu deviation note) | not checked | not checked | agrees with spec |
| Tooling finalization preserves nonzero balance (besu-1) | not checked | not checked | differs (see besu-1) |
| Amsterdam factory gas calculator, self-burn and spurious Burn log (besu-2) | not checked | not checked | differs (see besu-2) |

## Checked-rule evidence

### G — Geth

Static path checks; spec paths below are relative to Amsterdam. The normative ETH-log field definition and movement list are [EIP-7708 specification](https://eips.ethereum.org/EIPS/eip-7708#specification); finalization semantics are [EIP-8246 specification](https://eips.ethereum.org/EIPS/eip-8246#specification).

| Rule | Specification evidence | Client evidence |
|---|---|---|
| Transaction value, including creation transactions and all envelope types | [vm/interpreter.py#L133-L216][gS1] | [core/state_transition.go#L835-L865][gG1] |
| CALL; chronological ordering; zero and self transfers | [vm/interpreter.py#L395-L440][gS2] | [core/evm.go#L143-L149][gG5] |
| CALLCODE, DELEGATECALL, STATICCALL | [vm/instructions/system.py#L610-L620][gS5] | [core/vm/evm.go#L364-L491][gG7] |
| CREATE and CREATE2 endowments; failure | [vm/instructions/system.py#L59-L185][gS9] | [core/vm/evm.go#L585-L650][gG4] |
| Precompiles and EIP-7702 delegated targets | [vm/interpreter.py#L133-L216][gS1] | [core/vm/evm.go#L283-L360][gG3] |
| Protocol system calls | [fork.py#L724-L782][gS14] | [core/vm/evm.go#L275-L277][gG11] |
| Withdrawals, priority fees, gas purchase/refund, base fee | [fork.py#L1060-L1093][gS15] | [core/state_processor.go#L232-L250][gG15] |
| Log address, three topics, uint256 data | [vm/__init__.py#L247-L283][gS4] | [core/types/log.go#L68-L81][gG19] |
| No extra LOG3 opcode charge | [vm/__init__.py#L247-L283][gS4] | [core/evm.go#L143-L149][gG5] |
| Logs disappear on revert/exception; failed child caught by parent | [vm/interpreter.py#L395-L440][gS2] | [core/vm/evm.go#L283-L360][gG3] |
| Receipt inclusion, bloom, log index | [fork.py#L632-L660][gS22] | [core/state/statedb.go#L254-L274][gG26] |
| SELFDESTRUCT to a different beneficiary; zero balance | [vm/instructions/system.py#L757-L775][gS24] | [core/vm/instructions.go#L933-L968][gG23] |
| SELFDESTRUCT to self; deletion eligibility | [vm/instructions/system.py#L757-L775][gS24] | [core/vm/instructions.go#L933-L968][gG23] |
| Finalization; late funding; nonce/code/storage; empty account deletion | [fork.py#L1060-L1093][gS15] | [core/state/statedb.go#L855-L907][gG35] |
| Later CREATE2 to a preserved balance-only account | [state_tracker.py#L494-L538][gS27] | [core/vm/evm.go#L585-L650][gG4] |
| Dead-beneficiary execution and state gas | [vm/instructions/system.py#L721-L755][gS28] | [core/vm/gas_table.go#L646-L679][gG38] |
| BAL: final account balance/nonce/code; emitter is not an accessed account | [fork.py#L1060-L1093][gS15] | [core/state/statedb.go#L825-L853][gG40] |
| BAL: slots of created-then-destroyed contracts | [state_tracker.py#L494-L538][gS27] | [core/state/state_object.go#L172-L190][gG42] |
| Activation boundary | [__init__.py#L1-L43][gS32] | [params/config.go#L741-L744][gG45] |
### N — Nethermind

EIP emission categories and encoding: [eip-7708.md#L25-L42][nE5]. EIP-8246 opcode and finalization requirements: [eip-8246.md#L30-L49][nE6]. The table's findings are static-review conclusions, not local test results.

| Rule | Specification evidence | Client evidence |
|---|---|---|
| Transaction value, before EVM logs | [interpreter.py#L417-L441][nS2] | [TransactionProcessor.cs#L558-L598][nN2] |
| CALL to EOA / contract, rejected calls | [__init__.py#L238-L245][nS3] | [EvmInstructions.Call.cs#L257-L311][nN4] |
| CALLCODE, DELEGATECALL, STATICCALL | [interpreter.py#L417-L441][nS2] | [EvmInstructions.Call.cs#L127-L161][nN6] |
| CREATE / CREATE2 endowment and collisions | [interpreter.py#L295-L302][nS4] | [EvmInstructions.Create.cs#L250-L294][nN7] |
| Zero amounts / self-transfers | [__init__.py#L247-L283][nS5] | [VirtualMachine.cs#L2011-L2048][nN9] |
| Precompiles, including OOG | [interpreter.py#L417-L441][nS2] | [VirtualMachine.cs#L1176-L1213][nN10] |
| EIP-7702 delegated recipient | [interpreter.py#L417-L441][nS2] | [TransactionProcessor.cs#L1419-L1440][nN12] |
| LOG3 address/topics/data | [__init__.py#L247-L283][nS5] | [TransferLog.cs#L12-L34][nN15] |
| No extra LOG3 gas | [__init__.py#L247-L283][nS5] | [VirtualMachine.cs#L2011-L2048][nN9] |
| Frame rollback, outer revert, failed transaction | [__init__.py#L238-L245][nS3] | [StackAccessTracker.cs#L95-L115][nN18] |
| SELFDESTRUCT movement, zero balance, self | [system.py#L757-L775][nS6] | [EvmInstructions.ControlFlow.cs#L450-L471][nN21] |
| Clearing only for same-transaction creation | [system.py#L757-L775][nS6] | [EvmInstructions.ControlFlow.cs#L398-L405][nN22] |
| EIP-8246 finalization, later receipts of value, repeated selfdestruct, fee-recipient overlap | [fork.py#L1062-L1093][nS7] | [TransactionProcessor.cs#L495-L531][nN23] |
| Dead-beneficiary state gas / warm access | [system.py#L736-L755][nS9] | [EvmInstructions.ControlFlow.cs#L412-L426][nN25] |
| Fees, base-fee burn, withdrawals excluded | [eip-7708.md#L50-L52][nE7] | [TransactionProcessor.cs#L1886-L1917][nN27] |
| System calls | [fork.py#L748-L780][nS11] | [BlockAccessListManager.SystemContracts.cs#L44-L54][nN29] |
| Receipts and bloom | [fork.py#L630-L661][nS12] | [TransactionProcessor.cs#L781-L799][nN20] |
| RPC log index | Derived RPC metadata; see N17 and the adjacent receipt/index explanation | [ReceiptsForRpc.cs#L85-L91][nN32] |
| BAL: log-only SYSTEM_ADDRESS | [test_block_access_lists_eip7708.py#L164-L170][nS13] | [VirtualMachine.cs#L2011-L2048][nN9] |
| BAL: same-tx destruction and retained balance | [state_tracker.py#L494-L535][nS8] | [BlockAccessListAtIndex.cs#L251-L295][nN36] |

Fork transition gating: Amsterdam enables both flags (pin above); per-spec frame handlers select emission on/off, [VirtualMachine.ExecutionHandlers.cs#L26-L35][nN39]; opcode dispatch selects EIP-8246 specialization, [VirtualMachine.OpcodeHandlers.cs#L721-L731][nN40]. Static evidence only. Transaction formats were read in [transactions.py#L86-L113][nS14], and common top-frame value setup in [interpreter.py#L198-L215][nS15].
### B — Besu

| # | Rule | Spec site (execution-specs) | Besu site | Geth site |
|---|------|-----------------------------|-----------|-----------|
| 1 | LOG3 with `TRANSFER_TOPIC` for a nonzero-value top-level transaction to a different account, before other logs | `vm/interpreter.py#L418-L429` (top frame has `should_transfer_value=True`, `caller=origin`) | `MessageCallProcessor.transferValue` `#L127-L172` (`start` `#L92` → `transferValue` before code runs) | `core/evm.go#L142-L148` (`Transfer` inside `evm.Call`) |
| 2 | CALL with value to a different account logs at transfer time | `vm/interpreter.py#L418-L429`; `vm/instructions/system.py` `call`/`generic_call` | `MessageCallProcessor.java#L171` + `AbstractCallOperation.java` child-frame `.value(transferValue)` | `core/vm/evm.go#L329` |
| 3 | CALLCODE: value moves to self ⇒ never logs | `system.py` `callcode`: `to = evm.current_target`, `caller == current_target` ⇒ `caller != current_target` fails | `CallCodeOperation.address()/sender()` return `frame.getRecipientAddress()` ⇒ `from == to` filtered in `emitTransferLog` `#L121-L126` | `core/vm/evm.go#L365-L396` (`CallCode` never calls `Transfer`) |
| 4 | DELEGATECALL / STATICCALL carry no value ⇒ no log | `system.py` `delegatecall`/`staticcall` use `should_transfer_value=False` | `DelegateCallOperation.value()`/`StaticCallOperation.value()` return `Wei.ZERO` | `core/vm/evm.go` DelegateCall/StaticCall paths have no `Transfer` |
| 5 | CREATE/CREATE2 endowment logs creator→created before initcode logs; nothing on collision | `system.py` `generic_create` `#L101-L172` + `process_call` | `ContractCreationProcessor.start` `#L139-L159` (log inside the non-collision `else`, before `CODE_EXECUTING`) | `core/vm/evm.go#L627` (`Transfer` in `create`) |
| 6 | SELFDESTRUCT logs only when `beneficiary != originator` and balance nonzero | `system.py#L763-L771` + `emit_transfer_log` zero-guard `vm/__init__.py#L268` | `SelfDestructOperation.java#L137-L139` + emitter `greaterThan(Wei.ZERO)` `#L133` | `instructions.go` `opSelfdestruct6780` `#L964-L967` (`!balance.IsZero() && this != beneficiary`) |
| 7 | SELFDESTRUCT-to-self keeps balance under EIP-8246 (no burn) | `system.py#L763` unconditional `move_ether` (self = no-op) | `SelfDestructOperation.java#L128-L129` decrement+increment; `#L148-L149` `setBalance(ZERO)` gated off by `isSelfDestructBalancePreserved()` | `instructions.go` `#L948-L954` (`!IsAmsterdam` guard on the burn branch) |
| 8 | Deletion only when the contract was created in the same tx (EIP-6780 preserved) | `system.py#L770-L771` `originator in tx_state.created_accounts` | `SelfDestructOperation.java#L124-L126` `frame.wasCreatedInTransaction` with `eip6780Semantics=true` (`MainnetEVMs.java#L1150-L1151`) | `instructions.go` `#L942-L945` `evm.StateDB.IsNewContract` |
| 9 | Finalization clears nonce/code/storage, preserves balance; empty result deleted (EIP-161) | `fork.py#L1088-L1089` → `state_tracker.py#L494-L511`; `modify_state` destroys empties | `MainnetTransactionProcessor.settleSelfDestructs` `#L987-L1001` + `clearAccountsThatAreEmpty` `#L653` | `core/state/statedb.go#L872-L895` `finaliseAmsterdam` |
| 10 | Log encoding: `address=0xff…fffe`, topics `[TRANSFER_TOPIC, from, to]` zero-padded, `data` = 32-byte big-endian amount | `vm/__init__.py#L35-L37, #L271-L282` | `EIP7708TransferLogEmitter.java#L56-L97` (`createTransferLog`) | `core/types/log.go#L68-L79`, `params/protocol_params.go#L279` |
| 11 | No gas charged for the emitted log | `emit_transfer_log` has no gas interaction (`vm/__init__.py#L247-L282`) | `frame.addLog` — none | `db.AddLog` — none |
| 12 | Logs dropped on revert; child-frame logs merge only on success; failed tx ⇒ no logs | `vm/__init__.py` `incorporate_child` merges `logs` only `if not child_evm.error`; `process_top_level` drops all on error | `AbstractMessageProcessor.clearAccumulatedStateBesidesGasAndOutput` `#L145` `frame.clearLogs()` + `txValues.undoChanges`; `MainnetTransactionProcessor` `#L629-L630` `txSucceeded ? selfDestructs : Set.of()` | state-journal snapshot/revert (`evm.Call` `RevertToSnapshot`) |
| 13 | No transfer logs for: priority-fee payment to coinbase, base-fee burn, withdrawals, system calls | `fork.py#L1000-L1001` `create_ether` (coinbase tip, sender refund); `fork.py#L1113` withdrawals | `MainnetTransactionProcessor` `#L623` `coinbase.incrementBalance` (no emitter); `WithdrawalsProcessor` has no log calls | `AddBalance`/`SetBalance` paths — no `Transfer` |
| 14 | SELFDESTRUCT gas: 5000 base + 3000 cold + 9000 ACCOUNT_WRITE + NEW_ACCOUNT state gas (120×1530) only when beneficiary dead and balance ≠ 0 | `system.py#L723-L761`; `vm/gas.py#L250,77,85,54-55` | `SelfDestructOperation.java#L81-L115` + `AmsterdamGasCalculator.selfDestructOperationGasCost` `#L388-L397` (5000+9000, cold added separately) + `consumeStateGas(newAccountStateGas())` `#L108-L112` | equivalent Amsterdam gas table |
| 15 | Zero-value transfers emit no log | `vm/__init__.py#L268` `if transfer_amount == 0: return` | `emitTransferLog` `#L123` `value.greaterThan(Wei.ZERO)` guard | `core/evm.go#L146` `!amount.IsZero()` |
| 16 | Self-transfers (CALL to self, tx to self, selfdestruct-to-self) emit no log | `vm/interpreter.py#L425` `caller != current_target`; `system.py#L766` | `emitTransferLog` `!from.equals(to)` `#L123`; `emitSelfDestructLog` originator==beneficiary branch unreachable under Amsterdam | `sender != recipient` `#L146`; `this != beneficiary` `#L966` |
| 17 | Transfers to precompiles and EIP-7702 delegated EOAs log to the recipient account | `process_call` moves+logs before the precompile/delegation dispatch (`vm/interpreter.py#L418-L436`); log uses `current_target` (= `to`, not `code_address`) | `MessageCallProcessor.start` `#L92-L107`: `transferValue` before `executePrecompile`; `recipientAddress` is `to` | `evm.Call` `Transfer` before precompile dispatch |
| 18 | BAL (EIP-7928) consistency: touched accounts recorded for beneficiary/originator; net-zero self-transfers produce no balance-change entry | `state_tracker.py` `get_account` → `account_reads`; `update_builder_from_tx` diffs pre/post (`block_access_lists.py#L765-L820`) | `AbstractOperation.getAccount/getOrCreateAccount` auto-`addTouchedAccount` (`AbstractOperation.java#L101-L140`); `PartialBlockAccessView` diffs updates | `recordAccessListChanges` in `finaliseAmsterdam` |
| 19 | Receipts/bloom/log index include transfer logs | `fork.py#L1074-L1086` receipt = `tx_output.logs`, `logs_bloom(block_logs)` | receipt built from `initialFrame.getLogs()`; `TransactionReceipt` builds bloom from the log list | `types.Log` list → receipt bloom |
| 20 | Pre-8246 "Burn" log machinery is dead code under Amsterdam, not emitted | n/a (spec defines no Burn log) | `emitClosureLogs` gated by `!isSelfDestructBalancePreserved()` at `MainnetTransactionProcessor.java#L635-L637`; `emitBurnLog` false at `SelfDestructOperation.java#L135-L137`; both branches unreachable with `AmsterdamGasCalculator` | geth never defined a burn log |

### Besu path context and rejected deviations

Besu's Amsterdam wiring is spec-conformant on the consensus path. `EIP7708TransferLogEmitter`
(`evm/src/main/java/org/hyperledger/besu/evm/log/EIP7708TransferLogEmitter.java`) is wired only
into the Amsterdam `ProtocolSpecBuilder` (`ethereum/core/.../MainnetProtocolSpecs.java` ~L1117–1165);
pre-Amsterdam forks get `TransferLogEmitter.NOOP`. Emission sites cover exactly the spec's two
emission points (`process_call`-equivalent value transfers, and SELFDESTRUCT). No consensus-path
divergence was found. Two candidates exist in off-consensus code paths (tooling/test factories);
one is already a known open Besu issue.

- **CALLCODE value**: the EIP-7708 text mentions "CALL" transfers "to a different account"; the
  reference spec implements CALLCODE as a self-transfer (`to = evm.current_target`), so no log is
  ever emitted for CALLCODE in all three implementations. Verified consistent — Besu's
  `CallCodeOperation` makes sender and recipient the executing account, so the
  `!from.equals(to)` filter drops it, matching spec and geth (`CallCode` has no `Transfer` call).
- **`created_accounts`/`creates` revert handling**: the spec never un-marks `created_accounts` on
  revert (`state_tracker.py#L547-L560` comment: "The marker is not removed even if the account
  creation reverts"); Besu's `TxValues.creates` is an `UndoSet` rolled back on revert
  (`TxValues.java#L58, #L158`). Not a spec divergence in effect: a reverted creation leaves no
  executable code at the address, so no later same-tx SELFDESTRUCT can observe the difference.
  Not reported as a candidate.
- **`emitSelfDestructLog` Burn branch** (`EIP7708TransferLogEmitter.java#L129-L143`): emits a
  `BURN_TOPIC` LOG2 when `originator == beneficiary` — reachable only when
  `isSelfDestructBalancePreserved()` is false (i.e. non-Amsterdam calcs, or the besu-2 factory). On
  the wired Amsterdam path it is unreachable. Covered by besu-2.
- **`frame.addRefund(beneficiary, originatorBalance)`** (`SelfDestructOperation.java#L154`):
  feeds only tracers (`DebugOperationTracer`, `CallTracer`); gas refund
  `getSelfDestructRefundAmount()` is 0 post-London. Not consensus-visible.


Additional pinned evidence for compound rules: Geth finalization/BAL [statedb.go#L855-L907][gG35], [statedb.go#L825-L853][gG40], [state_object.go#L101-L116][gG36]; storage reads/writes [state_object.go#L227-L238][gG43], [state_object.go#L254-L285][gG44]; rollback [journal.go#L618-L626][gG27]; activation [config.go#L741-L744][gG45], [config.go#L1297-L1310][gG46], [mainnet.json#L1-L51][gG47], [statedb.go#L779-L782][gG49]; spec clearing [state_tracker.py#L494-L538][gS27]. Nethermind warm-gas boundary [EthereumGasPolicy.cs#L265-L271][nN26]; finalization/BAL [TransactionProcessor.cs#L102-L117][nN24], [TracedAccessWorldState.cs#L525-L536][nN37], [BlockAccessListAtIndex.cs#L107-L132][nN38]; RPC/bloom [ReceiptLogsForRpc.cs#L126-L133][nN33], [TransactionReceipt.cs#L89-L106][nN31]; encoding padding [Address.cs#L281-L300][nN17]; delegation [EvmInstructions.Call.cs#L606-L623][nN14]; common emitter [VirtualMachine.ExecutionHandlers.cs#L78-L83][nN5]; rollback [VmState.cs#L333-L339][nN19].

## Disproof and interpretation limits

### Geth

Nethermind independently enables both EIPs in Amsterdam: [Nethermind.Specs/Forks/25_Amsterdam.cs#L9-L27][gN1]. This cross-check was used to challenge the interpretation, not as a replacement for the specification.

- **CALLCODE omission disproved:** EELS uses the executing context as recipient, making it a self-transfer. Geth agrees. Nethermind explicitly excludes CALLCODE/DELEGATECALL: [Nethermind.Evm/VirtualMachine.ExecutionHandlers.cs#L78-L83][gN2].
- **Burn/late funding loss disproved:** opcode and finalization must be read together. Amsterdam leaves self-target balance untouched and preserves the final residual balance. Nethermind agrees: [Nethermind.Evm/Instructions/EvmInstructions.ControlFlow.cs#L450-L473][gN3]; [Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs#L102-L117][gN4].
- **Destroyed-account BAL writes disproved:** writes enter BAL in stateObject.finalise, which destruction skips; implicit reads already exist. See BAL rows.
- **Revert/index leakage disproved:** snapshots precede transfer; addLogChange rollback removes the log and decrements logSize. See rollback row.
- **Dead-but-existing beneficiary undercharge disproved:** Geth uses Empty, not !Exist, matching EELS. Nethermind agrees: [Nethermind.Evm/Instructions/EvmInstructions.ControlFlow.cs#L412-L428][gN5].

Static confidence: high for movement/encoding/rollback; medium for finalization/BAL. No differing result established, so no severity assigned.

Specification caveat: [EIP-7928 transaction handling](https://eips.ethereum.org/EIPS/eip-7928#transaction-handling) still describes a destroyed account's positive pre-transaction balance changing to zero. That conflicts with the explicit balance-preservation update in EIP-8246. Geth and pinned Amsterdam EELS both preserve the final balance; the table follows that specific update rather than treating the older zero-balance wording as a new burn requirement. This is a documentation inconsistency, not an established Geth deviation from the assigned EIP-8246 semantics.

### Nethermind

Rejected hypotheses:

1. **Legacy burn helpers:** traced both call sites. EIP-8246 exits the self opcode before log/subtraction and suppresses finalization burn logs. See SELFDESTRUCT/finalization rows.
2. **Wrong delegated recipient:** followed target, codeInfo, environment and VmState.To. Both setup paths retain the funded authority; delegationAddress only changes resolved code. See delegation row.
3. **Inherited value falsely logged:** CALLCODE targets self; DELEGATECALL inherits value without movement. Checked common emitter exclusions and empty-code fast path. See CALL-family rows.
4. **Rollback leaks:** followed journal snapshots/disposal and failed receipt handling, including precompile failure and reverted creation. No surviving entry log found. See rollback row.
5. **Late funds lost / false BAL zero:** followed fees, final balance read, delete/recreate and pre-tx diff cancellation. No surviving balance or BAL mismatch. See finalization/BAL rows.

Confidence in the bounded negative review is moderate. Checked zero/nonzero, self/distinct, dead/alive, fresh/existing, success/revert/OOG and post-destruction funding by inspection. No maximum-value execution was performed.

## Known-check summary

Candidate status: **besu-1 KNOWN**, open issue #11474 / open fix PR #11526; **besu-2 not found**, with related history in the same issue/PR. These labels preserve the item’s lookup outcome, not proof of novelty. Geth and Nethermind have no retained candidate requiring a novelty label.

### Geth

No retained candidate needs a candidate-specific known/not-found label. Discovery searches covered open/closed issues and PRs, with complete results within one 100-item page:

| Query (all states, issues and PRs) | Results at lookup |
|---|---|
| [`repo:ethereum/go-ethereum 7708`](https://api.github.com/search/issues?q=repo%3Aethereum%2Fgo-ethereum%207708&per_page=100) | 13 |
| [`repo:ethereum/go-ethereum 8246`](https://api.github.com/search/issues?q=repo%3Aethereum%2Fgo-ethereum%208246&per_page=100) | 5 |
| [`repo:ethereum/go-ethereum "transfer logs"`](https://api.github.com/search/issues?q=repo%3Aethereum%2Fgo-ethereum%20%22transfer%20logs%22&per_page=100) | 16 |
| [`repo:ethereum/go-ethereum "selfdestruct burn"`](https://api.github.com/search/issues?q=repo%3Aethereum%2Fgo-ethereum%20%22selfdestruct%20burn%22&per_page=100) | 8 |
| [`repo:ethereum/go-ethereum "ETH Transfers Emit a Log"`](https://api.github.com/search/issues?q=repo%3Aethereum%2Fgo-ethereum%20%22ETH%20Transfers%20Emit%20a%20Log%22&per_page=100) | 0 |
| [`repo:ethereum/go-ethereum "Remove SELFDESTRUCT Burn"`](https://api.github.com/search/issues?q=repo%3Aethereum%2Fgo-ethereum%20%22Remove%20SELFDESTRUCT%20Burn%22&per_page=100) | 1 |
| [`repo:ethereum/execution-specs "Test Release Tracker"`](https://api.github.com/search/issues?q=repo%3Aethereum%2Fexecution-specs%20%22Test%20Release%20Tracker%22&per_page=100) | 36 |

Relevant known history, checked against current code rather than re-reported as new:

- **Known, closed issue:** [Geth #34623](https://github.com/ethereum/go-ethereum/issues/34623), missing tracing hook for former burn logs. Current 8246 semantics remove those burn logs; this is not evidence of missing transfer receipt logs.
- **Known, merged/closed:** [Geth #33645](https://github.com/ethereum/go-ethereum/pull/33645), original 7708 implementation, merged 2026-03-23. 
- **Known, merged/closed:** [Geth #35219](https://github.com/ethereum/go-ethereum/pull/35219), 8246 implementation, merged 2026-06-30. [#35192](https://github.com/ethereum/go-ethereum/pull/35192) and [#35218](https://github.com/ethereum/go-ethereum/pull/35218) are closed, unmerged alternatives/superseded work. Current finalization was read directly.
- **Known, merged/closed:** [Geth #35617](https://github.com/ethereum/go-ethereum/pull/35617), duplicate synthetic/protocol transfer logs in `eth_simulateV1`, merged 2026-10-07. [#35668](https://github.com/ethereum/go-ethereum/pull/35668), Amsterdam simulation alignment, also merged 2026-10-07. These are known RPC simulation work, not new block-execution findings.
- **Open tracking issue:** [Geth #33661](https://github.com/ethereum/go-ethereum/issues/33661), “Amsterdam Tracking,” includes an old SELFDESTRUCT corner-case checklist. An unchecked tracking box does not by itself show that pinned code is wrong.

Glamsterdam tracker bodies and comments read (all closed except open #3217): [2915](https://github.com/ethereum/execution-specs/issues/2915), [3001](https://github.com/ethereum/execution-specs/issues/3001), [3043](https://github.com/ethereum/execution-specs/issues/3043), [3049](https://github.com/ethereum/execution-specs/issues/3049), [3034](https://github.com/ethereum/execution-specs/issues/3034), [3132](https://github.com/ethereum/execution-specs/issues/3132), [3147](https://github.com/ethereum/execution-specs/issues/3147), [3123](https://github.com/ethereum/execution-specs/issues/3123), [3167](https://github.com/ethereum/execution-specs/issues/3167), [3295](https://github.com/ethereum/execution-specs/issues/3295), [3311](https://github.com/ethereum/execution-specs/issues/3311), [3452](https://github.com/ethereum/execution-specs/issues/3452), [3479](https://github.com/ethereum/execution-specs/issues/3479), [3518](https://github.com/ethereum/execution-specs/issues/3518), [3217](https://github.com/ethereum/execution-specs/issues/3217).

Specific relevant context: #3001 comments document adapting 8038 tests to 8246; #3043 documents the zero-balance-precompile value-transfer state-gas boundary correction; #3167 documents folding transfer-log intrinsic cost into TX_VALUE_COST. #3217 lists `tests@v21.0.0` as released and `v8.1.4` as latest devnet release, while final execute-mode/all-client sweeps remain unchecked. 

**Public Hive results unavailable:** fetching [hive.ethpandaops.io/glamsterdam/listing.jsonl](https://hive.ethpandaops.io/glamsterdam/listing.jsonl) returned HTTP 403 Forbidden. No listing entries, individual test results, or client pass rates were obtained. Consequently the requested independent Hive result cross-check is incomplete. No clean-Hive claim is made, and the report's no-candidate result comes from the static review, not a missing-results assumption.

### Nethermind

Searches covered open/closed issues and PRs, without a state restriction. Numeric matches were checked for relevance. No candidate remained to mark “not found”; known historical fixes and coverage were found.

Queries actually executed:

- [`repo:NethermindEth/nethermind 7708`](https://api.github.com/search/issues?q=repo%3ANethermindEth%2Fnethermind%207708&per_page=100)
- [`repo:NethermindEth/nethermind 8246`](https://api.github.com/search/issues?q=repo%3ANethermindEth%2Fnethermind%208246&per_page=100)
- [`repo:NethermindEth/nethermind "ETH transfer"`](https://api.github.com/search/issues?q=repo%3ANethermindEth%2Fnethermind%20%22ETH%20transfer%22&per_page=100)
- [`repo:NethermindEth/nethermind "transfer logs"`](https://api.github.com/search/issues?q=repo%3ANethermindEth%2Fnethermind%20%22transfer%20logs%22&per_page=100)
- [`repo:NethermindEth/nethermind "SELFDESTRUCT" "burn"`](https://api.github.com/search/issues?q=repo%3ANethermindEth%2Fnethermind%20%22SELFDESTRUCT%22%20%22burn%22&per_page=100)
- [`repo:NethermindEth/nethermind "Remove SELFDESTRUCT Burn"`](https://api.github.com/search/issues?q=repo%3ANethermindEth%2Fnethermind%20%22Remove%20SELFDESTRUCT%20Burn%22&per_page=100)
- [`repo:ethereum/execution-specs "Test Release Tracker"`](https://api.github.com/search/issues?q=repo%3Aethereum%2Fexecution-specs%20%22Test%20Release%20Tracker%22&per_page=100)
- [`repo:ethereum/execution-specs 7708`](https://api.github.com/search/issues?q=repo%3Aethereum%2Fexecution-specs%207708&per_page=100)
- [`repo:ethereum/execution-specs 8246`](https://api.github.com/search/issues?q=repo%3Aethereum%2Fexecution-specs%208246&per_page=100)

| Public item read | State at review | Assessment |
|---|---|---|
| [Nethermind #10402](https://github.com/NethermindEth/nethermind/pull/10402) | Closed, merged 2026-02-04 | Known historical exclusion of CALLCODE, DELEGATECALL and self-transfer logs. Current guards checked above. |
| [Nethermind #11949](https://github.com/NethermindEth/nethermind/pull/11949) | Closed, merged 2026-06-24 | Known EIP-8246 implementation: preserve balance, self no-op. Not a current bug. |
| [Nethermind #12577](https://github.com/NethermindEth/nethermind/pull/12577) | Closed, merged 2026-08-04 | Known EIP-7708 tracing ordering fix. Current frame-before-log ordering checked. |
| [#13573](https://github.com/NethermindEth/nethermind/pull/13573), [#14598](https://github.com/NethermindEth/nethermind/pull/14598), [#14596](https://github.com/NethermindEth/nethermind/pull/14596) | #13573 and #14596 closed/merged; #14598 closed/unmerged | Historical regression coverage/proposals for ordering, bloom, rollback, Amsterdam and BAL. Not local executions. |
| [execution-specs #3217](https://github.com/ethereum/execution-specs/issues/3217) | Open | tests@v21.0.0 Glamsterdam tracker: relevant EIP coverage work checked off; final all-clients engine/x and RLP sweep still unchecked. No universal pass claim. |
| [execution-specs #3518](https://github.com/ethereum/execution-specs/issues/3518) | Closed | glamsterdam-devnet@v8.1.4: EIP-8037 spec and fixture/Hive revision context. |
| [#2915](https://github.com/ethereum/execution-specs/issues/2915), [#3001](https://github.com/ethereum/execution-specs/issues/3001) | Closed | v6.0.0 / v6.0.1 test-release tracker history, including EIP-8246 rollout. |

### Public Hive / execution-spec-tests results

Read [Glamsterdam listing.jsonl](https://hive.ethpandaops.io/glamsterdam/listing.jsonl), 999 entries at retrieval, then the three JSON results below. Initial requests returned 403; a subsequent public request with browser-style headers succeeded. No private account or source was used. These were the latest listed Nethermind runs by suite:

| Suite / result URL | Reported build | Whole run pass / fail | Name contains eip7708 pass / fail | eip8246 pass / fail | eip7928 pass / fail |
|---|---|---|---|---|---|
| [consume-engine](https://hive.ethpandaops.io/glamsterdam/results/1793072145-f77ddc53660a26e89f17a7706e5cfa07.json), start Oct 26 12:52 UTC | 2.3.0-preview+a183d792 | 43,986 / 239 | 82 / 0 | 664 / 0 | 1,252 / 0 |
| [consume-enginex](https://hive.ethpandaops.io/glamsterdam/results/1793008107-f04da15afb356909425c1a648e1f7178.json), start Oct 26 08:23 UTC | 2.3.0-preview+edb6764a | 83,019 / 239 | 82 / 0 | 664 / 0 | 1,252 / 0 |
| [consume-rlp](https://hive.ethpandaops.io/glamsterdam/results/1793058090-36196cd48e8b0bc6e889dd2eb98555bd.json), start Oct 26 09:30 UTC | 2.3.0-preview+edb6764a | 44,161 / 0 | 82 / 0 | 664 / 0 | 1,233 / 0 |

Counts select testCases.name case-insensitively and count summaryResult.pass; groups may overlap. The 239 overall engine failures were not investigated outside this assignment. These builds differ from the review pin. Fixture descriptions also link historical source, e.g. execution-specs@1562e2f8b5cb1efda7e0d7c517f2dfb5742c0a43 in consume-engine; these results certify neither reviewed head.

### Besu

- **besu-1**: KNOWN — https://github.com/besu-eth/besu/issues/11474 (open), fix
  https://github.com/besu-eth/besu/pull/11526 (open).
- **besu-2**: not found — queries `EvmSpec amsterdam`, `"PragueGasCalculator" amsterdam`,
  `evmtool 8246` in besu-eth/besu returned no dedicated issue/PR.
- **Besu hive run for Glamsterdam** (`hive.ethpandaops.io/glamsterdam`, `besu_default`,
  `eels/consume-enginex` 2026-10-26, `v26.10-develop-fc46028`): 83189/83258 pass; the 69 failures
  are `eip4844`/`eip7918` BPO-transition tests, `eip8037` two-dimensional header tests, and
  `test_unrecoverable_signature` — none EIP-7708/EIP-8246. `eels/execute` 173/173 pass. No
  7708/8246 test failure observed for Besu.
- Other relevant Besu history: PR #9654 (closed, initial EIP-7708 impl), PR #9672 (closed,
  Burn-log feature now dead under EIP-8246), PR #10766 (closed, EIP-8246 impl), PR #11154
  (closed, eth_simulate transfer logs), PR #11272 (closed, eth_estimateGas value-transfer fix).
  execution-specs tracker: issue #3217 "Test Release Tracker: tests@v21.0.0 (Glamsterdam
  Testnet)" (open); #1875 (EIP-7708 implementation tracker, closed); #3520 (BAL/`SYSTEM_ADDRESS`
  test, closed — consistent with Besu, which never records `SYSTEM_ADDRESS` in the BAL since
  `addLog` touches no account).

Hive access differed between items: Geth obtained only HTTP 403; Nethermind reports a later successful public fetch, and Besu reports retrieved results. This does not supply missing Geth results. Published build hashes differ from review pins where stated; no published result certifies all three pinned heads. Besu’s result source, supplied in its source inventory, is [1793018005-fa5bfa67da513c8de132d620958d92dc.json](https://hive.ethpandaops.io/glamsterdam/results/1793018005-fa5bfa67da513c8de132d620958d92dc.json). Besu did not supply an individual result URL for its 173/173 execute count.

[gC1]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork.md#L19-L30
[gE1]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7773.md#L21-L61
[gE2]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7708.md#L1-L39
[gE3]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8246.md#L1-L48
[gG1]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_transition.go#L835-L865
[gG11]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/evm.go#L275-L277
[gG15]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_processor.go#L232-L250
[gG19]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/types/log.go#L68-L81
[gG23]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/instructions.go#L933-L968
[gG26]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state/statedb.go#L254-L274
[gG3]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/evm.go#L283-L360
[gG35]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state/statedb.go#L855-L907
[gG38]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/gas_table.go#L646-L679
[gG4]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/evm.go#L585-L650
[gG40]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state/statedb.go#L825-L853
[gG42]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state/state_object.go#L172-L190
[gG45]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/params/config.go#L741-L744
[gG47]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/params/chainspecs/mainnet.json#L1-L51
[gG5]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/evm.go#L143-L149
[gG7]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/vm/evm.go#L364-L491
[gN1]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Specs/Forks/25_Amsterdam.cs#L9-L27
[gN2]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/VirtualMachine.ExecutionHandlers.cs#L78-L83
[gN3]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/Instructions/EvmInstructions.ControlFlow.cs#L450-L473
[gN4]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs#L102-L117
[gN5]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/Instructions/EvmInstructions.ControlFlow.cs#L412-L428
[gS1]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L133-L216
[gS14]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L724-L782
[gS15]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L1060-L1093
[gS2]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L395-L440
[gS22]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L632-L660
[gS24]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/system.py#L757-L775
[gS27]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/state_tracker.py#L494-L538
[gS28]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/system.py#L721-L755
[gS32]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/__init__.py#L1-L43
[gS4]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/__init__.py#L247-L283
[gS5]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/system.py#L610-L620
[gS9]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/system.py#L59-L185
[nE5]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7708.md#L25-L42
[nE6]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8246.md#L30-L49
[nE7]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7708.md#L50-L52
[nN10]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs#L1176-L1213
[nN12]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs#L1419-L1440
[nN15]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/TransferLog.cs#L12-L34
[nN18]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/StackAccessTracker.cs#L95-L115
[nN2]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs#L558-L598
[nN20]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs#L781-L799
[nN21]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/Instructions/EvmInstructions.ControlFlow.cs#L450-L471
[nN22]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/Instructions/EvmInstructions.ControlFlow.cs#L398-L405
[nN23]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs#L495-L531
[nN25]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/Instructions/EvmInstructions.ControlFlow.cs#L412-L426
[nN27]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs#L1886-L1917
[nN29]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Consensus/Processing/BlockAccessListManager.SystemContracts.cs#L44-L54
[nN32]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.JsonRpc/Data/ReceiptsForRpc.cs#L85-L91
[nN36]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Core/BlockAccessLists/BlockAccessListAtIndex.cs#L251-L295
[nN39]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/VirtualMachine.ExecutionHandlers.cs#L26-L35
[nN4]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/Instructions/EvmInstructions.Call.cs#L257-L311
[nN40]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/VirtualMachine.OpcodeHandlers.cs#L721-L731
[nN6]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/Instructions/EvmInstructions.Call.cs#L127-L161
[nN7]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/Instructions/EvmInstructions.Create.cs#L250-L294
[nN9]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs#L2011-L2048
[nS11]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L748-L780
[nS12]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L630-L661
[nS13]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/tests/amsterdam/eip7928_block_level_access_lists/test_block_access_lists_eip7708.py#L164-L170
[nS14]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/transactions.py#L86-L113
[nS15]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L198-L215
[nS2]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L417-L441
[nS3]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/__init__.py#L238-L245
[nS4]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L295-L302
[nS5]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/__init__.py#L247-L283
[nS6]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/system.py#L757-L775
[nS7]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L1062-L1093
[nS8]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/state_tracker.py#L494-L535
[nS9]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/system.py#L736-L755
[gG27]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state/journal.go#L618-L626
[gG36]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state/state_object.go#L101-L116
[gG43]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state/state_object.go#L227-L238
[gG44]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state/state_object.go#L254-L285
[gG46]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/params/config.go#L1297-L1310
[gG49]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state/statedb.go#L779-L782
[nN26]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/GasPolicy/EthereumGasPolicy.cs#L265-L271
[nN24]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/TransactionProcessing/TransactionProcessor.cs#L102-L117
[nN37]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.State/TracedAccessWorldState.cs#L525-L536
[nN38]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Core/BlockAccessLists/BlockAccessListAtIndex.cs#L107-L132
[nN33]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.JsonRpc/Data/ReceiptLogsForRpc.cs#L126-L133
[nN31]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Core/TransactionReceipt.cs#L89-L106
[nN17]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Core/Address.cs#L281-L300
[nN14]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/Instructions/EvmInstructions.Call.cs#L606-L623
[nN5]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/VirtualMachine.ExecutionHandlers.cs#L78-L83
[nN19]: https://github.com/NethermindEth/nethermind/blob/d48833af88ec4224c86afadd1c596e8f619c406b/src/Nethermind/Nethermind.Evm/VmState.cs#L333-L339
