Funding
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.
A 1 per cent premium, worked
Section titled “A 1 per cent premium, worked”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.0005F (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 shortsThe docs stop at F; the last two lines apply their own hourly and payment rules.
Five steps from premium to payment
Section titled “Five steps from premium to payment”The formula gives an 8-hour rate, paid hourly at one eighth.
-
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_pxIt’s 0 whenever the oracle price sits between impact bid and ask.
-
Average the samples over the hour into P.
-
Add the interest rate I (0.01 per cent per 8 hours), clamped:
F = P + clamp(I - P, -0.0005, 0.0005) -
Pay F / 8 each hour, capped at 4 per cent an hour for every asset.
-
Settle
position_size * oracle_price * hourly_rateagainst 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).
Hence most assets show the same rate: in a mainnet read on 28 September 2026, 154 of 178 listed, non-delisted assets on the validator-operated dex had funding of exactly 0.0000125. The 4 per cent hourly cap is an 8-hour F of 32 per cent, needing an average premium above 32.05 per cent: a backstop on a vanilla perp, not an operating limit.
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
predictedFundingsread 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).
HIP-3 dexes tune funding per asset
Section titled “HIP-3 dexes tune funding per asset”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 - 1The 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.
Hyperps fund against their own average
Section titled “Hyperps fund against their own average”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.
The numbers
Section titled “The numbers”| Parameter | Value |
|---|---|
| Formula (8-hour) | F = P + clamp(I - P, -0.0005, 0.0005) |
| Interest rate I | 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 | 4% per hour, independent of asset |
| 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 |
Reading funding from the API
Section titled “Reading funding from the API”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, 28 September 2026) |
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 the same read, all 210 multiplier entries on 10 HIP-3 dexes were between 0 and 1: 130 at 0.5, 28 at 0 (funding scaled to zero).
Asset contexts carry no next-payment time, so estimate the hour boundary:
const nextFundingMs = Math.ceil(Date.now() / 3_600_000) * 3_600_000;Gaps between the docs and the chain
Section titled “Gaps between the docs and the chain”-
nextFundingTimeis only inpredictedFundings, per coin and venue besidefundingRate, first perp dex only. One production integration annualises each venue with itsfundingIntervalHours, skipping nulls. The mainnet read on 28 September 2026:Field Value fundingIntervalHours,HlPerp1, on all 234 coins fundingIntervalHours,BinPerpandBybitPerp4 or 8 for most entries Null venue entries 69 HlPerpnextFundingTimeevery one on an exact hour -
premiumandfundingcover different windows. On 28 September 2026 BTC showedpremium-0.00052 besidefunding0.0000125; that premium averaged over the hour would give a negative rate. The docs do not say which window each covers: do not rebuildfundingfrom onepremiumread. -
Multiplier and cap order is undocumented: a HIP-3 multiplier may apply before or after the 4 per cent hourly cap.
For how the oracle price is built, see Oracles and mark prices. To trade funding against spot and the borrow rate, see Carry.