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.
You are reading v1.0.4-beta, an older version of HyperBooks.Read the latest version, v1.0.6-beta

Funding

Practitioner

Funding 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.

A perp never settles, so for as long as you hold one, you pay or receive funding every hour. It’s peer to peer, with no protocol fee (what a perpetual future is). For consistency with centralised exchanges, a fixed interest component is added: per the docs, the cost of borrowing dollars minus that of the crypto asset.

The docs’ example: you hold 10 contracts long, the oracle price is 10,000 and the impact bid sits at 10,100 all hour.

premium = (10,100 - 10,000) / 10,000 = 0.01 (1%)
clamp(I - P) = clamp(-0.0099, -0.0005, 0.0005) = -0.0005
F (8-hour) = 0.01 - 0.0005 = 0.0095 (0.95%)
hourly rate = 0.0095 / 8 = 0.0011875 (0.11875%)
payment, 10 long = 10 * 10,000 * 0.0011875 = 118.75 USDC paid to shorts

The docs stop at F; the last two lines apply their own hourly and payment rules.

The formula gives an 8-hour rate, paid hourly at one eighth.

  1. Measure the premium every 5 seconds. The impact bid and ask are the average prices for selling and buying the impact notional (table below) against the book. The premium is the part of that spread outside the oracle price:

    impact_price_difference = max(impact_bid_px - oracle_px, 0) - max(oracle_px - impact_ask_px, 0)
    premium = impact_price_difference / oracle_px

    It’s 0 whenever the oracle price sits between impact bid and ask.

  2. Average the samples over the hour into P.

  3. Add the interest rate I (0.01 per cent per 8 hours on validator-operated perps), clamped:

    F = P + clamp(I - P, -0.0005, 0.0005)
  4. Pay F / 8 each hour, capped at 0.5 per cent an hour for every asset.

  5. Settle position_size * oracle_price * hourly_rate against each position, valued at the oracle price, not the mark price. A positive rate means longs pay shorts.

The dead band: most assets pay the interest rate alone

Section titled “The dead band: most assets pay the interest rate alone”

When P is within 0.05 per cent of I, the clamp cancels P and F = I exactly (the band in the table). Outside it, F is the premium less 0.05 per cent (above) or plus 0.05 per cent (below).

8-hour funding rate F average premium P F = P F = P + 0.05% F = P - 0.05% dead band: F = 0.01% -0.04% +0.06%
The 8-hour rate against the hour's average premium: inside the band it is the interest component alone. The hourly payment is F / 8.

Hence most assets show the same rate: in a mainnet read, 140 of 179 listed, non-delisted assets on the validator-operated dex had funding of exactly 0.0000125. The 0.5 per cent hourly cap is an 8-hour F of 4 per cent, needing an average premium above 4.05 per cent: a backstop on a vanilla perp, not an operating limit. Older docs gave the cap as 4 per cent an hour, and the docs do not say whether the protocol or only the page changed.

What this means for you:

  • At baseline a long pays shorts even with the perp on the oracle price.
  • Other venues paid every 4 or 8 hours in the predictedFundings read below: an hourly rate beside an 8-hour one understates it by a factor of 8.
  • Funding is booked hourly to your balance. In cross it changes account value, and so every cross position’s liquidation price (liquidation).

A HIP-3 dex uses a more responsive premium from the impact mid, with no zero region inside the spread:

premium = 0.5 * (impact_bid_px + impact_ask_px) / oracle_px - 1

The deployer can set three values per asset:

Setting Range Meaning
Funding multiplier 0 to 10 scales the funding rate
Interest rate -0.01 to 0.01, per 8 hours replaces the interest component
Funding clamp 0 to 0.01, per 8 hours; default 0.0003 bounds how far F can move from the average premium towards the interest rate

The default clamp (0.0003) is narrower than the validator-operated 0.0005, so the default HIP-3 dead band is the asset’s interest rate plus or minus 0.03 per cent.

A hyperp’s oracle price is an 8-hour moving average of its own mark price, and each premium sample is 1 per cent of the usual clamped interest and premium formula.

Parameter Value
Formula (8-hour) F = P + clamp(I - P, -0.0005, 0.0005)
Interest rate I, validator-operated 0.01% per 8 hours (0.00125% per hour)
Premium sampling every 5 s, averaged over the hour
Premium, validator-operated (max(impact_bid - oracle, 0) - max(oracle - impact_ask, 0)) / oracle
Premium, HIP-3 0.5 * (impact_bid + impact_ask) / oracle - 1
Impact notional 20,000 USDC for BTC and ETH; 6,000 USDC for all others
Payment interval 1 hour, at F / 8
Cap 0.5% per hour, independent of asset (4% in older docs)
Payment position_size * oracle_price * hourly_rate; positive rate, longs pay
Dead band average premium from -0.04% to +0.06% gives F = 0.01% exactly
Annualised, simple hourly rate x 24 x 365
Interest component, annualised 0.00125% x 24 x 365 = 10.95%
HIP-3 multiplier 0 to 10
HIP-3 interest rate -0.01 to 0.01 per 8 hours
HIP-3 clamp 0 to 0.01 per 8 hours, default 0.0003
Fee on funding none; peer to peer

The asset context carries the current rate as an hourly decimal fraction:

{
"funding": "0.0000125",
"premium": "0.00031774",
"impactPxs": ["14.3047", "14.3444"],
"oraclePx": "14.32",
"markPx": "14.3161"
}
Field or request What it gives
funding hourly rate; APR = funding x 24 x 365, in decimal arithmetic
impactPxs [impact_bid, impact_ask]
{"type":"fundingHistory","coin":"ETH","startTime":...} hourly coin, fundingRate, premium, time
userFunding a user’s payments, each a delta with type: "funding", coin, fundingRate, szi, usdc
userFundings (WebSocket) a snapshot, then payments on the hour
perpDexs HIP-3 settings: assetToFundingMultiplier (in the docs); also assetToFundingInterestRate and assetToFundingClamp (mainnet read)
setFundingMultipliers, setFundingInterestRates, setFundingClamps deployer actions that write them (operating a perp dex)

Reconcile a payment as usdc = -szi * oraclePx * fundingRate: both docs examples have the predicted signs (on a positive rate a long pays, negative usdc, and a short receives). In one read, all 236 multiplier entries on 10 HIP-3 dexes were between 0 and 1: 150 at 0.5, 29 at 0.6, 28 at 0 (funding scaled to zero), 1 at 1.

Asset contexts carry no next-payment time, so estimate the hour boundary:

const nextFundingMs = Math.ceil(Date.now() / 3_600_000) * 3_600_000;
  • nextFundingTime is only in predictedFundings, which returns fundingRate, nextFundingTime and fundingIntervalHours per coin for three venues, BinPerp, HlPerp and BybitPerp. It covers the first perp dex only: no HIP-3 coin appears. One production integration annualises each venue with its fundingIntervalHours, skipping nulls. A mainnet read:

    Field Value
    fundingIntervalHours, HlPerp 1, on all 235 coins
    fundingIntervalHours, BinPerp and BybitPerp 4 or 8 where set; 21 BinPerp entries had none
    Null venue entries 74
    HlPerp nextFundingTime the start of the current hour on every coin, already past

    So nextFundingTime is not the next payment: compute the hour boundary as above.

  • premium and funding cover different windows. In one read, 12 listed assets showed a premium outside the dead band beside funding 0.0000125, TRB at -0.00079; that premium averaged over the hour would give a negative rate. The docs do not say which window each covers: do not rebuild funding from one premium read.

  • Multiplier and cap order is undocumented: a HIP-3 multiplier may apply before or after the 0.5 per cent hourly cap. The lower cap makes this matter: applied first, a multiplier of 10 reaches the cap at an 8-hour F of 0.4 per cent; applied after, it could take the payment to 5 per cent an hour. In one read no multiplier exceeded 1 and the largest hourly funding on any HIP-3 dex was about 0.2 per cent, so no asset was at the cap.

For how the oracle price is built, see Oracles and mark prices. To trade funding against spot and the borrow rate, see Carry.