ETH Omnibus Staking

Implement ETH staking in an omnibus architecture - one wallet and many users

📘

Who is this for?

Exchanges, ETPs, banks, LST and LRT protocols, and anyone staking on behalf of many users with a single or few wallets who wants to create a great UX and accurately distribute rewards

🚧

If you're new to ETH staking...

Check out our ETH staking guides first, starting from The Lifecycle of a Validator

Omnibus details

An omnibus setup consolidates multiple users' offchain staking requests into a single wallet to enhance UX.

Omnibus requirements:

  • Batching system that consolidates users’ staking and unstaking requests, and creates new validators with sets of 32 ETH, while tracking remaining amounts for the next day's batch (offchain + onchain)
  • Accounting system for each user’s balance (offchain)
  • Rewards distribution based on users’ proportional stakes in active validators (offchain)

Solution: daily batching


Part 1: Process Daily Batch

  1. Set up omnibus wallet:
    1. This wallet will be the withdrawal address and fee recipient address for validators creation
    2. This wallet will manage all validators and receive Consensus layer (CL) and Execution layer (EL) rewards
    3. Ensure sufficient ETH balance for transaction fees
  2. Aggregate requests:
    1. Aggregate off-chain user staking and withdrawal requests throughout the day until 00:00 UTC
    2. Calculate available ETH: the day’s new staking requests deposits + ETH carried over from previous batch - withdrawal requests for the day

Part 2: Process Validator Exits

  1. If requested withdrawal amount ≤ available ETH
    1. Transfer funds to users within 24 hours of their request
  2. If requested withdrawal amount > available ETH
    1. Calculate number of validators to be exited
    2. Initiate validators exit via POST /ethereum/validators/exit or POST /ethereum/broadcast_exit_message
    3. Monitor exit progress via GET /ethereum/validators, display withdrawal status updates in user interface
    4. Transfer withdrawn ETH to users once validator exits are complete
    5. It’s recommended to transfer the complete withdrawal amount only when fully available (e.g., wait for validator exit to process a user’s 32 ETH withdrawal request, even if 5 ETH is currently available)

Part 3: Create Validators with Remaining ETH


  1. Create new validators
    1. Create new validators with available ETH in increments of 32 ETH via POST /ethereum/validators and sign the staking transaction, and broadcast it on-chain via POST /ethereum/broadcast
    2. Track remaining ETH for next day's batch, e.g. user_a deposits 55 ETH, user_b deposits 22 ETH, user_c requests to withdraw 10 ETH,
      1. Create 2 validators (64 ETH) via POST /ethereum/validators
      2. Track 3 ETH remainder for next batch
  2. Monitor validator status:
    1. Track validator activation progress and monitor validator status via GET /ethereum/validators

Part 4: Fetch Rewards


  1. Fetch reward data
    1. Use GET /ethereum/rewards_net to check rewards amount received by omnibus wallet.
    2. Fetch previous day rewards data after UTC 03:00, e.g. on January 27, 2025, specify “2025-01-26” as both the start and end dates. Update the off-chain accounting system daily.
  2. Rewards calculation:
    1. All depositors earn rewards proportionally, regardless of whether their ETH is in active validators or awaiting the next batch.
    2. Calculate each user's daily rewards with the formula: (user_eth_amount / total_active_eth) * total_daily_rewards.
  3. User interface:
    1. Display current stake, rewards accrual, and historical daily rewards data to each user