Skip to content

Progressive list type-level limits - #10106

Merged
mergify[bot] merged 11 commits into
unstablefrom
progressive-list-type-limits
Sep 29, 2026
Merged

mergify[bot] merged 11 commits into
unstablefrom
progressive-list-type-limits

Conversation

@michaelsproul

@michaelsproul michaelsproul commented Sep 22, 2026 •

Copy link
Copy Markdown
Member

Issue Addressed

Trying to solve ProgressiveList DoS vectors.

Proposed Changes

Go back to type-level limits like before, using:

Additional Info

Several imperfections we still need to solve:

@michaelsproul

Copy link
Copy Markdown
Member Author

I need to fix the tests as well

@michaelsproul michaelsproul added the work-in-progress PR is a work-in-progress label Sep 22, 2026
@michaelsproul
michaelsproul requested a review from jxs as a code owner September 23, 2026 01:52
Comment thread beacon_node/execution_layer/src/engine_api/json_structures.rs Outdated
@michaelsproul michaelsproul added the v8.3.0 Lighthouse release early Q3 2026 label Sep 24, 2026
@michaelsproul michaelsproul added ready-for-review The code is ready for review and removed work-in-progress PR is a work-in-progress labels Sep 24, 2026
@michaelsproul

Copy link
Copy Markdown
Member Author

Ready for review. I think we can just leave the transactions unbounded for now. You can fit like 2.6M of them in the 10MB gossip limit, which is only a little higher than the 1M limit we could enforce

Comment on lines +892 to +895
let operation = match self.operation.as_ref().ok_or(Error::SkippedBls)? {
Ok(operation) => operation,
Err(error) => return compare_result::<BeaconState<E>, _>(&Err(error), &self.post),
};

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

We are accepting any error from decode when post is None A missing file or some decoder bug would pass this test silently. For bls test cases we pass the test when it matches a specific error variant. I think we should do the same here

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.

had a quick look at this and it's a bit non-trivial to differentiate the errors, so I've opened an issue:

@eserilev eserilev left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Code looks good. Ran a kurtosis network against prysm and lodestar with these changes. I got claude to try and stress test all the different bounded lists

  • Transactions and BALs: spammed transactiosn w/ large call data and contract deployments w/ generates BALs
  • data columns: spamoor w/ max blob count
  • deposit requests: burst of deposits to the deposit contract in a single block
  • withdraw and consolidations: submit withdraws and consolidations above the payload limit
  • voluntary exists & bls to execution changes: submitted batches at the limit via beacon api
  • attester and proposer slashings: turn off doppleganger protection and trigger slashings
  • Sync: stop and restart the node to trigger range sync

The network was fine. LGTM!

pub deposits: VariableList<Deposit, E::MaxDeposits>,
#[superstruct(only(Gloas, Heze), partial_getter(rename = "deposits_progressive"))]
pub deposits: ProgressiveVariableList<Deposit>,
pub deposits: ProgressiveVariableList<Deposit, E::MaxDeposits>,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Just noting this comment I left on the ssz_types PR: sigp/ssz_types#86 (comment)

@pawanjay176 pawanjay176 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM. I think the remaining issues can be addressed separately, but will wait for Michael to confirm.

@mergify

mergify Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Queued — the merge queue status continues in this comment ↓.

@michaelsproul

Copy link
Copy Markdown
Member Author

Yeah I think good to go, we can re-assess how we handle the zero limits in a bit. I'll just push a fix for the test harness thing

@michaelsproul

Copy link
Copy Markdown
Member Author

Bumped ssz_types in 1a87c12, and merged unstable

Merging

@mergify

mergify Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Merge Queue Status

This pull request spent 9 minutes 54 seconds in the queue, with no time running CI.

Reason

Pull request #10106 has been dequeued by @michaelsproul with a dequeue command

Waiting for
  • check-success=local-testnet-success
  • check-success=test-suite-success
All conditions

Requeued — the merge queue status continues in this comment ↓.

@mergify mergify Bot added the queued label Sep 29, 2026
@michaelsproul

Copy link
Copy Markdown
Member Author

@mergify dequeue

@mergify mergify Bot removed the queued label Sep 29, 2026
@michaelsproul

Copy link
Copy Markdown
Member Author

@mergify queue

@mergify

mergify Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Merge Queue Status

This pull request spent 29 minutes 38 seconds in the queue, including 28 minutes 6 seconds running CI.

Required conditions to merge

@mergify mergify Bot added the queued label Sep 29, 2026
@mergify
mergify Bot merged commit 59377ec into unstable Sep 29, 2026
39 checks passed
@mergify mergify Bot removed the queued label Sep 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gloas ready-for-review The code is ready for review v8.3.0 Lighthouse release early Q3 2026

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants