Skip to content

feat(tests): EIP-2780 warm/cold-aware top-frame delegation#3045

Draft
chfast wants to merge 12 commits into
ethereum:devnets/glamsterdam/6from
chfast:probe/eip2780-warm-delegation
Draft

feat(tests): EIP-2780 warm/cold-aware top-frame delegation#3045
chfast wants to merge 12 commits into
ethereum:devnets/glamsterdam/6from
chfast:probe/eip2780-warm-delegation

Conversation

@chfast

@chfast chfast commented Jun 24, 2026

Copy link
Copy Markdown
Member

🗒️ Description

Assert that an EIP-7702 delegation target already made warm via the access list is resolved at the WARM_ACCESS rate at the top transaction frame, per the EIP-2780 Interactions note (the EIP-2929 accessed_addresses model).

EIP-2780 is internally inconsistent here: its normative top-level gas-cost bullet and reference-cases table charge an unconditional COLD_ACCOUNT_ACCESS, whereas the Interactions note specifies warm/cold-aware accounting. This probe pins the Interactions-note reading; test_warmth_invariants.py pins the unconditional-cold one.

Marked xfail(strict=True): the implementation currently charges cold unconditionally, so the probe is CI-green today and a strict XPASS forces the marker's removal once the spec is disambiguated in favor of warm/cold-aware accounting and EELS adopts it.

Here's the relevant discussion on Eth R&D for context.

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

spencer-tb and others added 12 commits June 19, 2026 15:10
…thereum#2972)

Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com>
Co-authored-by: Mario Vega <11726710+marioevz@users.noreply.github.com>
* feat(spec, specs): EIP-7997 - Spec and basic tests

* feat(spec-specs): EIP 7997 - More tests

* bugfix(specs): Add logic to add 0x12 as a special contract outside the
precompile range

* feat(tests): 7997 - add a check at the transition, adds tests for prewarming, CALLCODE, and giving it a balance via SELFDESTRUCT

* fix: address PR feedback

* feat(spec): Use Arachnid create2 contract

* feat(specs, spec-test): Remove unneeded code

* feat(spec-tests): Remove unneeded tests

* feat(test-specs): Add sstore metadata for gas pricing

* fix(test-specs): Remove sstore metadata

* feat(test-specs): Add Arachnid contract to system contracts

* feat(test-specs): Add a BAL test, large initcode test, and an ef prefix test

* fix(test-specs): remove unneeded pre_alloc_mutable decorators

* Add Amsterdam config to test_execute_eth_config

* fix: Uses storage.store_next and mark valid_from EIP7997 instead of Amsterdam

* fix: don't hardcode gas values, call_opcode parametrization

* fix: Remove Factory predeploy from system contracts

* fix: Remove explicit set of gas_limit

* lint

* Whitespace
…reum#2842)

* feat: implement eip 8246

* tests: enhance eip 8246 coverage

* refactor: resolve failing selfdestruct scenario

* chore: fix linting issue

* fix(specs): Remove all references to burn logs

* fix(tests): Fix remaining tests

* chore: rename function

---------

Co-authored-by: marioevz <marioevz@gmail.com>
Assert that an EIP-7702 delegation target already made warm via the access list is resolved at the WARM_ACCESS rate at the top transaction frame, per the EIP-2780 Interactions note (the EIP-2929 accessed_addresses model).

EIP-2780 is internally inconsistent here: its normative top-level gas-cost bullet and reference-cases table charge an unconditional COLD_ACCOUNT_ACCESS, whereas the Interactions note specifies warm/cold-aware accounting. This probe pins the Interactions-note reading; test_warmth_invariants.py pins the unconditional-cold one.

Marked xfail(strict=True): the implementation currently charges cold unconditionally, so the probe is CI-green today and a strict XPASS forces the marker's removal once the spec is disambiguated in favor of warm/cold-aware accounting and EELS adopts it.
@gurukamath

Copy link
Copy Markdown
Contributor

The scenario is already covered in this test. If we decide to update the spec and the implementation, could we just adapt that test?

@chfast

chfast commented Jun 24, 2026

Copy link
Copy Markdown
Member Author

The scenario is already covered in this test. If we decide to update the spec and the implementation, could we just adapt that test?

Yes, we can.

@gurukamath gurukamath self-assigned this Jul 2, 2026
@danceratopz danceratopz marked this pull request as draft July 2, 2026 09:38
@danceratopz

Copy link
Copy Markdown
Member

Just converting to draft as this targets glamsterdam-devnet-7 spec, which we shouldn't merge to forks/amsterdam yet.

@spencer-tb

spencer-tb commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Following ACDT should this be closed as we are going with ethereum/EIPs#11844 over ethereum/EIPs#11778?

@chfast

chfast commented Jul 2, 2026

Copy link
Copy Markdown
Member Author

Following ACDT should this be closed as we are going with ethereum/EIPs#11844 over ethereum/EIPs#11778 ?

Maybe we should keep the test with modified expectations? Or is this already covered somewhere else?

@spencer-tb

Copy link
Copy Markdown
Contributor

Following ACDT should this be closed as we are going with ethereum/EIPs#11844 over ethereum/EIPs#11778 ?

Maybe we should keep the test with modified expectations? Or is this already covered somewhere else?

SGTM!

@spencer-tb spencer-tb force-pushed the devnets/glamsterdam/6 branch from 4bc0fc6 to d0338f5 Compare July 2, 2026 20:42
@spencer-tb spencer-tb added C-feat Category: an improvement or new feature A-tests Area: Consensus tests. labels Jul 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-tests Area: Consensus tests. C-feat Category: an improvement or new feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants