# reth-1 — VERDICT CONFIRMED

The EIP-8282 missing-code divergence survives static review at Reth `e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c`. Reth executes both builder system calls without checking code presence, and its pinned evm2 treats a call to absent code as successful. The execution spec explicitly rejects it. No equivalent guard was found in the reviewed ordinary executor, BAL execution path, or post-execution consensus validation. **Qualification:** the latest public Hive fixtures are rejected as `INVALID`, with a BAL-hash error; they do not demonstrate acceptance. Acceptance of an otherwise valid block whose commitments match Reth's no-op execution is a high-confidence code inference, not a reproduced Engine API result. The known proposed fixes were not merged. [Reth execution][reth-execution], [evm2 system calls][evm2-system], [execution spec][fork], [post-execution validation][validation], [Hive result][hive-result], [failure log][hive-log], [Reth PR 26695][pr26695], [alloy-evm PR 400][pr400].

Review date: 2026-10-27 UTC. Public source and existing public test-result inspection only; no client, simulator, node, or network transaction was run. Scope is this one candidate, not a new inventory of every Glamsterdam EIP or client.

**Pins and applicability.** EIP-7773 lists EIP-8282 in Glamsterdam; the pinned EIP-8282 is Last Call. Resolved source pins: EIPs `d4c575521d99ec881a444ab3af604e684b5f0743`, execution-specs `7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b` (`src/ethereum/forks/amsterdam`), consensus-specs `8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2` (`specs/gloas`). The Gloas fork document retains onboarding from pending deposits but does not deploy these EL contracts. This record concerns the Amsterdam-gated EIP-8282 calls only: the pinned Reth mainnet hardfork-list assertion ends at Bpo2, without Amsterdam. It is not a claim about a currently active mainnet EIP-8282 path. [Meta EIP][meta], [EIP-8282][eip], [pin resolution: EIPs][eips-pin], [execution][el-pin], [consensus][cl-pin], [Gloas fork][gloas], [mainnet list, lines 1330–1357][chainspec], [Amsterdam gate, lines 390–416][reth-execution].

**Strongest refutation attempt: a later BAL check already rejects the block.** This is true for all four failing Hive deployment cases read: the Engine response is `INVALID`, and the error says the calculated and expected BAL hashes differ, whereas the fixture expects `SYSTEM_CONTRACT_EMPTY`. It disproves any assertion that those unmodified fixtures were accepted. It does not disprove the stated candidate, whose condition includes matching commitments. Reth's validator compares the computed requests hash with the header at lines 95–106 and the computed BAL hash with the header at lines 108–127; neither comparison asks whether builder code exists. The BAL path executes the canonical post-block hooks and returns their generated BAL (lines 151–196), rather than independently enforcing the EIP-8282 deployment requirement. A block committed to that result avoids this particular mismatch. The outer state-root comparison likewise checks equality with the executed result; it is not a code-presence invariant. [Failure log][hive-log], [validation][validation], [BAL execution][bal], [payload validation, lines 808–896][payload-validator].

There is also supporting *test source*, not a test executed in this review: Reth's `empty_block_happy_path_round_trip` at `crates/engine/tree/src/tree/payload_processor/bal/execute.rs#L522-L545` computes a reference BAL, places its hash in the header, and expects successful BAL execution. Its database helper at lines 269–292 installs no builder contracts, and its EVM configuration at lines 254–256 activates Amsterdam. This supports the absence of an implicit deployment or BAL guard. It is not a full consensus-validity proof: the helper also omits another request contract, and the test exercises execution rather than the entire Engine acceptance path. [Pinned BAL test and helpers][bal].

**All five refutation routes.**

1. **Another guard on the same path:** not found. `EthBlockExecutor::finish_with_prepared_block_access_list` invokes `post_execution_system_call_state_changes` at lines 399–420; big-block segment finalization uses the same function at lines 702–722. The helper rejects unsuccessful status, but success with empty output passes. evm2 has no builder-specific existence check in this system-call path. Its `system_call_to_missing_code_is_noop` test at lines 357–372 asserts successful execution, zero gas used, and no pending state change. That test uses Osaka, so it alone is not proof of Amsterdam behavior; the generic implementation at lines 139–186 and Reth's Amsterdam BAL test supply the additional evidence. The BAL and post-execution checks above do not repair the omission. [Executor][executor], [Reth system-call helper, lines 421–451][reth-execution], [evm2][evm2-system], [BAL][bal], [validation][validation].

2. **Condition impossible on a valid chain:** not a general refutation. Deployment is an operational prerequisite in EIP-8282, not an automatic installation in the fork transition. EELS `apply_fork` at lines 165–185 returns the old chain unchanged. Thus a pre-fork-valid chain that has not included deployment can reach its activation boundary with missing code; the first Amsterdam block is precisely where the rejection rule matters. On a chain that actually deployed both contracts correctly before activation, this specific initial missing-code condition is absent. No way to remove those correctly deployed contracts is alleged here. Gloas's pending-deposit migration changes builder registry state, not EL account bytecode. [EIP deployment rule][eip], [EELS transition][fork], [Gloas migration, lines 59–120 and 232][gloas].

3. **Spec misread:** the normative sentence is explicit: “If there is no code at either address once the EIP is active, every block from activation onward MUST be invalid.” EELS checks actual code length at lines 697–707 and calls that checked routine for both builder addresses at lines 899–921. However, the implementation checks the state after block transactions: its comment at lines 689–696 explicitly permits seeing a contract deployed earlier in the same block. The published deployment tests also accept `deploy_on_fork_block`. Therefore the corrected condition is **code still absent at the end-of-block system call**, not merely absent in the activation block's parent state. A deployment inside that block is not a counterexample to this corrected record. [EIP-8282 Deployment][eip], [EELS][fork], [deployment test source][deployment-test], [Hive outcomes][hive-result].

4. **Later Reth commit / merged fix:** none found as of this review. The requested commit-history API for `crates/ethereum/evm/src/execution.rs` lists `9d1638f32855dd0cffd98f28675ed584bf4920ef` (2026-10-24, replacement of revm with evm2, PR #25002) as the file's latest change. The main-head API still resolves to the requested `e0378eb6…` pin. A later fix cannot be inferred from the existence or closed state of an earlier dependency PR. [File history][reth-history], [main head][reth-head].

5. **PR #26695, dependency updates, and Hive:** #26695 is closed, `merged: false`, `merged_at: null`; its closure event is 2026-08-13T16:39:34Z. Its non-null `merge_commit_sha` is not evidence of a merge. The upstream alloy-evm #400 is still open, `merged: false`, `merged_at: null`, and proposes exactly the absent-code guard. Reth at the review pin uses evm2 `4a53ec080dfbb904e98e3ca8f0abcc11ab8abae0` (Cargo.toml lines 440–443, with the same revision patched through the pre-transfer repository URL at lines 674–679), so a revm/alloy-evm proposal alone would not fix this path. The current evm2 head read was `5652ca0a1e5a13639fb6e65427292b2e7d259df2`; its system-call code retains the same successful empty-call semantics. Its corrected-path history has no subsequent guard change. alloy-evm's EIP-8282 file history has only the original implementation commit `654c7fcec18b2a7f46149530987b4ab1af54d7dc`; the current file read also lacks the check. [PR 26695][pr26695], [events][pr-events], [PR 400][pr400], [proposed patch][pr400-files], [Cargo pin][cargo], [evm2 current source][evm2-current], [evm2 history][evm2-history], [alloy-evm history][alloy-history], [alloy-evm current source][alloy-current].

**Corrected surviving record.**

- **Client / EIP:** Reth / EIP-8282; known public missing-deployment validation gap. Client pin `e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c`.
- **Spec:** the quoted Deployment sentence above; `execution-specs@7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L665-L719`, called at `#L899-L921`. [Spec][eip], [executable spec][fork].
- **Exact client locations:** `crates/ethereum/evm/src/execution.rs#L390-L416` calls both addresses; `#L421-L451` only rejects failed status. Dependency: `alloy-rs/evm2@4a53ec080dfbb904e98e3ca8f0abcc11ab8abae0/crates/evm2/src/evm/system.rs#L139-L186`; the brief's `crates/evm2/src/system.rs` path was incorrect (404). Its missing-code test is `#L357-L372`. [Reth source][reth-execution], [correct evm2 source][evm2-system].
- **Condition / conceptual trigger:** on an Amsterdam-configured chain, leave code absent at `0x0000bff46984e3725691fa540a8c7589300d8282` or `0x000064d678505ad48f8ccb093bc65613800e8282` through the post-transaction system calls, with all other block requirements satisfied. An empty-transaction activation block suffices conceptually if its other inputs are valid. Commit the header and supplied payload data to Reth's actual execution: requests, state root, receipts, gas, and especially the generated BAL and its hash. Empty builder output contributes no builder records; this does **not** mean the entire BAL or all system effects are empty. Reth's missing-code call succeeds; EELS rejects independently of these commitments. This acceptance prediction is static analysis, not a newly run test. [Execution][reth-execution], [evm2][evm2-system], [BAL path][bal], [validation][validation], [EELS][fork].
- **Other client:** Geth `8817f99f92852f8ac53e596de6202dd9e3494065`, `core/state_processor.go#L457-L472`: both builder queue wrappers reach `processRequestsSystemCall`; lines 470–472 reject zero code size. This is code comparison, not a locally executed cross-client result. [Geth raw source][geth], [pin resolution][geth-pin].
- **Confidence:** high for the missing check and conditional consensus divergence; lower than an end-to-end reproduction for actual full-block acceptance. Existing Hive results corroborate late rejection and do not themselves establish acceptance.
- **Severity:** **invalid block accepted**, with **consensus split** potential, conditional on the missing-deployment state and matching commitments. This is not established as merely cosmetic by the current fixtures: they mask the acceptance condition with an unrelated commitment mismatch. Practical reachability is limited if the deployment prerequisite has been fulfilled on the intended chain. [Spec][eip], [validation][validation], [Hive log][hive-log].

**Newest public Hive consume-engine result.** The listing fetched via its cache-query variant was sorted by `start` for Reth consume-engine entries; the newest was exactly `eels/consume-engine` (newer than the `consume-enginex` entry). Run: `1793107028-864528883216a896bffd75995a87ae56.json`; start `2026-10-27T13:04:55.883510275Z`, end `2026-10-27T13:17:07.95568743Z`; client `Reth Version: 2.8.1-dev+e0378eb6`; 4,929 tests, 4,906 passes, 23 failures, no timeout. Hive commit in the result metadata: `ffcfaa2b6d24d823555d9689a82f781060bc00c5`. These totals are for the whole selected suite, not just EIP-8282. The bare listing initially returned HTTP 403; the query variant and `/results/` JSON were readable. [Listing fetched][hive-list], [result JSON][hive-result].

All twelve `*contract_deployment*` matches were the EIP-8282 cases below. Their shared path is `tests/amsterdam/eip8282_builder_execution_requests/test_contract_deployment.py`; test function is `test_builder_{deposit,exit}_contract_deployment`; parameter prefix is `fork_BPO2ToAmsterdamAtTime15k-blockchain_test_engine-` and suffix is `-reth_default`. Rows give the remaining deployment/balance parameters and result JSON test-case IDs. [Result JSON][hive-result].

| Function | Deployment parameter | zero_balance | nonzero_balance |
| --- | --- | --- | --- |
| deposit | deploy_before_fork | PASS (4917) | PASS (4918) |
| deposit | deploy_on_fork_block | PASS (4921) | PASS (4919) |
| deposit | deploy_after_fork | FAIL (4920) | FAIL (4916) |
| exit | deploy_before_fork | PASS (4924) | PASS (4928) |
| exit | deploy_on_fork_block | PASS (4922) | PASS (4927) |
| exit | deploy_after_fork | FAIL (4923) | FAIL (4926) |

No literal `fail_on_empty_code` test name appeared in the result. It is a generator argument, `fail_on_empty_code=True`, on **both** test functions in the source linked by this run, at execution-specs `e27f097ec7b3e6e8ee9c2c1873c183e8f7da7a6e`; this fixture-source pin is distinct from the requested spec pin. All four failing log slices were inspected (case 4916: bytes 15740784–15746040; 4920: 15759771–15765021; 4923: 15765242–15770483; 4926: 15775814–15781061, end offsets as supplied by JSON). Each reports `PayloadStatusEnum.INVALID` and a BAL-hash mismatch instead of `BlockException.SYSTEM_CONTRACT_EMPTY`. No claim of successful invalid-block acceptance is drawn from these logs. [Test source][deployment-test], [result JSON][hive-result], [details log][hive-log].

**Known-check.** This is a known public candidate, not a new discovery. Reth #26695 explicitly names the deployment fixtures; upstream alloy-evm #400 describes the same no-op and delayed BAL rejection. Nethermind **issue** #15223 (not a PR; the pull endpoint returned 404) is open and describes a different early parallel-BAL validation failure after #14836, with `INVALID` unchanged. Its reported root cause does not establish Reth's root cause or acceptance behavior. [26695][pr26695], [400][pr400], [Nethermind 15223][nm15223].

The all-state Reth issue/PR search for `8282` returned #26695 plus #26705 (merged 2026-08-14, RPC reporting), #27519 (merged 2026-09-29, RPC refactoring), #27387 (merged 2026-09-23, alloy version bump), and unrelated historical PR #8282. The three other relevant merged PR descriptions do not implement this validation check. An evm2 all-state search for “empty” and “system” found no explicit EIP-8282 missing-code fix; current source and file history were checked as stronger evidence than search absence. Search coverage is not a claim that every public discussion was found. [Reth search][reth-search], [26705 API][pr26705], [27519 API][pr27519], [27387 API][pr27387], [evm2 search][evm2-search], [evm2 history][evm2-history].

**Sources / URLs read.** Links above resolve to raw pinned code/specs, public GitHub API records, or public Hive artifacts. No GitHub HTML code view was used as code evidence. Main-head and API state observations are time-bound; pinned code and named result files identify the evidence used.

[meta]: https://raw.githubusercontent.com/ethereum/EIPs/d4c57552/EIPS/eip-7773.md
[eip]: https://raw.githubusercontent.com/ethereum/EIPs/d4c57552/EIPS/eip-8282.md
[fork]: https://raw.githubusercontent.com/ethereum/execution-specs/7f2f4c9b/src/ethereum/forks/amsterdam/fork.py
[gloas]: https://raw.githubusercontent.com/ethereum/consensus-specs/8a80ffa8/specs/gloas/fork.md
[eips-pin]: https://api.github.com/repos/ethereum/EIPs/commits/d4c57552
[el-pin]: https://api.github.com/repos/ethereum/execution-specs/commits/7f2f4c9b
[cl-pin]: https://api.github.com/repos/ethereum/consensus-specs/commits/8a80ffa8
[reth-execution]: https://raw.githubusercontent.com/paradigmxyz/reth/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/evm/src/execution.rs
[executor]: https://raw.githubusercontent.com/paradigmxyz/reth/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/evm/src/executor.rs
[validation]: https://raw.githubusercontent.com/paradigmxyz/reth/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/consensus/src/validation.rs
[bal]: https://raw.githubusercontent.com/paradigmxyz/reth/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/engine/tree/src/tree/payload_processor/bal/execute.rs
[payload-validator]: https://raw.githubusercontent.com/paradigmxyz/reth/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/engine/tree/src/tree/payload_validator.rs
[chainspec]: https://raw.githubusercontent.com/paradigmxyz/reth/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/chainspec/src/spec.rs
[cargo]: https://raw.githubusercontent.com/paradigmxyz/reth/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/Cargo.toml
[evm2-system]: https://raw.githubusercontent.com/alloy-rs/evm2/4a53ec080dfbb904e98e3ca8f0abcc11ab8abae0/crates/evm2/src/evm/system.rs
[evm2-current]: https://raw.githubusercontent.com/alloy-rs/evm2/5652ca0a1e5a13639fb6e65427292b2e7d259df2/crates/evm2/src/evm/system.rs
[geth]: https://raw.githubusercontent.com/ethereum/go-ethereum/8817f99f/core/state_processor.go
[geth-pin]: https://api.github.com/repos/ethereum/go-ethereum/commits/8817f99f
[reth-history]: https://api.github.com/repos/paradigmxyz/reth/commits?path=crates/ethereum/evm/src/execution.rs&per_page=100
[reth-head]: https://api.github.com/repos/paradigmxyz/reth/commits/main
[evm2-history]: https://api.github.com/repos/alloy-rs/evm2/commits?path=crates/evm2/src/evm/system.rs&per_page=100
[alloy-history]: https://api.github.com/repos/alloy-rs/evm/commits?path=crates/evm/src/block/system_calls/eip8282.rs&per_page=100
[alloy-current]: https://raw.githubusercontent.com/alloy-rs/evm/main/crates/evm/src/block/system_calls/eip8282.rs
[pr26695]: https://api.github.com/repos/paradigmxyz/reth/pulls/26695
[pr-events]: https://api.github.com/repos/paradigmxyz/reth/issues/26695/events
[pr400]: https://api.github.com/repos/alloy-rs/evm/pulls/400
[pr400-files]: https://api.github.com/repos/alloy-rs/evm/pulls/400/files
[pr26705]: https://api.github.com/repos/paradigmxyz/reth/pulls/26705
[pr27519]: https://api.github.com/repos/paradigmxyz/reth/pulls/27519
[pr27387]: https://api.github.com/repos/paradigmxyz/reth/pulls/27387
[nm15223]: https://api.github.com/repos/NethermindEth/nethermind/issues/15223
[reth-search]: https://api.github.com/search/issues?q=repo:paradigmxyz/reth+8282&per_page=100
[evm2-search]: https://api.github.com/search/issues?q=repo:alloy-rs/evm2+%22empty%22+%22system%22&per_page=100
[hive-list]: https://hive.ethpandaops.io/glamsterdam-quick/listing.jsonl?x=1
[hive-result]: https://hive.ethpandaops.io/glamsterdam-quick/results/1793107028-864528883216a896bffd75995a87ae56.json
[hive-log]: https://hive.ethpandaops.io/glamsterdam-quick/results/details/1793106295-fb69b277c64a8ffd1dc669182d6c36a258aebb6ed743c8e33266c0ba36f3bdbf-0.log
[deployment-test]: https://raw.githubusercontent.com/ethereum/execution-specs/e27f097ec7b3e6e8ee9c2c1873c183e8f7da7a6e/tests/amsterdam/eip8282_builder_execution_requests/test_contract_deployment.py
