# Glamsterdam EIP list, execution layer (Amsterdam): EIPs and spec versions

Item `el` of batch `spec-list`. Research done on 2026-10-27 from public pages only. Raw EIP files and repository data were read through the GitHub web/API endpoints listed in section 4.

## Pins (quote these)

- **ethereum/EIPs** `master` at the time of reading: `d4c575521d99ec881a444ab3af604e684b5f0743` (2026-10-27T16:04:29Z, "Update EIP-7928: specify BAL integer encoding"). EIP statuses below come from the front matter at this commit. Spot checks of eips.ethereum.org pages for EIP-2780, 7688, 7773 and 8282 showed the same status.
- **ethereum/execution-specs default branch:** the brief says "master", but `master` no longer exists. `https://api.github.com/repos/ethereum/execution-specs/branches/master` answers `301 Moved Permanently`, with `location: .../branches/forks/bogota`. The repository's `default_branch` is `forks/bogota`.
  - `forks/bogota` (default) at reading: **`7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b`** (2026-10-27T17:40:55Z, "chore(spec-specs,tests): revert #3920 (heze-devnet-3 on bogota) (#3921)"). All file:line references in the table are on this commit.
  - `forks/amsterdam` (the branch named as the source of the Amsterdam mainnet-format fixtures) at reading: **`16898000911c1e3caa57be08509536c10ae92d3e`** (2026-10-06T10:32:51Z, "refactor(spec-specs): join imports that fit on one line (#3720)").
  - Between the two branches, `src/ethereum/forks/amsterdam/` differs in 8 files: `transactions.py`, `utils/address.py`, `vm/eoa_delegation.py`, `vm/instructions/system.py`, and 4 files under `vm/precompiled_contracts/bls12_381/`. In the hunks I inspected, the Glamsterdam-EIP files differ only in whitespace or docstrings, apart from three hardening changes on `forks/bogota`: `transactions.py` rejects an empty typed-tx byte string, replaces an `assert` on the legacy-tx first byte with a range check, and range-checks the legacy chain id derived from `v` (`> U64.MAX_VALUE` → `InvalidSignatureError`). The BLS12-381 files are refactored decoding. I did not do a full semantic diff of the BLS files.
- `A/` below stands for `https://github.com/ethereum/execution-specs/blob/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam/`.
- `T/` stands for `tests/amsterdam/` at the same commit.

### Release tags

- **Newest execution-specs release tag that contains the Amsterdam fork:** **`tests@v21.0.2`**. Published 2026-10-26T16:29:51Z; tag commit `e27f097ec7b3e6e8ee9c2c1873c183e8f7da7a6e`. `src/ethereum/forks/amsterdam/__init__.py` exists at this tag. Release text: "This is a patch follow-up to `tests@v21.0.1` containing no consensus changes for Frontier through Amsterdam." (https://github.com/ethereum/execution-specs/releases/tag/tests%40v21.0.2)
  - The release note does not name its source branch.
  - The GitHub compare API reports `forks/amsterdam...tests@v21.0.2` as "diverged", ahead 92 and behind 23. So that tag is not a plain snapshot of `forks/amsterdam`.
  - `tests@v21.0.0` (2026-09-23) was "our first mainnet fixture release to include **Amsterdam** … built from the `forks/amsterdam` branch".
- **The EELS package tags do not contain the fork.** The newest, `v2.20.0` (2026-02-19, commit `2004296f…`), returns *Not Found* for `src/ethereum/forks/amsterdam/__init__.py`, and so does `v2.19.1`.

### Newest execution-spec-tests fixture release for Glamsterdam devnets

- **`tests-glamsterdam-devnet@v8.1.4`**, published 2026-09-03T15:42:37Z (pre-release).
  - Tag commit `7341820b5b394b1934dfe7bb6f621fcdab7baf7f`.
  - Asset `fixtures_glamsterdam-devnet.tar.gz`.
  - Release note: "targeting **`glamsterdam-devnet-8`** … built from the `devnets/glamsterdam/8` branch". The main change is "EIP-8037 merge-time state-gas repayment rule".
- **Tracker issue #3518**, "Test Release Tracker: `glamsterdam-devnet@v8.1.4`" (closed 2026-09-17), says: "**EELS branch**: `devnets/glamsterdam/8`".
- No newer issue titled "Test Release Tracker: glamsterdam-devnet…" turned up in the search results.
- The follow-on tracker is #3217, "Test Release Tracker: `tests@v21.0.0` (Glamsterdam Testnet)" (open). It says: "**EELS branch**: `forks/amsterdam`" and "**Latest devnet release**: `tests-glamsterdam-devnet@v8.1.4` (#3518)".
- Later fixture releases that include Amsterdam are mainnet-format, not glamsterdam-devnet: `tests@v21.0.0`, `v21.0.1` (2026-10-08) and `v21.0.2`.

## (1) EIPs scheduled for Glamsterdam: table

- **Meta status:** in the meta EIP (EIP-7773, itself `status: Review`), every row below is listed under "EIPs Scheduled for Inclusion". The meta EIP gives no per-EIP status beyond that.
- **Last updated:** the date of the newest commit touching `EIPS/eip-N.md` on ethereum/EIPs `master`, from the GitHub commits API. eips.ethereum.org shows no last-updated date of its own.
- **LC:** Last Call. Every LC EIP has `last-call-deadline: 2026-11-01`, except EIP-8246, whose deadline is 2026-11-04.
- **Newest release containing it:** `tests@v21.0.2` for every EL row, because the fork's `__init__.py` lists the EIP at that tag's Amsterdam directory (checked through the file's presence; the per-EIP list at the tag was not diffed).
- **Mainnet:** none of the 18 EIPs is in the `requires` list of EIP-7600 (Pectra, Final) or EIP-7607 (Fusaka, Final). EIP-7773's activation table has Sepolia (2026-10-06) and Hoodi (2026-10-26) filled and the Mainnet row empty. The EELS fork has `FORK_CRITERIA: ForkCriteria = Unscheduled(order_index=3)` (`A/__init__.py`).

| EIP | Title | Meta status | EIP status / last updated | Spec file(s) in execution-specs @ `7f2f4c9b` | Newest release with fork | Mainnet |
|---|---|---|---|---|---|---|
| 2780 | Resource-Based Intrinsic Transaction Gas | Scheduled | LC / 2026-10-22 (`f1ade090`, #12561) | `A/transactions.py` L705-790 (intrinsic gas: `TX_BASE`, recipient, value cost); `A/vm/gas.py` L143-144 (`TX_BASE`=12000, `TX_VALUE_COST`=6000); tests `T/eip2780_reduce_intrinsic_tx_gas/` | tests@v21.0.2 | not live |
| 7688 | Forward Compatible Consensus Data Structures | Scheduled | Review / 2026-10-22 (`f1ade090`) | **None in EELS.** Consensus layer; not listed in `A/__init__.py` | n/a (not in EELS) | not live |
| 7708 | ETH Transfers Emit a Log | Scheduled | LC / 2026-10-22 | `A/vm/__init__.py` L35 (`TRANSFER_TOPIC`), L247-280 (`emit_transfer_log`, "Emit a LOG3 for all ETH transfers satisfying EIP-7708"); call site `A/vm/instructions/system.py` (selfdestruct, L767) | tests@v21.0.2 | not live |
| 7732 | Enshrined Proposer-Builder Separation | Scheduled | LC / 2026-10-22 | **None in EELS amsterdam** (no reference found). Consensus layer; not listed in `A/__init__.py` | n/a | not live |
| 7778 | Block Gas Accounting without Refunds | Scheduled | LC / 2026-10-22 | `A/vm/gas.py` L1163 `settle_transaction_gas`, refs at L1186/L1208 | tests@v21.0.2 | not live |
| 7843 | SLOTNUM Opcode | Scheduled | LC / 2026-10-22 | `A/vm/instructions/block.py` L264-291 (`slot_number`); `A/vm/instructions/__init__.py` L102 (`SLOTNUM = 0x4B`), L260; `A/blocks.py` L263-268 (header `slot_number: U64`); `A/vm/gas.py` L221 | tests@v21.0.2 | not live |
| 7928 | Block-Level Access Lists | Scheduled | LC / **2026-10-27** (`d4c57552`, "specify BAL integer encoding") | `A/block_access_lists.py` (whole file; L819 U256 slot encoding); `A/fork.py` L830, L846; `A/blocks.py` L255-259; `A/exceptions.py` L152 | tests@v21.0.2 | not live |
| 7954 | Increase Maximum Contract Size | Scheduled | LC / 2026-10-22 | `A/vm/interpreter.py` L80-81 (`MAX_CODE_SIZE = 0x10000`, `MAX_INIT_CODE_SIZE = 2 * MAX_CODE_SIZE`), L367 | tests@v21.0.2 | not live |
| 7976 | Increase Calldata Floor Cost | Scheduled | LC / 2026-10-06 (`5ef38012`, #12442) | `A/transactions.py` L774-785 (floor tokens = 4 × bytes); `A/vm/gas.py` L146 (`TX_DATA_TOKEN_FLOOR`=16) | tests@v21.0.2 | not live |
| 7981 | Increase Access List Cost | Scheduled | LC / 2026-10-06 | `A/transactions.py` L69-82 (80/128 floor tokens), L750-765, L781-785 | tests@v21.0.2 | not live |
| 7997 | Deterministic Factory Contract | Scheduled | LC / 2026-10-22 | **No spec code in `A/`.** `A/__init__.py` L15/L33 only; `apply_fork` (`A/fork.py` L165-185) returns `old` unchanged. Tests: `T/eip7997_deterministic_factory_contract/` (`test_factory.py`, `test_fork_transition.py`, `test_keyless_deployment.py`, …) | tests@v21.0.2 | not live as a fork rule (see note a) |
| 8024 | Backward Compatible SWAPN, DUPN, EXCHANGE | Scheduled | LC / 2026-10-22 | `A/vm/instructions/stack.py` L213-314; `A/vm/stack.py` L27-81 (immediate decoding); `A/vm/instructions/__init__.py` L192-195 (0xE6/0xE7/0xE8), L360-362; `A/vm/gas.py` L227-229 | tests@v21.0.2 | not live |
| 8037 | State Creation Gas Cost Increase | Scheduled | LC / 2026-10-06 | `A/vm/gas.py` L41-58 (CPSB 1530, 120/64/23 bytes), L304-308 (spill repay); `A/fork_types.py` L47-53; `A/transactions.py` L607-640 (`TX_MAX_TOTAL_GAS_LIMIT` 2^32-1); `A/fork.py` L108, L760; `A/vm/__init__.py` L73 | tests@v21.0.2 | not live |
| 8038 | State-Access Gas Cost Update | Scheduled | LC / 2026-10-22 | `A/vm/gas.py` L76-100 (3000/2100/100/10000/9000/12000; refund 11616); `A/vm/instructions/environment.py` L349, L392 | tests@v21.0.2 | not live |
| 8045 | Exclude Slashed Validators from Proposing | Scheduled | LC / 2026-10-22 | **None in EELS.** Consensus layer | n/a | not live |
| 8061 | Increase Exit and Consolidation Churn | Scheduled | LC / 2026-10-22 | **None in EELS.** Consensus layer | n/a | not live |
| 8246 | Remove SELFDESTRUCT Burn | Scheduled | LC / 2026-10-22 | `A/vm/instructions/system.py` L705-777 (`selfdestruct`: `move_ether` to beneficiary, transfer log only if `beneficiary != originator`, delete only if created in same tx); only `A/__init__.py` names the EIP | tests@v21.0.2 | not live |
| 8282 | Builder Execution Requests | Scheduled | LC / 2026-10-06 | `A/requests.py` L13-23, L93-104 (types `0x03`, `0x04`); `A/fork.py` L121-126 (contract addresses), L901-919 (system calls) | tests@v21.0.2 | not live |

**Note a, EIP-7997.** The EIP formalises an existing contract; it adds no client rule at the fork. The EIP says: "Client software MUST NOT check for the existence of the contract at the fork boundary." The factory account already exists on mainnet: "The factory at `0x4e59b44847b379578588920cA78FbF26c0B4956C` has been used close to 25000 times on Ethereum Mainnet" (https://eips.ethereum.org/EIPS/eip-7997).

**Execution-layer subset.** The EELS fork docstring (`A/__init__.py`) lists 14 EIPs: 2780, 7708, 7778, 7843, 7928, 7954, 7976, 7981, 7997, 8024, 8037, 8038, 8246, 8282. EIPs 7688, 7732, 8045 and 8061 are scheduled in the meta EIP but have no EELS code; they belong to the consensus-layer item.

**Spec-version caveats.**
- Statuses can change before the Last Call deadline (2026-11-01).
- Tracker #3217 lists open ethereum/EIPs PRs that are still unmerged. "Merge" list: EIP-7928 #12347, EIP-7976 #11226, EIP-8070 #12054/#12275, and EIP-8282 #12120 ("sync prose with sys-asm … EELS side: #3619"). "Close" list: EIP-2780 #11377 and EIP-7997 #10847.

**Parameter checks with no disagreement found.** I compared these values in the EIP text with EELS and found them equal:
- 7954: 0x10000 / 0x20000.
- 7843: 0x4b.
- 8024: 0xe6 / 0xe7 / 0xe8.
- 8282: both addresses (case-insensitive), types 0x03 / 0x04.
- 7708: `SYSTEM_ADDRESS` and the `Transfer` topic.
- 8037: CPSB 1530, 120 / 64 / 23 bytes, 16 SSTOREs, 2^32-1.
- 8038: the full table (3000, 2100, 100, 9000, 10000, 12000, refund 11616; access list 2900 / 2000 derived as cold − warm in `A/vm/gas.py` L147-152).
- 2780: 12000 / 6000.
- 7976: 4 / 16.
- 7928: today's integer-encoding clarification matches EELS's U256 slot encoding at `A/block_access_lists.py` L819.

## (2) Fork name for this layer as the spec repository spells it

**`amsterdam`**: directory `src/ethereum/forks/amsterdam`, module docstring "The Amsterdam fork ([EIP-7773]) includes block-level access lists and the deterministic ``CREATE2`` factory contract."

https://github.com/ethereum/execution-specs/tree/7f2f4c9bf6d73b09ecb8b24eb14d08bf0cf0247b/src/ethereum/forks/amsterdam

The branch is spelled `forks/amsterdam` (https://github.com/ethereum/execution-specs/tree/forks/amsterdam). The combined upgrade is "Glamsterdam" in EIP-7773.

## (3) Disagreements between the meta EIP, the EIP pages and the spec repository

1. **Number of EL EIPs: 14 in EELS, 15 in the test tracker, 18 in the meta EIP.**
   - Tracker #3217 (https://github.com/ethereum/execution-specs/issues/3217) and the `tests@v21.0.0` release note (https://github.com/ethereum/execution-specs/releases/tag/tests%40v21.0.0) both say: "This release follows our first full, in-depth review across all **15 Glamsterdam EL EIPs**".
   - The tracker's per-EIP sections are the 14 EIPs in `A/__init__.py` plus "EIP-8070: eth/72 sparse blobpool".
   - EIP-7773 (https://eips.ethereum.org/EIPS/eip-7773) does not schedule EIP-8070. It lists it under "Other EIPs → Networking EIPs: EIP-8070: eth/72 - Sparse Blobpool".
   - EELS `A/__init__.py` does not list EIP-8070.
2. **EIP-7981 parameter table vs EIP-8038 and EELS.**
   - EIP-7981 (https://eips.ethereum.org/EIPS/eip-7981) shows "`ACCESS_LIST_ADDRESS_COST` | `2400` | EIP-2930" and "`ACCESS_LIST_STORAGE_KEY_COST` | `1900` | EIP-2930".
   - EIP-8038 (https://eips.ethereum.org/EIPS/eip-8038) shows "`ACCESS_LIST_STORAGE_KEY_COST` | … | 1,900 | 2,000" and "`ACCESS_LIST_ADDRESS_COST` | … | 2,400 | 2,900".
   - EELS uses 2900 / 2000 (`A/vm/gas.py` L147-152: `COLD_ACCOUNT_ACCESS - WARM_ACCESS`, `COLD_STORAGE_ACCESS - WARM_ACCESS`).
   - EIP-7981's formula also starts at `21000` ("tx.gasUsed = ( 21000 + access_list_data_cost + max(…") while EIP-2780 and EELS use `TX_BASE` 12000 plus recipient costs (`A/transactions.py` L779).
   - These are stale numbers in a composing EIP, not an EELS bug.
3. **EIP-7981 contradicts itself on the floor, and EELS describes the floor differently.**
   - The Specification says the surcharge is "added as a flat surcharge to the gas used calculation, leaving the EIP-2930 `access_list_cost` and the EIP-7976 floor calculation unchanged".
   - Its Rationale says "access list tokens are included in the floor calculation".
   - EELS models it as floor tokens (`ACCESS_LIST_ADDRESS_FLOOR_TOKENS = Uint(80)`, `…STORAGE_KEY_FLOOR_TOKENS = Uint(128)`), added "on both sides of the gas-used maximum" (`A/transactions.py` L69-82, L762-765).
   - The result is numerically the same as the EIP formula: 80×16 = 1280 and 128×16 = 2048, matching the EIP's "1280 gas per address and 2048 gas per storage key".
4. **EIP-7976 `requires` header.**
   - Header: `requires: 7623`, yet the body uses EIP-3860 ("Let `INITCODE_WORD_COST` be 2 as defined in EIP-3860").
   - Tracker #3217 lists this as open: "EIP-7976: ethereum/EIPs#11226, add EIP-3860 to the requires header".
   - (https://eips.ethereum.org/EIPS/eip-7976)
5. **Titles differ between the meta EIP / EIP pages and EELS** (`A/__init__.py`):
   - EIP-8024: "Backward Compatible SWAPN, DUPN, EXCHANGE" vs EELS "EIP-8024: Stack Access Instructions".
   - EIP-8246: "Remove SELFDESTRUCT Burn" vs EELS "Remove SELFDESTRUCT balance burn".
   - EIP-8038: "State-Access Gas Cost Update" vs tracker #3217 "State access gas cost increase".
   - EIP-7843: "SLOTNUM Opcode" vs EELS "EIP-7843: SLOTNUM".
   - The EIPs commit `f1ade090` (#12561), "Align titles and descriptions of Glamsterdam EIPs", changed the EIP side on 2026-10-22, after `forks/amsterdam`'s last commit (2026-10-06).
6. **Activation.**
   - EIP-7773 has filled-in activation times: "Sepolia | 353024 | 1791294816 (2026-10-06 13:53:36 UTC)" and "Hoodi | 132352 | 1793036568 (2026-10-26 17:42:48 UTC)".
   - EELS has `FORK_CRITERIA: ForkCriteria = Unscheduled(order_index=3)`.
   - Consistent for mainnet, which has no date in either place. EELS just encodes no testnet times.
7. **Fork docstring scope.** EELS: "The Amsterdam fork ([EIP-7773]) includes block-level access lists and the deterministic ``CREATE2`` factory contract." That names 2 of the 14 changes it lists itself; it is incomplete, not contradictory.
8. **EIP-7997 vs EELS code.** The EIP says a chain may satisfy it by "including the account in the genesis state" or by a keyless deployment, and "Client software MUST NOT check for the existence of the contract at the fork boundary". Accordingly, EELS has no state change for it (`apply_fork` returns `old`, `A/fork.py` L165-185). This is consistent, but it means the EIP has no spec code to compare client code against; coverage is in tests only.
9. **Branch naming in the brief.** The requested "master branch" of execution-specs redirects (301) to `forks/bogota`. The Amsterdam fixtures were built from `forks/amsterdam` (per #3217) and later from an unnamed source (`tests@v21.0.2`, which diverges from `forks/amsterdam`). Pins for both branches are given above.
10. **What I did not find.** No meta-EIP vs EIP-page status contradiction: the meta EIP gives no per-EIP status. EIP-7773 itself is in `Review` while 17 of its 18 scheduled EIPs are in `Last Call`; EIP-7688 is in `Review`.

## (4) Every URL read

- https://eips.ethereum.org/EIPS/eip-7773
- https://eips.ethereum.org/EIPS/eip-2780
- https://eips.ethereum.org/EIPS/eip-7688
- https://eips.ethereum.org/EIPS/eip-8282 (status spot checks)
- https://raw.githubusercontent.com/ethereum/EIPs/master/EIPS/eip-N.md for N = 7773, 2780, 7688, 7708, 7732, 7778, 7843, 7928, 7954, 7976, 7981, 7997, 8024, 8037, 8038, 8045, 8061, 8246, 8282, 7600, 7607, 8070
- https://api.github.com/repos/ethereum/EIPs/commits?path=EIPS/eip-N.md&per_page=1 (same N, last-updated)
- https://api.github.com/repos/ethereum/EIPs/commits/master
- https://api.github.com/repos/ethereum/EIPs/commits/d4c575521d99ec881a444ab3af604e684b5f0743
- https://api.github.com/repos/ethereum/execution-specs
- https://api.github.com/repos/ethereum/execution-specs/branches/master (301 → forks/bogota)
- https://api.github.com/repos/ethereum/execution-specs/branches/forks%2Fbogota, …/forks%2Famsterdam, …/mainnet
- https://api.github.com/repos/ethereum/execution-specs/branches?per_page=100&page=1..3
- https://github.com/ethereum/execution-specs.git (shallow, sparse clones of `forks/bogota` @ 7f2f4c9b and `forks/amsterdam` @ 16898000, path `src/ethereum/forks/amsterdam`, plus the file tree listing)
- https://raw.githubusercontent.com/ethereum/execution-specs/forks/amsterdam/src/ethereum/forks/amsterdam/__init__.py
- https://api.github.com/repos/ethereum/execution-specs/releases?per_page=40 (the releases page data, including bodies of `tests@v21.0.2`, `tests@v21.0.0`, `tests-glamsterdam-devnet@v8.1.4`)
- https://github.com/ethereum/execution-specs/releases/tag/tests%40v21.0.2
- https://github.com/ethereum/execution-specs/releases/tag/tests%40v21.0.0
- https://github.com/ethereum/execution-specs/releases/tag/tests-glamsterdam-devnet%40v8.1.4
- https://api.github.com/repos/ethereum/execution-specs/tags?per_page=100
- https://api.github.com/repos/ethereum/execution-specs/contents/src/ethereum/forks/amsterdam/__init__.py?ref={v2.20.0, v2.19.1, tests@v21.0.2, tests-glamsterdam-devnet@v8.1.4}
- https://api.github.com/repos/ethereum/execution-specs/commits/{v2.20.0, v2.19.1, tests@v21.0.2, tests-glamsterdam-devnet@v8.1.4}
- https://api.github.com/repos/ethereum/execution-specs/compare/forks/amsterdam...forks/bogota
- https://api.github.com/repos/ethereum/execution-specs/compare/forks/amsterdam...tests%40v21.0.2
- https://api.github.com/search/issues?q=repo:ethereum/execution-specs+in:title+"Test+Release+Tracker"
- https://github.com/ethereum/execution-specs/issues/3518 (via API)
- https://github.com/ethereum/execution-specs/issues/3217 (via API)
