Open
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #2758 +/- ##
==========================================
- Coverage 41.35% 40.11% -1.24%
==========================================
Files 108 109 +1
Lines 4607 4744 +137
Branches 1254 1302 +48
==========================================
- Hits 1905 1903 -2
- Misses 2699 2838 +139
Partials 3 3 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Added a failConsolidation function
Verify balances in confirmConsolidation so the strategy balance is updated
restrict verifyBalance on the Compounding Staking Strategy
Added activeIds option to verifyBalances Hardhat task
More fork tests
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 33 out of 51 changed files in this pull request and generated 5 comments.
Files not reviewed (1)
- contracts/pnpm-lock.yaml: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
contracts/contracts/strategies/NativeStaking/ConsolidationController.sol
Show resolved
Hide resolved
All consolidation fork tests are now working
…rds (#2819) * Check enough ETH value was included in requestConsolidation to cover the fee * Fix fork test
…2820) * Do not call snapBalances in requestConsolidation if the balances were recently snapped * Allow verifyBalances to run for snaps before the consolidation was started
…onsolidation() to prevent the contract from entering an inconsistent state (#2822)
…or Correct Accounting (#2825) * Require that at least MIN_CONSOLIDATION_PERIOD has elapsed since the consolidation was requested before it can be failed * Track source validators being consolidated so they can be verified when failConsolidation is called
…lidation is in progress (#2826)
* Correct Natspec of stakingMonitor on old Native Staking Strategy * Allow validators to be removed from the SSV cluster during consolidation if not in the source strategy
* Check enough ETH value was included in requestConsolidation to cover the fee * Fix fork test * Do not call snapBalances in requestConsolidation if the balances were recently snapped * Increased MIN_CONSOLIDATION_PERIOD to 261 epochs * Add a zero length check on sourcePubKeys at the beginning of requestConsolidation() to prevent the contract from entering an inconsistent state * Correct Natspec of stakingMonitor on old Native Staking Strategy * Allow validators to be removed from the SSV cluster during consolidation if not in the source strategy * Require that at least MIN_CONSOLIDATION_PERIOD has elapsed since the consolidation was requested before it can be failed * Track source validators being consolidated so they can be verified when failConsolidation is called * Added a MIN_CONSOLIDATION_PERIOD check to snapBalances() when a consolidation is in progress * Allow verifyBalances to run for snaps before the consolidation was started
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Overview
A new staking strategy was implemented in 2025 that used the compounding validators introduced in Ethereum’s Pectra release. The plan was to exit from the sweeping (0x01 type) validators used by the old Native Staking Strategy and then deposit to the new compounding (0x02 type) validators used by the new Compounding Staking Strategy.
Unfortunately, since the start of 2026, the validator deposit queue has blown out to over 70 days as of 3 February 2026. As deposits do not earn any yield, having 18.6k ETH (71.1%) of OETH’s collateral not earning yield is not acceptable. A better approach is to use the validator consolidation that was introduced in the Pectra release, which reduced the loss of yield to 27 hours.
See https://www.validatorqueue.com/ for deposit queue times.
Objectives/Requirements
Link
SSV Clusters
Consolidation Processes
Contract Changes
New
ConsolidationControllercontractrequestConsolidationfunctionsourcePubKeys,targetPubKeydepositsrequestConsolidationon the old Native Staking StrategysnapBalanceson the new Compounding Staking Strategy as this will be the last time the balance can be updated until after the consolidation process has completed.confirmConsolidationfunctionbalanceProofsandpendingDepositProofsverifyBalanceson the new Compounding Staking Strategy with the balance and pending deposit proofsconfirmConsolidationon the old Native Staking Strategy with the number of validators that were consolidated.failConfirmationfunctionsourcePubKeysfailConsolidationon the old Native Staking StrategydoAccounting- can be forwarded at any timeexitSsvValidator- can be forwarded at any timeremoveSsvValidator- can only be forwarded if no consolidation is in progressvalidatorWithdrawal- full validator exits are prevented. Partial withdrawals are allowedstakeEth- deposits to a target validator of an active consolidation is prevented. Initial 1 ETH deposits to new validators and top-ups are allowed.verifyBalancescan be called by anyone and forward to the the Compounding Staking Strategy whenold Native Staking Strategy
requestConsolidationfunctionsourcePubKeysandtargetPubKeyConsolidationControllercontractconfirmConsolidationfunctionConsolidationControllercontractactiveDepositedValidatorsby the number of validators that were consolidated. This effectively decreases the strategy’s balance fromcheckBalanceby 32 ETH times thye number of validators that were consolidated.failConsolidationfunctionConsolidationControllercontractmigrateClusterToETHto upgrade the SSV cluster to ETH paymentsregisterSsvValidatorto use ETH and not SSV for cluster paymentNew Compounding Staking Strategy
snapBalancesandverifyBalancesto only the validator registratormigrateClusterToETHto upgrade the SSV cluster to ETH paymentsregisterSsvValidatorto use ETH and not SSV for cluster payment. This is only for Hoodi testing and will not be used on mainnetSecurity Audit Scope
In scope contracts
ConsolidationControllerNativeStakingSSVStrategywith a focus on therequestConsolidation,failConsolidationandconfirmConsolidationfunctionsCompoundingStakingSSVStrategywith a focus onsnapBalances,verifyBalancesandregisterSsvValidator.Out of scope contracts
FeeAccumulatorBeaconProofsCompoundingStakingStrategyViewTests
Consolidation fork tests are in
contracts/test/strategies/stakingConsolidation.mainnet.fork-test.jsDeployment
Deployment script is in
contracts/deploy/mainnet/179_staking_consolidation.jsCode Change Checklist
To be completed before internal review begins:
Internal review: