maxNetExposure ceiling the protocol uses to gate position opens, hedged longs and shorts in the same (pair, maturity) bucket offset each other — a perfectly hedged book reads near-zero utilization regardless of how large the gross open interest is.
Utilization Formula
| Variable | Type | Description |
|---|---|---|
sumAbsBucketExposure | Onchain: stored in PoolVault | Sum of |netExposure| across every active (pair, fixingTimestamp) bucket. Maintained incrementally on every position open/close/increase/reduce. |
BPS_DENOMINATOR | Constant | 10,000 (basis point scaling constant) |
maxNetExposure | Computed: read from RiskManager | totalAssets × netExposureCapFactorBps / stressMoveBps. The same ceiling that gates new position opens. |
PoolVault.riskCapacityUtilization().
If
maxNetExposure returns 0 (e.g. empty vault) and sumAbsBucketExposure is non-zero, utilization returns type(uint256).max so the withdrawal gate trips. When both are zero, utilization is 0.Maximum Utilization Cap
The protocol enforces a configurable cap on utilization:| Parameter | Default | Description |
|---|---|---|
maxRiskCapacityBps | 8,000 (80%) | Maximum allowed utilization after any withdrawal |
maxRiskCapacityBps. If it would, the withdrawal is blocked.
Maximum Withdrawable Amount
The vault computes the maximum USDC that can be withdrawn without breaching the cap. Inverting the utilization formula and solving for the minimum retained assets gives:maxWithdrawable returns 0.
Worked Examples
One-sided book — 95k long, no hedge, 120k pool
One-sided book — 95k long, no hedge, 120k pool
| Metric | Value |
|---|---|
| Total Assets | 120,000 USDC |
| sumAbsBucketExposure | 95,000 USDC (all in one bucket) |
| netExposureCapFactorBps / stressMoveBps | 10,000 / 200 |
| maxNetExposure | 120,000 × 50 = 6,000,000 USDC |
| riskCapacityUtilization | 95,000 × 10,000 / 6,000,000 ≈ 158 bps (1.58%) |
| Max Utilization Cap | 8,000 bps (80%) |
Hedged book — 50k long + 45k short same bucket, 120k pool
Hedged book — 50k long + 45k short same bucket, 120k pool
| Metric | Value |
|---|---|
| Total Assets | 120,000 USDC |
| Gross Notional | 95,000 USDC |
| sumAbsBucketExposure | |50,000 − 45,000| = 5,000 USDC |
| maxNetExposure | 6,000,000 USDC |
| riskCapacityUtilization | 5,000 × 10,000 / 6,000,000 ≈ 8 bps (0.08%) |
Why Cap Utilization?
The cap serves four purposes: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.
Ensure settlement liquidity
Matured positions must be settled with USDC payouts to profitable traders. The reserve ensures funds
are always available.
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.
Dynamic Utilization Changes
Utilization changes with every position operation:| Event | Effect on Utilization |
|---|---|
| Position opened (new direction) | sumAbsBucketExposure increases, utilization rises |
| Position opened (hedging an open trade in the same bucket) | sumAbsBucketExposure decreases, utilization falls |
| Position closed | sumAbsBucketExposure decreases, utilization falls |
| LP deposits USDC | totalAssets and maxNetExposure increase, utilization falls |
| LP withdraws USDC | totalAssets and maxNetExposure decrease, utilization rises |
Disabling the Utilization Cap
SettingmaxRiskCapacityBps to 0 disables the restriction entirely.
Querying Utilization Onchain
Related Pages
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.