Skip to content

Conversation

jihoonsong
Copy link
Contributor

My nitpick cooldown is up :p

Copy link
Member

@jtraglia jtraglia left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ha, no worries. I'm good with nitpick PRs. Thanks!

@jihoonsong jihoonsong force-pushed the eip7805-coherent-naming branch from b3cb6b7 to 5db8457 Compare August 14, 2025 13:59
@jtraglia jtraglia added the eip7805 FOCIL label Aug 14, 2025
@jtraglia jtraglia merged commit 2234783 into ethereum:master Aug 14, 2025
13 checks passed
Rose2161 pushed a commit to Rose2161/consensus-specs that referenced this pull request Aug 18, 2025
* Fix a small bug in a pending consolidation test (#4217)

* Update fork trigger sections (#4208)

* Use consistent note style (#4224)

* Remove outdated paragraph about ExecutionPayloadV4 in electra (#4221)

* Add missing section headers to fulu spec (#4223)

* Replace some instances of "extended" with "modified" (#4225)

* Add Distributed Blob Publishing to Fulu networking spec (#4183)

* Add distributed blob publishing section to Fulu p2p interface spec.

# Conflicts:
#	specs/deneb/p2p-interface.md

* Apply suggestions from code review

Co-authored-by: Lion - dapplion <[email protected]>

* Apply suggestions from code review

Co-authored-by: Justin Traglia <[email protected]>
Co-authored-by: fradamt <[email protected]>

* Fix lint

* Fix lint.

* Add new line before list

* Clarify columns that clients must publish to in Distributed Publishing.

* add function to retrieve sidecars from both block and sidecar

* fix lint

* fix lint again

* fix tests

* Fix tests & nits

* Fix more nits

* Address review comment.

* clarify language

Co-authored-by: Alex Stokes <[email protected]>

---------

Co-authored-by: Lion - dapplion <[email protected]>
Co-authored-by: Justin Traglia <[email protected]>
Co-authored-by: fradamt <[email protected]>
Co-authored-by: fradamt <[email protected]>
Co-authored-by: Justin Traglia <[email protected]>
Co-authored-by: Alex Stokes <[email protected]>

* Use finalized state for Fulu validator custody (#4211)

In `get_validators_custody_requirement`, use the latest finalized state as `BeaconState` instead of the current beacon state.

* State that effective balance should be used (#4218)

* Bump version to v1.5.0-beta.4 (#4236)

* Round down value when setting validator's effective balance (#4229)

* Add full_pending_withdrawals_but_first_skipped_* tests (#4237)

* Add multiple_pending_deposits_same_pubkey_different_signature test (#4238)

* Add withdrawal_and_consolidation_effective_balance_updates test (#4239)

* Bump actions/setup-python from 5.4.0 to 5.5.0 in the actions group (#4242)

Bumps the actions group with 1 update: [actions/setup-python](https://github.com/actions/setup-python).


Updates `actions/setup-python` from 5.4.0 to 5.5.0
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/42375524e23c412d93fb67b49958b491fce71c38...8d9ed9ac5c53483de85588cdf95a591a75ab9f55)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: 5.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump the actions group with 3 updates (#4241)

* Bump the actions group with 3 updates

Bumps the actions group with 3 updates: [setuptools](https://github.com/pypa/setuptools), [flake8](https://github.com/pycqa/flake8) and [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `setuptools` from 78.0.2 to 78.1.0
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v78.0.2...v78.1.0)

Updates `flake8` from 7.1.2 to 7.2.0
- [Commits](https://github.com/pycqa/flake8/compare/7.1.2...7.2.0)

Updates `mkdocs-material` from 9.6.9 to 9.6.10
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.6.9...9.6.10)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-version: 78.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: flake8
  dependency-version: 7.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: mkdocs-material
  dependency-version: 9.6.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>

* Fix lint

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Justin Traglia <[email protected]>

* close outdated issues (#4231)

* Adds test that affects the proposer selection (#4230)

* Change in balance affects proposer selection

* move test to phase0

* lint imports

* improve comment

* brute force proposer change

* Remove helper function

---------

Co-authored-by: Justin Traglia <[email protected]>

* Use `mdformat` for markdown formatting (#4244)

* Replace skip footnote with html block

* Remove unnecessary duration columns

* Add mdformat to pyproject

* Start to use mdformat-toc

* Remove table of contents headers

* Fix empty header

* Finally, run mdformat

* Remove doctoc from CI

* Fix issue with eip7732

* Error if linter changes something in CI

* Use black for linting tests directory (#4245)

* Remove flake8 & run black on tests

* Run make lint

---------

Co-authored-by: Justin Traglia <[email protected]>

* Add two consolidation request processing edge case tests (#4246)

* Fix the full consolidation queue test (#4248)

* Bump the actions group with 3 updates (#4249)

Bumps the actions group with 3 updates: [marko](https://github.com/frostming/marko), [pytest-cov](https://github.com/pytest-dev/pytest-cov) and [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `marko` from 2.1.2 to 2.1.3
- [Release notes](https://github.com/frostming/marko/releases)
- [Changelog](https://github.com/frostming/marko/blob/master/CHANGELOG.md)
- [Commits](https://github.com/frostming/marko/compare/v2.1.2...v2.1.3)

Updates `pytest-cov` from 6.0.0 to 6.1.1
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v6.0.0...v6.1.1)

Updates `mkdocs-material` from 9.6.10 to 9.6.11
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.6.10...9.6.11)

---
updated-dependencies:
- dependency-name: marko
  dependency-version: 2.1.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: pytest-cov
  dependency-version: 6.1.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: mkdocs-material
  dependency-version: 9.6.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Add EIP-7805 fork version/epoch to the configs (#4250)

* Update WS period computation for Electra (#4179)

* Add `withdrawal_requests_when_pending_withdrawal_queue_is_full` test (#4252)

* Clean up electra presets (#4254)

* feat: schedule electra for mainnet (#4258)

* Test consolidation with same source and target (#4259)

* Bump version to v1.5.0-beta.5 (#4260)

* Bump actions/setup-python from 5.4.0 to 5.5.0 in the actions group (#4242)

Bumps the actions group with 1 update: [actions/setup-python](https://github.com/actions/setup-python).


Updates `actions/setup-python` from 5.4.0 to 5.5.0
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/42375524e23c412d93fb67b49958b491fce71c38...8d9ed9ac5c53483de85588cdf95a591a75ab9f55)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: 5.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump the actions group with 3 updates (#4241)

* Bump the actions group with 3 updates

Bumps the actions group with 3 updates: [setuptools](https://github.com/pypa/setuptools), [flake8](https://github.com/pycqa/flake8) and [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `setuptools` from 78.0.2 to 78.1.0
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v78.0.2...v78.1.0)

Updates `flake8` from 7.1.2 to 7.2.0
- [Commits](https://github.com/pycqa/flake8/compare/7.1.2...7.2.0)

Updates `mkdocs-material` from 9.6.9 to 9.6.10
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.6.9...9.6.10)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-version: 78.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: flake8
  dependency-version: 7.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: mkdocs-material
  dependency-version: 9.6.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>

* Fix lint

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Justin Traglia <[email protected]>

* Adds test that affects the proposer selection (#4230)

* Change in balance affects proposer selection

* move test to phase0

* lint imports

* improve comment

* brute force proposer change

* Remove helper function

---------

Co-authored-by: Justin Traglia <[email protected]>

* Use `mdformat` for markdown formatting (#4244)

* Replace skip footnote with html block

* Remove unnecessary duration columns

* Add mdformat to pyproject

* Start to use mdformat-toc

* Remove table of contents headers

* Fix empty header

* Finally, run mdformat

* Remove doctoc from CI

* Fix issue with eip7732

* Error if linter changes something in CI

* Use black for linting tests directory (#4245)

* Remove flake8 & run black on tests

* Run make lint

---------

Co-authored-by: Justin Traglia <[email protected]>

* Add two consolidation request processing edge case tests (#4246)

* Fix the full consolidation queue test (#4248)

* Bump the actions group with 3 updates (#4249)

Bumps the actions group with 3 updates: [marko](https://github.com/frostming/marko), [pytest-cov](https://github.com/pytest-dev/pytest-cov) and [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `marko` from 2.1.2 to 2.1.3
- [Release notes](https://github.com/frostming/marko/releases)
- [Changelog](https://github.com/frostming/marko/blob/master/CHANGELOG.md)
- [Commits](https://github.com/frostming/marko/compare/v2.1.2...v2.1.3)

Updates `pytest-cov` from 6.0.0 to 6.1.1
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v6.0.0...v6.1.1)

Updates `mkdocs-material` from 9.6.10 to 9.6.11
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.6.10...9.6.11)

---
updated-dependencies:
- dependency-name: marko
  dependency-version: 2.1.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: pytest-cov
  dependency-version: 6.1.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: mkdocs-material
  dependency-version: 9.6.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Add EIP-7805 fork version/epoch to the configs (#4250)

* Update WS period computation for Electra (#4179)

* Add `withdrawal_requests_when_pending_withdrawal_queue_is_full` test (#4252)

* Clean up electra presets (#4254)

* feat: schedule electra for mainnet (#4258)

* Test consolidation with same source and target (#4259)

* Bump version to v1.5.0-beta.5 (#4260)

* Cleanup presets and configs (#4256)

* Delete unnecessary blank lines

* Remove more unnecessary blank lines

* Use consistent title/order for rewards and penalties

* Add some units

* Various improvements

* Split up deneb presets appropriately

* Clean up fulu presets

* Fix nits

* Rename eip7732 preset files

* Remove deprecated presets

* Random config changes

* More configs cleanup

* Fix more phase0 stuff

* Various cleanups

* Go with Ben's year

* Fix eip7732 kzg commitment inclusion proof depth (#4264)

* Update inclusion proof depth for mainnet

* Disable two fork-choice tests for now

* Remove unused is_previous_epoch_justified function (#4269)

* Disable parallelism with make test if a test name is specified (#4270)

* Simplify specification tables in main readme (#4271)

* Do a major clean up of the main readme (#4272)

* Add various tests cases for electra (#4265)

* Bump the actions group with 2 updates (#4273)

* Allow skipping verification for blobs from EL (#4262)

* EIP7805: Use MAX_TRANSACTIONS_PER_PAYLOAD for InclusionList transactions size (#4220)

* Update config/preset files for EIP7805 (#4268)

* Add eip7805 presets

* Move params to presets

* Move IL committee domain to constant (#4276)

* Add workflow to run nightly mainnet tests (#4280)

* Fix bug in electra withdrawals processing (#4281)

* Fix a couple broken links (#4279)

* Bump the actions group with 3 updates (#4282)

Bumps the actions group with 3 updates: [setuptools](https://github.com/pypa/setuptools), [pathos](https://github.com/uqfoundation/pathos) and [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `setuptools` from 78.1.0 to 79.0.0
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v78.1.0...v79.0.0)

Updates `pathos` from 0.3.3 to 0.3.4
- [Release notes](https://github.com/uqfoundation/pathos/releases)
- [Commits](https://github.com/uqfoundation/pathos/compare/0.3.3...0.3.4)

Updates `mkdocs-material` from 9.6.11 to 9.6.12
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.6.11...9.6.12)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-version: 79.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
- dependency-name: pathos
  dependency-version: 0.3.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: mkdocs-material
  dependency-version: 9.6.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Improve DataColumnSidecarsByRoot request (#4284)

* Mark electra as stable (#4285)

* Fix some small, unrelated nits

* Remove electra work-in-progress notes

* Move electra to stable table

* Add two new custody group tests (#4290)

* Remove unnecessary sort in `compute_columns_for_custody_group` (#4289)

The output is already sorted, no need to sort it again.

* Bump actions/setup-python from 5.5.0 to 5.6.0 in the actions group (#4293)

Bumps the actions group with 1 update: [actions/setup-python](https://github.com/actions/setup-python).


Updates `actions/setup-python` from 5.5.0 to 5.6.0
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/8d9ed9ac5c53483de85588cdf95a591a75ab9f55...a26af69be951a213d495a4c3e4e4022e16d87065)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: 5.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump setuptools from 79.0.0 to 80.0.0 in the actions group (#4292)

Bumps the actions group with 1 update: [setuptools](https://github.com/pypa/setuptools).


Updates `setuptools` from 79.0.0 to 80.0.0
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v79.0.0...v80.0.0)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-version: 80.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Make `*_REQUESTS_PER_PAYLOAD` the same for mainnet/minimal (#4291)

* Add ability to run generators for specific tests (#4288)

* Add test_case argument when running generator targets.
Add same argument to the general test generator.
Skip generating a test if test_case was provided and it does not match.

* Add fork-list and preset-list arguments when running generator targets.
Update case_list argument to --case-list, for consistenty with fork and preset names.
Have these list arguments actually support providing lists.

* Fix: Check correct variable for forks' print statement.
Add print statement for cases too.

* Update generator README for new arguments.

* Update README to include gen_all in the docs for the new filtering.

* Fix linting issues.

* Fix example indentation

---------

Co-authored-by: Justin Traglia <[email protected]>

* Remove deprecated testing infrastructure (#4294)

* deprecate custody game tests

* deprecate sharding tests

* add ignore to Makefile

* fix imports

* remove DAS phase

* remove sharding TODOs and mention

* create deprecated state functions for sharding

* linting changes

* remove deprecated tests

* remove other references

* Revert "add ignore to Makefile"

This reverts commit 5cc55f62643ca4a2d938714766f71aa3e8e5aa39.

* Update ELECTRA_FORK_EPOCH in fork.md

* Bump the actions group with 2 updates (#4299)

Bumps the actions group with 2 updates: [setuptools](https://github.com/pypa/setuptools) and [pylint](https://github.com/pylint-dev/pylint).


Updates `setuptools` from 80.0.0 to 80.3.1
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v80.0.0...v80.3.1)

Updates `pylint` from 3.3.6 to 3.3.7
- [Release notes](https://github.com/pylint-dev/pylint/releases)
- [Commits](https://github.com/pylint-dev/pylint/compare/v3.3.6...v3.3.7)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-version: 80.3.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: pylint
  dependency-version: 3.3.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Ensure presets/configs for yaml/spec match (#4297)

* Add checks to ensure presets/configs for yaml/spec match

* Simplify

* Clean up generator runner (#4301)

* Clean up generator runner

* Fix mistake

* Fix mistake when doing multiprocessing

* Refactor `kzg_7594` generator (#4296)

* Refactor `kzg_4844` generator (#4300)

* Fix two mistakes when refactoring the `kzg_4844` generator (#4302)

* Deprecate BlobSidecarsByRange/Root in Fulu (#4286)

* Bump version to v1.5.0 (#4303)

* Refactor bls generator (#4304)

* Improve generator UX (#4309)

* Refactor `gen_runner` (#4310)

* Fix typos in blob configuration comments for fulu presets (#4311)

* Introduce blob schedule (#4277)

* Bump the actions group with 2 updates (#4312)

* Clarification on custody sampling (#4251)

* Nits on custody sampling

* Update specs/fulu/das-core.md

Co-authored-by: fradamt <[email protected]>

* Update SAMPLES_PER_SLOT

* Not specifying the unit of samples

Co-authored-by: fradamt <[email protected]>

---------

Co-authored-by: fradamt <[email protected]>

* Simplify reference test generators (#4317)

* Fix assert in `run_get_committee_assignment` (#4315)

* Wrap lines at 80 characters in all markdown files

* Generate reference tests for EIP7732 & EIP7805 (#4319)

* Use latest version of uv when creating the venv (#4325)

* Fix link to das-core in fulu validator specs (#4324)

* Do import sorting with isort (#4327)

* Fix phase run decorator to skip EIP-7732 as intended (#4326)

* Update `isort` to `order_by_type = false` (#4328)

* Bump version to 1.6.0-alpha.0 (#4329)

* Add to epoch processing tests generation states before and after full epoch processing (#4155)

* State that reconstructed sidecars which are not custodied may be deleted (#4332)

* Clarify node behavior when validator custody changes (#4320)

* Bind inputs in ssz_generic reftests (#4333)

* Bump the actions group with 3 updates

Bumps the actions group with 3 updates: [pycryptodome](https://github.com/Legrandin/pycryptodome), [setuptools](https://github.com/pypa/setuptools) and [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `pycryptodome` from 3.22.0 to 3.23.0
- [Release notes](https://github.com/Legrandin/pycryptodome/releases)
- [Changelog](https://github.com/Legrandin/pycryptodome/blob/master/Changelog.rst)
- [Commits](https://github.com/Legrandin/pycryptodome/compare/v3.22.0...v3.23.0)

Updates `setuptools` from 80.4.0 to 80.7.1
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v80.4.0...v80.7.1)

Updates `mkdocs-material` from 9.6.13 to 9.6.14
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.6.13...9.6.14)

---
updated-dependencies:
- dependency-name: pycryptodome
  dependency-version: 3.23.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: setuptools
  dependency-version: 80.7.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: mkdocs-material
  dependency-version: 9.6.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>

* Run linting on pysetup directory (#4335)

* Delete unnecessary eth2spec/eip7732/__init__.py file (#4336)

* Bump the actions group with 4 updates

Bumps the actions group with 4 updates: ruamel-yaml, [setuptools](https://github.com/pypa/setuptools), [pytest-xdist](https://github.com/pytest-dev/pytest-xdist) and [mdformat-gfm-alerts](https://github.com/kyleking/mdformat-gfm-alerts).


Updates `ruamel-yaml` from 0.18.10 to 0.18.11

Updates `setuptools` from 80.7.1 to 80.8.0
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v80.7.1...v80.8.0)

Updates `pytest-xdist` from 3.6.1 to 3.7.0
- [Release notes](https://github.com/pytest-dev/pytest-xdist/releases)
- [Changelog](https://github.com/pytest-dev/pytest-xdist/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-xdist/compare/v3.6.1...v3.7.0)

Updates `mdformat-gfm-alerts` from 1.0.1 to 1.0.2
- [Release notes](https://github.com/kyleking/mdformat-gfm-alerts/releases)
- [Commits](https://github.com/kyleking/mdformat-gfm-alerts/compare/v1.0.1...v1.0.2)

---
updated-dependencies:
- dependency-name: ruamel-yaml
  dependency-version: 0.18.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: setuptools
  dependency-version: 80.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: pytest-xdist
  dependency-version: 3.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: mdformat-gfm-alerts
  dependency-version: 1.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>

* Allow custom arg parser in test generators (#4339)

* Markdown to SpecObject refactoring (#4330)

* Remove deneb/electra from blob schedule and default to electra limit (#4341)

* Set blob schedule to an empty list (#4342)

* Fix handling of multiple Python definitions in code blocks (#4344)

* Updated minimum python version to 3.10 (#4345)

Co-authored-by: Justin Traglia <[email protected]>

* Bump version to v1.6.0-alpha.1 (#4347)

* Update default shell to bail on error (#4349)

* Run linter on setup.py (#4348)

* Bump the actions group with 4 updates (#4355)

Bumps the actions group with 4 updates: ruamel-yaml, [setuptools](https://github.com/pypa/setuptools), [pytest](https://github.com/pytest-dev/pytest) and [mypy](https://github.com/python/mypy).


Updates `ruamel-yaml` from 0.18.11 to 0.18.12

Updates `setuptools` from 80.8.0 to 80.9.0
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v80.8.0...v80.9.0)

Updates `pytest` from 8.3.5 to 8.4.0
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.3.5...8.4.0)

Updates `mypy` from 1.15.0 to 1.16.0
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.15.0...v1.16.0)

---
updated-dependencies:
- dependency-name: ruamel-yaml
  dependency-version: 0.18.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: setuptools
  dependency-version: 80.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: pytest
  dependency-version: 8.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: mypy
  dependency-version: 1.16.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Add repo input to reftest generator action (#4356)

* EIP-7917: Deterministic proposer lookahead (#4190)

* Validator custody: Increase only and optional dynamic backfill. (#4357)

* Replace black/pylint/isort with ruff (#4350)

* Delete unnecessary container comments (#4358)

* Run linter on code in markdown files (#4359)

* EIP-7917: Refactor return types from List to Vector (#4361)

* Increase mainnet tests timeout to 12 hours (#4362)

* Use python 3.13 in CI actions (#4363)

* Fix epoch processing tests for proposer lookahead (#4364)

* Alias new test to blocks handler (#4365)

* Fix a few things in setup.py (#4360)

* Detect errors in reference test generator action (#4366)

* Bump version to v1.6.0-alpha.2 (#4368)

* Suggest using getBlobsV2 to get blobs/proofs

* Use getPayloadV5

* Bump the actions group with 3 updates (#4372)

* Define requirements for the blob schedule (#4370)

* CGC: Update before Fulu (#4373)

* Modify fork digest to distinguish BPO forks + add entry to ENR (#4354)

* Introduce Status v2 with `earliest_available_slot` (#4374)

* Release v1.6.0-alpha.2 (#4367)

* Delete unnecessary container comments (#4358)

* Run linter on code in markdown files (#4359)

* EIP-7917: Refactor return types from List to Vector (#4361)

* Increase mainnet tests timeout to 12 hours (#4362)

* Use python 3.13 in CI actions (#4363)

* Fix epoch processing tests for proposer lookahead (#4364)

* Alias new test to blocks handler (#4365)

* Fix a few things in setup.py (#4360)

* Detect errors in reference test generator action (#4366)

* Bump version to v1.6.0-alpha.2 (#4368)

* Suggest using getBlobsV2 to get blobs/proofs

* Use getPayloadV5

* Bump the actions group with 3 updates (#4372)

* Define requirements for the blob schedule (#4370)

* CGC: Update before Fulu (#4373)

* Modify fork digest to distinguish BPO forks + add entry to ENR (#4354)

* Introduce Status v2 with `earliest_available_slot` (#4374)

---------

Co-authored-by: Lin Oshitani <[email protected]>
Co-authored-by: Leo Lara <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Manu NALEPA <[email protected]>
Co-authored-by: Alex Stokes <[email protected]>
Co-authored-by: raulk <[email protected]>

* Add fork version to compute fork digest test cases (#4376)

* Do not wrap long lines in `config.yaml` files (#4379)

Spec configs follow a YAML subset that does not involve linebreaks,
to avoid requiring client implementations to include a full YAML lib.

When Ruamel YAML was updated recently, the default settings changed and
certain tests started to emit `config.yaml` with linebreaks. By setting
Ruamel config `width` to a larger value, previous behaviour is restored.

* EIP-7917: Add test for proposer lookahead excluding exited validators

* Add more proposer lookahead tests

* Bump the actions group with 4 updates (#4385)

Bumps the actions group with 4 updates: [marko](https://github.com/frostming/marko), [py-ecc](https://github.com/ethereum/py_ecc), [pytest-cov](https://github.com/pytest-dev/pytest-cov) and [mypy](https://github.com/python/mypy).


Updates `marko` from 2.1.3 to 2.1.4
- [Release notes](https://github.com/frostming/marko/releases)
- [Changelog](https://github.com/frostming/marko/blob/master/CHANGELOG.md)
- [Commits](https://github.com/frostming/marko/compare/v2.1.3...v2.1.4)

Updates `py-ecc` from 7.0.1 to 8.0.0
- [Release notes](https://github.com/ethereum/py_ecc/releases)
- [Changelog](https://github.com/ethereum/py_ecc/blob/main/docs/release_notes.rst)
- [Commits](https://github.com/ethereum/py_ecc/compare/v7.0.1...v8.0.0)

Updates `pytest-cov` from 6.1.1 to 6.2.1
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v6.1.1...v6.2.1)

Updates `mypy` from 1.16.0 to 1.16.1
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.16.0...v1.16.1)

---
updated-dependencies:
- dependency-name: marko
  dependency-version: 2.1.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: py-ecc
  dependency-version: 8.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
- dependency-name: pytest-cov
  dependency-version: 6.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: mypy
  dependency-version: 1.16.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix yields in new proposer lookahead test (#4386)

* Add fork choice compliance test generator (#3831)

* Replace ast.unparse() with custom parsing (#4387)

* Combine helpers into compute_time_at_slot (#4388)

* Add execution_requests to fulu.GetPayloadResponse (#4389)

* Add jtraglia's spec viewer to the readme (#4392)

* Fix test_effective_decrease_balance_updates_lookahead reftest (#4395)

* Remove dead attestation generation code (#4396)

* Align master with dev after v1.6.0-alpha.2 release mistake (#4397)

* Delete unnecessary container comments (#4358)

* Run linter on code in markdown files (#4359)

* EIP-7917: Refactor return types from List to Vector (#4361)

* Increase mainnet tests timeout to 12 hours (#4362)

* Use python 3.13 in CI actions (#4363)

* Fix epoch processing tests for proposer lookahead (#4364)

* Alias new test to blocks handler (#4365)

* Fix a few things in setup.py (#4360)

* Detect errors in reference test generator action (#4366)

* Bump version to v1.6.0-alpha.2 (#4368)

* Suggest using getBlobsV2 to get blobs/proofs

* Use getPayloadV5

* Bump the actions group with 3 updates (#4372)

* Define requirements for the blob schedule (#4370)

* CGC: Update before Fulu (#4373)

* Modify fork digest to distinguish BPO forks + add entry to ENR (#4354)

* Introduce Status v2 with `earliest_available_slot` (#4374)

---------

Co-authored-by: Lin Oshitani <[email protected]>
Co-authored-by: Leo Lara <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Manu NALEPA <[email protected]>
Co-authored-by: Alex Stokes <[email protected]>
Co-authored-by: raulk <[email protected]>

* Use get_blob_parameters in gossip block validation

* Add nightly workflow to deal with stale issues/PRs

* Bump version to v1.6.0-alpha.3

* Bump the actions group with 2 updates (#4405)

* Bump the actions group with 2 updates

Bumps the actions group with 2 updates: [pytest](https://github.com/pytest-dev/pytest) and [ruff](https://github.com/astral-sh/ruff).


Updates `pytest` from 8.4.0 to 8.4.1
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.4.0...8.4.1)

Updates `ruff` from 0.11.13 to 0.12.0
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.11.13...0.12.0)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 8.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: ruff
  dependency-version: 0.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>

* Fix imports

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Justin Traglia <[email protected]>

* Correct the docstrings for `process_execution_payload` tests with blobs (#4408)

* Fix formatting for Capella preset (#4411)

* Add support for automated releases (#4409)

* Remove unnecessary config overrides in test (#4410)

* Remove peer sampling in Fulu (#4393)

* Add some clarifications around new ENR changes (#4406)

* Clarify peering expectations when `nfd` values are different (#4407)

* `DataColumnSidecarsByRoot`: Serve for finalized epochs. (#4394)

* Test proposer lookahead initialization uses active validator set at fork (#4413)

* Add PeerDAS tests (#4391)

* Update release documentation (#4416)

* Run mdformat on all markdown files (#4417)

* Convert DAS providers section to supernodes section (#4415)

* Fix sanity test steps in release action (#4418)

* Fix sanity test steps in release action (#4419)

* Remove blobs/proofs from new PeerDAS forkchoice tests (#4421)

* Increase release action timeout to 24 hours (#4423)

* In the release action, disable sanity checks & remove sudo (#4425)

* In the release action, add back sudo (#4428)

* Remove broken link from README (#4431)

In #4317 the test generators were moved and the README was deleted.

* Remove duplicate "the" words in comments (#4430)

Description: Fix duplicate word "the" in test comments for consolidation
process in test_process_consolidation_request.py.

* Add IL committee assignment and IL signature tests (#4435)

This PR adds EIP-7805 tests that are agnostic to the upcoming spec
changes.

`get_attester_head` is changed for the sake of spec tests. In the real
world, `on_block` is called before `get_attester_head`, guaranteeing the
existence of `head_block`. However, in spec tests, many of attestation
tests run attestation functions directly without calling `on_block`. The
gimmick of fetching `head_block` only when it's necessary avoids failure
in such cases.

* Remove empty sections and unify Protocols section name (#4436)

* Fix mutable default argument anti-pattern for Random objects (#4433)

For the previous release
([commit](https://github.com/ethereum/consensus-spec-tests/commit/0fd545b2ba739479082680e3d0683bf91f8164f8)),
I noticed that many of the test files were different. I found that we
were using `rng=Random(...)` in function declarations which will not
work like we want. The core issue is that default arguments are
evaluated once when the function is defined, not each time it's called.
So when we use `rng=Random(...)` in a function declaration, that same
`Random` object instance gets shared across all function calls,
accumulating state changes. For reference, see [Mutable Default
Arguments](https://docs.python-guide.org/writing/gotchas/#mutable-default-arguments).

I tested this by running the following multiple times, confirming that
the hash was the same each time:

```bash
rm -rf ../consensus-spec-tests
make reftests preset=minimal
find ../consensus-spec-tests -type f -exec sha256sum {} + | sort | sha256sum
```

To be clear, the next release's diff will be large, but the next next
release's diff will be small 😄

* Improve the release action (#4432)

* Add gloas section in preparation for that.
* Remove invalid `sort-by: number` configuration.
* Re-enable the two sanity tests (minimal & mainnet tests).
* Add a new version check to ensure tag matches the version file.

* Bump the actions group across 1 directory with 3 updates (#4434)

* Make updates to reflect default master branch (#4437)

* Update links to the `dev` branch.
* Set `master` as the default branch in workflows.
* Update release instructions to reflect change.

* Replace outdated instance of csc with cgc (#4444)

* Bump the actions group with 2 updates (#4442)

Bumps the actions group with 2 updates:
[mypy](https://github.com/python/mypy) and
[ruff](https://github.com/astral-sh/ruff).

* Fix broken links in markdown files (#4441)

* Resolve TODOs and Improve EIP-7805 (FOCIL) Spec (#4351)

This PR resolves TODOs and improves the honest validator section of
EIP-7805 spec. It contains minimal test changes and rest of tests will
be added by the subsequent PR.

* Move inclusion list specs to new `inclusion-list.md` file (#4446)

This PR adds `inclusion-list.md` as
[suggested](https://github.com/ethereum/consensus-specs/pull/4351#pullrequestreview-3023153485)
in the previous PR. `inclusion-list.md` encapsulates
`InclusionListStore` and inclusion list handling logic. Fork-choice
store interacts with IL store via functions defined in
`inclusion-list.md`, leveraging this abstraction.

This can be considered as adding another module that is responsible of
inclusion list. To represent some of the relationship between the
fork-choice module and others in a simple diagram, it would look like
this: [Beacon chain] — [Fork-choice] — [Inclusion list].

* Make commitment deduplication in `verify_cell_kzg_proof_batch` deterministic (#4447)

We found a small issue w.r.t. the deduplication of commitments in
`verify_cell_kzg_proof_batch`:

```python
    # Create the list of deduplicated commitments we are dealing with
    deduplicated_commitments = [
        bytes_to_kzg_commitment(commitment_bytes) for commitment_bytes in set(commitments_bytes)
    ]
```

In short, using `set` to remove the duplicates is wrong as sets are
unordered objects:

```python
>>> a = [1, 3, 2, 1]
>>> list(set(a))
[1, 2, 3]
```

Because of that, between runs, `deduplicated_commitments` will be
different and so `commitment_indices`. The issue here is that the
Fiat-Shamir challenge is computed by taking this arguments and hashing
them together:

```python
def verify_cell_kzg_proof_batch_impl(
    commitments: Sequence[KZGCommitment],
    commitment_indices: Sequence[CommitmentIndex],
    cell_indices: Sequence[CellIndex],
    cosets_evals: Sequence[CosetEvals],
    proofs: Sequence[KZGProof],
) -> bool:

    ...

    # Step 1: Compute a challenge r and its powers r^0, ..., r^{num_cells-1}
    r = compute_verify_cell_kzg_proof_batch_challenge(
        commitments, commitment_indices, cell_indices, cosets_evals, proofs
    )

   ...
```

so, if between runs they change due to the non-deterministic
deduplication, so does the challenge. This breaks Fiat-Shamir because if
the prover generates a challenge $c_i$ and the verifier generates $c_j$
so that $c_i != c_j$ for the same set of inputs $S$, then proofs won't
be able to be verified, even if "correct".

Right now this is not an issue as this is used in PeerDAS as an
optimization, not like the usual two-parties setup we find in ZK.
However, for correctness, this should be addressed, as the specs are
"formally" wrong as of now.

* Make several updates to EIP-7732 spec (#4438)

This PR updates EIP-7732 in several places. It should be read commit by
commit. The list of commits is as follows

- Add a Builder withdrawal prefix `0x03` which is a compounding
validator, allow any validator to self-build for a zero value, but only
0x03 validators to build for others.
- Remove all PTC reward logic and keep the beacon committee as pre-7732.
- Add slot to the execution payload envelope (makes implementation
easier)
- Remove the payload status enumeration and simply use a boolean in the
PTCAttestation object.
- Update the payment mechanism from a direct transfer of validator
balance to a withdrawal to a specific execution layer address (a fee
recipient).
- Use the attestation data index field to signal payload availability in
attestations.
- Fix all tests

This PR does not update the forkchoice logic, that will come on a
separate PR perhaps from @fradamt

* Align section headers in `fork-choice.md` for EIP-7805 (#4449)

* Add script to check for inconsistent fork comments (#4448)

This PR adds a script (and CI check with calls the script) which
identifies "fork comments" (the [New in Fork] and [Modified in Fork]
comments) and ensures the following consistencies:

* Fork comments with EIPs must not have a dash.
* Just the way we do things. I think it's to match the python constant,
which cannot have dashes.
* Fork comments must use one of the approved actions.
  * The two actions are "New" and "Modified"; "Updated" is not allowed.
* Fork comments must be on a standalone line; not inline comments.
* The reason this matters is because the linter will break long lines
which is very ugly.

* Fix `KZG_COMMITMENT_INCLUSION_PROOF_DEPTH_EIP7732` (#4451)

Got this error when generating test vectors last night. The mainnet
value was wrong.

```
Exception: invalid inputs length: 22, vector length is: 21
```

* Update EIP-7732 fork-choice (#4450)

This PR:
- Reverts the fork-choice to today's behavior in terms of boost
(proposer boost = 40, no other boosts), and by removing (block, slot)
voting
- Starting from today's fork-choice, it allows for decoupled beacon
block and payload by working on a tree of `ForkChoiceNode`s instead of
blocks.
- A `ForkChoiceNode` has `(root, payload_status)`, where
`payload_status` is either `PENDING`, `EMPTY` or `FULL`.
Pending is for the beacon block *before making a decision on the
payload*, the other two for the payload decision. As long as a `PENDING`
`ForkChoiceNode` is chosen by `get_head`, the corresponding beacon block
is part of the canonical chain, though the payload may or may not be
part of it.
- `FULL` and `EMPTY` are considered children of the `PENDING`
`ForkChoiceNode`, so all weight from the `EMPTY`
     and `FULL` variants is inherited by the `PENDING` variant.
- the `FULL` variant is only considered if the payload is locally
available (is imported in `store.execution_payload_states`, which
requires satisfying `is_data_available`)
- When running `get_head`, we alternate choosing between beacon blocks,
i.e., `PENDING` `ForkChoiceNode`s, and then making a a decision about
the `EMPTY` and `FULL` children of the current beacon block:
```
(B, PENDING)
├── (B, EMPTY)
└── (B, FULL)

(B, PENDING)
├─→ (B, EMPTY)
│     ├─→ (C, PENDING)
│     │     ├─→ (C, EMPTY)
│     │     └─→ (C, FULL)
│     └─→ (D, PENDING)
└X→ (B, FULL) (unavailable)
```
- Still,`get_head` remains nearly identical to today, by adding a
`get_fork_choice_children` function that substitutes the current
explicit choice of children of the current `head` and abstracts away the
alternating logic of choosing between empty/full payloads and actual
beacon blocks
- `LatestMessage`s are augmented with a `payload_present` boolean
recording the payload presence indicated by (the overloading of)
`data.index` (set to `data.index == 1`). This is useful when `data.slot
> block.slot`, when the attestation expresses an opinion on the
payload's presence, as it tells us whether to assign weight to the
`EMPTY` or `FULL` variant (which also trickles down to the `PENDING`
variant since they are children of it), whereas it is irrelevant when
`data.slot == block.slot` (and should always be set to `False` because
`data.index` can only be `0` then)
- `should_extend_payload` handles the remaining decision, about the
payload status of a block *from the previous slot*, when we don't have
any regular attestations *with information about the payload*. If the
payload is locally available, the `FULL` variant is chosen:
    - Whenever a majority of the PTC has voted for it
- If the current proposer has extended anything but the EMPTY variant
In other words, the next proposer is allowed to reorg the previous
payload only if it receives less than half of the PTC votes, and
otherwise we always default to FULL

---------

Co-authored-by: Justin Traglia <[email protected]>
Co-authored-by: Potuz <[email protected]>

* Clarify payload envelope construction in EIP-7732 (#4454)

- Add specification on constructing `slot` and `execution_requests` in
execution payload envelope
- Remove spec related to `payload_withheld`

---------

Co-authored-by: Justin Traglia <[email protected]>

* Add missing new/modified prefixes to eip7732 functions (#4455)

For consistency, we should state if these functions are new or modified.

* Fix duplicate function call (#4460)

This removes the duplicate calls to `process_withdrawals`
and `process_execution_payload_header`

* eip7732: add becoming builder section (#4456)

* In `get_custody_groups`, skip computation if all groups are custodied (#4459)

A simple optimization which doesn't change anything, but worth
mentioning because not all clients do this. For supernodes which custody
everything, we can skip computing the list of custody groups and return
the full range of groups. Given that there is quite a bit of hashing
involved, this isn't exactly free.

Thanks to @nalepae for suggesting this.

* eip7732: update self build condition (#4464)

For self builder (ie `builder_index == block.proposer_index`), the
amount should be zero otherwise builder prefix is required

* Store blob schedule as a VariableDefinition in the pyspec (#4469)

We forgot to store the blob schedule as a `VariableDefinition` here.
This didn't really affect anything internally, but it prevented this
config variable from being correctly parsed by outside tooling (eg the
consensus specifications viewer).

* Bump the actions group with 3 updates (#4471)

Bumps the actions group with 3 updates:
[ruff](https://github.com/astral-sh/ruff),
[rich](https://github.com/Textualize/rich) and
[mkdocs-material](https://github.com/squidfunk/mkdocs-material).

* eip7732: fix builder pending withdrawals processing (#4470)

I think `process_withdrawals` slice assignment logic is off:
```python
  state.builder_pending_withdrawals[:processed_builder_withdrawals_count] = [
      w
      for w in state.builder_pending_withdrawals[:processed_builder_withdrawals_count]
      if not is_builder_payment_withdrawable(state, w)
  ]
```
The left side creates a slice of exactly N items, but the filtered list
comprehension on the right could produce fewer items I think what should
have happened is `processed_builder_withdrawals_count` tracks how many
withdrawals were processed from the queue (regardless of success), and
we should remove exactly that many items from the front of the queue.
This is similar to how `processed_partial_withdrawals_count` work

* Fast test_full_attestations_one_validator_one_gwei (#4462)

Fixes https://github.com/ethereum/consensus-specs/issues/4318 

Now it takes seconds.

Before merging we need to consider:
 + With this version the one gwei validator is not the only validator.
+ As one gwei makes it less likely to be chosen for the committee, with
a different pseudo-random seed this test could fail.

The previous version would never fail because the one gwei validator was
the only one, so it was warrantied to be part of the committee. However,
the previous version could take arbitrary time depending on the
pseudo-random seed.

So this approach has its pros and cons with respect to previous version.

* eip7732: remove duplicate merge transition complete testing section (#4478)

* Update EIP-7732:  Add boolean to PayloadAttestationData (#4473)

This is just a placeholder EIP to have the right data structure. This
change should entail changes in the following places but those can only
be made after rebasing on top of Fulu and #3510

- The honest validator guide should include two separate deadlines for
the PTC, on payload available and data available.
- The honest validator guide should give instructions on how to set the
new data available flag to true if the data was available at the last
deadline and set the payload available flag if the payload was available
at the first deadline
- Forkchoice should update `get_proposer_head` with the payload and data
timeliness flags.

* Add EIP-7916 ProgressiveList specs and tests (#4445)

EIP-7916 defines a new SSZ type for lists of unknown length.

Historically, we used List[type, N] with very large N values for this:

- This wastes hashes, as log(N) hashes are still required even if only a
single item is present. This is especially bad when nesting lists.

- Generalized indices break, as is what happened when the Attestation
count got reduced in Electra, introducing maintenance burden to apps
that possibly involves security countil for upgrading smart contracts.

This PR adds specs and tests for EIP-7916 which fixes these issues,
making the new list type available to EIP implementations in _features.

- https://eips.ethereum.org/EIPS/eip-7916

* Improve some eip7732 p2p gossip validations (#4474)

* Simplify some statements.
* Move `header.builder_index` check before withdrawal creds check.
* Fix `header.value` check; clarify that it's excess balance &
`MIN_ACTIVATION_BALANCE` not `MIN_BUILDER_BALANCE`.
* Fix joined list item for `header.parent_block_root`.

* eip7732: add process execution payload header tests (#4457)

* eip7732: add process payload att tests (#4463)

This PR adds the following payload attestation tests
  - Valid basic attestations (payload present/not present)
  - Partial PTC participation
  - Invalid beacon block root/slot timing
  - Invalid signatures and edge cases

* eip7732: fix a typo in builder.md (#4483)

This PR fixes a typo `state.last_block_hash` to
`state.latest_block_hash`.

* eip7732: fix quorum calc to avoid double-counting (#4481)

* Use frozendict with list-of-records (#4486)

It was like this before but somehow got removed. When there's a
non-empty blob schedule, entries must be a frozendict so that it can be
hashed.

* Bump the actions group with 2 updates (#4487)

Bumps the actions group with 2 updates:
[mypy](https://github.com/python/mypy) and
[ruff](https://github.com/astral-sh/ruff).

* Make NUMBER_OF_COLUMNS a preset (#4485)

[As discussed on
discord](https://discord.com/channels/595666850260713488/1401858592264552501),
`NUMBER_OF_COLUMNS` should be a preset, not a configuration value. It's
technically an alias of `CELLS_PER_EXT_BLOB` (preset) which is used in
KZG libraries. I've also added the latter to the preset files as well so
that it is more clear that it's an alias.

* eip7805: remove unnecessary equivocation filter (#4492)

This PR removes unnecessary equivocation filter. The idea was to make
sure we don't include any ILs from equivocators but
`process_inclusion_list` already handles this requirement. (See L17 of
`process_inclusion_list`.)

* Add EIP-7916 ProgressiveBitlist specs and tests (#4480)

This follows up on #4445 to extend EIP-7916 support for bitlists, making
the `ProgressiveBitlist` type available to implementations in _features.

- https://eips.ethereum.org/EIPS/eip-7916

* eip7805: fix cutoff config typo (#4490)

This PR fixes cutoff config typo.

* Make PTC selection balance-weighted (#4488)

1. The first commit changes the sampling logic in `get_ptc` to be
balance weighted, for security reasons (see discord discussion starting
[here](https://discord.com/channels/595666850260713488/874767108809031740/1400916536197251082)).
Unlike for sync-committees and proposers, it doesn't use a new shuffle
to select candidate indices to which a balance-weighted acceptance
probability is applied. Instead, to minimize computational load, it just
reuses the existing committee shuffle, starting from the committees of
the PTC's `slot` and moving forward from there (wrapping around if
necessary).
2. The second commit refactors all functions that do balance weighted
sampling, through helpers `compute_balance_weighted_selection` and
`compute_balance_weighted_acceptance`:
- `compute_balance_weighted_acceptance` takes care of the
balance-weighted acceptance (whether a candidate index is accepted or
not, with probability proportional to its balance)
- `compute_balance_weighted_selection` takes care of the whole selection
process, going over the given `indices` and selecting them with
balance-weighted probability until the required number has been
selected. It has a parameter `shuffle_indices` which indicates whether
`indices` should be shuffled or not. This is `False` for the PTC, since
we are just reusing the existing shuffle
3. The other commits remove `state.latest_full_slot`, which is unused
after the introduction of `state.execution_payload_availability`, and
fixes a small mistake in `fork-choice.md`

If people think the refactor is unnecessary, we could just go with the
first commit. On the one end, the refactor might make it a bit more
annoying to change the selection logic for just some of these in the
future. On the other hand, there is currently a lot of code duplication
and lack of readability, and `get_ptc` is in particular quite hard to
understand because there's a lot going on in it.

Another option could be a smaller refactor with just
`compute_balance_weighted_acceptance`, which should be much less likely
to be customized by different selection processes (whereas
`compute_balance_weighted_selection` already has some customization with
`shuffle_indices`, and there's other possibilities like fixed size or
not)

* Bump version to v1.6.0-alpha.4 (#4494)

* Disable payload attestation tests on mainnet (#4495)

These are currently broken. Will disable on mainnet for now, so I can
make a release.

* eip7732: do not deduplicate `indexed_payload_attestations` (#4496)

`attesting_indices` for a payload attestation should be able to contain
duplicate indices if the PTC does (which it can, as of #4488), to verify
an aggregate signature/pubkey that contains some signature/pubkey
multiple times. This is also the behavior for sync committees, as
opposed to including a single signature/pubkey even for duplicate
indices, and having to deal with duplication more explicitly (e.g.
`aggregation_bits` could be less than `PTC_SIZE`, counting would have to
be with multiplicity).

Tests are fixed by making `prepare_signed_payload_attestation` deal with
duplicates in `attesting_indices` when setting `aggregation_bits`, by
enforcing 1 index = 1 bit set (if a validator index appears `n` times in
the PTC but only `m < n` in `attesting_indices`, only `m` bits are set)

* Replace INTERVALS_PER_SLOT with explicit slot component times (#4476)

This PR is an alternative to #3510.

* Deprecate `SECONDS_PER_SLOT` in favor of `SLOT_DURATION_MS`.
* Deprecate `INTERVALS_PER_SLOT` in favor of config vars in basis points.

Instead of presets in millisecond units, this PR defines slot component
durations (eg `ATTESTATION_DUE_BPS`) with config variables where the
unit is basis points (a common way to describe percentages). This will
make it easier to test different slot times and fine-tune slot component
durations. To test a different slot time, change `SLOT_DURATION_MS` and
the component times will automatically adjust since they are percentages
of `SLOT_DURATION_MS`.

* Organize configuration sections & add missing comments (#4497)

* `MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA` &
`MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT` should have been in the
validator cycle section.
* There should have been a deneb section for
`MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT`.
* The comment for `ATTESTATION_SUBNET_COUNT` was wrong.
* Add missing comments for newer upgrades (including Fulu).

* Remove time conversion comments from configs/presets (#4498)

Now that we're considering changing the slot duration (EIP7782), we
should remove time conversion comments (eg 256 epochs is ~27 hours) so
these aren't misleading. My other changes are little nits, mostly for
consistency.

* Bump the actions group with 3 updates (#4499)

Bumps the actions group with 3 updates:
[marko](https://github.com/frostming/marko),
[deepdiff](https://github.com/seperman/deepdiff) and
[ruff](https://github.com/astral-sh/ruff).

* eip7732: use correct late block cutoff time in proposer boost tests (#4501)

These three tests were failing under the mainnet preset. The issue is
that we were using `ATTESTATION_DUE_BPS` instead of
`ATTESTATION_DUE_BPS_EIP7732` in eip7732.

* eip7805: rebase spec onto fulu (#4502)

This PR sets EIP7805's previous fork to Fulu & makes other necessary
changes.

PS: It also makes the `is_data_available` comment consistent across all
specs.

* eip7805: make variable name more coherent (#4505)

* eip7732: rebase spec onto fulu (#4503)

This PR rebases eip7732 specs from electra to fulu.

It also fixes a few small inconsistencies I noticed while reviewing.

Mainnet tests pass too:

<img width="916" height="354" alt="image"
src="https://github.com/user-attachments/assets/7479ae8f-a0a5-450b-9ce1-a65f6bcbe254"
/>

* eip7732: add tests for builder pending payments processing (#4475)

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: Justin Traglia <[email protected]>
Co-authored-by: Gabriel Astieres <[email protected]>
Co-authored-by: Jimmy Chen <[email protected]>
Co-authored-by: Lion - dapplion <[email protected]>
Co-authored-by: fradamt <[email protected]>
Co-authored-by: fradamt <[email protected]>
Co-authored-by: Justin Traglia <[email protected]>
Co-authored-by: Alex Stokes <[email protected]>
Co-authored-by: Manu NALEPA <[email protected]>
Co-authored-by: NC <[email protected]>
Co-authored-by: Tyler <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: JihoonSong <[email protected]>
Co-authored-by: Mikhail Kalinin <[email protected]>
Co-authored-by: Barnabas Busa <[email protected]>
Co-authored-by: Ben Edgington <[email protected]>
Co-authored-by: Derek Guenther <[email protected]>
Co-authored-by: Mehdi AOUADI <[email protected]>
Co-authored-by: Cypher Pepe <[email protected]>
Co-authored-by: Michel Simonot <[email protected]>
Co-authored-by: Wenceslas Sanchez <[email protected]>
Co-authored-by: SunnysidedJ <[email protected]>
Co-authored-by: Leo Lara <[email protected]>
Co-authored-by: Pop Chunhapanya <[email protected]>
Co-authored-by: Alex Vlasov <[email protected]>
Co-authored-by: Lin Oshitani <[email protected]>
Co-authored-by: raulk <[email protected]>
Co-authored-by: Etan Kissling <[email protected]>
Co-authored-by: Agnish Ghosh <[email protected]>
Co-authored-by: Potuz <[email protected]>
Co-authored-by: CrazyFrog <[email protected]>
Co-authored-by: kilavvy <[email protected]>
Co-authored-by: nethoxa <[email protected]>
Co-authored-by: Toni Wahrstätter <[email protected]>
Co-authored-by: terence <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
eip7805 FOCIL
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants