Skip to main content
Intention caps how much of a single contract any one user can hold. Without this cap, a handful of huge positions in a single contract could distort that market, bias funding for everyone else, and create concentrated systemic risk — the kind of concentration that leads to cascading liquidations and ADL events when volatility spikes. The cap is enforced per contract, per side (long and short), and includes both existing positions and resting open orders. Pure closing orders are exempt.

How the cap is computed

Intention uses a dual mechanism: an absolute cap plus a percentage-of-OI cap. The final cap is the larger of the two:
user_cap = max(platform_total_oi × oi_share_threshold, base_position_limit)
  • Absolute base limit. A fixed USD value (for instance, $1,000,000 by default). This ensures that in thin markets, new entrants still have room to trade even if total OI is tiny.
  • Percentage of platform OI. A percentage of the contract’s total platform OI (for instance, 10%). As the market grows, the cap scales with it.
Taking the larger of the two means a user is never unfairly restricted in an early-stage market and is never allowed to dominate a mature one.

Worked example

Default parameters: base_limit = $1,000,000, oi_share = 10%. Thin market. Platform total OI on the contract is 500,000.Usercapismax(500,000×10500,000. User cap is `max(500,000 × 10%, 1,000,000) = 1,000,000`. Early users are not over-restricted. Mature market. Platform total OI has grown to 20,000,000.Usercapismax(20,000,000×1020,000,000. User cap is `max(20,000,000 × 10%, 1,000,000) = 2,000,000`. The cap scales proportionally.

What the cap applies to

The cap applies to the user’s directional exposure plus open orders, measured in USD notional:
exposure = position_notional_at_mark + sum(open_order_notional)
Longs and shorts are capped independently. A user can hold a long position close to the cap on one side and still open new shorts on the other. If a new order would push the user’s exposure beyond the cap for its side, the order is rejected at submission. Pure close orders — ones that only reduce a position — are not restricted. The check runs both at order intake and at match time (as a post-check in the matching engine) to catch edge cases where state changes between submission and execution.

Master and sub-accounts

Limits apply to the master account, aggregating all sub-accounts. This prevents users from splitting a large position across many sub-accounts to bypass the cap. Every sub-account inherits the master’s limit.

Per-contract parameters

Each contract carries its own OI parameters:
ParameterDimensionDefault
oi_share_thresholdContract10%
base_position_limitContract$1,000,000 USD
Contracts can be individually tuned. Low-liquidity or high-risk markets may use tighter thresholds; highly liquid majors may use a larger absolute base.

Future extension

A whitelist system is planned so that designated users — for example, approved arbitrageurs and high-quality market makers — can have contract-specific overrides. Conversely, suspected bad actors can be given tighter per-user thresholds without affecting the contract default.
If you are an institutional market maker or liquidity provider and expect to hit these caps, reach out to the risk team before you are live on mainnet. Individual contract-level configurations can be provisioned during onboarding.

Relationship to ADL and liquidations

OI limits work in concert with the rest of the risk stack. By preventing any single user from running an outsized position, they make the tails of the loss distribution thinner — which means fewer hits on the liquidation vault and fewer ADL events. Risk control in layers: OI limits stop extreme concentration, leverage tiers adjust margin to position size, the vault backstops liquidations, and ADL is the final protective fence.