An overview of how Paradex's unique continuous funding mechanism works
Mechanism
The funding mechanism calculates the funding PnL for each open perpetual position. This PnL is realised when the position size changes after a trade.
The accrued funding contributes to the total unrealized PnL (hence to the account value). The accrued funding PnL is calculated in USDC (settlement asset).
In order to reduce on-chain transaction spikes, Paradex has a continuous accrual mechanism. Funding is continuously accrued on an account with a perpetual futures position and the entire unrealized funding PnL of that account's position is settles every time the position is adjusted on-chain.
Funding Premium
At a given time t, the Funding Premium represents the 8h amount paid by long positions to short positions. This value expressed in the settlement asset of the instrument (USDC) and depends on the Funding Rate using the relationship :
The Funding Rate is derived from Fair Basis by applying interest rate clamping and by constraining the resulting value to the interval [ − 𝑀 , + 𝑀 ] where M is the Maximum Funding Rate.
At a global level, a Funding Index calculates accrued funding for 1 unit of the asset since launch and is calculated as a time-weighted sum of the Funding Premium :
Funding Index (current timestamp)=∫launch timestampcurrent timestampFunding Premium(t) dt
The Funding Premium is updated along with the mark price (every 5 seconds). This triggers an update of the funding index. The Funding Premium corresponds to the USDC amount paid by 1 unit of the contract continuously after 8h if the prices remain unchanged.
At any point in time, the Current Funding Index can be calculated as :
Current Funding Index=Last Cached Funding Index+Funding Premium∗8∗3600current timestamp−cached timestamp
where timestamps are expressed in seconds.
Accrued Funding
The Accrued (Unrealized) Funding of an open perpetual position depends on the change in the funding index since its last cached value (from last trade) :
Accrued Funding PnL=−Perpetual Position Size∗(Current Funding Index - Cached Funding Index)∗USDC Oracle Price
where Perpetual Position Size is a signed position size (positive in case of a long position, negative in case of short position)
Whenever the account updates an existing perpetual position, accrued funding is realised :
Funding Realized PnL=−Previous Perpetual Position Size∗(Current Funding Index - Cached Funding Index)
Alice enters a long position of size 50 XYZ-USD-PERP at t0
For example simplicity, we assume prices stay unchanged for 1 hour, i.e. the Funding Premium remains the same :
Funding Index XYZ-USD-PERP(t0+1hour)=Funding Index XYZ-USD-PERP(t0)+81∗Funding Premium XYZ-USD-PERP(t0)=1’000+812=1’001.5USDC
Within the past hour, Alice accrued a Funding Loss equal to : 50∗(1′001.5−1′000.0)=75USDC
Note that this negative PnL affects Alice's account value but is not reflected in the USDC balance until Alice's next XYZ-USD-PERP trade.
Exactly at t0+1hour, XYZ-USD-PERP Mark Price jumps to 118. However, XYZ Spot Oracle Price remains unchanged. The funding premium now increases to 18USDC
Assuming prices do not change during the next 2 hours (i.e. until t0+3hours), the funding index becomes : Funding IndexXYZ-USD-PERP(t0+3hours)=1′001.5+82∗18=1′006USDC
Alice's funding loss increases to 50∗(1′006−1′000.0)=300USDC
Alice decides to increase the long position size by successfully submitting a market order. This results in the previous accrued funding loss of 300 USDC to be realized (i.e. USDC balance is debited by 300) and accrued funding to be reset to zero.