Skip to content

Conversation

jimmygchen
Copy link
Contributor

Add Distributed Blob Publishing to the Fulu networking spec, and move the Deneb getBlobs section to the gossip subsection, since it's related to gossip publishing.

Some additional context I posted in the #peerdas-testing Discord channel, along with the rationale behind why full nodes should also publish their custody columns:

While spec'ing out Distributed Blob Publishing with @pawanjay176, we realised that Lighthouse's full node behaviour may impact data column propagation. Currently, Lighthouse full nodes retrieve EL blobs and compute columns, then import them. They also add these columns to the "gossip seen cache", but full nodes don't attempt to publish them at all.

This hurts propagation because if the node later receives the same columns via gossip, it will IGNORE them as they're already in the seen cache. That means the node doesn’t forward them, effectively halting propagation of those data columns to the rest of the network.

We'll need to change this behaviour so that nodes always attempt to publish columns they haven't seen on their subscribed gossip data column topics - in line with the requirements in this PR: #3864

# Conflicts:
#	specs/deneb/p2p-interface.md
@jimmygchen jimmygchen force-pushed the distributed-blob-publishing branch from da45c73 to ebec514 Compare March 21, 2025 06:58
Copy link
Member

@dapplion dapplion left a comment

Choose a reason for hiding this comment

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

Usage of engine_getBlobsV1 directly affects the health of the network as:

  • It relaxes bandwidth requirements for proposers: aligns the goal to support solo stakers
  • Improves the over network's time to head, resulting in higher head vote accuracy

That's why I suggest we change MAY to SHOULD regarding the usage of this feature

Honest nodes SHOULD query `engine_getBlobsV1` as soon as they receive a valid gossip block that contains data, and import the returned blobs.

When clients use the local execution layer to retrieve blobs, they MUST behave as if the corresponding `blob_sidecar` had been received via gossip. In particular they MUST:
* publish the corresponding `blob_sidecar` on the `blob_sidecar_{subnet_id}` subnet.

Choose a reason for hiding this comment

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

Do we still need to publish blob_sidecar after Fulu? My understanding is that after it'll only be data column sidecars?

Copy link
Contributor Author

@jimmygchen jimmygchen Mar 24, 2025

Choose a reason for hiding this comment

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

No we don't need to publsih blob_sidecars after Fulu. This is the deneb specification - I've only moved this section (from RPC to gossip) without modification.

@jtraglia jtraglia added the fulu label Mar 24, 2025
@@ -204,6 +205,16 @@ The following validations MUST pass before forwarding the `sidecar: DataColumnSi

*Note:* In the `verify_data_column_sidecar_inclusion_proof(sidecar)` check, for all the sidecars of the same block, it verifies against the same set of `kzg_commitments` of the given beacon block. Client can choose to cache the result of the arguments tuple `(sidecar.kzg_commitments, sidecar.kzg_commitments_inclusion_proof, sidecar.signed_block_header)`.

###### Distributed Blob Publishing using blobs retrieved from local execution layer client

Honest nodes SHOULD query `engine_getBlobsV2` as soon as they receive a valid `beacon_block` or `data_column_sidecar` from gossip. If ALL blobs matching `kzg_commitments` are retrieved, they should convert the response to data columns, and import the result.
Copy link
Contributor

Choose a reason for hiding this comment

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

I've concerns on requiring it from all. If your custody requirement is just 4, it sounds like too much to follow all these rules and spend computation power. I'd bound it to supernodes only.

Copy link
Contributor

Choose a reason for hiding this comment

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

Also home staker on ADSL wouldn't be happy to try to publish all DataColumns with 48, 64 etc blobs

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Full nodes won't actually send all data columns - they only send data columns on topics they're subscribed to. This is the same behaviour as if you receive a data column via gossip - you'd spend the bandwidth to propagate it to mesh peers.

If the node ever add the columns to the "gossip seen cache" without publishing / forwarding the column, it would stop propagation of the columns to the rest of the network.

re 1st point about computing columns - proofs will no longer be computed in the CL, so this would be a cheap operation, and potentially makes the block available sooner than waiting for columns to arrive from gossip.

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.

LGTM, thanks all!


Implementers are encouraged to leverage this method to increase the likelihood of incorporating and attesting to the last block when its proposer is not able to publish data columns on time.

When clients use the local execution layer to retrieve blob and compute data columns, they MUST behave as if the imported `data_column_sidecar` had been received via gossip. Note that this only applies to the data columns gossip topics they are subscribed to - specifically, the node’s assigned custody columns. In particular, clients MUST:

Choose a reason for hiding this comment

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

@jimmygchen i would like clarify on this statement. when full node participate in distributed blob publishing, does the node publish only its custody columns, or plus some extra sampling columns? since full node also subscribe those extra sampling columns subnets, not only custody subnets

Copy link
Member

Choose a reason for hiding this comment

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

Hey @hangleang, I can try to help with this. The full node would only publish the data column sidecars to the subnets for which it is custodying, which is determined by get_custody_groups .

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks @jtraglia - I realise what I wrote there isn't right for full nodes without validators, the following sentence should be removed / replaced:

specifically, the node’s assigned custody columns.

Because under subnet sampling, a full node without validators would subscribe to 8 column topics but only custody 4 columns - and distributed publishing should apply to all subscribed column topics to make sure columns are propagated accordingly.

Copy link
Member

Choose a reason for hiding this comment

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

Oh I see. Then I misunderstood it too 😅 good question @hangleang!

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Updated in 43892f0, hope this makes sense:

When clients use the local execution layer to retrieve blob and compute data columns, they MUST behave as if the imported `data_column_sidecar` had been received via gossip. In particular, clients MUST:
* Publish the corresponding `data_column_sidecar` on the `data_column_sidecar_{subnet_id}` topic **if and only if** they are **subscribed** to it, either due to custody requirement or additional sampling.
* Update gossip rule related data structures (i.e. update the anti-equivocation cache).

@jtraglia
Copy link
Member

@fradamt I think would be a good time to add the updated get_data_column_sidecars and get_data_column_sidecars_from_block functions we chatted about on discord.

Reference: https://discord.com/channels/595666850260713488/1252403418941624532/1352668148175737015

@fradamt
Copy link
Contributor

fradamt commented Mar 26, 2025

@fradamt I think would be a good time to add the updated get_data_column_sidecars and get_data_column_sidecars_from_block functions we chatted about on discord.

Reference: https://discord.com/channels/595666850260713488/1252403418941624532/1352668148175737015

I decided to add get_data_column_sidecars_from_column_sidecar as well, but feel free to remove it and just leave the other two, I don't have a strong opinion.

Copy link
Contributor Author

@jimmygchen jimmygchen left a comment

Choose a reason for hiding this comment

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

The new changes look good! Thanks @jtraglia and @fradamt 🙏

Copy link
Member

@ralexstokes ralexstokes left a comment

Choose a reason for hiding this comment

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

left a comment to consider clarifying some text, but otherwise lgtm

Co-authored-by: Alex Stokes <[email protected]>
@jtraglia jtraglia merged commit 420adfb into ethereum:dev Mar 28, 2025
13 checks passed
mergify bot pushed a commit to sigp/lighthouse that referenced this pull request Apr 8, 2025
Previously only supernode contributes to data column publishing in Lighthouse.

Recently we've [updated the spec](ethereum/consensus-specs#4183) to have full nodes publishing data columns as well, to ensure all nodes contributes to propagation.

This also prevents already imported data columns from being imported again (because we don't "observe" them), and ensures columns that are observed in the [gossip seen cache](https://github.com/sigp/lighthouse/blob/d60c24ef1cc0b5dfa930e1dd4fc85abc29e5fc4c/beacon_node/beacon_chain/src/data_column_verification.rs#L492) are forwarded to its peers, rather than being ignored.
Rose2161 pushed a commit to Rose2161/consensus-specs that referenced this pull request Aug 18, 2025
* Add always_bls decorator to test_process_pending_deposits_multiple_for_new_validator (ethereum#4121)

* In process_registry_updates, change two ifs to elifs (ethereum#4104)

* Basic validator custody (ethereum#3871)

* Bump version to 1.5.0-beta.2 (ethereum#4125)

* Add python version to circleci venv key (ethereum#4126)

* test: Cover signature_slot tiebreaker in is_better_update

* spec: Add comment to clarify tiebreaker for signature slots in is_better_update function

* Add back `compute_cells` function

* feedback

* Update function doc

Co-authored-by: George Kadianakis <[email protected]>

* Add clarifications regarding SSZ-snappy length prefix

* Do not double build pyspec

* For the most part, rename whisk to eip7441

* Rename test_whisk to test_eip7441

* Fix lint

* Do not print "building eth2spec"

* Remove WHISK_ prefixes

* as per feedback

* Remove python version from circleci cache key (ethereum#4134)

* Add light client sync test for forced update before update timeout (ethereum#4127)

* Move deprecated specs to new directory

* Fix typos

* Fix broken link polynomial-commitments-sampling.md (ethereum#4140)

* Simplify build system for computed constants

When type definitions depend on preset values, those preset values have
to be manually specified in `hardcoded_custom_type_dep_constants` in a
manual and error prone way. By using heuristics similar to other parts
of the spec builder, that can be automated so that computed constants
are automatically generated _after_ preset values are emitted. This also
makes it clearer which constants are pure, and which constants depend on
specific preset values being used.

* Use correct division kind in Fulu

* Define PAYLOAD_TIMELY_THRESHOLD with int division

* Cast CELLS_PER_EXT_BLOB to an int in a few spots

* Fix list presentation in rendered specifications (ethereum#4156)

* Fix typos raised in another PR

* Fix some nits with bellatrix p2p formatting

* Dedent line

* Add EIP-7805 (FOCIL) specs (ethereum#4003)

* Add consolidation request test with 0x00 source credentials (ethereum#4162)

* Bump version to v1.5.0-beta.3 (ethereum#4164)

* Change Store.inclusion_list from List to Set (ethereum#4165)

* EIP-7732 current fork spectests (ethereum#3854)

* Test blob_kzg_commitments_merkle_proof with different blob counts (ethereum#4161)

* Update canonical network names for Hoodi (ethereum#4166)

* Improve readme and remove docker on tests (ethereum#4178)

* Create honest validator specs for Fulu (ethereum#4135)

* Stop running circleci checks (ethereum#4192)

* chore: pinning github actions versions (ethereum#4193)

* Update GitHub Actions in .github/workflows/docs.yml to use pinned hashes

* Update GitHub Actions in .github/workflows/generate_vectors.yml to use pinned hashes

* Update GitHub Actions in .github/workflows/run-tests.yml to use pinned hashes

* feat(ci): add dependabot to check for github-actions updates weekly

* Bump the actions group with 3 updates (ethereum#4194)

Bumps the actions group with 3 updates: [actions/checkout](https://github.com/actions/checkout), [actions/setup-python](https://github.com/actions/setup-python) and [actions/cache](https://github.com/actions/cache).


Updates `actions/checkout` from 3.6.0 to 4.2.2
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v3.6.0...11bd719)

Updates `actions/setup-python` from 4.7.1 to 5.4.0
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](actions/setup-python@v4.7.1...4237552)

Updates `actions/cache` from 2 to 4
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](actions/cache@8492260...5a3ec84)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
- dependency-name: actions/cache
  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>

* Add weekly dependabot check for python dependencies (ethereum#4110)

* Bump mkdocs-awesome-pages-plugin from 2.8.0 to 2.10.1 (ethereum#4196)

Bumps [mkdocs-awesome-pages-plugin](https://github.com/lukasgeiter/mkdocs-awesome-pages-plugin) from 2.8.0 to 2.10.1.
- [Release notes](https://github.com/lukasgeiter/mkdocs-awesome-pages-plugin/releases)
- [Commits](lukasgeiter/mkdocs-awesome-nav@v2.8.0...v2.10.1)

---
updated-dependencies:
- dependency-name: mkdocs-awesome-pages-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

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

* Bump pytest from 8.3.4 to 8.3.5 (ethereum#4197)

Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.3.4 to 8.3.5.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](pytest-dev/pytest@8.3.4...8.3.5)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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

* Bump mkdocs from 1.4.2 to 1.6.1 (ethereum#4198)

Bumps [mkdocs](https://github.com/mkdocs/mkdocs) from 1.4.2 to 1.6.1.
- [Release notes](https://github.com/mkdocs/mkdocs/releases)
- [Commits](mkdocs/mkdocs@1.4.2...1.6.1)

---
updated-dependencies:
- dependency-name: mkdocs
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

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

* Add fork.md for eip7805 (ethereum#4191)

* Add fork.md for eip7805

* Fix table & remove unnecessary section

* Add electra import

---------

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

* Bump trie from 3.0.1 to 3.1.0 (ethereum#4201)

Bumps [trie](https://github.com/ethereum/py-trie) from 3.0.1 to 3.1.0.
- [Changelog](https://github.com/ethereum/py-trie/blob/main/CHANGELOG.rst)
- [Commits](ethereum/py-trie@v3.0.1...v3.1.0)

---
updated-dependencies:
- dependency-name: trie
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

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

* Bump py-ecc from 6.0.0 to 7.0.1 (ethereum#4202)

Bumps [py-ecc](https://github.com/ethereum/py_ecc) from 6.0.0 to 7.0.1.
- [Release notes](https://github.com/ethereum/py_ecc/releases)
- [Changelog](https://github.com/ethereum/py_ecc/blob/main/docs/release_notes.rst)
- [Commits](ethereum/py_ecc@v6.0.0...v7.0.1)

---
updated-dependencies:
- dependency-name: py-ecc
  dependency-type: direct:production
  update-type: version-update:semver-major
...

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

* Group all dependabot python upgrades (ethereum#4204)

* Update BlobsBundle for Fulu (ethereum#4187)

* Clarify validator custody updates (ethereum#4188)

* Fix some comments (ethereum#4209)

Signed-off-by: threehonor <[email protected]>

* Bump the actions group with 11 updates (ethereum#4207)

* Bump the actions group with 11 updates

Bumps the actions group with 11 updates:

| Package | From | To |
| --- | --- | --- |
| [lru-dict](https://github.com/amitdev/lru-dict) | `1.2.0` | `1.3.0` |
| [marko](https://github.com/frostming/marko) | `1.0.2` | `2.1.2` |
| [pycryptodome](https://github.com/Legrandin/pycryptodome) | `3.21.0` | `3.22.0` |
| ruamel-yaml | `0.17.21` | `0.18.10` |
| [setuptools](https://github.com/pypa/setuptools) | `75.8.0` | `78.0.2` |
| [codespell](https://github.com/codespell-project/codespell) | `2.4.0` | `2.4.1` |
| [flake8](https://github.com/pycqa/flake8) | `5.0.4` | `7.1.2` |
| [mypy](https://github.com/python/mypy) | `0.981` | `1.15.0` |
| [filelock](https://github.com/tox-dev/py-filelock) | `3.17.0` | `3.18.0` |
| [pathos](https://github.com/uqfoundation/pathos) | `0.3.0` | `0.3.3` |
| [mkdocs-material](https://github.com/squidfunk/mkdocs-material) | `9.1.5` | `9.6.9` |


Updates `lru-dict` from 1.2.0 to 1.3.0
- [Release notes](https://github.com/amitdev/lru-dict/releases)
- [Commits](amitdev/lru-dict@v1.2.0...v1.3.0)

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

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

Updates `ruamel-yaml` from 0.17.21 to 0.18.10

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

Updates `codespell` from 2.4.0 to 2.4.1
- [Release notes](https://github.com/codespell-project/codespell/releases)
- [Commits](codespell-project/codespell@v2.4.0...v2.4.1)

Updates `flake8` from 5.0.4 to 7.1.2
- [Commits](PyCQA/flake8@5.0.4...7.1.2)

Updates `mypy` from 0.981 to 1.15.0
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](python/mypy@v0.981...v1.15.0)

Updates `filelock` from 3.17.0 to 3.18.0
- [Release notes](https://github.com/tox-dev/py-filelock/releases)
- [Changelog](https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst)
- [Commits](tox-dev/filelock@3.17.0...3.18.0)

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

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

---
updated-dependencies:
- dependency-name: lru-dict
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: marko
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
- dependency-name: pycryptodome
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: ruamel-yaml
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: setuptools
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
- dependency-name: codespell
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: flake8
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
- dependency-name: mypy
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
- dependency-name: filelock
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: pathos
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
...

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

* Fix title access for marko

* Fix indentation

* Add mypy bandaid to fix linter

---------

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]>

* Fix a small bug in a pending consolidation test (ethereum#4217)

* Update fork trigger sections (ethereum#4208)

* Use consistent note style (ethereum#4224)

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

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

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

* Add Distributed Blob Publishing to Fulu networking spec (ethereum#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 (ethereum#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 (ethereum#4218)

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

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

* Add full_pending_withdrawals_but_first_skipped_* tests (ethereum#4237)

* Add multiple_pending_deposits_same_pubkey_different_signature test (ethereum#4238)

* Add withdrawal_and_consolidation_effective_balance_updates test (ethereum#4239)

* Bump actions/setup-python from 5.4.0 to 5.5.0 in the actions group (ethereum#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](actions/setup-python@4237552...8d9ed9a)

---
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 (ethereum#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](pypa/setuptools@v78.0.2...v78.1.0)

Updates `flake8` from 7.1.2 to 7.2.0
- [Commits](PyCQA/flake8@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](squidfunk/mkdocs-material@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 (ethereum#4231)

* Adds test that affects the proposer selection (ethereum#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 (ethereum#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 (ethereum#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 (ethereum#4246)

* Fix the full consolidation queue test (ethereum#4248)

* Bump the actions group with 3 updates (ethereum#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](frostming/marko@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](pytest-dev/pytest-cov@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](squidfunk/mkdocs-material@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 (ethereum#4250)

* Update WS period computation for Electra (ethereum#4179)

* Add `withdrawal_requests_when_pending_withdrawal_queue_is_full` test (ethereum#4252)

* Clean up electra presets (ethereum#4254)

* feat: schedule electra for mainnet (ethereum#4258)

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

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

* Bump actions/setup-python from 5.4.0 to 5.5.0 in the actions group (ethereum#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](actions/setup-python@4237552...8d9ed9a)

---
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 (ethereum#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](pypa/setuptools@v78.0.2...v78.1.0)

Updates `flake8` from 7.1.2 to 7.2.0
- [Commits](PyCQA/flake8@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](squidfunk/mkdocs-material@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 (ethereum#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 (ethereum#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 (ethereum#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 (ethereum#4246)

* Fix the full consolidation queue test (ethereum#4248)

* Bump the actions group with 3 updates (ethereum#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](frostming/marko@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](pytest-dev/pytest-cov@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](squidfunk/mkdocs-material@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 (ethereum#4250)

* Update WS period computation for Electra (ethereum#4179)

* Add `withdrawal_requests_when_pending_withdrawal_queue_is_full` test (ethereum#4252)

* Clean up electra presets (ethereum#4254)

* feat: schedule electra for mainnet (ethereum#4258)

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

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

* Cleanup presets and configs (ethereum#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 (ethereum#4264)

* Update inclusion proof depth for mainnet

* Disable two fork-choice tests for now

* Remove unused is_previous_epoch_justified function (ethereum#4269)

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

* Simplify specification tables in main readme (ethereum#4271)

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

* Add various tests cases for electra (ethereum#4265)

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

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

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

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

* Add eip7805 presets

* Move params to presets

* Move IL committee domain to constant (ethereum#4276)

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

* Fix bug in electra withdrawals processing (ethereum#4281)

* Fix a couple broken links (ethereum#4279)

* Bump the actions group with 3 updates (ethereum#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](pypa/setuptools@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](uqfoundation/pathos@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](squidfunk/mkdocs-material@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 (ethereum#4284)

* Mark electra as stable (ethereum#4285)

* Fix some small, unrelated nits

* Remove electra work-in-progress notes

* Move electra to stable table

* Add two new custody group tests (ethereum#4290)

* Remove unnecessary sort in `compute_columns_for_custody_group` (ethereum#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 (ethereum#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](actions/setup-python@8d9ed9a...a26af69)

---
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 (ethereum#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](pypa/setuptools@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 (ethereum#4291)

* Add ability to run generators for specific tests (ethereum#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 (ethereum#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 5cc55f6.

* Update ELECTRA_FORK_EPOCH in fork.md

* Bump the actions group with 2 updates (ethereum#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](pypa/setuptools@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](pylint-dev/pylint@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 (ethereum#4297)

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

* Simplify

* Clean up generator runner (ethereum#4301)

* Clean up generator runner

* Fix mistake

* Fix mistake when doing multiprocessing

* Refactor `kzg_7594` generator (ethereum#4296)

* Refactor `kzg_4844` generator (ethereum#4300)

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

* Deprecate BlobSidecarsByRange/Root in Fulu (ethereum#4286)

* Bump version to v1.5.0 (ethereum#4303)

* Refactor bls generator (ethereum#4304)

* Improve generator UX (ethereum#4309)

* Refactor `gen_runner` (ethereum#4310)

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

* Introduce blob schedule (ethereum#4277)

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

* Clarification on custody sampling (ethereum#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 (ethereum#4317)

* Fix assert in `run_get_committee_assignment` (ethereum#4315)

* Wrap lines at 80 characters in all markdown files

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

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

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

* Do import sorting with isort (ethereum#4327)

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

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

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

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

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

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

* Bind inputs in ssz_generic reftests (ethereum#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](Legrandin/pycryptodome@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](pypa/setuptools@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](squidfunk/mkdocs-material@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 (ethereum#4335)

* Delete unnecessary eth2spec/eip7732/__init__.py file (ethereum#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](pypa/setuptools@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](pytest-dev/pytest-xdist@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](KyleKing/mdformat-gfm-alerts@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 (ethereum#4339)

* Markdown to SpecObject refactoring (ethereum#4330)

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

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

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

* Updated minimum python version to 3.10 (ethereum#4345)

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

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

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

* Run linter on setup.py (ethereum#4348)

* Bump the actions group with 4 updates (ethereum#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](pypa/setuptools@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](pytest-dev/pytest@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](python/mypy@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 (ethereum#4356)

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

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

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

* Delete unnecessary container comments (ethereum#4358)

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

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

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

* Use python 3.13 in CI actions (ethereum#4363)

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

* Alias new test to blocks handler (ethereum#4365)

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

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

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

* Suggest using getBlobsV2 to get blobs/proofs

* Use getPayloadV5

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

* Define requirements for the blob schedule (ethereum#4370)

* CGC: Update before Fulu (ethereum#4373)

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

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

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

* Do not wrap long lines in `config.yaml` files (ethereum#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 (ethereum#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](frostming/marko@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](ethereum/py_ecc@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](pytest-dev/pytest-cov@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](python/mypy@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 (ethereum#4386)

* Add fork choice compliance test generator (ethereum#3831)

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

* Combine helpers into compute_time_at_slot (ethereum#4388)

* Add execution_requests to fulu.GetPayloadResponse (ethereum#4389)

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

* Fix test_effective_decrease_balance_updates_lookahead reftest (ethereum#4395)

* Remove dead attestation generation code (ethereum#4396)

* 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 (ethereum#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](pytest-dev/pytest@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](astral-sh/ruff@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 (ethereum#4408)

* Fix formatting for Capella preset (ethereum#4411)

* Add support for automated releases (ethereum#4409)

* Remove unnecessary config overrides in test (ethereum#4410)

* Remove peer sampling in Fulu (ethereum#4393)

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

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

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

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

* Add PeerDAS tests (ethereum#4391)

* Update release documentation (ethereum#4416)

* Run mdformat on all markdown files (ethereum#4417)

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

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

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

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

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

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

---------

Signed-off-by: dependabot[bot] <[email protected]>
Signed-off-by: threehonor <[email protected]>
Co-authored-by: Bhargava Shastry <[email protected]>
Co-authored-by: Justin Traglia <[email protected]>
Co-authored-by: fradamt <[email protected]>
Co-authored-by: Justin Traglia <[email protected]>
Co-authored-by: Enrico Del Fante <[email protected]>
Co-authored-by: George Kadianakis <[email protected]>
Co-authored-by: Rebustron <[email protected]>
Co-authored-by: Etan Kissling <[email protected]>
Co-authored-by: Hara <[email protected]>
Co-authored-by: terence <[email protected]>
Co-authored-by: Gabriel Astieres <[email protected]>
Co-authored-by: Potuz <[email protected]>
Co-authored-by: EvgeniyZh <[email protected]>
Co-authored-by: Rafael Matias <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: JihoonSong <[email protected]>
Co-authored-by: threehonor <[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: 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: 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: Agnish Ghosh <[email protected]>
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
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants