Withdrawals
Withdrawing from a Milky pool is straightforward in concept: you burn some of your LP shares and the pool sends you USDC at the current price-per-share. The mechanics are designed to make the path predictable, but there are a handful of constraints worth understanding before you stake liquidity.
How a withdrawal works
When you submit a withdrawal:
You specify a number of shares to burn
Either explicitly (e.g. "burn 5,000 shares") or implicitly via the app by entering a USDC amount, which the UI converts at the current PPS.
The protocol computes your USDC payout
payout = shares × PPS / 10^6. PPS is calculated from the pool's current NAV and total shares at the moment of the transaction.USDC moves from the pool vault to your wallet
The shares are burned from your LP position. If your remaining shares reach zero, the LP position account itself can be closed and its rent refunded.
There is no separate "request withdrawal then claim later" step. A withdrawal is a single instruction that either succeeds atomically or fails — it does not leave you in a half-state.
Available liquidity
The pool can only pay you what it currently holds in its quote vault (the idle USDC balance). Money that has been lent out as principal is locked in those loans until the borrowers repay or the cards are auctioned.
In practice, most pools sit somewhere between 20% and 80% utilization, so you can expect to be able to withdraw a meaningful amount at any time. But during periods of high borrow demand, large withdrawals may need to wait for repayments to top up the vault.
If you submit a withdrawal that would overdraw the vault, the transaction fails outright. There is no partial fulfillment — you'd reduce the withdrawal amount and try again, or wait for repayments and retry.
Pause behavior
Withdrawals are intentionally not blocked by the global pause. If the protocol is paused for new loan creation or new deposits (for example, during an emergency response to a discovered issue), LPs can still exit at the current PPS as long as the pool has the cash on hand.
This is a deliberate design choice: pausing should restrict new risk, not trap existing capital.
Withdrawal pricing and timing
Two specific things to be aware of:
- PPS at execution, not at submission. The PPS used for your payout is computed in the same transaction that processes the withdrawal. If someone else's repayment lands one block before yours, you benefit from the higher PPS. If a default hits NAV one block before yours, you bear the lower PPS. There is no "lock in PPS" mechanism.
- No queuing across pools. Each pool is an independent account with its own vault. If you have positions in multiple pools, you withdraw from each separately.
Complete exit
To fully exit, burn all your shares from the pool. If you also want to reclaim the rent paid for your LP position account, the app's withdraw flow can submit an account-closing instruction in the same transaction.
When you cannot withdraw
You cannot withdraw if:
- The amount you've requested exceeds the pool's current vault balance.
- Your LP position is already at zero shares.
- You're trying to withdraw from a pool you don't have a position in.
You can still withdraw if:
- The protocol is globally paused.
- The pool itself is paused.
- The pool has outstanding loans (you just can't withdraw the locked principal portion).
Read next
- LP shares & NAV — the math behind PPS in detail.
- Yield, utilization & risks — what utilization looks like in practice.