Skip to content
TradePerpetuals9 pages
What a perpetual future isFoundationA perpetual future is a contract on an asset's price that never expires, kept close to that price by an hourly payment between longs and shorts.Contract specificationsPractitionerEvery Hyperliquid perp is a linear contract on 1 unit of its asset, defined by size decimals, maximum leverage, a margin table and a margin mode.FundingPractitionerFunding is an hourly payment between longs and shorts, set by how far the perp trades from the oracle price, that ties a contract with no expiry to its index.Margin: cross, isolated and margin tiersPractitionerMargin is the collateral behind a perp: initial margin to open, maintenance margin to stay open, shared in cross mode or ring-fenced in isolated mode.Leverage and liquidationPractitionerBelow maintenance margin, positions go to the order book as market orders; below two thirds of it, the liquidator vault takes them over.Auto-deleveragingExpertWhen an account goes below zero, auto-deleveraging closes the most profitable, most leveraged opposing positions at the previous mark price, leaving no bad debt.Hyperps and index perpetualsPractitionerHyperps fund against a moving average of their own mark price until spot trading exists; index perps track a formula the validators publish.AMM-priced perpetualsExpertSome perps price off a Uniswap V2 or V3 pool instead of exchange spot prices, and are isolated only, with margin locked in until the position closes.DelistingPractitionerWhen validators vote to delist a perp, positions settle at the 1-hour time-weighted oracle price before the vote and no new orders are accepted.

Settlement

Practitioner

Settlement posts one fraction per outcome, converts every Yes to it and every No to the rest in the quote token, then prunes the outcome from the live list.

One settler per outcome decides what happened, and posting its fraction pays every holder in the same step. Trading stops on a known result.

Take outcome 95, which asked whether BTC would be at or above 77,363 at 06:00 UTC on 2026-05-26. The protocol settled it at a price of 76,876.9, below the target:

  • settleFraction was "0.0" → every Yes converted to 0.
  • Every No converted to 1 USDC, before fees.
Settler Markets How
The protocol its own recurring markets (class: descriptions) on a fixed cadence; the settled record carries the price used in details, such as price:76876.9
The deployer every template market it registered usually through an API wallet with one signature, or a sub-deployer granted settle permission; only its own outcomes and questions

The settle fraction f goes to side 0 (Yes), 1 - f to side 1. A standalone outcome may settle to any fraction, such as "0.66" for a scalar; aiModelHeadToHead, sportsContestWinner, sportsOverUnderMarket and sportsScalarMarket allow 0.5 for a draw or a void, and the scalar templates settle to exact fractions.

A question has exactly one winner, settled either way below. The fallback is never named: it settles to 0 automatically when the winner is posted.

Path How
settleQuestion2 every remaining named outcome in one action, one at 1 and the rest at 0
settleOutcome one at a time: losers to 0 in any order, then the last remaining outcome may settle to 1, which settles the question

A recurring binary settles Yes if the mark price, linearly interpolated to the settlement time, is at or above the target:

Yes if markPrice0 + (settlementTime - t0) / (t1 - t0) * (markPrice1 - markPrice0) >= targetPrice
t0, t1 = timestamps of the mark price updates immediately before and after settlementTime

Recurring price buckets use the same price. binaryPrice and scalarPrice use a TWAP over a stated number of seconds, and priceTouch can settle as soon as the price touches its target.

  • Every holder receives one settlement fill; the losing side’s has a notional of 0.
  • The outcome is pruned from outcomeMeta (listed means unsettled), in practice within about a minute.
  • settledOutcome still answers for pruned outcomes (verified on 69 ids), with the spec, settleFraction and details.
  • The deployer’s active-outcome capacity is freed.
Item Value
settleFraction decimal string from "0" to "1"
Question outcome fraction exactly "0" or "1"
Payout per Yes f quote tokens
Payout per No 1 - f quote tokens
details on a deployer settlement must be empty
Precompile 0x814 settledValue 1e8 = 1.0
General settlement window none; sports templates publish a resolutionDeadline, price templates only a time
Fee closing side only, base spot rate x (scale + max(scale, 1)), scale from 0 to 10
Maker rebates none on outcomes

Fees. Of the scale + max(scale, 1) multiplier, the deployer keeps scale, its fee scale, and the protocol the rest. Referral discounts apply; accounts that would earn a maker rebate pay zero on outcome maker orders instead (fees, deployer economics).

Arm the dead man’s switch. Once a result is knowable, a resting order at the old price is a free option for whoever sees it first. scheduleCancel cancels every open order at a time at least 5 seconds ahead, up to 10 times a day (reset at 00:00 UTC); omitting time clears it (orders).

Know the rule: an interpolated mark for recurring binaries, a TWAP for binaryPrice. A single mark print misleads near the threshold.

Nothing to claim. Quote tokens replace the outcome tokens in the spot balance.

{"type": "settledOutcome", "outcome": 95}
{
"spec": {
"outcome": 95,
"name": "Recurring",
"description": "class:priceBinary|underlying:BTC|expiry:20260526-0600|targetPrice:77363|period:1d",
"sideSpecs": [{"name": "Yes"}, {"name": "No"}],
"quoteToken": "USDC"
},
"settleFraction": "0.0",
"details": "price:76876.9"
}

For a question outcome the response also carries the parent question’s description, the only way to recover bucket bounds after pruning.

From the HyperEVM, precompile 0x814 outcomeStatus(uint32 outcome) returns (uint8 status, uint64 settledValue, uint32 question):

status Meaning
0 never existed
1 active
2 settled; settledValue readable, 1e8 = 1.0
3 settled and pruned; settledValue gone

question is the maximum uint32 for a standalone outcome. Read or record settledValue while the status is 2: precompiles answer only at the latest block (precompiles).

To detect settlement, watch for the outcome to leave outcomeMeta, then read settledOutcome. The settlement actions (settleOutcome, settleQuestion2) and their exact-match name fields are on settling outcomes.

  • settleQuestion is discontinued for settleQuestion2; a sub-deployer grant for settleQuestion authorises settleQuestion2.
  • A deployer settlement must repeat nameAndDescription and sideNames exactly: copy them from outcomeMeta.
  • Neither path settles the fallback to 1. For an “other” answer, register it as a named outcome, as the docs’ example does.
  • Settlement fills never carry a builder code. Mixing them into trading volume inflated one dataset’s total by about $20M (measuring volume).
  • Slashing for wrong or late settlement was in the design announced in July; the testnet release that followed disclaimed it for late settlement, and none has been observed on mainnet.

To leave before settlement, see Split, merge, negate.