Manage a pool's allowlist (PRO)
For permissioned pools (allowList: true), the allowlist controls who can deposit. This guide is the recurring operations side of running it: adding addresses, removing addresses, and reading the current set.
For the concept (what the allowlist is on-chain, the role model, the field-name asymmetry between allowList and allowlistEnabled), see Staking pools → Allowlist. For the initial setup of a permissioned pool, see Plan your first pool (PRO).
Pro only: permissioned pools are an SVM Pro feature.
How the allowlist works in one line
The allowlist is the set of addresses holding DEPOSIT_ROLE on the Pool contract: there's no separate registry. Adding an address grants it DEPOSIT_ROLE; removing it revokes the role.
Before you start
- An SVM Pro account with the right permission set.
- The pool is permissioned (
allowList: true). Open pools have no allowlist to manage. - The signing wallet holds
ALLOW_LIST_MANAGER_ROLEon the Pool contract. The allowlist manager is set at pool creation asallowlistManager(see Plan your first pool → Open or permissioned?).
Add addresses
to add addresses in the UI: open the pool's Allowlist tab, click Add addresses, paste one or more addresses (separated by newlines, commas, or spaces: the form validates and de-duplicates as you paste), review, and sign. The UI batches the submission; one signature covers the batch.
</>to add an address via the API: seeaddToAllowList. Body:{ userAddress }. The endpoint accepts one address per call; to add a batch, loop over the addresses client-side. Each call returns a partial transaction the wallet broadcasts.
Verify
- The address shows up under the Allowlist tab.
data.pool.DEPOSIT_ROLEon thegetAllRoleMembersresponse includes the new address.- The added address can now call the pool's deposit flow.
Remove addresses
to remove addresses in the UI: on the Allowlist tab, tick the addresses you want to remove, click Remove selected, and sign. The UI supports batch removal.
</>to remove an address via the API: seeremoveFromAllowList. Same{ userAddress }body. Single-address per call: loop client-side for batches.
What revocation does (and doesn't do)
Revoking DEPOSIT_ROLE only affects future deposits:
- ✅ Prevents new deposits from the address.
- ❌ Does not claw back the address's existing pool shares.
- ❌ Does not force a withdrawal: existing positions stay where they are until the holder requests one through the standard withdrawal queue.
If you need to fully off-board a depositor, revoke their role and rely on the standard withdrawal flow for what's already in.
Read the current allowlist
to view the allowlist in the UI: the Allowlist tab lists every address that currently holdsDEPOSIT_ROLEon the pool.
</>to read the allowlist via the API: seegetAllRoleMembers. The current allowlist is atdata.pool.DEPOSIT_ROLE: an array of addresses. The same response includesdata.pool.ALLOW_LIST_MANAGER_ROLE(typically one address: your manager).
Useful as a check before adding (the address may already be on the list) and as a recurring audit input.
The bypass route: admin grants
A wallet holding DEFAULT_ADMIN_ROLE on the Pool contract can grant DEPOSIT_ROLE directly through the standard role-administration flow (Assign and revoke roles) without going through the allowlist-manager flow. The end state is the same (the address is on the allowlist) but the audit trail and the on-chain event are different.
This is usually undesirable in production: it sidesteps your compliance team's workflow. Use the dedicated addToAllowList / removeFromAllowList flow unless you have a specific reason not to.
Common pitfalls
- Trying to manage an open pool. Open pools (
allowList: false) don't checkDEPOSIT_ROLEat deposit time. The endpoints still work, but granting the role has no effect: anyone can deposit either way. ConfirmallowList: trueon the vault detail response before assuming the allowlist is enforced. - Forgetting the role check. A wallet without
ALLOW_LIST_MANAGER_ROLEcan call the API and even broadcast the returned transaction: it'll just revert on-chain. The UI hides actions for unauthorised wallets; API integrations should check beforehand. - Removing the manager itself. Revoking
ALLOW_LIST_MANAGER_ROLEfrom the manager is a separate operation (lives under Assign and revoke roles, not this guide). The allowlist endpoints only touchDEPOSIT_ROLE. - Reading the wrong field. On the pool config write side the field is
allowlistEnabled; on read it surfaces asallowList(see Glossary →allowListvsallowlistEnabled). Same state, two names. - Batching expectations. The UI batches an N-address paste into a single visible action, but underneath each address is its own on-chain transaction. The API mirrors this: there's no "add many" endpoint. Plan gas and time accordingly for large lists.
Related
- Staking pools → Allowlist: concept and the
DEPOSIT_ROLEmechanic - Plan your first pool (PRO): initial pool setup decisions
- Assign and revoke roles: general role administration, including the bypass route
- Roles & permissions (Lido docs): canonical access-control reference
Updated about 4 hours ago
