| Client / source | Branch | Commit | Spec commit |
| --- | --- | --- | --- |
| Erigon | `main` | [`f32a39d1e5f87a9ec3a9ce2858171c74acc3c242`](https://github.com/erigontech/erigon/tree/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242) | EELS `7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b` |
| Reth — limited cross-check in Erigon item only | `main` | [`e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c`](https://github.com/paradigmxyz/reth/tree/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c) | EELS `7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b` |
| Reth — dedicated item | `main` | Not obtained: access blocked | Not obtained |
| EELS | `forks/bogota` | [`7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b`](https://github.com/ethereum/execution-specs/tree/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b) | Same |
| EIPs | `master` | [`d4c575521d99ec881a444ab3af604e684b5f0743`](https://github.com/ethereum/EIPs/tree/d4c575521d99ec881a444ab3af604e684b5f0743) | Same |
| Consensus specs | `master` | [`8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2`](https://github.com/ethereum/consensus-specs/tree/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2) | Same |
| Reth EVM2 dependency | Pinned dependency revision; branch not reported | [`4a53ec080dfbb904e98e3ca8f0abcc11ab8abae0`](https://github.com/alloy-rs/evm2/tree/4a53ec080dfbb904e98e3ca8f0abcc11ab8abae0) | EELS as above |

# Amsterdam merge 02: Erigon and Reth

This report merges the supplied `item-erigon` and `item-reth` results; it adds no research or findings. Source integrity was checked against the supplied SHA-256 values: Erigon `7a94229f0cf8132702b995c70ab729d75498a2e7b000579d46a4e53c71de4c5d`; Reth `322c82aa3a01e7b3d2540a2e930f7a38ff33259a158e00e8e1602536af0758aa`. The source-specific statements below are attributed to those items. Neither input is missing or empty.

## Candidates

### Erigon (item-erigon)

**None retained.** No concrete difference in gas, state, validity or encoding survived static review, so no six-part candidate or severity rating is emitted. Overall confidence is moderate; this is not runtime certification or proof of bug absence.

### Reth (item-reth)

None established. No implementation source was read; absence of findings provides no evidence that the implementation conforms. There was no basis for candidate disproof or severity assessment. No network or node execution tests were performed.

Neither item contains a candidate to copy or number `<client>-<n>`; consequently there are no six-part candidate records or candidate known-checks to omit. The Reth access failure is not a clean review. Erigon's separate limited Reth cross-check does not complete the Reth assignment.

## Cross-client rule table

Cells summarize only the supplied inspections. “agrees with spec” means static agreement reported by the Erigon item, including its explicitly limited Reth cross-check; it does not mean executed tests passed. “not checked” means no completed inspection of the entire row was supplied. Reth's dedicated item checked none of these rules. Narrow cross-checks have separate rows rather than implying full coverage. There are no reported differences or conflicting conformance conclusions.

| Rule examined (evidence in the Erigon rule table below) | Erigon | Reth |
| --- | --- | --- |
| 7843: opcode, result, and gas | agrees with spec | not checked |
| 7843: header layout and RLP | agrees with spec | not checked |
| 7843: header presence before/after fork | agrees with spec | agrees with spec |
| 7843: payload attributes and imported payload | agrees with spec | not checked |
| 7843: actual beacon slot and first Amsterdam block | agrees with spec | not checked |
| 7843: Amsterdam-at-genesis special case | agrees with spec | not checked |
| 7843/8024: invalid opcodes before Amsterdam | agrees with spec | not checked |
| 7954: exact runtime and initcode limits | agrees with spec | not checked |
| 7954: top-level contract creation | agrees with spec | not checked |
| 7954: CREATE and CREATE2 initcode checks | agrees with spec | not checked |
| 7954: rounded initcode word gas | agrees with spec | not checked |
| 7954: code deposit, common creation result | agrees with spec | not checked |
| 7954: EIP-7702 delegation to newly large code | agrees with spec | not checked |
| 8024: immediate decoding and index origins | agrees with spec | not checked |
| 8024: invalid immediates and underflow | agrees with spec | not checked |
| 8024: missing immediate at end of code | agrees with spec | not checked |
| 8024: 1024 stack limit and fixed gas | agrees with spec | not checked |
| 8024: generated fast path versus general path | agrees with spec | not checked |
| 8024/7954: jump destinations, including beyond old size cap | agrees with spec | not checked |
| 7843: current header slot in block environment (limited cross-check below) | agrees with spec | agrees with spec |
| 7954: Amsterdam size selection and numeric constants only (limited cross-check below) | agrees with spec | agrees with spec |
| 8024: instruction decoding only (limited cross-check below) | agrees with spec | agrees with spec |

## Known-check summary

### Erigon (item-erigon)

Searches used GitHub's public issues search API, which includes issues and PRs across **both open and closed states** when no state filter is present. All responses below reported `incomplete_results: false`; all fit in one 100-result page. Number searches also include irrelevant issue/PR numbers, so a hit is not itself evidence of a known EIP bug.

| Query (exact GitHub search terms) | Hits |
| --- | --- |
| [repo:erigontech/erigon 7843](https://api.github.com/search/issues?q=repo%3Aerigontech%2Ferigon+7843&per_page=100) | 12 |
| [repo:erigontech/erigon SLOTNUM](https://api.github.com/search/issues?q=repo%3Aerigontech%2Ferigon+SLOTNUM&per_page=100) | 6 |
| [repo:erigontech/erigon 7954](https://api.github.com/search/issues?q=repo%3Aerigontech%2Ferigon+7954&per_page=100) | 19 |
| [repo:erigontech/erigon "contract size"](https://api.github.com/search/issues?q=repo%3Aerigontech%2Ferigon+%22contract+size%22&per_page=100) | 42 |
| [repo:erigontech/erigon 8024](https://api.github.com/search/issues?q=repo%3Aerigontech%2Ferigon+8024&per_page=100) | 15 |
| [repo:erigontech/erigon SWAPN](https://api.github.com/search/issues?q=repo%3Aerigontech%2Ferigon+SWAPN&per_page=100) | 10 |
| [repo:erigontech/erigon DUPN](https://api.github.com/search/issues?q=repo%3Aerigontech%2Ferigon+DUPN&per_page=100) | 11 |
| [repo:erigontech/erigon EXCHANGE](https://api.github.com/search/issues?q=repo%3Aerigontech%2Ferigon+EXCHANGE&per_page=100) | 77 |
| [repo:ethereum/execution-specs "Test Release Tracker"](https://api.github.com/search/issues?q=repo%3Aethereum%2Fexecution-specs+%22Test+Release+Tracker%22&per_page=100) | 36 |

Relevant public records found (historical known items, **not new candidates**):

| EIP | Public record and observed state | Consequence for this review |
| --- | --- | --- |
| 7843 | [#19147](https://github.com/erigontech/erigon/pull/19147), closed; [#23449](https://github.com/erigontech/erigon/pull/23449), closed | Initial SLOTNUM implementation; later missing Amsterdam genesis slot fix. The pinned genesis path now inserts a slot field, so the historical omission is not retained. |
| 7843 | [#24453](https://github.com/erigontech/erigon/pull/24453), closed | Embedded Caplin assembled-payload conversion previously lost slot and BAL. This is already reported history, not a new issue inferred from the search. |
| 7954 | [#22085](https://github.com/erigontech/erigon/issues/22085), closed; [#22088](https://github.com/erigontech/erigon/pull/22088), closed | Tracks update to 64 KiB, already present at the code pin. |
| 7954 | [#21363](https://github.com/erigontech/erigon/issues/21363), closed | Public Hive EEST max-initcode test failure report: an oversized transaction was rejected with “previously known bad block” rather than the expected mapped reason. This report alone does not establish acceptance of an invalid block or a current size-limit bug. |
| 8024 | [#19626](https://github.com/erigontech/erigon/pull/19626), closed | Historical decoder/range drift and fixture dependencies were already public. The current modular/XOR formulas and EXCHANGE rejection range match the revised spec. |
| 8024 | [#18853](https://github.com/erigontech/erigon/pull/18853), closed; [#20529](https://github.com/erigontech/erigon/pull/20529), closed | Missing-immediate test coverage and reporting invalid immediate operands were already tracked. Current handlers supply zero for a missing byte. |

There is no retained candidate to label “known” or “not found.” Related historical records were found; no novel defect was established.

The Test Release Tracker search returned 36 records. The Glamsterdam trackers read include [#2915](https://github.com/ethereum/execution-specs/issues/2915) (v6.0.0, closed), [#3518](https://github.com/ethereum/execution-specs/issues/3518) (v8.1.4, closed), and [#3217](https://github.com/ethereum/execution-specs/issues/3217) (`tests@v21.0.0`, open). Tracker #3217 records boundary/transition coverage for 7954, overflow/context/genesis/transition coverage for 7843, and gas/invalid-immediate/JUMPDEST coverage for 8024. Final all-client sweeps remain unchecked: **this does not establish a pass at the Erigon pin**.

[Hive Glamsterdam listing](https://hive.ethpandaops.io/glamsterdam/listing.jsonl): direct public retrieval returned **HTTP 403 Forbidden**; browser retrieval also failed. Per-run results could not be inspected. No Hive pass/fail conclusion is drawn; #21363 is issue evidence, not an independently retrieved run.

### Reth (item-reth)

Not performed: no candidates were established and public sources were inaccessible. No issue or PR is labeled “known” or “not found”; those labels would imply searches that did not occur. Reth open/closed issue and PR queries by EIP number and short name, execution-specs Test Release Tracker issues, and public Glamsterdam test results remain unchecked. No claims about test coverage or passing results are made.

## Specification baseline and version inventory (item-erigon)

Heads were resolved through GitHub's commit API, then held fixed throughout the review. Commit dates below are repository committer dates, not test dates.

- Erigon, `main`: **`f32a39d1e5f87a9ec3a9ce2858171c74acc3c242`**, 2026-10-27T16:04:32Z. [Head-resolution API](https://api.github.com/repos/erigontech/erigon/commits/main).

- Execution specs (EELS), `forks/bogota`: **`7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b`**, 2026-10-27T17:40:55Z. [Head-resolution API](https://api.github.com/repos/ethereum/execution-specs/commits/forks/bogota).

- Reth, `main`: **`e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c`**, 2026-10-27T12:11:23Z. [Head-resolution API](https://api.github.com/repos/paradigmxyz/reth/commits/main).

- EIP source, `master`: **`d4c575521d99ec881a444ab3af604e684b5f0743`**, 2026-10-27T16:04:29Z. [Head-resolution API](https://api.github.com/repos/ethereum/EIPs/commits/master).

- Consensus specs, `master`: **`8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2`**, 2026-10-27T16:28:12Z. [Head-resolution API](https://api.github.com/repos/ethereum/consensus-specs/commits/master).

Erigon and Reth code was read from pinned raw.githubusercontent.com URLs; blob links below supply full paths and line anchors. Source prefixes: E=Erigon, S=EELS, R=Reth, C=consensus, P=EIPs, V=EVM2. Reth's EVM2 dependency is pinned in [R:Cargo.toml#L440-L443](https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/Cargo.toml#L440-L443) to `4a53ec080dfbb904e98e3ca8f0abcc11ab8abae0`; its cited code is at that revision.

Published texts read: [EIP-7843](https://eips.ethereum.org/EIPS/eip-7843), [EIP-7954](https://eips.ethereum.org/EIPS/eip-7954), [EIP-8024](https://eips.ethereum.org/EIPS/eip-8024). All three show Last Call, deadline 2026-11-01. Versions are content-addressed below; EIPs have no numeric revision versions. EELS uses the requested `forks/bogota` head and its `src/ethereum/forks/amsterdam/` implementation.

### Scheduled fork inventory and versions

The meta-EIP's Scheduled for Inclusion section contains **18 EIPs**, listed below: [P:eip-7773.md#L21-L40](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7773.md#L21-L40). EELS enumerates the 14 execution-side changes in [S:__init__.py#L1-L38](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/__init__.py#L1-L38). Gloas enumerates its consensus features and explicitly pins the versions it targets in [C:beacon-chain.md#L163-L186](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/beacon-chain.md#L163-L186). This inventory establishes scope; only Erigon's three assigned EIPs were audited here.

Every row identifies `EIPS/eip-N.md` at EIP-source head `d4c575521d99ec881a444ab3af604e684b5f0743`; the Git blob hash is the file's content version from the [pinned tree API](https://api.github.com/repos/ethereum/EIPs/git/trees/d4c575521d99ec881a444ab3af604e684b5f0743?recursive=1). Titles come from the cited meta-EIP. Blob hashes come from the pinned tree API; these identify exact document contents without assuming a semantic version.

| EIP / scheduled change | Exact document blob SHA-1 |
| --- | --- |
| 2780: Resource-Based Intrinsic Transaction Gas | `c41fa1eeced3c08914c6d2333102b04b69e80e68` |
| 7688: Forward Compatible Consensus Data Structures | `bdb1119c814c032e65580118d64e12039eafe63b` |
| 7708: ETH Transfers Emit a Log | `1fa00f6a2a425b73e0054d6b59f41ae68639413c` |
| 7732: Enshrined Proposer-Builder Separation | `5baf745271ab7dce5863c1be123ddb783987bd44` |
| 7778: Block Gas Accounting without Refunds | `f84b208173a52b419164465f4ae304726878fd75` |
| 7843: SLOTNUM Opcode | `0a3c68bbd8af638d9ff91197f64cb07bb104a3a2` |
| 7928: Block-Level Access Lists | `3c4d4ad300e4946303db45710bba02cfb836f9eb` |
| 7954: Increase Maximum Contract Size | `850e9d488f1f7280bdfece3d38a94a3facc0d933` |
| 7976: Increase Calldata Floor Cost | `15abf8001a4296864141700add3bf66c9f1b8721` |
| 7981: Increase Access List Cost | `aaf7a767fe5ccbd6699099ff39fcbda1195b48e7` |
| 7997: Deterministic Factory Contract | `96a932023940e8b5d27539b51499592c5b3cb841` |
| 8024: Backward Compatible SWAPN, DUPN, EXCHANGE | `b15042f65157134c398a8dd0f2d6759893f2f81e` |
| 8037: State Creation Gas Cost Increase | `c8bc85b0bf866089f84d0745769fd848733c2958` |
| 8038: State-Access Gas Cost Update | `a1c73c4f5bffc6b4ed69556c497fec6c3d24e287` |
| 8045: Exclude Slashed Validators from Proposing | `e1e2887cf958f03d25096aa03621f9e2cc1ad311` |
| 8061: Increase Exit and Consolidation Churn | `dadac31f4d7dfb97ff3cbdadf8c6997715ed3c87` |
| 8246: Remove SELFDESTRUCT Burn | `6c80a64ed3651696cc7d9251ec3bac2ed199ec6d` |
| 8282: Builder Execution Requests | `13b923d8effa18ec5eae90c9c5072950539aa0f9` |

The meta-EIP separately lists networking EIPs 7975, 8070, 8136, 8159 and 8189, and informational EIPs 7904 and 8261; they are not additional entries in its Scheduled for Inclusion section ([P:eip-7773.md#L42-L55](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7773.md#L42-L55)). Gloas also lists 8070 and 8261. Gloas pins its targeted EIP revisions and warns they can differ from current published texts; both version baselines are available in the cited sources.

The meta-EIP leaves Mainnet activation blank ([P:eip-7773.md#L62-L70](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7773.md#L62-L70)). The reviewed opcode and raised-size behavior is selected by Amsterdam in Erigon, as cited below. No live-mainnet vulnerability is asserted or detailed.

### Important correction to the brief's older EIP-8024 expectations

The current published EIP and pinned EELS agree on **DUPN = 0xe6, SWAPN = 0xe7, EXCHANGE = 0xe8**, modular/XOR immediate decoding, and **unchanged JUMPDEST analysis**. They do not specify raw immediate-plus-one decoding or masking the new immediates as PUSH data: [P:eip-8024.md#L30-L93](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8024.md#L30-L93); [S:stack.py#L25-L96](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/stack.py#L25-L96); [S:runtime.py#L45-L69](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/runtime.py#L45-L69). Erigon follows these current rules.

## Rule evidence (item-erigon)

“Consistent” means the cited code paths agree by inspection with the cited current specification; it does not mean a test was executed.

| Rule and boundary examined | Specification | Erigon evidence and result |
| --- | --- | --- |
| 7843: opcode, result, and gas | [S:block.py#L264-L294](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/block.py#L264-L294) | [E:opcodes.go#L106-L112](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/opcodes.go#L106-L112); [E:instructions.go#L770-L773](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/instructions.go#L770-L773); [E:evm.go#L81-L100](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/protocol/evm.go#L81-L100); [E:eips.go#L339-L369](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/eips.go#L339-L369); [E:gas.go#L26-L30](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/gas.go#L26-L30). 0x4b pushes the current header's uint64 slot into a zero-extended stack word; gas is 2, not the block number or a timestamp-derived slot. |
| 7843: header layout and RLP | [S:blocks.py#L241-L269](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/blocks.py#L241-L269) | [E:block.go#L174-L184](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/types/block.go#L174-L184); [E:block.go#L326-L350](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/types/block.go#L326-L350); [E:block.go#L515-L540](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/types/block.go#L515-L540). Slot is encoded after BAL hash, included in length calculation, decoded as uint64, and list end is checked. Absent versus present-zero are distinct. |
| 7843: header presence before/after fork | [P:eip-7843.md#L44-L52](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-7843.md#L44-L52) | [E:merge.go#L391-L409](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/protocol/rules/merge/merge.go#L391-L409). Amsterdam requires a slot field; a pre-Amsterdam PoS header carrying one is rejected. This is a presence rule, not an EL-derived slot counter. |
| 7843: payload attributes and imported payload | [C:validator.md#L360-L371](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/validator.md#L360-L371) | [E:engine_server.go#L252-L263](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_server.go#L252-L263); [E:engine_server.go#L951-L954](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_server.go#L951-L954); [E:create_block.go#L201-L209](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/builder/create_block.go#L201-L209); [E:engine_server.go#L383-L430](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/engineapi/engine_server.go#L383-L430). V4 attributes require slot; builder copies it exactly. V5 import requires and copies payload slot; pre-V5 rejects a supplied slot. Header/payload value is not separately recomputed. |
| 7843: actual beacon slot and first Amsterdam block | [C:fork-choice.md#L708-L712](https://github.com/ethereum/consensus-specs/blob/8a80ffa82bd49aac0dd6db17f9e8150aa257fbc2/specs/gloas/fork-choice.md#L708-L712) | [E:on_execution_payload.go#L188-L195](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/cl/phase1/forkchoice/on_execution_payload.go#L188-L195) plus current-header context and builder paths above. Payload must match beacon block slot in Caplin. The first post-fork header receives the CL-provided slot even when its parent has no slot; it is neither forced to zero nor inferred as parent+1. Skipped slots remain representable. |
| 7843: Amsterdam-at-genesis special case | [S:blocks.py#L241-L269](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/blocks.py#L241-L269) | [E:genesis_write.go#L614-L627](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/state/genesiswrite/genesis_write.go#L614-L627). A supplied genesis slot is retained; otherwise a present uint64 zero is inserted under Amsterdam. This default is for genesis, not the first later fork block. |
| 7843/8024: invalid opcodes before Amsterdam | [S:__init__.py#L7-L19](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/__init__.py#L7-L19) | [E:interpreter.go#L417-L428](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/interpreter.go#L417-L428); [E:jump_table.go#L105-L119](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/jump_table.go#L105-L119); [E:jump_table.go#L1211-L1219](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/jump_table.go#L1211-L1219); [E:instructions.go#L1410-L1412](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/instructions.go#L1410-L1412). Only Amsterdam installs these opcodes; earlier instruction sets inherit undefined entries. Fast stack-op paths also require a nonzero active jump-table cost. |
| 7954: exact runtime and initcode limits | [S:interpreter.py#L80-L81](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L80-L81) | [E:protocol.go#L148-L151](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/protocol/params/protocol.go#L148-L151); [E:common.go#L83-L118](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/common.go#L83-L118). Amsterdam selects 65,536 / 131,072. Strict greater-than comparison permits equality; earlier rules retain 24 / 48 KiB. |
| 7954: top-level contract creation | [S:transactions.py#L631-L638](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/transactions.py#L631-L638) | [E:txn_executor.go#L415-L459](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/protocol/txn_executor.go#L415-L459). Destination-less transactions use Amsterdam initcode cap, including ApplyFrame. At 131,072 no size error; at 131,073 validation fails. Ordinary call calldata is not subjected to the creation cap. |
| 7954: CREATE and CREATE2 initcode checks | [S:system.py#L210-L222](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/system.py#L210-L222); [S:system.py#L270-L286](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/system.py#L270-L286) | [E:gas_table.go#L356-L403](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/gas_table.go#L356-L403). Both use the raised cap, reject oversized or uint64-overflowing sizes, and allow equality. An oversized nested create exceptionally halts the caller frame through the interpreter's gas error path, rather than merely returning a child failure: [E:vm_run_gen.go#L878-L949](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/vm_run_gen.go#L878-L949). |
| 7954: rounded initcode word gas | [S:gas.py#L878-L883](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L878-L883) | [E:common.go#L73-L80](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/common.go#L73-L80); [E:gas_table.go#L356-L403](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/gas_table.go#L356-L403); [E:intrinsic_gas.go#L126-L136](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/protocol/mdgas/intrinsic_gas.go#L126-L136); [E:protocol.go#L49-L53](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/protocol/params/protocol.go#L49-L53). Still 2 per ceil(size/32); CREATE2 also charges 6 per hash word. Top-level intrinsic path uses same word rounding. 131,072 bytes means 4,096 words and 8,192 initcode gas, not a doubled rate. |
| 7954: code deposit, common creation result | [S:interpreter.py#L360-L389](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L360-L389) | [E:evm.go#L768-L848](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/evm.go#L768-L848). Common creation logic checks output length before storing it; 65,536 is permitted subject to prefix, gas and other rules; 65,537 fails and reverts. Amsterdam code deposit uses hash-word execution gas plus per-byte state gas, matching current EELS's concurrent EIP-8037 rules, not an assumed unchanged 200 execution gas/byte. |
| 7954: EIP-7702 delegation to newly large code | [S:interpreter.py#L183-L196](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/interpreter.py#L183-L196) | [E:intra_block_state.go#L945-L959](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/state/intra_block_state.go#L945-L959); [E:evm.go#L289-L297](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/evm.go#L289-L297). Resolution loads target code without reapplying the old 24 KiB cap. Creation is size-checked where code is deposited; calls through delegation do not incorrectly reject a legal 64 KiB target. |
| 8024: immediate decoding and index origins | [S:stack.py#L25-L96](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/stack.py#L25-L96) | [E:opcodes.go#L211-L215](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/opcodes.go#L211-L215); [E:instructions.go#L1510-L1602](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/instructions.go#L1510-L1602); [E:stack.go#L131-L149](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/stack.go#L131-L149). Single decode is (x+145) mod 256; pair decode uses x XOR 143 and the two specified branches. DUPN's helper receives n-1; swaps receive depths n and m. These offsets agree with EELS's one-based positions. |
| 8024: invalid immediates and underflow | [S:stack.py#L213-L314](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/stack.py#L213-L314) | [E:instructions.go#L1510-L1602](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/instructions.go#L1510-L1602). Single opcodes reject 91..127, require n / n+1 stack items; EXCHANGE rejects 82..127 and requires max(n,m)+1. Spec decode always has n<m on its allowed domain, making max(n,m)+1 equivalent to m+1. No byte arithmetic wrap narrows the checks. |
| 8024: missing immediate at end of code | [P:eip-8024.md#L46-L75](https://github.com/ethereum/EIPs/blob/d4c575521d99ec881a444ab3af604e684b5f0743/EIPS/eip-8024.md#L46-L75) | [E:instructions.go#L1510-L1602](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/instructions.go#L1510-L1602). Missing byte defaults to zero, not invalid-opcode. Thus DUPN needs 145 items, SWAPN 146, EXCHANGE 17 (decoded pair 9,16). Each consumes the opcode plus one logical immediate byte. |
| 8024: 1024 stack limit and fixed gas | [S:stack.py#L115-L131](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/stack.py#L115-L131); [S:gas.py#L221-L229](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/gas.py#L221-L229) | [E:eips.go#L339-L369](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/eips.go#L339-L369); [E:stack_table.go#L26-L28](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/stack_table.go#L26-L28); [E:vm_run_gen.go#L878-L949](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/vm_run_gen.go#L878-L949); [E:gas.go#L26-L30](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/gas.go#L26-L30). DUPN permits 1023→1024 and rejects push at 1024; swaps preserve height and can run with 1024. All three cost 3; insufficient gas exceptionally halts. |
| 8024: generated fast path versus general path | [S:stack.py#L213-L314](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/instructions/stack.py#L213-L314) | [E:vm_run_gen.go#L779-L857](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/vm_run_gen.go#L779-L857); [E:vm_run_gen.go#L878-L949](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/vm_run_gen.go#L878-L949). Fast path repeats the same zero-default, invalid ranges, decoders, required heights and stack operations; charges 3 and increments pc twice. Inactive opcode, insufficient gas or full-stack DUPN falls through to normal validation rather than bypassing it. |
| 8024/7954: jump destinations, including beyond old size cap | [S:runtime.py#L45-L69](https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/vm/runtime.py#L45-L69) | [E:analysis.go#L22-L59](https://github.com/erigontech/erigon/blob/f32a39d1e5f87a9ec3a9ce2858171c74acc3c242/execution/vm/analysis.go#L22-L59). Generic analyzer iterates full code length and skips only PUSH1..PUSH32 payloads. New stack-op immediates are not newly masked: a following 0x5b stays a jump destination; executing that opcode/immediate pair fails its immediate check. A following PUSH still masks its own data. No 24 KiB cutoff in this analyzer. |

## Limited Reth cross-check (item-erigon)

Reth selects Amsterdam by current timestamp in [R:convert.rs#L16-L28](https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/evm/src/convert.rs#L16-L28). Its header validation also requires slot after Amsterdam and rejects it before Amsterdam: [R:lib.rs#L250-L264](https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/consensus/src/lib.rs#L250-L264). Its block environment uses the current header slot: [R:convert.rs#L67-L84](https://github.com/paradigmxyz/reth/blob/e0378eb691aa2770bb96fd4ecec2f4445a2a3e7c/crates/ethereum/evm/src/convert.rs#L67-L84). These agree with Erigon and the spec, including not inventing a parent-based first-fork slot.

For the EVM rules, Reth's pinned EVM2 dependency selects Amsterdam sizes in [V:mod.rs#L101-L107](https://github.com/alloy-rs/evm2/blob/4a53ec080dfbb904e98e3ca8f0abcc11ab8abae0/crates/evm2/src/version/mod.rs#L101-L107), with the same numeric limits in [V:constants.rs#L8-L22](https://github.com/alloy-rs/evm2/blob/4a53ec080dfbb904e98e3ca8f0abcc11ab8abae0/crates/evm2/src/constants.rs#L8-L22). Its stack instructions and immediate decoders in [V:stack.rs#L26-L59](https://github.com/alloy-rs/evm2/blob/4a53ec080dfbb904e98e3ca8f0abcc11ab8abae0/crates/evm2/src/interpreter/instructions/stack.rs#L26-L59) agree with Erigon and EELS. This cross-check supports the rules above; it is not a separate complete Reth audit.

## Disproof pass (item-erigon)

The strongest initial suspicions were rejected by tracing the sources in the rule table:

1. **Jumpdest masking:** the current EIP preserves old jump targets. Forbidden immediate bytes prevent normal execution of the ambiguous encodings; changing analysis would itself break compatibility.
2. **Index offsets:** Erigon's DUPN helper takes zero-based depth, so n-1 selects the nth item. EXCHANGE uses two absolute decoded depths, not a distance or n+m. Its valid decode domain has n<m, so max(n,m)+1 equals the spec's m+1. Checked boundary immediates 0,81,82,90,91,127,128,255 against the formulas.
3. **Fast-path bypass:** full-stack DUPN and insufficient gas fall through to normal bounds/gas validation. Both execution paths zero-pad a missing immediate and advance pc twice after success.
4. **Partial size-limit update:** traced top-level and nested create through the raised-limit helpers and common deposit check; followed 7702 resolution to target code. No remaining old-cap check was found in those paths. Changed deposit gas matches current EELS's concurrent EIP-8037 rule.
5. **First-fork slot zero:** the current CL slot is supplied and copied; absence of a slot on the parent does not determine the child's slot. The present-zero genesis default is separate.

These are static disproof attempts, not executed client tests. No concrete divergent outcome survived them.

## Incomplete Reth scope and access limits (item-reth)

The following is the requested review scope, not independently verified specification text.

| EIP | Rules requiring review | Outcome |
| --- | --- | --- |
| 7843 SLOTNUM | Opcode 0x4B, header slot_number, gas 2, pre-Amsterdam invalidity; header RLP field, payload-attribute agreement and first-Amsterdam-block value | Unverified: public sources inaccessible; no file/line available |
| 7954 max contract size | Code/init-code limits 0x10000/0x20000; CREATE, CREATE2, transaction creation, code deposit, init-code word gas, exact-limit behavior, EIP-7702 delegation | Unverified: public sources inaccessible; no file/line available |
| 8024 SWAPN, DUPN, EXCHANGE | Opcodes 0xE6/0xE7/0xE8; immediate decoding; stack underflow/1024 overflow; missing immediate; gas 3; jumpdest scanning; fork gating | Unverified: public sources inaccessible; no file/line available |

No rule was established as correct. The Glamsterdam scheduled-EIP list and current spec revisions were also not established.

The Reth item reports that its mandatory main-head API request failed through both Node fetch and curl:

> Network access to "api.github.com" was blocked: local/private network addresses are blocked by the sandbox policy.

No public page contents were successfully read in that item. It reports HTTP 403 / `blocked-by-allowlist` for attempts to retrieve raw Reth Cargo.toml, EIP-7843, and the Hive listing. Remaining EIP pages, execution-specs Amsterdam files, Geth code and public issue searches were not read. Its requested Geth master pin was also not obtained. These are recorded input limitations, not newly reproduced access checks.

Erigon limits: static inspection only; no runtime differential tests, complete optional-backend/architecture audit, transaction-pool audit, or review of other assigned clients/EIPs. Hive retrieval failed. A negative review does not prove absence of bugs. No live-mainnet vulnerability is asserted or detailed by either input.
