Skip to content

Progressive data structures and tests EIP-7916, EIP-8016 - #8505

Closed
michaelsproul wants to merge 14 commits into
unstablefrom
progressive-list-tests
Closed

Progressive data structures and tests EIP-7916, EIP-8016#8505
michaelsproul wants to merge 14 commits into
unstablefrom
progressive-list-tests

Conversation

@michaelsproul

@michaelsproul michaelsproul commented Dec 1, 2025

Copy link
Copy Markdown
Member

Proposed Changes

Run the EF tests for new types from EIP-7916 and EIP-8016:

  • ProgressiveList
  • ProgressiveBitList
  • Progressive containers
  • Compatible unions

The SSZ generic tests are passing if you run them without compiling the rest of Lighthouse:

cargo test -p ef_tests --release --features ef_tests -- ssz_generic

Everything else is probably broken.

Additional Info

Depends on:

Known Issues

  • The introduction of BitList<Progressive>::with_capacity has created some type inference ambiguities causing state_processing not to compile. We should probably rename this method in ethereum_ssz.
  • Haven't merged unstable since the types refactor nor the gloas-containers merge.

@michaelsproul michaelsproul added spec_change A change related to the Eth2 spec test improvement Improve tests work-in-progress PR is a work-in-progress consensus An issue/PR that touches consensus code, such as state_processing or block verification. labels Dec 1, 2025
@michaelsproul

Copy link
Copy Markdown
Member Author

I've made a bunch of progress on this, but it requires local checkouts of ethereum_ssz and tree_hash at the moment. These branches:

Progressive bitlist tests are currently not passing, need to dig into why. The derive macro for progressive containers with 1 field works though 😅

Comment on lines +389 to +397
#[derive(Debug, Clone, PartialEq, Decode, Encode, TreeHash, Deserialize)]
#[tree_hash(
struct_behaviour = "progressive_container",
active_fields(0, 0, 0, 0, 1)
)]
#[context_deserialize(ForkName)]
struct ProgressiveSingleListContainerTestStruct {
C: ProgressiveBitList,
}

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Looking for feedback on the UX of this.

I quite like this UX for progressive containers because it closely follows the spec. We can just copy the active_fields vec straight into the struct attributes.

Comment thread testing/ef_tests/src/cases/ssz_generic.rs Outdated
@michaelsproul michaelsproul changed the title EIP-7916: ProgressiveList and tests Progressive data structures and tests EIP-7916, EIP-8016 Jan 12, 2026
@Zyra-V21

Copy link
Copy Markdown

Hi @michaelsproul (cc @macladson) !! I've been mapping SSZ progressive-type support across the Rust ecosystem for downstream EL adoption. alloy is currently missing ProgressiveList<Withdrawal>, which blocks EIP-6465 in Reth, and the same dependency holds for EIP-6404 / EIP-6466. The stack here (ethereum_ssz#67, tree_hash#43, milhouse#82, this PR) covers everything needed, and per your description the ssz_generic EF tests are already passing.

Reading the four PRs together, the visible blockers seem to be:

  1. Mac's note on tree_hash#43 about flipping the tree structure to the new spec , has the spec rev landed, and is the rework still pending?
  2. The BitList<Progressive>::with_capacity type-inference issue you flagged here, plus the unstable rebase debt across the four PRs.
  3. ~24% patch-coverage gap on ethereum_ssz#67 (mostly bitfield/progressive.rs), and the compile-fail tests you were considering doc-test based.

If priorities pulled you elsewhere and you'd welcome help, I'd be glad to take on the rebase + spec-sync across the four PRs and close out those blockers. I'd do the work as draft PRs from a fork so you keep ownership of the design , happy to squash credit back to you and Mac on merge. Won't touch anything until you say go.

Two questions before I'd start:

  1. Is the spec change Mac referenced documented anywhere I can read (consensus-specs commit, EIPs PR, or design discussion)?
  2. Are there sigp-internal priorities (gloas rollout, Amsterdam timing) that should shape the order I tackle the four PRs?

Happy to move this to Discord if easier.

@michaelsproul

Copy link
Copy Markdown
Member Author

Hi @Zyra-V21 we've got it covered

@michaelsproul

Copy link
Copy Markdown
Member Author

mergify Bot pushed a commit that referenced this pull request Aug 4, 2026
## Relevant Links

- https://eips.ethereum.org/EIPS/eip-7688
- ethereum/consensus-specs#4630

## Proposed Changes

Adds the necessary types and components to support EIP-7688, along with the cargo patches to pull in the `progressive` versions of the crates in our SSZ stack.

## Testing

```yaml
participants_matrix:
  el:
    - el_type: nethermind
      el_image: ethpandaops/nethermind:master
  cl:
    - cl_type: nimbus
      cl_image: ethpandaops/nimbus-eth2:glamsterdam-devnet-7-minimal
    - cl_type: lodestar
      cl_image: ethpandaops/lodestar:glamsterdam-devnet-7
    - cl_type: lighthouse
      cl_image: ethpandaops/lighthouse:glamsterdam-devnet-7
    - cl_type: teku
      cl_image: ethpandaops/teku:glamsterdam-devnet-7

ethereum_genesis_generator_params:
  image: "ethpandaops/ethereum-genesis-generator:glamsterdam-devnet-7"
dora_params:
  image: ethpandaops/dora:glamsterdam-devnet-7

global_log_level: debug

network_params:
  preset: minimal
  gloas_fork_epoch: 1

additional_services:
  - dora
```

## Additional Info

Based on the original work by @michaelsproul in #8505

Co-authored-by: Michael Sproul <michael@sigmaprime.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

consensus An issue/PR that touches consensus code, such as state_processing or block verification. gloas spec_change A change related to the Eth2 spec test improvement Improve tests work-in-progress PR is a work-in-progress

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants