Skip to content

Deploy 181 - Validator Consolidation#2833

Open
naddison36 wants to merge 4 commits intomasterfrom
nicka/deploy_181
Open

Deploy 181 - Validator Consolidation#2833
naddison36 wants to merge 4 commits intomasterfrom
nicka/deploy_181

Conversation

@naddison36
Copy link
Collaborator

@naddison36 naddison36 commented Mar 9, 2026

Changes

Deploy 181

  • Deploy new ConsolidationController for the first time
  • Upgrade the old Native Staking Strategies and Compounding Staking Strategy

Deployed contracts

Name Address
CompoundingStakingSSVStrategy 0x18c3Db0576997924dF29ad6beC188cE41C332AFb
NativeStakingSSVStrategy 0x0c93044155Acc74af3d4C2781DC3bC8822a54912
NativeStakingSSVStrategy 0x3bb8cc8a0790Cb7FA8875C18407480C4Fb3d3436
ConsolidationController 0x7e57a2AF9F41aF41D6bCf53cc3C299fB7e7A51B4

Proposal Id: 89537312136786952531014489036746163282884626031210646253084401528191800029294

Contract Differences

The contract were deployed before the Deploy 180 PR #2831 was merged to master. This means the changes to ValidatorRegistrator were not included in the NativeStakingSSVStrategy deployment. See the differences in commit 19f5b39

# Diff to old CompoundingStakingSSVStrategy
sol2uml diff 0x452bb04d113478578dd23026e4f86a8ffb0118ca 0x18c3Db0576997924dF29ad6beC188cE41C332AFb
# Diff to source
sol2uml diff 0x18c3Db0576997924dF29ad6beC188cE41C332AFb .,node_modules

# Diff to old NativeStakingSSVStrategy 2
sol2uml diff 0x0643b19f9f978322b4f2f13b091a13e60ecbbce3 0x0c93044155Acc74af3d4C2781DC3bC8822a54912
# Diff to source
sol2uml diff 0x0c93044155Acc74af3d4C2781DC3bC8822a54912 .,node_modules

# Diff to old NativeStakingSSVStrategy 3
sol2uml diff 0x492500a6cfb1248b5b6b7c674fd66c66ca57b905 0x3bb8cc8a0790Cb7FA8875C18407480C4Fb3d3436
# Diff to source
sol2uml diff 0x3bb8cc8a0790Cb7FA8875C18407480C4Fb3d3436 .,node_modules

# Diff to source ConsolidationController
sol2uml diff 0x7e57a2AF9F41aF41D6bCf53cc3C299fB7e7A51B4 .,node_modules

Deploy checklist

Two reviewers complete the following checklist:

- [ ] All deployed contracts are listed in the deploy PR's description
- [ ] Deployed contract's verified code (and all dependencies) match the code in master
- [ ] Contract constructors have correct arguments
- [ ] The transactions that interacted with the newly deployed contract match the deploy script.
- [ ] Governance proposal matches the deploy script
- [ ] Smoke tests pass after fork test execution of the governance proposal

@codecov
Copy link

codecov bot commented Mar 9, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 39.88%. Comparing base (817fb11) to head (fcf18ad).

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #2833   +/-   ##
=======================================
  Coverage   39.88%   39.88%           
=======================================
  Files         111      111           
  Lines        4771     4771           
  Branches     1311     1311           
=======================================
  Hits         1903     1903           
  Misses       2865     2865           
  Partials        3        3           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 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.

@naddison36 naddison36 marked this pull request as ready for review March 9, 2026 11:12
Copy link
Collaborator

@shahthepro shahthepro left a comment

Choose a reason for hiding this comment

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

Compared the "CompoundingStakingSSVStrategy" contract with address 0x18c3Db0576997924dF29ad6beC188cE41C332AFb on ethereum
to local files under folders ".,node_modules"

match   @openzeppelin/contracts/security/Pausable.sol
match   @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
match   @openzeppelin/contracts/token/ERC20/IERC20.sol
match   @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
match   @openzeppelin/contracts/utils/Address.sol
match   @openzeppelin/contracts/utils/Context.sol
match   @openzeppelin/contracts/utils/math/Math.sol
match   @openzeppelin/contracts/utils/math/SafeCast.sol
match   contracts/beacon/BeaconRoots.sol
match   contracts/beacon/PartialWithdrawal.sol
match   contracts/governance/Governable.sol
match   contracts/interfaces/IBasicToken.sol
match   contracts/interfaces/IBeaconProofs.sol
match   contracts/interfaces/IDepositContract.sol
match   contracts/interfaces/ISSVNetwork.sol
match   contracts/interfaces/IStrategy.sol
match   contracts/interfaces/IVault.sol
match   contracts/interfaces/IWETH9.sol
match   contracts/strategies/NativeStaking/CompoundingStakingSSVStrategy.sol
match   contracts/strategies/NativeStaking/CompoundingValidatorManager.sol
match   contracts/token/OUSD.sol
match   contracts/utils/Helpers.sol
match   contracts/utils/Initializable.sol
match   contracts/utils/InitializableAbstractStrategy.sol
match   contracts/vault/VaultStorage.sol
Changed contracts/strategies/NativeStaking/ValidatorRegistrator.sol
366      * @param targetPubKey The full public key of the target validator to consolidate into.
367      */
368     // slither-disable-start reentrancy-no-eth
369     function requestConsolidation(
370         bytes[] calldata sourcePubKeys,
371         bytes calldata targetPubKey
---
375         bytes32 targetPubKeyHash = keccak256(targetPubKey);
376         bytes32 sourcePubKeyHash;
377         uint256 totalConsolidationFees = 0;
378
379         // For each source validator
---
410     }
411
412     // slither-disable-end reentrancy-no-eth
413
414     /**
415      * @notice A consolidation request can fail to be processed on the beacon chain
416      * for various reasons. For example, the pending consolidation queue is full with 262,144 requests.

Compared the "NativeStakingSSVStrategy" contract with address 0x0c93044155Acc74af3d4C2781DC3bC8822a54912 on ethereum
to local files under folders ".,node_modules"

match   @openzeppelin/contracts/security/Pausable.sol
match   @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
match   @openzeppelin/contracts/token/ERC20/IERC20.sol
match   @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
match   @openzeppelin/contracts/utils/Address.sol
match   @openzeppelin/contracts/utils/Context.sol
match   @openzeppelin/contracts/utils/math/Math.sol
match   @openzeppelin/contracts/utils/math/SafeCast.sol
match   contracts/beacon/BeaconConsolidation.sol
match   contracts/governance/Governable.sol
match   contracts/interfaces/IBasicToken.sol
match   contracts/interfaces/IDepositContract.sol
match   contracts/interfaces/ISSVNetwork.sol
match   contracts/interfaces/IStrategy.sol
match   contracts/interfaces/IVault.sol
match   contracts/interfaces/IWETH9.sol
match   contracts/strategies/NativeStaking/FeeAccumulator.sol
match   contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol
match   contracts/strategies/NativeStaking/ValidatorAccountant.sol
changed contracts/strategies/NativeStaking/ValidatorRegistrator.sol
match   contracts/token/OUSD.sol
match   contracts/utils/Helpers.sol
match   contracts/utils/Initializable.sol
match   contracts/utils/InitializableAbstractStrategy.sol
match   contracts/vault/VaultStorage.sol
Changed contracts/strategies/NativeStaking/ValidatorRegistrator.sol
366      * @param targetPubKey The full public key of the target validator to consolidate into.
367      */
368     // slither-disable-start reentrancy-no-eth
369     function requestConsolidation(
370         bytes[] calldata sourcePubKeys,
371         bytes calldata targetPubKey
---
375         bytes32 targetPubKeyHash = keccak256(targetPubKey);
376         bytes32 sourcePubKeyHash;
377         uint256 totalConsolidationFees = 0;
378
379         // For each source validator
---
410     }
411
412     // slither-disable-end reentrancy-no-eth
413
414     /**
415      * @notice A consolidation request can fail to be processed on the beacon chain
416      * for various reasons. For example, the pending consolidation queue is full with 262,144 requests.

Compared the "NativeStakingSSVStrategy" contract with address 0x3bb8cc8a0790Cb7FA8875C18407480C4Fb3d3436 on ethereum
to local files under folders ".,node_modules"

match   @openzeppelin/contracts/security/Pausable.sol
match   @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
match   @openzeppelin/contracts/token/ERC20/IERC20.sol
match   @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
match   @openzeppelin/contracts/utils/Address.sol
match   @openzeppelin/contracts/utils/Context.sol
match   @openzeppelin/contracts/utils/math/Math.sol
match   @openzeppelin/contracts/utils/math/SafeCast.sol
match   contracts/beacon/BeaconConsolidation.sol
match   contracts/governance/Governable.sol
match   contracts/interfaces/IBasicToken.sol
match   contracts/interfaces/IDepositContract.sol
match   contracts/interfaces/ISSVNetwork.sol
match   contracts/interfaces/IStrategy.sol
match   contracts/interfaces/IVault.sol
match   contracts/interfaces/IWETH9.sol
match   contracts/strategies/NativeStaking/FeeAccumulator.sol
match   contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol
match   contracts/strategies/NativeStaking/ValidatorAccountant.sol
changed contracts/strategies/NativeStaking/ValidatorRegistrator.sol
match   contracts/token/OUSD.sol
match   contracts/utils/Helpers.sol
match   contracts/utils/Initializable.sol
match   contracts/utils/InitializableAbstractStrategy.sol
match   contracts/vault/VaultStorage.sol
Changed contracts/strategies/NativeStaking/ValidatorRegistrator.sol
366      * @param targetPubKey The full public key of the target validator to consolidate into.
367      */
368     // slither-disable-start reentrancy-no-eth
369     function requestConsolidation(
370         bytes[] calldata sourcePubKeys,
371         bytes calldata targetPubKey
---
375         bytes32 targetPubKeyHash = keccak256(targetPubKey);
376         bytes32 sourcePubKeyHash;
377         uint256 totalConsolidationFees = 0;
378
379         // For each source validator
---
410     }
411
412     // slither-disable-end reentrancy-no-eth
413
414     /**
415      * @notice A consolidation request can fail to be processed on the beacon chain
416      * for various reasons. For example, the pending consolidation queue is full with 262,144 requests.

Compared the "ConsolidationController" contract with address 0x7e57a2AF9F41aF41D6bCf53cc3C299fB7e7A51B4 on ethereum
to local files under folders ".,node_modules"

match   @openzeppelin/contracts/access/Ownable.sol
match   @openzeppelin/contracts/security/Pausable.sol
match   @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
match   @openzeppelin/contracts/token/ERC20/IERC20.sol
match   @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
match   @openzeppelin/contracts/utils/Address.sol
match   @openzeppelin/contracts/utils/Context.sol
match   @openzeppelin/contracts/utils/math/Math.sol
match   @openzeppelin/contracts/utils/math/SafeCast.sol
match   contracts/beacon/BeaconConsolidation.sol
match   contracts/beacon/BeaconRoots.sol
match   contracts/beacon/PartialWithdrawal.sol
match   contracts/governance/Governable.sol
match   contracts/interfaces/IBasicToken.sol
match   contracts/interfaces/IBeaconProofs.sol
match   contracts/interfaces/IDepositContract.sol
match   contracts/interfaces/ISSVNetwork.sol
match   contracts/interfaces/IStrategy.sol
match   contracts/interfaces/IVault.sol
match   contracts/interfaces/IWETH9.sol
match   contracts/strategies/NativeStaking/CompoundingStakingSSVStrategy.sol
match   contracts/strategies/NativeStaking/CompoundingValidatorManager.sol
match   contracts/strategies/NativeStaking/ConsolidationController.sol
match   contracts/strategies/NativeStaking/ValidatorAccountant.sol
changed contracts/strategies/NativeStaking/ValidatorRegistrator.sol
match   contracts/token/OUSD.sol
match   contracts/utils/Helpers.sol
match   contracts/utils/Initializable.sol
match   contracts/utils/InitializableAbstractStrategy.sol
match   contracts/vault/VaultStorage.sol

shahthepro
shahthepro previously approved these changes Mar 9, 2026
Copy link
Collaborator

@shahthepro shahthepro left a comment

Choose a reason for hiding this comment

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

  • All deployed contracts are listed in the deploy PR's description
  • Deployed contract's verified code (and all dependencies) match the code in master
  • Contract constructors have correct arguments
  • The transactions that interacted with the newly deployed contract match the deploy script.
  • Governance proposal matches the deploy script
  • Smoke tests pass after fork test execution of the governance proposal

@sparrowDom
Copy link
Member

  • All deployed contracts are listed in the deploy PR's description
  • Deployed contract's verified code (and all dependencies) match the code in master
  • ⚪ almost a perfect match, except for some slither stuff that landed into master after deploy
  • Contract constructors have correct arguments
  • The transactions that interacted with the newly deployed contract match the deploy script.
  • Governance proposal matches the deploy script
  • Smoke tests pass after fork test execution of the governance proposal

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.

3 participants