Skip to main content
Utilization tells you how much of the pool’s capital is backing open trades. When utilization is high, withdrawals may be temporarily restricted to protect traders with open positions — the pool needs to keep enough USDC on hand to settle profitable trades and absorb potential losses. Pool utilization measures how much of the vault’s USDC is committed to backing open trader positions. The protocol enforces a maximum utilization cap to ensure the pool always maintains sufficient liquidity to settle positions and absorb potential losses. When utilization is high, LP withdrawals are restricted.

Utilization Formula

notionalUtilization = (grossNotional * BPS_DENOMINATOR) / totalAssets
The result is expressed in basis points (bps), where 10,000 bps = 100%.
VariableTypeDescription
grossNotionalOnchain: stored in PoolVaultSum of all open position notional values, regardless of direction (LONG or SHORT)
BPS_DENOMINATORConstant10,000 (basis point scaling constant)
totalAssetsOnchain: ERC-4626 vault balanceUSDC balance held by the vault contract
Utilization itself is Computed — derived at query time from the two onchain values above.
If totalAssets is zero, utilization returns 0 to avoid division by zero. This edge case occurs only when the vault is completely empty (no deposits and no open positions).

Maximum Utilization Cap

The protocol enforces a configurable cap on utilization:
ParameterDefaultDescription
maxUtilizationBps8,000 (80%)Maximum allowed utilization after any withdrawal
When an LP attempts to withdraw, the vault checks whether the resulting utilization would exceed maxUtilizationBps. If it would, the withdrawal is blocked.
The utilization cap is a hard constraint. If the pool’s utilization is already at or above 80%, no withdrawals are possible until positions close and utilization decreases. This is by design — it prevents a liquidity crisis during periods of high exposure.

Maximum Withdrawable Amount

The vault computes the maximum USDC that can be withdrawn without breaching the utilization cap:
maxWithdrawable = totalAssets - (grossNotional * BPS_DENOMINATOR / maxUtilizationBps)
If the computed value is negative (utilization already exceeds the cap), maxWithdrawable returns 0.

Worked Example

MetricValue
Total Assets1,000,000 USDC
Gross Notional600,000 USDC
Current Utilization6,000 bps (60%)
Max Utilization Cap8,000 bps (80%)
maxWithdrawable = 1,000,000 - (600,000 * 10,000 / 8,000)
                = 1,000,000 - 750,000
                = 250,000 USDC
An LP can withdraw up to 250,000 USDC before the pool hits 80% utilization.

Why Cap Utilization?

The utilization cap serves four critical purposes:
1

Prevent bank-run dynamics

Without a cap, LPs could race to withdraw during adverse conditions, leaving the pool unable to honor its obligations. The cap ensures an orderly withdrawal process.
2

Ensure settlement liquidity

Matured positions must be settled with USDC payouts to profitable traders. The reserve ensures funds are always available.
3

Absorb potential bad debt

If a position’s losses exceed its locked margin, the pool absorbs the shortfall. A minimum reserve provides a buffer for these events.
4

Maintain healthy reserve ratios

A well-capitalized pool can support more trading activity, collect more fees, and offer better risk characteristics for all participants.

Dynamic Utilization Changes

Utilization is not static — it changes with every position operation:
EventEffect on Utilization
Position openedGross notional increases, utilization rises
Position closedGross notional decreases, utilization falls
Position increasedGross notional increases, utilization rises
Position reducedGross notional decreases, utilization falls
LP deposits USDCTotal assets increases, utilization falls
LP withdraws USDCTotal assets decreases, utilization rises
When a new LP deposits, totalAssets increases, which decreases utilization and increases maxWithdrawable for all LPs. New deposits expand the pool’s capacity and make it easier for existing LPs to withdraw.
When positions mature and are settled, grossNotional decreases. If traders were collectively losing, totalAssets also increases (pool gains). Both effects reduce utilization, freeing up more USDC for withdrawal.
Yes. If the pool pays out large trader profits during settlement, totalAssets decreases while grossNotional stays the same (other positions are still open). This can push utilization above the cap temporarily. In this state, no withdrawals are possible until utilization naturally decreases as positions close.

Disabling the Utilization Cap

Setting maxUtilizationBps to 0 disables the restriction entirely, allowing unlimited withdrawals regardless of open exposure.
Disabling the utilization cap removes a critical safety mechanism. It is only appropriate for controlled testing environments or during protocol wind-down when all positions are being closed. On the M2 Sepolia deployment, the cap is set to the default of 8,000 bps (80%).

Querying Utilization Onchain

import { poolVaultAbi } from "@nile-markets/sdk";

// Read current gross notional
const grossNotional = await publicClient.readContract({
  address: POOL_VAULT_ADDRESS,
  abi: poolVaultAbi,
  functionName: "grossNotional",
});

// Read total assets
const totalAssets = await publicClient.readContract({
  address: POOL_VAULT_ADDRESS,
  abi: poolVaultAbi,
  functionName: "totalAssets",
});

// Compute utilization in basis points
const utilizationBps = totalAssets > 0n
  ? (grossNotional * 10_000n) / totalAssets
  : 0n;

// Read max withdrawable for a specific address
const maxWithdrawable = await publicClient.readContract({
  address: POOL_VAULT_ADDRESS,
  abi: poolVaultAbi,
  functionName: "maxWithdraw",
  args: [userAddress],
});

ERC-4626 Vault

How the vault operates and tracks exposure.

Deposit & Withdraw

Step-by-step guide for LP operations.

Pool Exposure Caps

How the risk manager limits pool-level exposure.