Private buckets (pools)

Overview

Private buckets (builders, compute, coders...) are a special mechanism available only within the stETH DepositPool contract. Unlike public staking (coders staking), where users deposit stETH tokens into the contract, private buckets allow protocol administrators to assign virtual stake balances to users without requiring any on-chain deposit of tokens.

Private buckets are particularly useful for allocating rewards to test participants, strategic partners, investors, or any group of users who should receive emissions without actively staking tokens. Internally, private buckets do not exist as a separate structure—they are managed through dedicated administrative functions that set the relevant parameters per user in the existing reward pools.

Add new private stakers

The reward logic for private bucket participants is identical to that of public users: rewards are accrued based on the user’s virtual stake, in proportion to the total stake in the pool, and follow the same emission rules. However, instead of interacting with the contract directly, users in private buckets are manually added by an administrator with manageUsersInPrivatePool, who assigns them a virtual stake amount, an optional lock period before rewards can be claimed, and, if relevant, a referrer address for referral bonuses.

Claim MOR rewards

To actually receive MOR rewards, users in private buckets must explicitly call the claim function, just like any other participant. They must provide the appropriate poolId corresponding to the bucket pool they’ve been assigned to. The contract treats their virtual stake identically to real deposits during reward distribution. However, since there are no tokens physically deposited, actions such as withdraw or restake are not applicable for private bucket participants.

In addition, the contract provides the claimFor function, which allows one address to claim rewards on behalf of another. This is permitted if the caller has been explicitly whitelisted via the setClaimSender function, or if the staker has set a claimReceiver using setClaimReceiver.

This feature is particularly useful in the context of private buckets. For example, if an entire builder bucket is assigned to a single multisig address, the multisig can set a public claimReceiver. In this case, any user can trigger a claim for the builder bucket using claimFor, but the actual reward tokens on L2 will always be sent to the receiver address that the multisig specified.

Summary

In summary, private buckets offer a flexible way for the protocol to assign reward eligibility without requiring capital to be locked on-chain, while fully integrating into the broader reward distribution system.

Last updated

Was this helpful?