DEVNETYou are on Solana devnet. Funds are not real. Behavior matches mainnet.

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:

  1. 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.

  2. 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.

  3. 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).