Skip to content

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.