Skip to content

Conversation

pheobeayo
Copy link

@pheobeayo pheobeayo commented Oct 3, 2025

Motivation
Delayed broadcasting of voluntary exits

Description

This PR handles

  • Better UX - accepts early submissions
  • More forgiving for DVT/multi-node setups
  • post-Electra pending withdrawal checks gracefully

export async function validateApiVoluntaryExit(

await network.publishVoluntaryExit(signedVoluntaryExit);

Closes #7431

Steps to test or reproduce

I used Claude to fix some bugs I encountered while implementing the changes in this PR

@pheobeayo pheobeayo requested a review from a team as a code owner October 3, 2025 14:20
Copy link
Contributor

Summary of Changes

Hello @pheobeayo, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request refines the handling of voluntary exits by implementing a sophisticated caching and re-evaluation system. Instead of outright rejecting voluntary exit submissions that are temporarily invalid due to timing or network conditions, the system now intelligently holds onto them. This change significantly improves the user experience by allowing for earlier submissions, enhances the robustness of DVT and multi-node validator setups, and lays groundwork for future protocol changes by gracefully managing pending withdrawals.

Highlights

  • Delayed Voluntary Exit Broadcasting: Introduced a mechanism to delay the broadcasting of voluntary exits that are temporarily invalid, allowing them to be re-evaluated later.
  • Improved User Experience (UX): The system now accepts early submissions of voluntary exits, providing a better UX by not immediately rejecting them if conditions aren't met yet.
  • Enhanced Resilience for DVT/Multi-Node Setups: The changes make the system more forgiving for Distributed Validator Technology (DVT) and multi-node configurations, where timing discrepancies might lead to transient validation failures.
  • Post-Electra Withdrawal Checks: The new approach gracefully handles pending withdrawal checks that will be relevant after the Electra upgrade.
  • New PendingVoluntaryExitPool: A new PendingVoluntaryExitPool class has been added to cache voluntary exits that fail transient validation checks, along with a pruning mechanism for stale entries.
  • Detailed Validation Logic: The validation logic for voluntary exits has been refactored into validateVoluntaryExitDetailed to classify failures as either permanent or transient, guiding subsequent actions.
  • API vs. Gossip Validation Distinction: API validation (validateApiVoluntaryExit) now leverages the new caching mechanism for transient failures, while gossip validation (validateGossipVoluntaryExit) remains strict, rejecting all invalid exits immediately.
  • Epoch-Based Re-evaluation: A new function processPendingVoluntaryExits has been introduced to periodically re-evaluate cached voluntary exits at each epoch transition and publish them if they become valid.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a mechanism to handle delayed broadcasting of voluntary exits by caching exits that fail validation due to transient conditions. The implementation introduces a PendingVoluntaryExitPool to manage these cached exits and a process to re-evaluate them at each epoch.

The overall approach is sound and improves user experience for submitting voluntary exits. However, I've identified a significant issue in the logic that determines whether a validation failure is transient, which could lead to incorrect behavior. I've also included a couple of suggestions to improve type safety and diagnostics. Please see the detailed comments below.

Copy link

codecov bot commented Oct 3, 2025

Codecov Report

❌ Patch coverage is 29.16667% with 102 lines in your changes missing coverage. Please review.
✅ Project coverage is 52.13%. Comparing base (fd1dac8) to head (834d8cb).
⚠️ Report is 16 commits behind head on unstable.

Additional details and impacted files
@@             Coverage Diff              @@
##           unstable    #8496      +/-   ##
============================================
- Coverage     52.25%   52.13%   -0.12%     
============================================
  Files           852      852              
  Lines         64977    65173     +196     
  Branches       4769     4777       +8     
============================================
+ Hits          33953    33979      +26     
- Misses        30955    31125     +170     
  Partials         69       69              
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@philknows
Copy link
Member

We've recently updated our contribution policy via #8498 to include AI usage disclosures. Please update your PR to include any disclosures if it was used in any way for your contributions. Thanks!

@pheobeayo
Copy link
Author

pheobeayo commented Oct 7, 2025

We've recently updated our contribution policy via #8498 to include AI usage disclosures. Please update your PR to include any disclosures if it was used in any way for your contributions. Thanks!

Thank you for the reference; however, AI usage was not implemented in this PR except for fixing the bugs I encountered while implementing the fix, I used Claude to fix that.

Copy link
Member

@nflaig nflaig left a comment

Choose a reason for hiding this comment

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

Please read up on Contribution Process and make sure your code passes checks locally.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Delayed broadcasting of voluntary exits

4 participants