Fees

Trading fees are necessary to help sustain the protocol over the long term. They are broken out into 3 areas; position fees, funding fees, and borrowing fees.

Position Fees

Position fees are paid when opening, increasing or decreasing a position. They are based on position size and a trading rate that is set per asset as follows:

positionFee=posSize×positionRate[asset]positionFee = posSize \times positionRate[asset]
Asset ClassRate

BTC/ ETH

0.05%

Crypto Alts

0.06%-0.08%

Velocity-based Funding Fees

Innovation is the name of the game, and we've done just that! Traditional funding rates tend to have large downside for traders, who pay volatile funding fees in order to keep their positions healthy. By introducing velocity-based funding fees, Vela Exchange supports market making with a stable and predictable model, while massively reducing fees for traders.

Velocity-based Funding fees are in place to keep open interest balanced while maintaining appeal to market makers. By smoothing out the time it takes to reach the target funding rate, market makers are incentivized to balance OI and the reduce skew. All parties benefit from the resulting stability:

  • Traders experience more predictable, reduced funding fees

  • LPs benefit from reduced counterparty risk as OI skew becomes balanced

  • Market makers and traders can arbitrage on Vela Exchange in order to earn funding fees

How Does it work?

The funding rate is determined by the following variables:

  1. targetRate: the funding rate at which an equilibrium would be established (ie: fundingVelocity = 0) given OI and tempMaxRate do not change.

  2. tempMaxRate: the highest funding rate possible per asset, it varies with historical asset volatility

  3. longBias: ensures that longs pay shorts when OI is balanced by a small percentage. Defaulted to 2.5% for crypto assets and 0% for non-crypto assets.

  4. skewRatio: the difference between long and short OI divided by the total OI limit at that time

  5. velocityFactor: this determines the velocity at which the funding rate proceeds to the target rate. Defaulted to 24hrs for all assets.

  6. volatilityFactor: this is the output of the volatility and therefore risk associated with each asset; it is based on the average true range percent (ATR%) over the past 21d period

  7. openInterest (OI): the total amount of all open positions, per asset, per side (long/ short)

  8. maxRateFactor: a config parameter for mapping asset volatility to the maximum possible desired funding rate per asset. Defaulted to 0.5% for all assets.

skewRatio=longOIshortOIlongLimitOI+shortLimitOIskewRatio = \frac{longOI - shortOI}{longLimitOI + shortLimitOI}
tempMaxRate=maxRateFactor×volatilityFactortempMaxRate = maxRateFactor \times volatilityFactor
targetRate=tempMaxRate(skewRatio+longBias)targetRate = tempMaxRate * (skewRatio + longBias)
deltaRate=targetRatelastRatedeltaRate = targetRate - lastRate

The funding velocity can be expressed as:

dRdt=deltaRatevelocityFactor\frac{dR}{dt} = \frac{deltaRate}{velocityFactor }

Solving for funding rate,RR, as a function of time, tt, yields the following:

R(t)=targetRatedeltaRate×e(tvelocityFactor)R(t) = targetRate - deltaRate\times e^{(\frac{-t}{velocityFactor})}

From this is can be shown (given no changes in OI) that when t=velocityFactort=velocityFactor (24 hrs) then RR will have moved by approximately 63% of the deltaRate to target. For example assume BTC funding rate is currently 0.001%/h and Bob opens a large BTC long position making the new targetRate = 0.005%/h. If no other trades are made on BTC after this point then 24 hrs later the new fundingRate on BTC will be ~ 63% x (0.005 - 0.001) + 0.001 = 0.00352%/h.

Funding Fees

A funding index (unique to each asset) is introduced which is updated each time a trading event is triggered. It increases/decreases over time based on a positive/negative funding rate as follows:

fundingIndex=fundingRate×(currentTimestamplastTimestamp)fundingIndex = fundingRate \times (currentTimestamp - lastTimestamp)
deltaFundingIndex=fundingIndex[current]fundingIndex[posID]deltaFundingIndex = fundingIndex[current] - fundingIndex[posID]
fundingFee={posSize×deltaFundingIndex/1000000if LONGposSize×deltaFundingIndex/1000000if SHORTfundingFee =\begin{cases} posSize \times deltaFundingIndex/1000000 &\text{if } LONG \\ -posSize \times deltaFundingIndex/1000000 &\text{if } SHORT\end{cases}

For example, lets say: the user opens a 100k BTC long position and the current funding index for 15010.

A simple flow for illustration:

  1. user calls a function to open a new position which sets fundingIndex[posID] = 15010.

  2. user holds position for a few hours at which time they decide to close 80% of their position. Now, due to dynamic conditions with other users opening and closing BTC positions as well as BTC funding rate changing, the funding index for BTC is now 15510.

  3. user pays 80% * 100k * (15510 - 15010)/1000000 = $40

Borrow Fees

A borrow fee is implemented to help mitigate/offset the vault's risk of always taking the opposite side of each trade. The borrow fee will be based on the position size as well as the duration, in seconds, the position is held open.

borrowFee=posSize×borrowRate×durationborrowFee=posSize\times borrowRate \times duration

Borrow rate will be determined per asset by using each assets historical volatility. This is set manually, based on analysis, and will be periodically reviewed and updated to ensure the vault's risk is being managed appropriately.

Asset Risk

We use Average True Range (ATR) over a 21d period to determine an asset's risk to the vault. All fees are automatically and dynamically adjusted according to this percent in order to assign OI and fees.

Mint/ Redeem

Minting VLP incurs a fee of 0.05%. This fee will be waived during the Hyper VLP event.

Spread

This new mechanism will simulate an order book by adding a slippage percentage to each order that is proportional to the vault utilization and position size.

Each index token will have its own slippage factor that will be a function of the tokens historical volatility, that of which is most often correlated to depth of market.

deltaPercent=slippageFactor2×totalOI+posSize2×vaultTVLdeltaPercent = slippageFactor * \frac{2 \times totalOI + posSize}{2 \times vaultTVL}
executionPrice={markPrice×(1+deltaPercent)if LONGmarkPrice×(1deltaPercent)if SHORTexecutionPrice =\begin{cases} markPrice \times (1 + deltaPercent) &\text{if } LONG \\ markPrice \times (1 - deltaPercent) &\text{if } SHORT\end{cases}

Each index token will have its own slippage factor that will be a function of the tokens historical volatility, that of which is most often correlated to depth of market.

AssetCurrent Slippage Factor

BTC/USD

100

ETH/USD

100

LTC/USD

200

ADA/USD

200

DOGE/USD

200

SHIB/USD

200

ARB/USD

200

SOL/USD

200

MATIC/USD

200

AVAX/USD

200

ATOM/USD

200

DOT/USD

200

BNB/USD

200

PEPE/USD

400

XRP/USD

200

CRV/USD

150

MKR/USD

200

OP/USD

200

LINK/USD

200

INJ/USD

200

PYTH

400

BONK

400

TIA

400

SEI

400

SUI

400

KAS

400

TAO

400

NEAR

400

W

400

WIF

500

TON

400

FLOKI

400

MEME

400

BOME

500

UNI

300

FTM

300

AAVE

300

GMX

300

STX

300

ORDI

300

ZRO

300

TRX

300

POPCAT

300

POL

200

Slippage

Upon order confirmation of a new position users can also manually enter the max slippage that they are willing to accept as shown in the red box. The order will only execute if the execution price is less than the current mark price plus/minus (if long/short) the slippage percent entered here.

Last updated