Validator Deposits
This guide covers validator deposit operations in Lido Staking Vaults, including predeposits, validator proving, and full deposits to the Beacon Chain.
Overview
The deposit process involves several stages:
- Predeposit: Initial validator registration with 1 ETH from vault
- Validator Proving: Cryptographic proof that validator exists on Beacon Chain
- Full Deposit: Complete 32 ETH deposit to activate validator
- Balance Management: Node operator balance top-ups and withdrawals
All deposit operations work through the PredepositGuarantee (PDG) contract which manages validator lifecycle and node operator balances.
Read Operations
Get PDG Information
View basic information about the PredepositGuarantee contract:
yarn start deposits r info
Check PDG Roles
View role assignments for the PredepositGuarantee contract:
yarn start deposits r roles
Check Validator Status
Get the current status of a specific validator:
yarn start deposits r validator-status <validatorPubkey>
Arguments:
Argument | Description | Format |
---|---|---|
<validatorPubkey> | Validator public key to check | 0x... (48-byte hex string) |
Check Node Operator Balance
Get total, locked, and unlocked balances for the Node Operator in PDG:
yarn start deposits r no-balance
Aliases: no-bal
Example:
# Check node operator balance
yarn start deposits r no-balance
# Using alias
yarn start deposits r no-bal
This command shows:
- Total: Total ETH balance for the node operator
- Locked: ETH locked for predeposits
- Unlocked: Available ETH that can be locked for predeposit or withdrawn
Check Node Operator Info
Get comprehensive information about the Node Operator in PDG:
yarn start deposits r no-info
Example:
# Get full node operator information
yarn start deposits r no-info
This command displays:
- Balance information (total, locked, unlocked)
- Depositor address (with indication if it's your address)
- Guarantor address (with indication if it's your address)
Write Operations
Predeposit Validators
Register validators with 1 ETH predeposits from the vault and lock node operator balance:
yarn start deposits w predeposit '<deposits_json>'
Arguments and Options:
Argument/Option | Description | Format |
---|---|---|
<deposits> | Array of deposit data | JSON array (see below) |
--no-bls-check | Skip BLS signature validation | Flag |
-v, --vault <string> | Vault address | 0x... |
Deposit Format:
[
{
"pubkey": "0x123...",
"signature": "0xabc...",
"amount": "1000000000",
"deposit_data_root": "0xdef..."
}
]
Example:
# Predeposit with BLS validation (recommended)
yarn start deposits w predeposit '[{
"pubkey": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"signature": "0xabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdef",
"amount": "1000000000",
"deposit_data_root": "0xfedcbafedcbafedcbafedcbafedcbafedcbafedcbafedcbafedcbafedcbafedcba"
}]' -v 0x1234567890123456789012345678901234567890
# Skip BLS validation (faster but less secure)
yarn start deposits w predeposit '<deposits_json>' --no-bls-check
Validator Proving
Create Proof and Prove
Generate cryptographic proof that a validator exists on the Beacon Chain:
yarn start deposits w proof-and-prove
Options:
Option | Description | Format |
---|---|---|
-i, --index <index> | Validator index to prove | Number |
Example:
# Interactive proof creation
yarn start deposits w proof-and-prove
# Prove specific validator index
yarn start deposits w proof-and-prove -i 12345
Prove and Deposit (Shortcut)
Node operator shortcut command that proves validators, tops up balance if needed, and deposits:
yarn start deposits w prove-and-deposit '<indexes>' '<deposits_json>'
Arguments and Options:
Argument/Option | Description | Format |
---|---|---|
<indexes> | Array of validator indexes | JSON array of numbers |
<deposits> | Array of deposit data | JSON array (see above) |
-v, --vault <string> | Vault address | 0x... |
Example:
yarn start deposits w prove-and-deposit '[12345, 12346, 12347]' '[{
"pubkey": "0x1234...",
"signature": "0xabcd...",
"amount": "32000000000",
"deposit_data_root": "0xfed..."
}]' -v 0x1234567890123456789012345678901234567890
Full Beacon Chain Deposit
There is a known issue with incremental validator deposits: if you top up a validator's balance in 1 ETH increments and reach exactly 32 ETH through multiple deposits, the validator may fail to activate. See ethereum/consensus-specs#3049 for details.
To avoid this, always deposit the remaining 31 ETH in a single transaction rather than splitting it into smaller amounts. This ensures proper validator activation without delays.
Deposit the remaining 31 ETH to complete validator activation (total 32 ETH):
yarn start deposits w deposit-to-beacon-chain '<deposits_json>'
Arguments and Options:
Argument/Option | Description | Format |
---|---|---|
<deposits> | Array of deposit data | JSON array (see above) |
-v, --vault <string> | Vault address | 0x... |
Example:
yarn start deposits w deposit-to-beacon-chain '[{
"pubkey": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"signature": "0xabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdef",
"amount": "31000000000",
"deposit_data_root": "0xfedcbafedcbafedcbafedcbafedcbafedcbafedcbafedcbafedcbafedcbafedcba"
}]' -v 0x1234567890123456789012345678901234567890
Node Operator Balance Management
Top Up Balance
Add ETH to node operator balance for covering predeposit requirements:
yarn start deposits w top-up <amount>
Arguments and Options:
Argument/Option | Description | Format |
---|---|---|
<amount> | Amount in ETH to top up | Decimal (e.g., 1) |
-v, --vault <string> | Vault address | 0x... |
Example:
# Top up with 2 ETH (enough for 2 predeposits)
yarn start deposits w top-up 2 -v 0x1234567890123456789012345678901234567890
# Interactive vault selection
yarn start deposits w top-up 1
Withdraw Node Operator Balance
Withdraw ETH from node operator balance:
yarn start deposits w withdraw-no-balance <amount>
Arguments and Options:
Argument/Option | Description | Format |
---|---|---|
<amount> | Amount in ETH to withdraw | Decimal (e.g., 5.0) |
-v, --vault <string> | Vault address | 0x... |
-r, --recipient <string> | Recipient address for withdrawal | 0x... |
Example:
# Withdraw with specified recipient
yarn start deposits w withdraw-no-balance 5 \
-v 0x1234567890123456789012345678901234567890 \
-r 0x9876543210987654321098765432109876543210
# Interactive selection
yarn start deposits w withdraw-no-balance 5
Set Node Operator Guarantor
Set or update the guarantor for the node operator:
yarn start deposits w set-no-guarantor
This command is interactive and will prompt for the new guarantor address.
Deposit Workflow
Complete Validator Setup Process
Here's the typical workflow for setting up new validators:
1. Prepare Deposit Data
Generate deposit data using official Ethereum tools or validator clients:
You can use this tool for generating deposit data: Depositor
2. Top Up Node Operator Balance
Ensure sufficient balance for predeposits:
yarn start deposits w top-up 1
3. Make Predeposit
Register validators with 1 ETH:
yarn start deposits w predeposit '[{
"pubkey": "0x...",
"signature": "0x...",
"amount": "1000000000",
"deposit_data_root": "0x..."
}]'
4. Wait and Monitor
Wait for validator to appear on Beacon Chain, then check status:
yarn start pdg-helpers validator-info 0x...
5. Check Validator status in PDG contract
yarn start deposits r validator-status 0x...
6. Prove Validator
Create proof once validator is visible:
yarn start deposits w proof-and-prove -i <validator_index>
7. Complete Deposit
Deposit remaining 31 ETH to activate validator:
yarn start deposits w deposit-to-beacon-chain '[{
"pubkey": "0x...",
"signature": "0x...",
"amount": "31000000000",
"deposit_data_root": "0x..."
}]'
Security Considerations
BLS Signature Validation
- Always validate signatures unless specifically testing
- BLS validation prevents invalid deposits
- Use
--no-bls-check
only for development/testing
Deposit Data Verification
- Double-check all deposit data before submission
- Verify public keys match your validator setup
- Confirm withdrawal credentials point to vault
Balance Management
- Monitor node operator balance before predeposits
- Top up proactively to avoid failed operations
- Track validator lifecycle to manage balance efficiently
Error Handling
Common Issues
Insufficient Node Operator Balance
# Check current balance and top up
yarn start deposits r info
yarn start deposits w top-up <amount>
Invalid BLS Signature
# Regenerate deposit data with correct withdrawal credentials
# Verify signature before retrying
Permission Denied
# Verify node operator role
yarn start vo r roles
Monitoring and Troubleshooting
Check Operation Status
Monitor your deposits and validator status:
# Check specific validator
yarn start deposits r validator-status <pubkey>
# Check validator on CL
yarn start pdg-helpers validator-info 0x...
Related Operations
- Vault Creation: Creating a Vault
- Funding Vaults: Supply and Withdrawal
- Reports: Reports
- Additional Helpers: Additional Helpers