Skip to main content
You can choose when to process user deposit & withdrawal requests. The protocol intentionally gives this flexibility to the curator to allow for a wide variety of vault strategies. For example, a covered call vault may not be able to provide exit liquidity at all times. However, curators must process withdrawals within a 14 days, failure to do so may put the vault at the risk of being frozen and delisted.
All of the steps in this guide can be done through the UX or SDKs.
1

Shareholder submits an intent

A signed deposit or withdrawal request lands in the vault’s queue. Deposits hold the funds on the shareholder’s source subaccount until settled or cancelled.
2

Curator quotes and settles

You poll the queue, pick a share price, and sign a mint (deposit) or burn (withdrawal) approval bound to that exact request.
3

Protocol executes

The sequencer re-verifies your approval, checks your quoted price against the vault’s own mark-to-market price, mints/burns shares, and moves the funds.

The shareholder side

You’ll want this to test your vault end-to-end, and to build a deposit UI. From a shareholder’s wallet:
Withdrawals are blocked until the vault’s cooldownSec has elapsed since the holder’s last deposit (vault_cooldown_active, 18011). Intent signatures default to a 10-minute validity in the SDK — pass signatureExpirySec to extend it (the API caps it at 30 days out); an intent whose signature lapses before you settle it expires.

The settle loop

Queued intents sit in two per-vault FIFO queues. There is no WebSocket channel for them — poll, then settle. A settle approval is bound to one exact request by its user-action hash, so you cannot pair a price with the wrong request.
Your quote is bounded on both sides by the vault’s immutable maxSlippageBps against the protocol’s mtm-derived price.
1

Poll the queues

getLiveMintRequests (pending deposits) and getLiveBurnRequests (pending withdrawals) return a FIFO page of requests plus the queue’s total length. Each request carries a composite id and the user_action_hash your approval commits to.
2

Pick a share price

Read the vault and quote at (or near) simulated_share_price_usd — the live price a depositor faces with your fees settled. The protocol rejects a quote outside maxSlippageBps of its own mtm price.
3

Settle each request

mintShares settles a deposit; burnShares settles a withdrawal. Both are signed on the vault subaccount and bound to the request’s hash.
Before a burn settles, make sure the vault subaccount holds enough of the deposit asset to pay the redemption — you may need to unwind positions first. The redemption moves funds out of the vault subaccount at settle time.
Don’t want a deposit? curator.rejectDepositRequest(request.id, 'reason') pops it off the queue and releases the holder’s funds with no on-chain settle. The reason is optional and capped at 20 characters.

Request lifecycle

Every request moves through these statuses: Shareholders see the full status trail via getRequestHistory; the settled events are public in getActionHistory.

Reading vault state

All unauthenticated and read-only, on client.vaults: getVault is the one you poll while settling — simulated_share_price_usd is your quote anchor, and nav_usd is negative if the vault is insolvent.

Trade

Keep enough of the deposit asset liquid to pay redemptions.

Fees

Every settle here is also when your fees are minted.