refactor block gossip validator #10040
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR Description
This PR refactors the monolithic
BlockGossipValidator
into a more flexible, maintainable, and testable two-stage pipeline architecture. The new design addresses the challenges of adding fork-specific validation logic and improves the clarity of the validation process.Stateless Pipeline: Executes fast, preliminary checks (e.g., slot checks, parent known, equivocation peek) without needing the parent state.
Stateful Pipeline: Executes slower, state-dependent checks (e.g., signature verification, proposer index) only if the stateless checks pass.
Each validation check is now a small, single-responsibility class implementing either
StatelessValidationRule
orStatefulValidationRule
depending on if it needs a parent state access or not.The new
ForkValidationPipelines
class composes these rules into ordered lists for each consensus fork, making fork-specific logic explicit and easy to manage.This PR is still in progress. The new block gossip validator is not used yet. It could be extended to other gossip topics and replace the existing gossip validators.
Fixed Issue(s)
Documentation
doc-change-required
label to this PR if updates are required.Changelog