Validator Consolidation
This guide walks through consolidating validators in Lido Staking Vaults using the EIP-7251 mechanism. Consolidation merges the balance of one or more source validators into a single target validator.
Once submitted, consolidation requests cannot be cancelled. Verify all pubkeys and parameters before confirming.
Why Consolidate?
- Reduce the number of active validators while preserving total staked ETH
- Lower ongoing validator maintenance overhead
- Fix node operator fee calculation after migrating validators to vault withdrawal credentials
Prerequisites
Before starting, ensure:
- Role: Your account must have
NODE_OPERATOR_FEE_EXEMPT_ROLEon the Dashboard contract - Fresh report: A fresh oracle report must be submitted to the vault (
yarn start report w by-vault-submit) - Validator eligibility: Source validators must be active on the Beacon Chain and eligible for consolidation
- Target validator WC: Target validators must have vault withdrawal credentials (0x02-type pointing to the StakingVault)
- WalletConnect (for batch mode): Required when using
--batchflag
Check your role on the Dashboard:
yarn start vo r roles -v <vault_address>
Prepare Consolidation Config
The easiest way to define consolidation pairs is a JSON file mapping each target pubkey to an array of source pubkeys.
Format (consolidation-config.json):
{
"0x<target_pubkey_1>": ["0x<source_pubkey_1a>", "0x<source_pubkey_1b>"],
"0x<target_pubkey_2>": ["0x<source_pubkey_2a>"]
}
- Each key is a target validator pubkey (48-byte BLS key, 96 hex chars with
0xprefix) - Each value is an array of source validator pubkeys to consolidate into that target
- Source validators' balances will be swept into the target validator
Step-by-Step
1. Submit a Fresh Report
yarn start report w by-vault-submit -v <vault_address>
2. Verify Validators on Beacon Chain
Check validator status before consolidating:
# Check source validator
yarn start pdg-helpers validator-info 0x<source_pubkey>
# Check target validator
yarn start pdg-helpers validator-info 0x<target_pubkey>
Both must be in active_ongoing status. Inactive validators are automatically filtered out with a warning, but it's better to verify upfront.
3. Run Consolidation
Using a JSON file (recommended for multiple validators):
yarn start consolidation w consolidate <dashboard_address> \
--file ./consolidation-config.json
Using command-line arguments (single pair):
yarn start consolidation w consolidate <dashboard_address> \
--source "0x<source_pubkey>" \
--target "0x<target_pubkey>"
Multiple source groups via CLI:
yarn start consolidation w consolidate <dashboard_address> \
--source "0xaaa... 0xbbb...,0xccc... 0xddd..." \
--target "0xeee...,0xfff..."
Each comma-separated group of source pubkeys maps to the corresponding target pubkey.
4. Review and Confirm
The CLI displays a table with all source and target validators before executing. Review carefully:
- Verify all pubkey pairs are correct
- Check the fee exemption amount to be set
- Confirm no unintended validators are included
5. Monitor on Beacon Chain
After submission, consolidation is processed at the consensus layer. Track progress via a Beacon Chain explorer or:
yarn start pdg-helpers validator-info 0x<target_pubkey>
Batch Mode (Gas-Efficient)
Use --batch to bundle all consolidation requests and the fee exemption into a single multicall transaction. Requires --wallet-connect.
yarn start consolidation w consolidate <dashboard_address> \
--file ./consolidation-config.json \
--batch \
--wallet-connect
Without --batch, each consolidation request and the fee exemption are sent as separate transactions (more flexible but less gas-efficient).
Error Reference
| Error | Cause | Solution |
|---|---|---|
Missing NODE_OPERATOR_FEE_EXEMPT_ROLE | Account lacks required role | Contact vault admin to grant the role |
| Report not fresh | Oracle data is stale | Run report w by-vault-submit first |
| Invalid pubkey format | Pubkey is not 48-byte hex | Verify pubkey format (must be 0x + 96 hex chars) |
| Mismatched array lengths | --source and --target counts differ | Ensure equal number of source groups and targets |
| Batch without WalletConnect | --batch used without --wallet-connect | Add --wallet-connect flag |
| Inactive validators | Source validator is not active | Inactive validators are auto-filtered; check validator status |
| Invalid withdrawal credentials | Target validator WC not pointing to vault | Target must use 0x02-type WC pointing to StakingVault |
Related Commands
- Commands reference: Consolidation Commands
- Check validator info:
yarn start pdg-helpers validator-info <pubkey> - Submit report:
yarn start report w by-vault-submit - Check roles:
yarn start vo r roles