Skip to main content

Validator Deposits

This guide covers validator deposit operations in Lido Staking Vaults, including predeposits, validator proving and activation, and balance management.

Overview

The deposit process involves several stages:

  1. Top Up Node Operator Balance: Add ETH to node operator balance for covering predeposit requirements
  2. Predeposit: Initial validator registration with 1 ETH from vault
  3. Validator Proving and Activation: Cryptographic proof that validator exists on Beacon Chain and activation deposit of 31 ETH from staged balance of vault
  4. 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:

ArgumentDescriptionFormat
<validatorPubkey>Validator public key to check0x... (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)
  • Claimable Refund amount (if the guarantor is not you)

Check Pending Activations

Get the number of validators in PREDEPOSITED and PROVEN states but not ACTIVATED yet:

yarn start deposits r pending-activations

Options:

OptionDescriptionFormat
-v, --vault <string>Vault address0x...

Example:

yarn start deposits r pending-activations -v 0x1234567890123456789012345678901234567890

This command shows:

  • Pending Activations of validators

Write Operations

Top Up Node Operator Balance

Add ETH to node operator balance for covering predeposit requirements:

yarn start deposits w top-up-no <amount>

Arguments and Options:

Argument/OptionDescriptionFormat
<amount>Amount in ETH to top upDecimal (e.g., 1)
-v, --vault <string>Vault address0x...

Example:

yarn start deposits w top-up-no 1 -v 0x1234567890123456789012345678901234567890

# Interactive vault selection
yarn start deposits w top-up-no 1

Predeposit Validators

Deposits NO's validators with PREDEPOSIT_AMOUNT ether from StakingVault and locks up NO's balance

yarn start deposits w predeposit '<deposits_json>'

Arguments and Options:

Argument/OptionDescriptionFormat
<deposits>Array of deposit dataJSON array (see below)
--no-bls-checkSkip BLS signature validationFlag
-v, --vault <string>Vault address0x...

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, Activate

Permissionless method to prove correct Withdrawal Credentials for the validator and to send the ACTIVATION_DEPOSIT_AMOUNT (31 ETH) from the staged balance of StakingVault:

yarn start deposits w prove-and-activate

Options:

OptionDescriptionFormat
-i, --index <index>Validator index to proveNumber

Example:

# Interactive proof creation
yarn start deposits w prove-and-activate

# Prove specific validator index
yarn start deposits w prove-and-activate -i 12345

Prove and Top Up (Shortcut)

happy path shortcut for the node operator (or depositor) that allows:

  • to prove validator's WC to unlock NO balance
  • to activate the validator depositing ACTIVATION_DEPOSIT_AMOUNT (31 ETH) from StakingVault staged balance
  • to top up validator on top of ACTIVATION_DEPOSIT_AMOUNT (31 ETH)

And do it for multiple validators at once by providing an array of validator indexes and amounts

yarn start deposits w prove-and-top-up '<indexes>' '<amounts>'

Arguments and Options:

Argument/OptionDescriptionFormat
<indexes>Array of validator indexesJSON array of numbers
<deposits>Array of deposit dataJSON array (see above)
-v, --vault <string>Vault address0x...

Example:

yarn start deposits w prove-and-deposit '[12345, 12346, 12347]' '[{
"pubkey": "0x1234...",
"signature": "0xabcd...",
"amount": "32000000000",
"deposit_data_root": "0xfed..."
}]' -v 0x1234567890123456789012345678901234567890

Top Up Existing Validators

Deposits ether to proven validators from StakingVault.

yarn start deposits w top-up-existing-validators '<topUps>'

Arguments and Options:

Argument/OptionDescriptionFormat
<topUps>Array of ValidatorTopUp structs with pubkey and amountsJSON array (see above)
-v, --vault <string>Vault address0x...

Example:

yarn start deposits w top-up-existing-validators '[{
"pubkey": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"amount": "31000000000",
}]' -v 0x1234567890123456789012345678901234567890

Node Operator Balance Management

Top Up Node Operator Balance

Add ETH to node operator balance for covering predeposit requirements:

yarn start deposits w top-up-no <amount>

Arguments and Options:

Argument/OptionDescriptionFormat
<amount>Amount in ETH to top upDecimal (e.g., 1)
-v, --vault <string>Vault address0x...

Example:

# Top up with 2 ETH (enough for 2 predeposits)
yarn start deposits w top-up-no 2 -v 0x1234567890123456789012345678901234567890

# Interactive vault selection
yarn start deposits w top-up-no 1

Withdraw Node Operator Balance

Withdraw ETH from node operator balance:

yarn start deposits w withdraw-no-balance <amount>

Arguments and Options:

Argument/OptionDescriptionFormat
<amount>Amount in ETH to withdrawDecimal (e.g., 5.0)
-v, --vault <string>Vault address0x...
-r, --recipient <string>Recipient address for withdrawal0x...

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:

For Hoodi testnet only

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-no 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 and Activate Validator

Create proof and activate validator once validator is visible:

yarn start deposits w prove-and-activate -i <validator_index>

7. Top UP Existing Validators

Deposit ether to proven validators from StakingVault.

yarn start deposits w top-up-existing-validators '<topUps>'

Arguments and Options:

Argument/OptionDescriptionFormat
<topUps>Array of ValidatorTopUp structs with pubkey and amountsJSON array (see above)
-v, --vault <string>Vault address0x...

Example:

yarn start deposits w top-up-existing-validators '[{
"pubkey": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"amount": "31000000000",
}]' -v 0x1234567890123456789012345678901234567890

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