Skip to content

feat(specs,tests): merge EIP-8037 into forks/amsterdam#2891

Draft
fselmo wants to merge 189 commits into
ethereum:forks/amsterdamfrom
fselmo:merge/eip-8037-into-amsterdam
Draft

feat(specs,tests): merge EIP-8037 into forks/amsterdam#2891
fselmo wants to merge 189 commits into
ethereum:forks/amsterdamfrom
fselmo:merge/eip-8037-into-amsterdam

Conversation

@fselmo
Copy link
Copy Markdown
Contributor

@fselmo fselmo commented May 21, 2026

🗒️ Description

Starting the process of merging EIP-8037. Easiest way to do this seemed to be the following, then fixing the conflicts only once for the merge commit:

  • git checkout -b merge/eip-8037-into-amsterdam upstream/forks/amsterdam
  • git merge --no-ff upstream/devnets/bal/7

Summary:

  • 10 conflicts resolved
  • passes just static check
  • Addressed 6 failing tests
  • After the small failures and errors were addressed, fills all tests for --fork=Amsterdam
  • uv run hasher compare on 8037 tests and tests/ported_static tests for Amsterdam so far have yielded the same hashes

TODOs:

Missing pieces from forks/amsterdam - everything except the conflicting code paths in two PRs landed cleanly:

  • PR refactor(specs): delay get_code calls in CALL-like opcodes after gas charging and stack-depth checks #2473: get_code resolution inside generic_call. Incompatible with EIP-8037, which needs code before the call to charge state gas. Re-layer by passing code_address (to generic_call) and resolving inside generic_call after the pre-charge phase.
  • PR feat(tests): extend BALs coverage #2854 (test_block_access_lists_opcodes.py): Richer Op.CALL kwargs (args_size/ret_size split, address_warm=, account_new=, new_memory_size=). Couldn't merge inline across 14 conflict regions without risking losing EIP-8037 state-gas assertions. Replay parametrize + kwargs. Note: This might just be take forks/amsterdam's changes and then see how 8037 applies / breaks things, if at all.
  • 9 errors in test_gas_refunds_from_data_floor[AUTHORIZATION_EXISTING_AUTHORITY]: EIP-8037 makes REFUND_AUTH_PER_EXISTING_ACCOUNT = 183,600 (15× Prague). to() fixture's JUMPDEST-padded code overruns max_code_size. MSTORE memory-expansion fix gets 6/9 passing; 3 GREATER_THAN_DATA_FLOOR
    variants still off-by-1 - the test's execution_gas_cost predictor doesn't model the auth-refund-to-state-reservoir interaction. Fix: align the predictor with the spec, or split AUTHORIZATION out for Amsterdam.
  • review semantic intent of touched / altered tests to make sure we didn't change anything meaningful and the tests still test their intentions

🔗 Related Issues or PRs

N/A.

✅ Checklist

  • All: Ran fast static checks to avoid unnecessary CI fails, see also Code Standards and Enabling Pre-commit Checks:
    just static
  • All: PR title adheres to the repo standard - it will be used as the squash commit message and should start type(scope):.
  • All: Considered updating the online docs in the ./docs/ directory.
  • All: Set appropriate labels for the changes (only maintainers can apply labels).
  • Tests: Ran mkdocs serve locally and verified the auto-generated docs for new tests in the Test Case Reference are correctly formatted.
  • Tests: For PRs implementing a missed test case, update the post-mortem document to add an entry the list.
  • Ported Tests: All converted JSON/YML tests from ethereum/tests or tests/static have been assigned @ported_from marker.

Cute Animal Picture

Screenshot 2026-05-20 at 22 00 38

Carsons-Eels and others added 30 commits April 20, 2026 22:54
fix(spec-specs): correct CR issues, fix formatting

fix(spec-specs): inline `execute_code()` to `process_message()`

chore(spec-specs): backport changes

fix(spec-specs): trim out whitespace in topic hash to match tests

feat(spec-specs): add selfdestruct event topic and logging function

feat(spec-specs): selfdestruct to self emits selfdestruct event

feat(spec-specs): define call success constant

feat(spec-specs): emit selfdestruct finalization log for remaining balance
test(test-tests): add selfdestruct topic and use empty account

test(test-tests): add nested calls log ordering test

feat(test-tests): add selfdestruct finalization test

fix(test-tests): use spaces in event signature to match spec
…e charges (ethereum#2059)

* fix(spec-specs): Move account closure log emission before priority fee charges

* fix(spec-specs): formatting and spelling tweaks

* fix(spec-specs): remove duplicate WriteInStaticContext check

* refactor(spec-specs): align memory expansion with other opcodes

* fix(testing/test): Fix unit test expectation

* refactor(spec-specs): move post-mining coinbase balance calculation

---------

Co-authored-by: Mario Vega <marioevz@gmail.com>
* feat(test-specs): add/refactor tests, add mainnet marked, checklist, coverage check

* feat(test-specs): add fork transition test for selfdestruct logs

* fix: tests

* chore(test-specs): fix fork transition tests

* test(test-specs): add code deposit oog test case

---------

Co-authored-by: carsons-eels <carson@ethereum.org>
Co-authored-by: Mario Vega <marioevz@gmail.com>
)

* fix(spec,text): Updates to EIP-7708 spec for bal-devnet-2

- fix(spec,test): EIP-7708 emit selfdestruct logs only in same tx
- fix(spec,test): EIP-7708, only emit on transfers to other accounts
- Add more tests that match these edge cases

* feat(test): tests for finalization selfdest + bal transfer in lexicographic order

* fix: changes from comments on PR ethereum#2086

* add more variants to test_selfdestruct_same_tx_via_call

* fix: docstring

* refactor: improvements from comments on PR ethereum#2086

* Update test to use dynamic addresses

---------

Co-authored-by: Mario Vega <marioevz@gmail.com>
… (ethereum#2106)

- Add CREATE2 support via with_all_create_opcodes marker
- Add tests for SELFDESTRUCT to coinbase - revealed a change needed since
  the last update was made to the EIP that should be included in the
  currect refspec (miner fees paid before finalization LOG2).
Co-authored-by: raxhvl <raxhvl@users.noreply.github.com>
…m#2211)

* ♻️ refactor: Rename selfdestruct log to burn

* 🥢 nit:

* chore(tests): fix stale selfdestruct references and rename to burn

---------

Co-authored-by: raxhvl <raxhvl@users.noreply.github.com>
Co-authored-by: spencer-tb <spencer.tb@ethereum.org>
… no-log (ethereum#2717)

* feat(tests): EIP-7708 - multi-account finalization burn log ordering

Adds a dedicated test that proves finalization burn logs are emitted
in lexicographical address order when multiple accounts are marked for
deletion in the same transaction.

Parametrized over N in {2, 5}. N accounts are created and
SELFDESTRUCT'd in the same tx, then funded via payer contracts called
in REVERSE sorted address order with distinct nonzero amounts. Each
destroyed account ends with a unique nonzero balance at finalization,
so ordering by address vs. by call order is always distinguishable.

Addresses issue ethereum#2691.

* feat(tests): EIP-7708 - coinbase priority fee must not emit transfer log

Adds a dedicated test proving the coinbase priority fee payment does
not produce a Transfer log.

A contract CALLs the coinbase address with nonzero value while the tx
pays a nonzero priority fee to that same coinbase. Only the
CALL-with-value must produce a Transfer log; the priority fee credit
happens outside the EVM as a protocol-level balance change.

An implementation that hooks every balance addition (instead of only
CALL / SELFDESTRUCT / tx-level value transfers) would emit an extra
Transfer log for the fee and fail the exact-log assertion.

Addresses issue ethereum#2692.

* feat(tests): add single account multi transfer test

* fix(tests): minor nit

---------

Co-authored-by: marioevz <marioevz@gmail.com>
Align EIP-7708 selfdestruct finalization test with the gas constant
rename on forks/amsterdam.
…unds (ethereum#1401)

* feat(specs): add eip-7778 implementation

* fix(specs) spliting receipt gas from block gas

* revert receipt_gas_used

* make sure that the calldata floor cost overwrites the tx gas before refund

* receipt gas used after refunds

* clarify variable naming @gurukamath

* revert to using gas used after refunds for cumulative gas in receipt and add gasSpent to receipt

* spec(amsterdam): fix code formatting

---------

Co-authored-by: Guruprasad Kamath <guru241987@gmail.com>
* fix(tests): fix legacy tests to run with eip-7778

* fix(tests): check gas_spent and gas_used after Amsterdam
* feat(spec-tests): add eip-7778 for calldata checks

* feat(spec-tests): post review - use code gas_cost function

Co-authored-by: Louis Tsai <72684086+LouisTsai-Csie@users.noreply.github.com>

* Apply suggestions from code review

---------

Co-authored-by: Louis Tsai <72684086+LouisTsai-Csie@users.noreply.github.com>
Co-authored-by: Mario Vega <marioevz@gmail.com>
The set iteration in `build_refund_tx` is non-deterministic due to
Python's hash randomization, causing fixture output to vary between
runs. Sort by enum value to ensure reproducible fixtures.
* feat(amsterdam): Implement EIP-7843 SLOTNUM opcode

* mario feedback
fselmo and others added 26 commits May 7, 2026 11:30
…thereum#2816)

* feat(spec): 7702 auth state gas fix

* fix(test): fix existing auth tests to expect block-level gas accounting for 7702 refunds

* chore(test): un-skip 7702 tests that now no longer fail

* fix: change 7702-related 8037 tests to reflect new behavior

---------

Co-authored-by: spencer-tb <spencer.tb@ethereum.org>
* feat(tests): 8037 - test 7702 auth state-gas tests for top-level failure

* refactor(tests): Fix per PR reviews
* feat(spec-specs, tests): 8037 2d edge cases

* refactor(tests): Combine almost duplicated tests

* refactor(test): DRY - merge boundary tests together and parametrize

---------

Co-authored-by: fselmo <fselmo2@gmail.com>
…on Amsterdam (ethereum#2796)

* fix(ported_static): EIP-8037 gas headroom and fork-conditional measurements

Rebase of branch wt-snobal-4-amsterdam-state-gas-fixes onto bal/7
HEAD. Two upstream changes drive the new revision:

  - `bcc2a876d` raises `COST_PER_STATE_BYTE` from 1 174 to 1 530, so
    per-storage state-gas is now `32 * 1530 = 48 960` and per-new-
    account state-gas is `112 * 1530 = 171 360`.
  - `2e707c22c` etc. add fresh entries to `amsterdam_skip_list.txt`
    covering more tests broken by EIP-8037 on Amsterdam.

The 11 original commits on this branch collapsed to a single
revision because:

  - test_sstore_change_from_external_call_in_init_code.py — bal/7's
    upstream version (`tx_gas = [intrinsic + tx_data[d].gas_cost
    (fork)]` with `inner_call_cost` annotations) supersedes the gas
    bump this branch had. Keep bal/7's version, drop the bump.
  - test_storage_costs, test_varied_context, test_manual_create,
    test_precomps_eip2929_cancun — replace the hardcoded SSTORE-set
    and NEW_ACCOUNT spillover deltas (20 468 / 106 488 / 126 956,
    derived for CPSB = 1 174) with fork-helper expressions
    (`fork.sstore_state_gas() - 17 100`, `fork.create_state_gas() -
    25 000`, and their sum) so the deltas auto-adapt to the new
    1 530 CPSB and any future change.
  - All other gas-bump tests — keep their fork-conditional structure
    from the prior `refactor(ported_static): make EIP-8037 gas bumps
    fork-conditional` commit, but raise the EIP-8037 budgets where
    1 530 CPSB pushes the previous bump under the new spill (test_
    storage_costs, test_manual_create, test_codesize_valid,
    test_callcode_dynamic_code, test_wallet_construction, test_
    callcodecallcodecallcode_111_suicide_end). Pre-EIP-8037 values
    are still preserved.

Skip list: start from bal/7's 1 062-entry list (which already
covered the new failures the CPSB bump introduced), then drop the
165 entries that point at files this branch fixes. New total: 732.

Verified across Cancun/Prague/Osaka/Amsterdam: 60 476 passed,
0 failed. Amsterdam alone: 16 482 passed, 0 failed, 2 448 skipped.

* style(ported_static): fix lint — line lengths and ruff format

Apply `just fix` formatting to the 4 gas-measurement tests this branch
touches (test_storage_costs, test_varied_context, test_manual_create,
test_precomps_eip2929_cancun) plus an upstream-drift reformat picked
up in test_state_gas_call.py. Shorten the E501-flagged docstring line
in test_manual_create by dropping the inline assignment from the
explanation.

`just static` passes (exit 0).
…thereum#2845)

* feat(spec): remove SD state gas refunds from EIP-8037

* feat(tests): invert SD state gas refund expectations for EIP-8037

* chore: a bit tighter gas accounting on selfdestruct test

---------

Co-authored-by: fselmo <fselmo2@gmail.com>
…erdam tests (ethereum#2839)

* fix(ported_static): fork-conditional gas bumps for stCallCodes/stCallDelegateCodes* _suicide_end family

28 tests in the `*_suicide_end` family share the same nested
CALL/CALLCODE/DELEGATECALL pattern with three hardcoded inner gas
values (`0xC350` 50k / `0x186A0` 100k / `0x249F0` 150k). On Amsterdam
each SSTORE in the innermost callee adds per-storage state-gas
(`32 * COST_PER_STATE_BYTE`) that spills back into regular gas when
the reservoir is empty, OoG'ing the inner CALL before its SSTORE
marker fires.

Apply fork-conditional `inner_call_gas` / `middle_call_gas` /
`outer_call_gas` variables that keep the original 50k / 100k / 150k
on pre-EIP-8037 forks and bump to `0x186A0` / `0xC3500` / `0xF4240`
on Amsterdam. Each file also gets the `fork: Fork` parameter, the
`Fork` import, and a `@manually-enhanced` docstring marker.

Drops 28 entries from `amsterdam_skip_list.txt` (897 -> 869).

* fix(ported_static): fork-conditional tx_gas for stCreate2 collision tests

`test_create2collision_balance`, `_code`, `_code2`, `_nonce` all share
the same pattern: tx with `gas_limit=400_000` deploys a contract via
CREATE2 that collides with an existing account. EIP-8037 NEW_ACCOUNT
state-gas spill on Amsterdam exceeds the 400k budget, OoG'ing the tx
before the collision check.

Apply fork-conditional `outer_tx_gas = 400_000` (or `1_000_000` on
EIP-8037). Pre-EIP-8037 keeps the original; post-state unchanged on
all forks. Marked `@manually-enhanced`; dropped 4 Amsterdam skip
entries (869 -> 865).

* fix(ported_static): fork-conditional tx_gas for stCreate2 revert_depth_create_address_collision

Two tests (`_collision` and `_collision_berlin`) share the same
`tx_gas = [110_000, 170_000]` pattern: tx OoGs on Amsterdam where
EIP-8037 NEW_ACCOUNT state-gas spillover exceeds the budget at the
CREATE2-via-revert path.

Apply fork-conditional `[500_000, 700_000]` on EIP-8037; pre-EIP-8037
keeps the original tuned values. Marked `@manually-enhanced`; dropped
the corresponding Amsterdam skip entries (857 -> 849).

* fix(ported_static): fork-conditional tx_gas for stRandom*/test_random_statetest* family

9 auto-generated `test_random_statetest*` files (stRandom and
stRandom2) all use `tx_gas = 100_000`. EIP-8037 state-gas spill on
Amsterdam pushes the tx OoG before its SSTORE marker fires.

Apply fork-conditional `tx_gas_limit = 100_000` (pre-EIP-8037) or
`500_000` (EIP-8037). Each file gets `fork: Fork` parameter, `Fork`
import, and `@manually-enhanced` marker. Pre-EIP-8037 behavior
unchanged. Dropped corresponding Amsterdam skip entries.

* fix(ported_static): fork-conditional CALL gas for push0 / revert_opcode_in_calls / coinbase_warm_fail

Three tests where an inner CALL/DELEGATECALL with a small hardcoded
gas budget OoG'd on Amsterdam due to EIP-8037 state-gas spill:

- `stEIP3855_push0/test_push0.py` — `inner_call_gas` (100k → 1M)
  for the SSTORE-containing callees
- `stRevertTest/test_revert_opcode_in_calls_on_non_empty_return_data.py`
  — three nested DELEGATECALL gas values bumped fork-conditionally
- `stEIP3651_warmcoinbase/test_coinbase_warm_account_call_gas_fail.py`
  — `tx_gas` bumped from 80k to 500k

All three preserve original values on pre-EIP-8037 forks. Each file
marked `@manually-enhanced`. Dropped corresponding Amsterdam skip
entries.

* fix(ported_static): batch fork-conditional gas bumps for 7 simple cases

Tests where a single `tx_gas` or inner-CALL `gas=` literal was
hardcoded too tight for EIP-8037 state-gas spill on Amsterdam:

- stCallCodes/test_callcode_in_initcode_to_empty_contract
- stCallCreateCallCodeTest/test_create_fail_balance_too_low
- stCreate2/test_create2_first_byte_loop
- stCreate2/test_create2_suicide
- stRevertTest/test_revert_opcode_calls
- stSystemOperationsTest/test_call_to_name_registrator0
- stSystemOperationsTest/test_callcode_to_return1

Each gets fork-conditional `outer_tx_gas` / `inner_call_gas`
variables defaulting to the original budget on pre-EIP-8037 and
bumped on EIP-8037. Each file marked `@manually-enhanced`; skip
entries dropped.

* fix(ported_static): fork-conditional tx_gas for stSystemOperationsTest/test_create_name_registrator* family

The four `test_create_name_registrator*` tests share the same
`tx_gas_limit=300000` budget. On Amsterdam, EIP-8037 NEW_ACCOUNT
state-gas spills into regular gas and OoGs the CREATE. Bump
fork-conditionally to 1_000_000 on EIP-8037 only; pre-EIP-8037
forks unchanged. Removes 4 entries from the skip list.

* fix(ported_static): fork-conditional tx_gas for stMemoryTest mem32kb/mem64kb single-byte family

18 tests share `gas_limit=100000` plus a single SSTORE-set after
MSTORE8 at offset 32k or 64k. On Amsterdam the SSTORE-set state-gas
spill exceeds 100k. Bump fork-conditionally to 300k (32kb) / 1M
(64kb) on EIP-8037 only; pre-EIP-8037 unchanged. Removes 18 entries
from the skip list.

* fix(ported_static): fork-conditional tx_gas for stMemoryTest mem{0,31,32,33}b_single_byte

The four small mem-byte tests share `gas_limit=100000` + a single
SSTORE-set. Even with no memory expansion, the EIP-8037 SSTORE-set
state-gas spill exceeds the original 100k tx budget. Bump fork-
conditionally to 200k on EIP-8037 only. Removes 4 entries from the
skip list.

* fix(ported_static): fork-conditional tx_gas bumps for stPreCompiledContracts2 modexp_0_0_0_* family

The four `modexp_0_0_0_*` tests share a 4-element `tx_gas` budget list
where the lower entries OoG on Amsterdam due to EIP-8037 state-gas
spill (the inner MODEXP CALL leaves no headroom for the post-call
SSTORE-set). For 22000/25000/35000 all expectations require the SSTORE
to succeed, so bump all four entries to 200000. For 20500, entry g0
is the negative-case (must still OoG and leave storage empty), so it
keeps the original 42540; only g1/g2 are bumped. Pre-EIP-8037 forks
unchanged. Removes 11 entries from the skip list.

* fix(ported_static): fork-conditional tx_gas for stRandom/stRandom2 auto-generated tests

260 random-statetest files share the same `gas_limit=100000` budget
with a single SSTORE-set in the post-state. On Amsterdam the SSTORE-
set state-gas spill exceeds 100k. Bump fork-conditionally to 500_000
on EIP-8037 only; pre-EIP-8037 forks unchanged. Removes 260 entries
from the skip list (the entire stRandom + stRandom2 sections).

* fix(ported_static): fork-conditional gas for stTransactionTest/internal_call_hitting_gas_limit_success

The test names its inner CALL gas (25k) and tx gas (150k) precisely
to land inside the SSTORE-set on Cancun. Amsterdam adds 48k state-
gas spill per SSTORE-set, OoGing the inner CALL. Bump inner CALL
gas to 200k, tx to 500k, env gas limit to 1M on EIP-8037 only; pre-
EIP-8037 unchanged. Removes 1 entry from the skip list.

* fix(ported_static): fork-conditional gas bumps for misc stCreateTest/stCallCreateCallCodeTest init-code tests

Four tests share the pattern of a tx with inner CALL forwarding 60k
gas that performs a fresh SSTORE-set in the callee. On Amsterdam,
EIP-8037 state-gas spill (and NEW_ACCOUNT spill on the create_init_*
test) OoGs the inner CALL. Bump inner CALL gas and tx gas fork-
conditionally; pre-EIP-8037 unchanged. Removes 4 entries from the
skip list.

* fix(ported_static): fork-conditional gas for stInitCodeTest deploy txs

Three contract-creation tests have `gas_limit` precisely tuned around
the Cancun intrinsic (53k base + small calldata). EIP-8037 folds the
new-account state-gas (~171k) into the TX_CREATE intrinsic, pushing
the effective floor above the original budget. Bump tx gas (and the
sender's funded balance where it needed extra room) fork-conditionally
on EIP-8037 only; pre-EIP-8037 unchanged. Removes 3 entries from the
skip list.

* fix(ported_static): fork-conditional tx_gas[1] for stCreate2/test_create_message_reverted

g1=150000 is meant to succeed (CREATE2 deploys a contract that
SSTORE 0=12, SSTORE 1=13). On Amsterdam, EIP-8037 NEW_ACCOUNT plus
2x fresh SSTORE-set state-gas spill exceeds 150k. Bump g1 to 500k
on EIP-8037 only; g0 (the OoG-by-design parametrization) stays at
80k. Sender balance also bumped to cover the larger budget. Pre-
EIP-8037 forks unchanged. Removes 1 entry from the skip list.

* fix(ported_static): fork-conditional gas for stRevertTest revert_in_create_in_init / revert_opcode_return

Both tests share the pattern of a tightly-budgeted tx that the
state-gas spill from a fresh SSTORE-set (revert_opcode_return) or
nested CREATE NEW_ACCOUNT (revert_in_create_in_init_paris) blows
out on Amsterdam. Bump tx gas (only tx_gas[1] for
revert_opcode_return so the other parametrization keeps its tuned
budget) fork-conditionally on EIP-8037 only; pre-EIP-8037
unchanged. Removes 2 entries from the skip list.

* chore(ported_static): restore Amsterdam skip entries that the gas bumps no longer cover

After the CPSB recalibration (1174 → 1530), 42 tests that earlier
commits in this branch un-skipped now fail again on Amsterdam. The
fix variables in those test files are still good for pre-EIP-8037
forks, but the bumped Amsterdam budgets are no longer sufficient at
CPSB=1530 — and several of the suicide_end/collision tests bake the
gas literal into the contract bytecode that the post-state hashes,
so bumping the value would break the code-match assertions.

Restore the skip entries so the Amsterdam run is clean; the per-test
fixes can be retuned by hand in a follow-up.

* chore(test): hex -> int for readability

* chore(ported_static): trim verbose state-gas narrative from suicide_end docstrings

---------

Co-authored-by: fselmo <fselmo2@gmail.com>
Co-authored-by: spencer-tb <spencer.tb@ethereum.org>
…bal/7

# Conflicts:
#	docs/CHANGELOG.md
#	packages/testing/src/execution_testing/tools/utility/generators.py
#	src/ethereum_spec_tools/evm_tools/t8n/t8n_types.py
#	tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py
#	tests/ported_static/stQuadraticComplexityTest/test_call20_kbytes_contract50_2.py
#	tests/ported_static/stQuadraticComplexityTest/test_call50000.py
#	tests/ported_static/stQuadraticComplexityTest/test_callcode50000.py
#	tests/prague/eip6110_deposits/conftest.py
#	tests/prague/eip7002_el_triggerable_withdrawals/conftest.py
Add a `large_zero_calldata_and_access_list_insufficient_gas`
parametrize to `test_floor_cost_validation_with_access_list`,
paralleling the existing `large_calldata_and_access_list_insufficient_gas`
(non-zero bytes) and exercising the `intrinsic <= gas_limit < floor`
window with a 1,700-gas margin between regular intrinsic and floor
(vs. ~19,700 for the non-zero variant).

Closes ethereum#2800.
…bal/7

# Conflicts:
#	docs/writing_tests/test_markers.md
#	packages/testing/src/execution_testing/specs/blockchain.py
#	src/ethereum/forks/amsterdam/fork.py
#	src/ethereum/forks/amsterdam/vm/__init__.py
#	src/ethereum/forks/amsterdam/vm/instructions/system.py
#	src/ethereum/forks/amsterdam/vm/interpreter.py
#	tests/amsterdam/eip7708_eth_transfer_logs/spec.py
#	tests/amsterdam/eip7708_eth_transfer_logs/test_burn_logs.py
#	tests/amsterdam/eip7708_eth_transfer_logs/test_fork_transition.py
#	tests/amsterdam/eip7708_eth_transfer_logs/test_transfer_logs.py
#	tests/amsterdam/eip7778_block_gas_accounting_without_refunds/test_gas_accounting.py
#	tests/amsterdam/eip7843_slotnum/test_slotnum.py
#	tests/amsterdam/eip7954_increase_max_contract_size/test_fork_transition.py
#	tests/amsterdam/eip7954_increase_max_contract_size/test_max_code_size.py
#	tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py
#	tests/cancun/eip6780_selfdestruct/test_selfdestruct.py
Merge resolves conflicts between forks/amsterdam (15 commits since the
last devnets/bal/7 sync) and devnets/bal/7's EIP-8037 spec + test work.

Verified: no files from devnets/bal/7 are missing from the merge tree;
all diffs vs devnets/bal/7 are within the file set touched by the 15
forks/amsterdam commits ahead of the previous sync.
@fselmo fselmo changed the title Merge/eip 8037 into amsterdam feat(specs,tests): merge EIP-8037 into forks/amsterdam May 21, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented May 21, 2026

Codecov Report

❌ Patch coverage is 21.95122% with 32 lines in your changes missing coverage. Please review.
✅ Project coverage is 88.91%. Comparing base (1de389b) to head (36dcb12).

Files with missing lines Patch % Lines
src/ethereum/forks/amsterdam/transactions.py 15.38% 22 Missing ⚠️
src/ethereum/forks/amsterdam/vm/__init__.py 41.66% 7 Missing ⚠️
src/ethereum/trace.py 0.00% 3 Missing ⚠️
Additional details and impacted files
@@                 Coverage Diff                 @@
##           forks/amsterdam    #2891      +/-   ##
===================================================
- Coverage            90.44%   88.91%   -1.53%     
===================================================
  Files                  535      496      -39     
  Lines                32439    29758    -2681     
  Branches              3012     2723     -289     
===================================================
- Hits                 29338    26459    -2879     
- Misses                2573     2814     +241     
+ Partials               528      485      -43     
Flag Coverage Δ
unittests 88.91% <21.95%> (-1.53%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.