| Client / source | Branch | Commit | Spec commit |
|---|---|---|---|
| Erigon | main | [`f32a39d1e5f87a9ec3a9ce2858171c74acc3c242`](https://api.github.com/repos/erigontech/erigon/commits/main) | EELS `7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b`; Engine API `3284ee80c3da3e516c53782dde75157cccf1ebdc`; EIPs `d4c575521d99ec881a444ab3af604e684b5f0743` |
| Reth | main | [`e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c`](https://api.github.com/repos/paradigmxyz/reth/commits/main) | Same EELS, Engine API and EIPs pins |
| Geth (comparison only) | master | [`8817f99f92852f8ac53e596de6202dd9e3494065`](https://api.github.com/repos/ethereum/go-ethereum/commits/master) | Same EELS, Engine API and EIPs pins |
| Execution specs (Amsterdam directory) | forks/bogota | [`7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b`](https://api.github.com/repos/ethereum/execution-specs/commits/forks/bogota) | — |
| Engine API | main | [`3284ee80c3da3e516c53782dde75157cccf1ebdc`](https://api.github.com/repos/ethereum/execution-apis/commits/main) | — |
| EIPs | master (Reth); default HEAD (Erigon) | [`d4c575521d99ec881a444ab3af604e684b5f0743`](https://api.github.com/repos/ethereum/EIPs/commits/HEAD) | — |
| Consensus specs | master | [`8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2`](https://api.github.com/repos/ethereum/consensus-specs/commits/master) | — |

# Amsterdam execution requests — merge 2

Merged only the supplied `item-erigon` and `item-reth` reviews, dated 2026-10-27. No additional research or findings. All six candidates, their six parts, known-checks, quotations and file citations are retained. Original labels inside copied text map as follows: C1 → erigon-1, C2 → erigon-2, K1 → erigon-3; R1 → reth-1, R2 → reth-2, R3 → reth-3.

Input provenance: `artifacts/goal/batches/el-requests/items/erigon/result.md`, SHA-256 `37559dfef4557ef2dee08f33ee62c5a9dfa9a75ddbb1251a6636f18b1291d6c1`; `artifacts/goal/batches/el-requests/items/reth/result.md`, SHA-256 `d631c686cd0b766333faac7ee6b2f026114abe3ff17ac0ed2cfe00bf18a0a25c`. The supplied reviews are the source of merged classifications; their public evidence remains attached. Mainnet status is the reviews' pinned-meta observation, not a fresh activation check; both limit candidates to Amsterdam-only rules ([meta-EIP][s26]).

## Candidates

### erigon-1 — Non-DATA custody encoding is accepted

1. **Spec.** [common.md#L134-L138][a-common] requires DATA to match `^0x(?:[a-fA-F0-9]{2})*$` (verbatim). [amsterdam.md#L230-L234][a-fcu] requires a “16-byte `DATA` value”, otherwise `-32602`.

2. **Erigon.** [execution/engineapi/engine_types/custody_columns.go#L37-L52][e-custody], at the pin:

   ```go
   s = strings.TrimPrefix(s, "0x")
   s = strings.TrimPrefix(s, "0X")
   b, err := hex.DecodeString(s)
   ```

   Prefix removal is optional; subsequent checks enforce decoding and length only. [engine_api_methods.go#L178-L182][e-fcu] uses this type for V4's third argument.

3. **Condition.** On an Amsterdam-configured EL, send otherwise acceptable FCU V4 for a valid head, null attributes, and thirty-two hexadecimal digits **without a prefix** as custody columns. Erigon proceeds instead of returning invalid params. An uppercase prefix also passes. This is an encoding/response difference, not malformed-block acceptance.

4. **Reth.** [crates/rpc/rpc-api/src/engine.rs#L159-L165][r-custody] declares `custody_columns: Option<B128>`; [engine_api.rs#L423-L434][r-fcu] accepts it. [Cargo.lock#L440-L443][r-lock1] and [#L2608-L2611][r-lock2] pin alloy-primitives 1.7.3 and const-hex 1.19.3. Their exact public sources, `src/bits/serde.rs#L55-L63` and `src/lib.rs#L658-L667,#L702-L706`, delegate to FromHex and optionally strip the prefix. **Reth agrees with Erigon for this V4 input**, not the DATA grammar. Sources read: [alloy-primitives package](https://static.crates.io/crates/alloy-primitives/alloy-primitives-1.7.3.crate), [const-hex package](https://static.crates.io/crates/const-hex/const-hex-1.19.3.crate).

5. **Confidence/disproof.** **High**, static. Checked the decoder and typed call boundary, then Reth's actual dependency rather than assuming fixed-size types enforce DATA. Wrong decoded lengths are rejected; that does not enforce a prefix. No runtime reproduction.

6. **Severity / known-check.** **Cosmetic**; no established block/state-root/gas/fee effect. **Not found** for this precise defect. Queries: `repo:erigontech/erigon 8070`, `repo:erigontech/erigon custodyColumns`, `repo:erigontech/erigon "custodyColumns" "prefix" in:title,body` (0), and `repo:erigontech/erigon "custodyColumns" "hex" in:title,body` (only closed/merged [#22897](https://github.com/erigontech/erigon/pull/22897), which describes parameter/length support). Tracker/Hive limitations below apply.

### erigon-2 — FCU V4 validates fork window before completing structure checks

1. **Spec.** [amsterdam.md#L222-L226][a-fcu] prescribes a sequence starting with “`payloadAttributes` matches the [`PayloadAttributesV4`](#payloadattributesv4) structure”: failure returns `-38003`, before the timestamp/window check. [PayloadAttributesV4][a-fields] requires slotNumber and targetGasLimit. This finding relies on that sequence, not the awkward negation in the timestamp sentence.

2. **Erigon.** [execution/engineapi/engine_server.go#L252-L259][e-attrs] executes these lines before checking missing slot/target:

   ```go
   if !e.config.IsAmsterdam(timestamp) && version >= clparams.GloasVersion {
       return &rpc.UnsupportedForkError{Message: "Unsupported fork"}
   }
   ```

   Missing targetGasLimit survives decoding as a nil pointer, [jsonrpc.go#L67-L77][e-attrstype]. Error mappings are `-38005` in [rpc/errors.go#L122-L127][e-unsupported] and `-38003` in [engine_helpers/constants.go#L23-L28][e-errors].

3. **Condition.** With a configured future Amsterdam activation and valid Osaka head, call FCU V4 with a later-than-head, still-pre-Amsterdam timestamp. Supply the older required fields, withdrawals, parent beacon root and slot number, but omit target gas limit. Spec: malformed V4 structure gives `-38003`. Erigon: earlier window check gives `-38005`. Both reject building.

4. **Reth.** [crates/ethereum/node/src/engine.rs#L72-L84][r-validator] calls [payload/primitives/src/lib.rs#L552-L594][r-validation-order], checking slot before timestamp. For this input, [lib.rs#L312-L321][r-attrs] takes `if !is_amsterdam_active && has_slot_number {`; [rpc-engine-api/src/error.rs#L120-L140][r-errors] maps it to `-38003`. Reth agrees with the required error **for this input**, through a pre-fork-slot check rather than missing-target validation. [engine_api.rs#L1071-L1099][r-fcu-errors] preserves INVALID/SYNCING head results; the condition deliberately uses a VALID head. This is not endorsement of all Reth V4 validation.

5. **Confidence/disproof.** **High**, static. [engine_server.go#L221-L235][e-oldfcu] does not catch missing target; [#L892-L911][e-fcu-flow] reaches the failing check for a VALID head. Excluded null attributes, missing beacon root, and pre-Cancun timestamps, which take other branches. The explicit spec order supports the finding despite two invalid input properties. No execution attempted.

6. **Severity / known-check.** **Cosmetic**, wrong error only. **Not found** for this V4 ordering. Queries: `repo:erigontech/erigon 7843`, `repo:erigontech/erigon "slotnum"`, `repo:erigontech/erigon "forkchoiceUpdatedV4" in:title,body`, `repo:erigontech/erigon "slotNumber" "38005" in:title,body`, `repo:erigontech/erigon "targetGasLimit" "38003" in:title,body` (0). Related closed [#20891](https://github.com/erigontech/erigon/pull/20891) concerns V3 checks and valid-head ordering, accounted for here. Tracker/Hive limits below apply.

### erigon-3 — Known custody-update gap (conditional, not a block-validity finding)

1. **Spec.** [amsterdam.md#L230-L242][a-fcu] says “**MUST** adopt the provided custody set” when acting as a type-3 transaction sampler, independently of fork choice.

2. **Erigon.** [execution/engineapi/engine_api_methods.go#L180-L181][e-fcu] accepts the third argument but only executes:

   ```go
   return e.forkchoiceUpdated(ctx, forkChoiceState, payloadAttributes, clparams.GloasVersion)
   ```

   It never reads or forwards custodyColumns. [engine_api_custody_columns_test.go#L59-L86][e-custodytest] documents this and checks FCU acceptance, not custody adoption.

3. **Condition.** A CL supplies a changed non-null bitmap, possibly with null attributes. No custody update occurs. A sampling consequence requires an active sparse sampler; this review did not establish that Erigon path or demonstrate missing cells or block rejection.

4. **Reth.** [engine_api.rs#L429-L433][r-fcu] executes `self.inner.cell_custody.set_from_engine_api(custody_columns);` before fork choice. [network-api/src/custody.rs#L24-L58][r-set] stores the bitmap with little-endian API interpretation. It agrees with the update rule.

5. **Confidence/disproof.** **High** for the ignored argument, **medium/conditional** for sampling impact. Checked the decoder for side effects (it only fills bytes), the regression test and historical fix. Three-argument acceptance does not establish custody adoption.

6. **Severity / known-check.** **Cosmetic** within the supplied categories; no demonstrated block/gas/fee effect. **Known** under open [#22808](https://github.com/erigontech/erigon/issues/22808), the sparse-blobpool implementation tracker; the exact ignored-update symptom is not separately described there. [#22896](https://github.com/erigontech/erigon/issues/22896) is closed and concerned rejecting the third argument. [#22897](https://github.com/erigontech/erigon/pull/22897) is closed/merged; [#22918](https://github.com/erigontech/erigon/pull/22918) is a closed revert proposal. Current code establishes current behavior. Queries: repository-scoped `8070`, `custodyColumns`, `forkchoiceUpdatedV4`, without state filters.

### reth-1 — 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.

### reth-2 — 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.

### reth-3 — 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.

## Cross-client rule comparison

Cells reflect only the scoped static checks in the supplied reviews. “agrees with spec” is not exhaustive certification. Geth appears only for explicit comparisons; other clients were not reviewed in these items. Sources are in rule labels, candidates and supporting evidence tables. A difference may reference another client's candidate where its comparison establishes the same behavior; no candidate is added.

Accepting a 16-byte custody argument does not establish strict DATA encoding or adoption. Well-formed fork gates do not establish malformed-field error precedence. Erigon-2's Reth comparison is pre-fork; reth-3 is post-fork. These are distinct checked conditions, not contradictory results.

| Rule / evidence | Erigon | Reth | Geth (comparison only) |
|---|---|---|---|
| Custody DATA prefix grammar (erigon-1) | differs (see erigon-1) | differs (see erigon-1) | not checked |
| FCU V4 structure-error precedence for pre-fork missing-target input (erigon-2) | differs (see erigon-2) | agrees with spec | not checked |
| Custody adoption independently of fork choice, conditional sampler requirement (erigon-3) | differs (see erigon-3) | agrees with spec | not checked |
| Reject missing builder-contract code (reth-1; [Erigon][e-dequeue]) | agrees with spec | differs (see reth-1) | agrees with spec |
| Fully shaped pre-Amsterdam newPayloadV5 returns unsupported fork (reth-2; [Erigon][e-newbal]) | agrees with spec | differs (see reth-2) | agrees with spec |
| Require post-Amsterdam JSON FCU V4 targetGasLimit (reth-3; [Erigon][e-attrs]) | agrees with spec | differs (see reth-3) | differs (see reth-3) |
| Final builder addresses and type bytes ([Erigon][e-addr], [Reth][s66], [dependency][s67]) | agrees with spec | agrees with spec | not checked |
| Ascending types 0–4 and Amsterdam builder-call gate ([Erigon][e-final], [Reth][s70]) | agrees with spec | agrees with spec | not checked |
| End-of-block builder calls with empty calldata ([Erigon][e-dequeue], [Reth][s70]) | agrees with spec | agrees with spec | not checked |
| SYSTEM_ADDRESS and dedicated 30M execution budget ([Erigon][e-system], [Reth dependency][s67], [budget][s74]) | agrees with spec | agrees with spec | not checked |
| System-call gas excluded from transaction gas totals ([Reth][s75]) | not checked | agrees with spec | not checked |
| Separate Amsterdam state reservoir ([Erigon][e-statebudget], [Reth dependency][s32]) | agrees with spec | agrees with spec | not checked |
| Builder-call revert/halt invalidates block ([Erigon][e-dequeue], [Reth][s31]); missing code separately above | agrees with spec | agrees with spec | not checked |
| Skip empty output; hash ordered, typed nonempty requests ([Erigon][e-hash], [Reth][s34], [hash][s79]) | agrees with spec | agrees with spec | not checked |
| Reject request entries of length ≤1, duplicates and descending types ([Erigon][e-newreq], [Reth][s82]) | agrees with spec | agrees with spec | not checked |
| Empty outer request list allowed ([Reth][s82]) | not checked | agrees with spec | not checked |
| No three-list ceiling on Engine requests ([Erigon][e-newreq]) | agrees with spec | not checked | not checked |
| newPayloadV5 parameter wiring; default array requests ([Reth][s85]) | not checked | agrees with spec | not checked |
| getPayloadV6 raw BAL, slot and executionRequests ([Erigon][e-getresponse], [conversion][e-convert], [Reth][s98], [payload][s99]) | agrees with spec | agrees with spec | not checked |
| All five getPayloadV6 envelope fields ([Erigon][e-responsetype]) | agrees with spec | not checked | not checked |
| Required payload BAL/slot; no silent default ([Erigon][e-newbal], [Reth][s50], [validator][s93]) | agrees with spec | agrees with spec | not checked |
| Raw BAL hashed without reorder/re-encoding ([Erigon][e-balraw], [hash][e-balhash], [Reth][s89]) | agrees with spec | agrees with spec | not checked |
| Header slot commitment and propagation through attributes/build ([Erigon][e-header], [builder][e-buildslot], [Reth][s89], [builder][s108]) | agrees with spec | agrees with spec | not checked |
| Slot/attribute uint64 quantities; zero distinct from missing ([Erigon][e-payloadtype], [attributes][e-attrstype]) | agrees with spec | not checked | not checked |
| Undecodable BAL returns INVALID/null latestValidHash ([Erigon][e-newbal], [Reth][s95], [mapping][s96]) | agrees with spec | agrees with spec | not checked |
| BAL RLP must be one complete item ([Erigon][e-baldecode]) | agrees with spec | not checked | not checked |
| Activation at equality; unset activation inactive ([Erigon][e-time], [comparison][e-timecmp]) | agrees with spec | not checked | not checked |
| getPayloadV6 pre-fork rejection ([Erigon][e-getgate], [Reth][s103], [gates][s51]) | agrees with spec | agrees with spec | not checked |
| Old FCU V3 rejected at Amsterdam, field-valid requests ([Erigon][e-oldfcu], [Reth][s51]) | agrees with spec | agrees with spec | not checked |
| Old newPayloadV4/getPayloadV5 rejected at Amsterdam ([Reth][s51]) | not checked | agrees with spec | not checked |
| Supplied targetGasLimit used subject to header bounds ([Erigon][e-buildgas], [Reth][s62]) | agrees with spec | agrees with spec | not checked |
| Custody third positional optional 16-byte argument ([Erigon][e-fcu], [decoder][e-custody], [Reth][s111]); prefix/adoption separately above | agrees with spec | agrees with spec | not checked |
| No EIP-7997 factory injection or mandatory existence/BAL read at fork ([Erigon][e-fork], [finalization][e-final], [Reth][s37], [hook][s115]) | agrees with spec | agrees with spec | not checked |

## Known-check summary

| Candidate | Supplied outcome | Evidence / qualification |
|---|---|---|
| erigon-1 | Not found | [#22897](https://github.com/erigontech/erigon/pull/22897) covers parameter/length support, not the exact prefix defect. |
| erigon-2 | Not found | Related V3 [#20891](https://github.com/erigontech/erigon/pull/20891) accounted for. |
| erigon-3 | Known, conditional | Open umbrella [#22808](https://github.com/erigontech/erigon/issues/22808); exact ignored-update symptom not separately described there. |
| reth-1 | Known | Closed [#26695](https://github.com/paradigmxyz/reth/pull/26695); merge not established, current Hive outcome unverified. |
| reth-2 | Not found in successful queries | Bogota [#26709](https://github.com/paradigmxyz/reth/issues/26709)/[#26711](https://github.com/paradigmxyz/reth/pull/26711) do not identify this mismatch. |
| reth-3 | Not found in successful queries | [#25973](https://github.com/paradigmxyz/reth/pull/25973) fixes payload-ID fields, not missing-attribute validation. |

Both reviews report HTTP 403 for the public Glamsterdam Hive listing. Neither establishes current per-client test results. Search limits and tracker evidence follow; “not found” is not a novelty claim.

### Erigon coverage and test evidence

Searches covered open/closed issues and PRs, without state/type filters. Candidate queries are above. Additional Erigon queries: `8282`, `"builder requests"`, `"builder execution"`, `7997`, `"deterministic factory"`, `7843`, `"slotnum"`, `7928`, `"Block-Level Access Lists"`. Broad 7928/builder-execution results exceeded one page and served only as triage. A transient search HTTP 403 rate limit occurred; later focused queries succeeded. Direct API reads established these states.

| Public record | State observed / relevance |
|---|---|
| [Erigon #22008](https://github.com/erigontech/erigon/issues/22008) | **Closed** (the supplied index said open). Historical three-list layout issue; five types exist at this pin. |
| [#22093](https://github.com/erigontech/erigon/pull/22093), [#22526](https://github.com/erigontech/erigon/pull/22526) | Closed/merged, respectively 2026-07-10 and 2026-07-27. Builder request implementation and devnet-7 contract update; old devnet addresses are not current code evidence. |
| [#22896](https://github.com/erigontech/erigon/issues/22896), [#22897](https://github.com/erigontech/erigon/pull/22897) | Closed; third-argument rejection fixed in the reviewed signature. Does not establish custody adoption or strict DATA encoding. |
| [#22808](https://github.com/erigontech/erigon/issues/22808) | Open sparse-blobpool support tracker; known umbrella for K1, not proof of a reproduced sampling failure. |
| [#22028](https://github.com/erigontech/erigon/issues/22028) | Closed EIP-7997 implementation tracker. No current boundary mutation identified. |
| [EELS #2915](https://github.com/ethereum/execution-specs/issues/2915) | Closed devnet-6 tracker; historical builder/factory changes. |
| [EELS #3034](https://github.com/ethereum/execution-specs/issues/3034) | Closed devnet-7 tracker; lists the final builder addresses and contract changes used in the current comparison. |
| [EELS #3167](https://github.com/ethereum/execution-specs/issues/3167) | Closed devnet-8 tracker. Explicitly strikes out the proposed factory-at-fork deployment/BAL-read change. Includes sparse-blobpool tests; named passing branches are not this pinned Erigon head. |
| [EELS #3217](https://github.com/ethereum/execution-specs/issues/3217) | Open `tests@v21.0.0` release tracker. Lists slot/fork-transition coverage, invalid BAL decoding, builder dequeue BAL coverage, factory-absent-at-fork tests, and custody tests; final all-client sweep is not checked off. No exact C1/C2 failure result found in the tracker body. |
| [Hive Glamsterdam listing](https://hive.ethpandaops.io/glamsterdam/listing.jsonl) | Direct fetch returned **HTTP 403 Forbidden**; web-tool attempt also failed. No rows or per-client results were obtained; neither Hive confirmation nor a clean run is claimed. |

Tracker coverage does **not** prove this Erigon pin passes. No remote tests or issue/PR submissions.

### Reth coverage and 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.

## Supporting checked-rule evidence (copied)

### Erigon

Static checks of the reviewed path, not exhaustive certification. All file references are at the pins above.

| Rule | Spec | Erigon evidence / outcome |
|---|---|---|
| Final builder addresses and type bytes | [EIP-8282#L37-L78][p-builder]; [fork.py#L121-L126][s-addr] | [params/protocol.go#L267-L299][e-addr], [eip7685_requests.go#L25-L38][e-hash]: deposit `0x03`, `0x0000BFF46984E3725691FA540A8C7589300D8282`; exit `0x04`, `0x000064D678505AD48F8CCB093BC65613800E8282`. [chain_config.go#L539-L554][e-addr-config] uses these unless explicitly overridden. |
| Order / fork gate | [fork.py#L855-L921][s-dequeue] | [merge.go#L199-L279][e-final]: types 0–4 in ascending order; builder calls only at Amsterdam. Reth likewise gates and orders them, [execution.rs#L390-L418][r-builder]. |
| System call budget and failure | [EIP-8282][p-builder]; [fork.py#L688-L721][s-checked], [#L748-L778][s-system] | [eip8282.go#L45-L85][e-dequeue] passes empty calldata, rejects empty code and propagates errors through [merge.go][e-final]. [block_exec.go#L49-L52][e-systemgas], [#L201-L265][e-system] supplies SYSTEM_ADDRESS and separate 30M execution budget; [params/protocol.go#L225-L231][e-statebudget] supplies Amsterdam's separate state reservoir. Reth propagates request-call failures, [execution.rs#L421-L448][r-sysfail]. No certification of every opcode-visible environment field. |
| Nonempty requests only / hash | [fork.py#L855-L921][s-dequeue], [requests.py#L307-L326][s-request] | [eip7685_requests.go#L60-L76][e-hash] skips empty data and hashes typed records with SHA-256. EELS filters before hashing. Zero-length output is nil via [instructions.go#L1371-L1377][e-output] and [memory.go#L134-L142][e-memory], then omitted by [eip8282.go][e-dequeue]. This disproves the suspected type-only builder-request emission. |
| Incoming request framing and order | [Prague inherited rules][a-prague] | [engine_server.go#L342-L358][e-newreq] rejects length ≤1 and non-increasing types, and commits the hash to the header; no three-list ceiling. |
| getPayloadV6 fields | [amsterdam.md#L132-L156][a-get] | [jsonrpc.go#L175-L181][e-responsetype] includes all five envelope fields. [engine_server.go#L1182-L1211][e-getresponse] emits all generated requests. [payload_conversion.go#L55-L73][e-convert] carries slot and BAL bytes. |
| Slot / payload attributes | [EIP-7843][p-slot], [blocks.py#L241-L269][s-header] | [jsonrpc.go#L36-L58][e-payloadtype], [#L67-L77][e-attrstype] use uint64 quantities. [engine_server.go#L393-L430][e-newbal] requires V5 slot; [#L936-L954][e-assemble] forwards V4 attributes. [create_block.go#L201-L209][e-buildslot] installs the slot; [block.go#L336-L350][e-header] encodes it after BAL hash. Zero differs from missing. |
| BAL hash uses raw bytes | [EIP-7928][p-bal], [blocks.py][s-header] | [engine_server.go#L393-L415][e-newbal]; [block_access_list.go#L73-L80][e-balraw] preserves supplied bytes and [#L109-L129][e-balhash] hashes them. No silent reorder/re-encoding before hash. |
| Missing / malformed BAL | [amsterdam.md#L106-L130][a-new] | [engine_server.go#L393-L405][e-newbal]: missing gives invalid params; undecodable RLP gives INVALID with no latestValidHash. [block_access_list.go#L817-L834][e-baldecode] checks a single complete RLP item. Semantic BAL validation is not exhaustively audited here. |
| Timestamp boundary, well-formed inputs | [Amsterdam prior-method rules][a-old] | [chain_config.go#L401-L404][e-time], [#L974-L980][e-timecmp]: activation at equality; unset means inactive. [engine_server.go#L424-L430][e-newbal], [#L797-L810][e-getgate], [#L221-L235][e-oldfcu] gate newPayloadV5, getPayloadV6 and FCU V3/V4 respectively. C2 covers the malformed-attributes ordering exception. |
| Target gas limit | [V4 attributes and FCU][a-fcu] | [engine_server.go#L255-L265][e-attrs] requires slot and target at Amsterdam; [#L936-L954][e-assemble] forwards them. [create_block.go#L169-L177][e-buildgas] selects the supplied target subject to header gas-limit bounds. |
| No factory action at fork | [EIP-7997#L34-L46][p-factory]; [fork.py#L165-L185][s-fork] | [merge.go#L438-L491][e-fork] has no Amsterdam factory deployment/existence check; [#L199-L279][e-final] has none in finalization. No mandatory factory BAL read is inserted by this PoS path. Actual transaction accesses may legitimately produce factory BAL entries. |

### Reth

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. |

## Specification baseline and dependency pins

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 evm2to `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.

EELS omits the CL-only 7688, 7732, 8045 and 8061 from its Amsterdam list ([inventory][s-list]). Gloas covers those four plus 7843 and 8282 and references networking 8070 and informational 8261 ([CL inventory][c-list]). Item-erigon records the CL's historical EIP revisions as 7843 at `c3bfd4ba41cf0fcbfe8c404f33ba89f5174971e0` and 8282 at `de4c6f02c7bec4686762c55f8ab6abcf97a77d7d`; the CL warns those links can differ from published EIPs. Each scheduled EIP's current text is at the EIPs pin above.


## Disproof outcomes and limits

Five-type requests, omission of empty output, raw BAL hashing and absence of factory boundary mutation disprove the apparent consensus leads (sources above). C1/C2 remain exact API encoding/error differences. K1 is known and conditional, not evidence of block rejection. No client code was executed, no remote test was run and no issue/PR was filed. This does not audit all predeploy bytecode instructions, every BAL semantic invariant, CL transitions, other clients or other EIPs.

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.

[meta]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7773.md#L21-L68
[s-list]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/__init__.py#L1-L38
[c-list]: https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L165-L186
[e-attrs]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_server.go#L244-L266
[e-attrstype]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_types/jsonrpc.go#L67-L77
[e-fcu-flow]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_server.go#L892-L911
[e-errors]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_helpers/constants.go#L23-L28
[e-unsupported]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/rpc/errors.go#L122-L127
[a-fcu]: https://github.com/ethereum/execution-apis/blob/3284ee80c3da3e516c53782dde75157cccf1ebdc/src/engine/amsterdam.md#L203-L242
[a-fields]: https://github.com/ethereum/execution-apis/blob/3284ee80c3da3e516c53782dde75157cccf1ebdc/src/engine/amsterdam.md#L49-L99
[a-new]: https://github.com/ethereum/execution-apis/blob/3284ee80c3da3e516c53782dde75157cccf1ebdc/src/engine/amsterdam.md#L106-L130
[a-get]: https://github.com/ethereum/execution-apis/blob/3284ee80c3da3e516c53782dde75157cccf1ebdc/src/engine/amsterdam.md#L132-L156
[a-old]: https://github.com/ethereum/execution-apis/blob/3284ee80c3da3e516c53782dde75157cccf1ebdc/src/engine/amsterdam.md#L272-L284
[a-common]: https://github.com/ethereum/execution-apis/blob/3284ee80c3da3e516c53782dde75157cccf1ebdc/src/engine/common.md#L134-L140
[a-prague]: https://github.com/ethereum/execution-apis/blob/3284ee80c3da3e516c53782dde75157cccf1ebdc/src/engine/prague.md#L76-L82
[e-custody]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_types/custody_columns.go#L26-L52
[e-fcu]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_api_methods.go#L178-L182
[e-custodytest]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_api_custody_columns_test.go#L59-L86
[r-custody]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/rpc/rpc-api/src/engine.rs#L149-L165
[r-fcu]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/rpc/rpc-engine-api/src/engine_api.rs#L423-L434
[r-set]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/net/network-api/src/custody.rs#L24-L58
[r-lock1]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/Cargo.lock#L440-L443
[r-lock2]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/Cargo.lock#L2608-L2611
[r-attrs]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/payload/primitives/src/lib.rs#L312-L321
[r-validator]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/node/src/engine.rs#L72-L84
[r-validation-order]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/payload/primitives/src/lib.rs#L552-L594
[r-errors]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/rpc/rpc-engine-api/src/error.rs#L120-L140
[r-fcu-errors]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/rpc/rpc-engine-api/src/engine_api.rs#L1071-L1099
[e-addr]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/protocol/params/protocol.go#L267-L299
[e-addr-config]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/chain/chain_config.go#L539-L554
[e-dequeue]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/protocol/misc/eip8282.go#L45-L85
[e-final]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/protocol/rules/merge/merge.go#L199-L279
[e-hash]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/types/eip7685_requests.go#L25-L76
[e-system]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/protocol/block_exec.go#L201-L265
[e-systemgas]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/protocol/block_exec.go#L49-L52
[e-statebudget]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/protocol/params/protocol.go#L225-L231
[s-request]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/requests.py#L307-L326
[s-dequeue]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L855-L921
[s-checked]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L688-L721
[s-addr]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L121-L126
[s-header]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/blocks.py#L241-L269
[s-fork]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L165-L185
[e-newreq]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_server.go#L342-L358
[e-newbal]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_server.go#L381-L430
[e-getgate]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_server.go#L797-L810
[e-oldfcu]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_server.go#L221-L235
[e-getresponse]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_server.go#L1182-L1211
[e-responsetype]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_types/jsonrpc.go#L175-L181
[e-payloadtype]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_types/jsonrpc.go#L36-L58
[e-convert]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_types/payload_conversion.go#L55-L73
[e-assemble]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_server.go#L936-L954
[e-buildslot]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/builder/create_block.go#L201-L209
[e-buildgas]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/builder/create_block.go#L169-L177
[e-balraw]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/types/block_access_list.go#L73-L80
[e-balhash]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/types/block_access_list.go#L109-L129
[e-baldecode]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/types/block_access_list.go#L817-L834
[e-header]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/types/block.go#L336-L350
[e-fork]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/protocol/rules/merge/merge.go#L438-L491
[e-time]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/chain/chain_config.go#L401-L404
[e-timecmp]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/chain/chain_config.go#L974-L980
[e-output]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/instructions.go#L1371-L1377
[e-memory]: https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/memory.go#L134-L142
[r-builder]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/evm/src/execution.rs#L390-L418
[r-sysfail]: https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/evm/src/execution.rs#L421-L448
[p-factory]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7997.md#L34-L46
[p-builder]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8282.md#L37-L78
[p-slot]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7843.md#L30-L54
[p-bal]: https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7928.md#L34-L85
[s-system]: https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/fork.py#L748-L778
[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
