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

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