Withdrawal Throttles
When a pool exceeds its configured utilization limit (utilization_ratio_limit_bps), stricter withdrawal rules apply to protect against rapid liquidity drains under stress.
Scarcity limit
Each withdrawal is capped by withdraw_scarcity_limit_bps, which limits the amount that can be withdrawn in a single transaction to a fixed percentage of the pool's remaining supply. For example, if the limit is set to 1,000 bps (10%) and the pool has 100,000 USDC of total supply, no single withdrawal can exceed 10,000 USDC while the throttle is active.
This prevents any single actor from draining a large portion of remaining liquidity in one transaction.
Cooldown period
After a withdrawal from a specific obligation triggers the throttle, a pool-defined cooldown (withdraw_scarcity_cooldown_s) prevents immediate sequential withdrawals from the same obligation. Each DepositPosition tracks a last_scarcity_withdraw_ts (the timestamp of the last scarcity withdrawal), enabling per-position cooldown enforcement.
For example, if the cooldown is set to 300 seconds, a user who withdraws under high utilization must wait 5 minutes before withdrawing again from the same position — even if the amount is small.
Scarcity exit fee
In extended high-utilization mode, the protocol can apply an additional exit fee that scales linearly from 0 up to withdraw_max_scarcity_fee_bps as utilization increases beyond the threshold. This fee discourages exits during a liquidity crunch and can be directed to the insurance fund or other protocol beneficiaries.
Design intent
Users can still exit under stress, but not in a way that empties the pool faster than it can recover. The combination of per-transaction caps, per-position cooldowns, and escalating fees creates a controlled exit path: large holders cannot drain the pool in a single block, and the cost of exiting rises with the severity of the liquidity shortfall. Normal-sized withdrawals at moderate utilization are unaffected.