Skip to content

Withdrawal Approval Flow

This diagram shows the three-step approval-based withdrawal process when requireApprovalForWithdrawals = true.

Process Overview

This flow only applies when a pool is configured to require manager approval for withdrawals. It provides better liquidity management and prevents bank-run scenarios.

Three Steps

  1. Request - LP submits withdrawal request
  2. Approve - Pool manager reviews and approves
  3. Execute - LP executes standard ERC4626 withdraw/redeem

Key Points

  • Optional Feature: Only applies when requireApprovalForWithdrawals = true
  • Manager Control: Pool manager determines approval amounts
  • Reserved Shares Protection: Approved shares excluded from getAvailableForBorrowing()
  • Atomic Consumption: Approval consumed when withdrawal executes
  • Partial Approvals: Manager can approve less than requested

Reserved Shares

When shares are approved for withdrawal, they are tracked in totalReservedShares. This amount is subtracted from the available capital for borrowing:

solidity
function getAvailableForBorrowing() returns (uint256) {
    uint256 totalAvailable = virtualBalance;
    uint256 reserved = totalReservedShares * sharePrice;
    return totalAvailable - reserved;
}

This ensures that borrowers cannot draw funds that LPs have been approved to withdraw.

Comparison: Approval vs Instant

FeatureWith ApprovalInstant (No Approval)
Request needed✅ Yes❌ No
Manager review✅ Yes❌ No
Wait timeTypically the withdrawalPeriod defined in the Tranche settingsImmediate
Liquidity management✅ BetterBasic
Bank-run protection✅ YesLimited
Use caseInstitutional poolsRetail/liquid pools