# Reth: Amsterdam public-source conformance review

2026-10-27. Three candidates survive static disproof: one **known EIP-8282 block-validity difference** and two **Engine API conformance differences**. No EIP-7997 fork-transition difference found in the inspected path. Static review; no node execution.

## Pins and specification versions

Public commit API heads were frozen below. Reth code was fetched from raw.githubusercontent.com; blob URLs are line citations, not HTML reads. Dependencies are separately pinned.

| Source | Branch requested/resolved | Commit |
|---|---|---|
| paradigmxyz/reth | main | [`e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c`](https://api.github.com/repos/paradigmxyz/reth/commits/main) |
| ethereum/execution-specs | forks/bogota | [`7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b`](https://api.github.com/repos/ethereum/execution-specs/commits/forks/bogota) |
| ethereum/go-ethereum | master | [`8817f99f92852f8ac53e596de6202dd9e3494065`](https://api.github.com/repos/ethereum/go-ethereum/commits/master) |
| ethereum/consensus-specs | master | [`8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2`](https://api.github.com/repos/ethereum/consensus-specs/commits/master) |
| ethereum/EIPs | master | [`d4c575521d99ec881a444ab3af604e684b5f0743`](https://api.github.com/repos/ethereum/EIPs/commits/master) |
| ethereum/execution-apis | main | [`3284ee80c3da3e516c53782dde75157cccf1ebdc`](https://api.github.com/repos/ethereum/execution-apis/commits/main) |

The requested execution-apis `commits/master` endpoint returned HTTP 422. Its repository metadata declares `main`; the requested [raw master Amsterdam document](https://raw.githubusercontent.com/ethereum/execution-apis/master/src/engine/amsterdam.md) nevertheless resolved and was byte-for-byte identical to `src/engine/amsterdam.md` at the main pin above. 

Reth pins evm2 to `4a53ec080dfbb904e98e3ca8f0abcc11ab8abae0` in [Cargo.toml#L440-L443][s1] (the patch uses the pre-transfer DaniPopes URL at the same revision: [Cargo.toml#L674-L679][s2]). Locked Alloy engine/EIP crates are 2.5.0; the downloaded crate archives identify Alloy revision `59174912873b337ea5868c295cefa70997596f29` in `.cargo_vcs_info.json`. See [Cargo.lock#L282-L287][s3] for alloy-eips. 

### Scheduled set

The meta-EIP schedules exactly 18 EIPs ([eip-7773.md#L22-L41][s4]). Their current version is the EIPs commit above, not a semantic version. EELS's matching EL inventory is [__init__.py#L1-L38][s5]. Gloas lists its changes and historical EIP revision links in [beacon-chain.md#L161-L182][s6]; those historical links are not the latest EIP snapshot.

Every path in this manifest is at the EIPs pin above (full URL = `https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/` + path).

| Pinned file citation | EIP title | Status |
|---|---|---|
| EIPS/eip-2780.md#L1-L12 | Resource-Based Intrinsic Transaction Gas | Last Call |
| EIPS/eip-7688.md#L1-L12 | Forward Compatible Consensus Data Structures | Review |
| EIPS/eip-7708.md#L1-L12 | ETH Transfers Emit a Log | Last Call |
| EIPS/eip-7732.md#L1-L12 | Enshrined Proposer-Builder Separation | Last Call |
| EIPS/eip-7778.md#L1-L12 | Block Gas Accounting without Refunds | Last Call |
| EIPS/eip-7843.md#L1-L12 | SLOTNUM Opcode | Last Call |
| EIPS/eip-7928.md#L1-L12 | Block-Level Access Lists | Last Call |
| EIPS/eip-7954.md#L1-L12 | Increase Maximum Contract Size | Last Call |
| EIPS/eip-7976.md#L1-L12 | Increase Calldata Floor Cost | Last Call |
| EIPS/eip-7981.md#L1-L12 | Increase Access List Cost | Last Call |
| EIPS/eip-7997.md#L1-L12 | Deterministic Factory Contract | Last Call |
| EIPS/eip-8024.md#L1-L12 | Backward Compatible SWAPN, DUPN, EXCHANGE | Last Call |
| EIPS/eip-8037.md#L1-L12 | State Creation Gas Cost Increase | Last Call |
| EIPS/eip-8038.md#L1-L12 | State-Access Gas Cost Update | Last Call |
| EIPS/eip-8045.md#L1-L12 | Exclude Slashed Validators from Proposing | Last Call |
| EIPS/eip-8061.md#L1-L12 | Increase Exit and Consolidation Churn | Last Call |
| EIPS/eip-8246.md#L1-L12 | Remove SELFDESTRUCT Burn | Last Call |
| EIPS/eip-8282.md#L1-L12 | Builder Execution Requests | Last Call |

Separately listed networking EIPs: 7975, 8070, 8136, 8159, 8189; informational: 7904, 8261 ([eip-7773.md#L43-L57][s25]). Review scope is the assigned Reth subset.

Glamsterdam is unscheduled on mainnet in the pinned meta-EIP: [eip-7773.md#L65-L75][s26]. Findings are limited to Amsterdam-only rules.

## Candidates

### R1 — Missing builder-contract code does not invalidate the block (known)

1. **Spec, verbatim:** “If there is no code at either address once the EIP is active, every block from activation onward MUST be invalid.” [EIP-8282 deployment](https://eips.ethereum.org/EIPS/eip-8282#deployment), pinned [eip-8282.md#L56-L60][s27]. EELS implements the explicit empty-code rejection in [fork.py#L665-L708][s28] and calls it for both builder addresses in [fork.py#L899-L921][s29].

2. **Reth at the pin:** [execution.rs#L390-L415][s30] calls both builders only under Amsterdam. [execution.rs#L421-L451][s31] executes the system call and checks its status, with no code-existence check. Exact call:

   `let executed = evm.system_call(SystemTx::new(address, data)).map_err(map_handler_error)?;`

   Its error branch begins `if !executed.result().status &&`. The pinned evm2 implementation [system.rs#L139-L188][s32] performs a normal zero-value call; its documented and tested empty-code result is success, [system.rs#L357-L372][s33]: `assert!(result.result.status);`. Empty output is omitted by [eip7685.rs#L88-L100][s34]. Thus neither request construction nor checking the resulting request hash supplies the missing existence rule.

3. **Divergent condition, in words:** An Amsterdam activation state has no code at either builder address, and the block does not deploy it. Other required contracts and all unrelated block fields are valid. A block committing to Reth's actual no-op call result, empty builder requests and corresponding state/BAL is accepted by this execution path, whereas EELS/Geth reject it even if all commitments agree. Properly predeployed chains normally cannot reach this condition. A mismatching fixture BAL can independently reject a block, masking the missing check.

4. **Geth comparison:** [state_processor.go#L220-L227][s35] activates builder calls at Amsterdam; [state_processor.go#L457-L472][s36] routes both through an explicit guard: `if evm.StateDB.GetCodeSize(addr) == 0 {`. Geth agrees with the spec.

5. **Confidence high, static only; disproof attempted:** Traced the pinned dependency rather than assuming CALL-to-empty behavior; checked Reth's pre-execution changes ([execution.rs#L246-L295][s37]), builder call sites, finish path ([executor.rs#L435-L510][s75]) and post-execution request-hash validation ([validation.rs#L95-L110][s39]). None rejects the successful empty-code call. EELS contains deployment tests with `fail_on_empty_code=True`: [test_contract_deployment.py#L31-L42][s40] (exit equivalent at lines 70–81). Those tests were read, not executed.

6. **Severity: invalid block accepted; potential consensus split** on a state missing a builder predeploy. No claim of a reachable attack on an ordinarily initialized chain.

**Known-check: known.** [Reth #26695](https://github.com/paradigmxyz/reth/pull/26695), **closed**, describes the same empty-predeploy check in alloy-evm and both deployment-fixture failures on [Hive](https://hive.ethpandaops.io/#/test/glamsterdam-quick/1786545713-b58ee7108bac1061a0e86683cb053c10). Search returned `merged_at: null`; closed does not establish merged. The current pin uses evm2. This is a source-visible instance of a known violation, with regression history and current Hive outcome unverified.

### R2 — Fully shaped pre-Amsterdam newPayloadV5 gets the wrong error

1. **Spec, verbatim excerpt:** “Client software **MUST** return `-38005: Unsupported fork` error” when the newPayloadV5 timestamp is outside Amsterdam: [amsterdam.md#L118-L126][s42]. [Public document](https://raw.githubusercontent.com/ethereum/execution-apis/master/src/engine/amsterdam.md).

2. **Reth at the pin:** [engine_api.rs#L270-L282][s43] calls V5 validation. The first field validator is BAL presence, [lib.rs#L561-L571][s44]; [lib.rs#L267-L269][s45] returns `VersionSpecificValidationError::HasBlockAccessListPreAmsterdam` before timestamp validation. [error.rs#L142-L151][s46] maps this Payload error to `INVALID_PARAMS_CODE` (−32602). The ordinary timestamp checks occur later through [lib.rs#L584-L597][s47] / [lib.rs#L507-L509][s48].

3. **Divergent condition, in words:** Call newPayloadV5 with a syntactically complete ExecutionPayloadV4, including a correctly RLP-encoded BAL and a slot number, but a timestamp in Osaka immediately before Amsterdam. Supply the other required parameters and a correctly ordered execution-request list. The spec requires unsupported fork; Reth returns invalid parameters because the required V4 BAL is present before activation. This is an API error-class mismatch, not acceptance of an invalid block.

4. **Geth comparison:** [api.go#L866-L897][s49] checks required fields for presence, then checks the Amsterdam fork window at lines 891–892. With all fields supplied it returns unsupported fork, agreeing with the spec rather than Reth.

5. **Confidence high; disproof attempted:** Chose a fully shaped request so missing-field precedence cannot explain the result. Confirmed Alloy V4 deserialization requires BAL/slot fields ([payload.rs#L1532-L1567][s50]) and that the Reth V5 handler does not perform a prior fork check. Checked the staggered-fork logic in [lib.rs#L155-L189][s51]: it does reject old methods at Amsterdam and gates getPayloadV6, but cannot override an earlier field error. The related [#26709](https://github.com/paradigmxyz/reth/issues/26709) / [#26711](https://github.com/paradigmxyz/reth/pull/26711) concern Bogota timeframe checks; those fixes do not remove this Amsterdam field-first branch. No dynamic RPC result is claimed.

6. **Severity: cosmetic** under the requested categories: wrong Engine RPC error code, with no demonstrated consensus/state/gas consequence. It can confuse fork-version diagnostics.

**Known-check: not found in successfully retrieved queries.** Searches covering `7928`, `7843`, `"Unsupported fork"`, and short-name queries are recorded below. Related Bogota issue #26709 is closed; #26711 is closed/merged. Neither retrieved body identifies this exact pre-Amsterdam V5 error-code mismatch. Incomplete Hive/search coverage prevents a novelty claim.

### R3 — Missing targetGasLimit accepted in JSON forkchoiceUpdatedV4 (shared with Geth)

1. **Spec, verbatim excerpt:** “structure, return `-38003: Invalid payload attributes` on failure.” [amsterdam.md#L222-L228][s52]. The required PayloadAttributesV4 structure includes `targetGasLimit` as a 64-bit quantity, [amsterdam.md#L81-L91][s53]; neither omission nor null supplies such a value.

2. **Reth at the pin:** [engine.rs#L72-L85][s54] delegates attribute validation to [lib.rs#L547-L598][s55], which checks BAL/slot, withdrawals and parent beacon root but never target gas limit. The re-exported Alloy attribute type defaults an absent field to None: [payload.rs#L3469-L3480][s56], exact field `pub target_gas_limit: Option<u64>,`. With no validation error, [engine_api.rs#L1071-L1099][s57] forwards attributes to the builder. [config.rs#L93-L105][s58] explicitly uses `target_gas_limit.unwrap_or(self.desired_gas_limit)`.

3. **Divergent condition, in words:** After Amsterdam, send JSON forkchoiceUpdatedV4 for an available valid head, with a later timestamp, withdrawals, beacon root and slot number, but omit targetGasLimit (or use null). Allow all normal build prerequisites to succeed. Reth can start a payload job using its configured target, while the spec requires invalid payload attributes and no build for that malformed attribute set. This is not evidence that a valid supplied target is ignored.

4. **Geth comparison:** [types.go#L68-L84][s59] also makes TargetGasLimit optional. [api.go#L223-L242][s60] checks withdrawals/beacon root/slot/fork but not the missing target; [worker.go#L290-L300][s61] falls back to miner.config.GasCeil. Geth agrees with Reth, not the written required-field rule.

5. **Confidence high for JSON conformance; disproof attempted:** Followed serialization, EthereumEngineValidator, forwarding and builder fallback. A valid supplied target *is* honored by [lib.rs#L189-L215][s62], so narrowed the finding to omission/null. Alloy's separate SSZ conversion requires the target, [payload.rs#L250-L266][s63]; that does not validate the direct JSON-RPC route. No runtime request was sent.

6. **Severity: cosmetic** within the supplied taxonomy: malformed API attributes accepted and a build may start instead of returning the specified error. No invalid consensus block or wrong gas charge is established; the chosen header gas limit may still be valid.

**Known-check: not found in successfully retrieved queries.** `"targetGasLimit"` returned four results: #26632 (testing_buildBlockV1 honoring a supplied target), #26865 (selfdestruct tests), #25973 (payload-ID fields), #19454 (CLI gas-limit settings). Their retrieved descriptions do not address missing V4 attributes. #25973 is closed/merged and its slot/target payload-ID fix is present. Broader short-name searches were attempted but rate-limited; see limitations below.

## Rules checked without a surviving difference

Static checks only.

Baseline: EELS Amsterdam and Engine API pins above. Core data definitions: `src/ethereum/forks/amsterdam/requests.py#L307-L325` (request hash) and `src/ethereum/forks/amsterdam/blocks.py#L241-L268` (header commitments/slot), at the EELS pin.

| Rule | Reth source and result |
|---|---|
| Builder types and addresses | [execution.rs#L36-L38][s66] defines 03/04; [system.rs#L27-L58][s67] matches both addresses and SYSTEM_ADDRESS. |
| End-of-block calls, empty input, type ordering | [execution.rs#L297-L316][s69] then [execution.rs#L364-L415][s70]: deposits, withdrawals, consolidations, builder deposits, builder exits. Amsterdam gate present. |
| 30 million dedicated execution gas; no block-gas charge | [system.rs#L75-L93][s74] set the default; [system.rs#L139-L188][s32] bypasses ordinary tx charging. [executor.rs#L435-L510][s75] does not add system-call gas to transaction totals. The 16-SSTORE state reservoir agrees with current EELS. |
| Revert/halt invalidates a builder system call | [execution.rs#L421-L451][s31] propagates failed status as validation error. Missing code is separately R1. |
| Skip empty request data; hash type-prefixed nonempty bytes | [eip7685.rs#L88-L100][s34] and [eip7685.rs#L129-L158][s79] omit empty data and SHA256 the ordered per-type hashes; [validation.rs#L95-L110][s39] compares header commitment. |
| Reject empty, duplicate, descending Engine request entries | Ethereum validator invokes [lib.rs#L699-L723][s82]. Empty outer list allowed; length ≤1, duplicates and descending types rejected. |
| newPayloadV5 parameter set | [engine_api.rs#L1418-L1439][s85] wires V4 payload, blob hashes, beacon root and execution requests. Hash-only requests require explicit opt-in; standard default review uses array requests. |
| Raw BAL bytes hashed into header, slot included | [payload.rs#L1808-L1818][s89] hashes raw BAL bytes, assigns slot; hash mismatch rejected. |
| Missing BAL/slot is not silently defaulted for JSON V4 payload | Alloy V4 deserialization requires the fields (R2). [amsterdam.rs#L8-L27][s93] independently enforces post-fork header fields. |
| Undecodable BAL returns INVALID/null latestValidHash | [payload_validator.rs#L571-L580][s95] creates a BAL-decode error; [mod.rs#L3332-L3341][s96] explicitly returns null latest-valid hash. This disproves a suspected wrong-error candidate. |
| getPayloadV6 has raw BAL, slot and executionRequests | [payload.rs#L176-L207][s98] requires BAL and emits V6 envelope including requests; [payload.rs#L1760-L1776][s99] copies supplied BAL and header slot. |
| getPayloadV6 pre-fork rejection; old methods rejected at activation | [engine_api.rs#L686-L691][s103] apply timestamp validation; [lib.rs#L155-L189][s51] has Amsterdam gates for getPayloadV6 and old newPayloadV4/getPayloadV5/fcuV3. Full old-version field-valid requests reach −38005. R2 covers the distinct newPayloadV5 pre-fork case. |
| Slot number carried through attributes, environment, header | [lib.rs#L312-L320][s105] requires slot at Amsterdam; [build.rs#L138-L145][s108] writes header slot. |
| custodyColumns is a third positional optional 16-byte value | [engine.rs#L143-L165][s111] uses Option<B128>; [engine_api.rs#L423-L433][s112] updates custody independently before fork-choice processing; The Erigon #22896 signature issue is not present here. No claim of exhaustive sparse-blobpool verification. |
| Factory does not mutate state or add a boundary existence/BAL read | Inspected [execution.rs#L246-L295][s37] pre-block hook and [execution.rs#L351-L418][s115] post-block hook; only specified system contracts are called, no EIP-7997 factory check/injection. This agrees with no special factory boundary action. Genesis/ordinary deployment provisioning is outside this negative check. |

## Known-check coverage and public test evidence

Search endpoint: `https://api.github.com/search/issues?per_page=100&q=` plus URL-encoded query. GitHub search queries below used `repo:paradigmxyz/reth` with **no state or is:issue/is:pr restriction**, so cover both open/closed issues and PRs. All results fit one 100-entry page. Unrelated numeric issue-number matches were excluded.

| Search suffix | Returned total | Use |
|---|---:|---|
| `8282` | 5 | Both states; issues and PRs |
| `"builder requests"` | 13 | Both states; issues and PRs |
| `"builder execution"` | 64 | Both states; issues and PRs |
| `7997` | 1 | Both states; issues and PRs |
| `"deterministic factory"` | 0 | Both states; issues and PRs |
| `7843` | 9 | Both states; issues and PRs |
| `7928` | 50 | Both states; issues and PRs |
| `"Unsupported fork"` | 16 | Both states; issues and PRs |
| `"targetGasLimit"` | 4 | Both states; issues and PRs |
| `"custody"` | 11 | Both states; issues and PRs |

Additional attempted searches: `repo:paradigmxyz/reth "SLOTNUM"`, `"block-level access"`, `"forkchoiceUpdatedV4"`, `"newPayloadV5"`, `"target gas limit"`, and `"empty" "builder"`; and `repo:ethereum/execution-specs "Test Release Tracker"`. These returned **HTTP 403 rate limit exceeded**, including a retry. Web-index fallback searches for the short names and targetGasLimit did not identify R2/R3, but are not equivalent to complete GitHub search. “Not found” above is explicitly limited to successful searches, not proof of novelty.

Public execution-specs tracker pages read through web fallback:

- [#2915, devnet v6.0.0](https://github.com/ethereum/execution-specs/issues/2915): includes the EIP-8282 implementation/tests and EIP-7997 factory switch. This establishes intended fixture scope, not a Reth pass.
- [#3001, devnet v6.0.1](https://github.com/ethereum/execution-specs/issues/3001): closed release tracker, mainly 8038 and 8037 follow-up coverage.
- [#3043, devnet v6.1.0](https://github.com/ethereum/execution-specs/issues/3043): release follow-up page inspected; no R2/R3 confirmation found in the retrieved material.
- [#3147, devnet v7.2.0](https://github.com/ethereum/execution-specs/issues/3147): includes finalized EIP-8282 contract/address work and malformed/missing BAL tests (#3082). Does not by itself identify today's Reth result.

[Glamsterdam Hive listing](https://hive.ethpandaops.io/glamsterdam/listing.jsonl) returned **HTTP 403 Forbidden** on direct retrieval and was inaccessible through the web tool. R1's historical failure is reported by #26695, not independently verified Hive output. No current results or R2/R3 corroboration are inferred.

Related closed PRs read: [#26693](https://github.com/paradigmxyz/reth/pull/26693) (BAL-path verdicts), [#24245](https://github.com/paradigmxyz/reth/pull/24245) (merged, custody parameter), [#27344](https://github.com/paradigmxyz/reth/pull/27344) (custody reconciliation), [#27485](https://github.com/paradigmxyz/reth/pull/27485) (BAL structure). [Erigon #22896](https://github.com/erigontech/erigon/issues/22896) was read as the third-parameter lead.

## Limits

No client code was executed. Contract-internal fee arithmetic and CL/BLS handling were not exhaustively audited. Factory conclusions cover the inspected hooks. Deliverable checks validate size/citations, not Ethereum behavior.

## URLs read

The pin endpoints, issue/search/tracker links and source references in this report are the URL ledger. Reth files were retrieved as `https://raw.githubusercontent.com/paradigmxyz/reth/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/<path>`. Other repositories were read from pinned public source archives. Alloy 2.5.0 sources were read from `https://static.crates.io/crates/<crate>/<crate>-2.5.0.crate` for alloy-eips and alloy-rpc-types-engine. EIP pages read: [8282](https://eips.ethereum.org/EIPS/eip-8282), [7843](https://eips.ethereum.org/EIPS/eip-7843), [7928](https://eips.ethereum.org/EIPS/eip-7928), [7997](https://eips.ethereum.org/EIPS/eip-7997). [API repository metadata](https://api.github.com/repos/ethereum/execution-apis) supplied its default branch. Failed endpoints are identified above.

[s1]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/Cargo.toml#L440-L443
[s2]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/Cargo.toml#L674-L679
[s3]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/Cargo.lock#L282-L287
[s4]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7773.md#L22-L41
[s5]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/__init__.py#L1-L38
[s6]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L161-L182
[s25]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7773.md#L43-L57
[s26]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7773.md#L65-L75
[s27]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8282.md#L56-L60
[s28]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L665-L708
[s29]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L899-L921
[s30]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/evm/src/execution.rs#L390-L415
[s31]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/evm/src/execution.rs#L421-L451
[s32]: https://github.com/alloy-rs/evm2/blob/4a53ec080dfbb904e98e3ca8f0abcc11ab8abae0/crates/evm2/src/evm/system.rs#L139-L188
[s33]: https://github.com/alloy-rs/evm2/blob/4a53ec080dfbb904e98e3ca8f0abcc11ab8abae0/crates/evm2/src/evm/system.rs#L357-L372
[s34]: https://github.com/alloy-rs/alloy/blob/59174912873b337ea5868c295cefa70997596f29/crates/eips/src/eip7685.rs#L88-L100
[s35]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_processor.go#L220-L227
[s36]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/core/state_processor.go#L457-L472
[s37]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/evm/src/execution.rs#L246-L295
[s39]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/consensus/src/validation.rs#L95-L110
[s40]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/tests/amsterdam/eip8282_builder_execution_requests/test_contract_deployment.py#L31-L42
[s42]: https://github.com/ethereum/execution-apis/blob/3284ee80c3da3e516c53782dde75157cccf1ebdc/src/engine/amsterdam.md#L118-L126
[s43]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/rpc/rpc-engine-api/src/engine_api.rs#L270-L282
[s44]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/payload/primitives/src/lib.rs#L561-L571
[s45]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/payload/primitives/src/lib.rs#L267-L269
[s46]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/rpc/rpc-engine-api/src/error.rs#L142-L151
[s47]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/payload/primitives/src/lib.rs#L584-L597
[s48]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/payload/primitives/src/lib.rs#L507-L509
[s49]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/eth/catalyst/api.go#L866-L897
[s50]: https://github.com/alloy-rs/alloy/blob/59174912873b337ea5868c295cefa70997596f29/crates/rpc-types-engine/src/payload.rs#L1532-L1567
[s51]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/payload/primitives/src/lib.rs#L155-L189
[s52]: https://github.com/ethereum/execution-apis/blob/3284ee80c3da3e516c53782dde75157cccf1ebdc/src/engine/amsterdam.md#L222-L228
[s53]: https://github.com/ethereum/execution-apis/blob/3284ee80c3da3e516c53782dde75157cccf1ebdc/src/engine/amsterdam.md#L81-L91
[s54]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/node/src/engine.rs#L72-L85
[s55]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/payload/primitives/src/lib.rs#L547-L598
[s56]: https://github.com/alloy-rs/alloy/blob/59174912873b337ea5868c295cefa70997596f29/crates/rpc-types-engine/src/payload.rs#L3469-L3480
[s57]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/rpc/rpc-engine-api/src/engine_api.rs#L1071-L1099
[s58]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/payload/src/config.rs#L93-L105
[s59]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/beacon/engine/types.go#L68-L84
[s60]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/eth/catalyst/api.go#L223-L242
[s61]: https://github.com/ethereum/go-ethereum/blob/8817f99f92852f8ac53e596de6202dd9e3494065/miner/worker.go#L290-L300
[s62]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/payload/src/lib.rs#L189-L215
[s63]: https://github.com/alloy-rs/alloy/blob/59174912873b337ea5868c295cefa70997596f29/crates/rpc-types-engine/src/ssz_engine_types/payload.rs#L250-L266
[s66]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/evm/src/execution.rs#L36-L38
[s67]: https://github.com/alloy-rs/evm2/blob/4a53ec080dfbb904e98e3ca8f0abcc11ab8abae0/crates/evm2/src/evm/system.rs#L27-L58
[s69]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/evm/src/execution.rs#L297-L316
[s70]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/evm/src/execution.rs#L364-L415
[s74]: https://github.com/alloy-rs/evm2/blob/4a53ec080dfbb904e98e3ca8f0abcc11ab8abae0/crates/evm2/src/evm/system.rs#L75-L93
[s75]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/evm/src/executor.rs#L435-L510
[s79]: https://github.com/alloy-rs/alloy/blob/59174912873b337ea5868c295cefa70997596f29/crates/eips/src/eip7685.rs#L129-L158
[s82]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/payload/primitives/src/lib.rs#L699-L723
[s85]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/rpc/rpc-engine-api/src/engine_api.rs#L1418-L1439
[s89]: https://github.com/alloy-rs/alloy/blob/59174912873b337ea5868c295cefa70997596f29/crates/rpc-types-engine/src/payload.rs#L1808-L1818
[s93]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/payload/validator/src/amsterdam.rs#L8-L27
[s95]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/engine/tree/src/tree/payload_validator.rs#L571-L580
[s96]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/engine/tree/src/tree/mod.rs#L3332-L3341
[s98]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/engine-primitives/src/payload.rs#L176-L207
[s99]: https://github.com/alloy-rs/alloy/blob/59174912873b337ea5868c295cefa70997596f29/crates/rpc-types-engine/src/payload.rs#L1760-L1776
[s103]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/rpc/rpc-engine-api/src/engine_api.rs#L686-L691
[s105]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/payload/primitives/src/lib.rs#L312-L320
[s108]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/evm/src/build.rs#L138-L145
[s111]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/rpc/rpc-api/src/engine.rs#L143-L165
[s112]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/rpc/rpc-engine-api/src/engine_api.rs#L423-L433
[s115]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/evm/src/execution.rs#L351-L418
