Comment on page

Fees and Spread

Fees and spreads charged by the protocol

Overview of fees and spread types

Fee Type
Design and Goal
Opening Fee and Closing Fee
charged upon the total position size (collateral x leverage)
0.08% of position size
Base Spread
inversely related to the liquidity of the pair
0.025% for crypto and stocks
0% for FX
Price impact
depending on the position size of your trade, and on the liquidity of the pair on spot exchanges
  • used to prevent manipulating the spot price of assets listed on the platform in a profitable manner
price impact (%) = (open interest {long/short} + New trade position size / 2) / 1% depth {above/below}
Borrowing Fee
Allow traders to use lower leverages while maintaining solid risk management for the protocol
Borrowing fee = (current block - trade open block) * rollover fee per block % * trade collateral
Funding Fee
Aims to minimize the gap between long and short open interests to prevent very significant exposure on one side only on any trading pair
Accumulated funding fee per OI (long) += (Long OI - Short OI) * blocks elapsed * funding fee per block % / Long OI
Accumulated funding fee per OI (short) += (Short OI - Long OI) * blocks elapsed * funding fee per block % / Short OI


A base spread is considered to simulate a bid/ask spread on a CLOB exchange for execution price. Currently, a base spread of 0.025% is applied on the spot price returned from oracle. Spread only applies when opening a trade

Price Impact

Price impact is implemented to simulate execution price in a CLOB exchange mechanism and protects NLP holders from directional skew. As such, we take the current aggregate open interest on the platform plus half of the trade position size, divided by 1% of order book depth on a reference exchange. It is calculated as follows:
Price Impact(%)=Open interest long/short+new trade position size21%depth above/belowPrice~Impact(\%) = \frac{Open~interest~{long/short}+\frac{new~trade~position~size}{2}}{1\% depth~above/below}
Note: Price impact never applies when closing a trade


For crypto, 1% depth is calculated as the 1% depth of Binance multiplied by 2. Our pricing oracle uses the median price of 7 centralized exchanges, hence multiplying the depth of the most liquid exchange by 2 serves as a conservative measure
For stocks, the 1% depths are set at $10m (tier 1), $5m (tier 2), and $2.5m (tier 3) in both directions (long/short).
There is no price impact for FX.
Asset: BTC/USD
1% depth above: $20M
Long open interest: $500k
New trade position size: $200k (collateral x leverage)
The price impact (%): 500k + 200k/2 20m = 0.03%
Then add the spread (0.025%) → 0.03% + 0.025% = 0.055%.

Borrowing Fee

Borrowing fees simulate borrowing costs as the Narwhal platform provides synthetic leverage, and maintains solid risk management for the protocol.


Rollover fees are charged on the initial collateral of the trade and are tallied on a per-block basis. The rollover fee rate is annualized and then divided as a per-block fee, which assumes the BNB chain processes 28,800 blocks per day, or 10,512,000 blocks per year.
Rollover fee=(current blockopen trade block)×rollover fee per block%×trade collateralRollover~fee=(current~block-open~trade~block)\times rollover~fee~per~block \%\times trade~ collateral


Rollover fees should vary depending on the volatility of the underlying assets being traded, which is measured using the average true range (ATR) indicator, expressed as a percentage over the average closing price (ATRP):
TR=max[(HL),(HCp),(LCp)]TR =\max[(H-L), |(H-C_p)|, |(L-C_p)|]
ATR=(1n)i=1nTRiATR = (\frac{1}{n})\sum^{n}_{i=1}{TR}_i
Rollover fee per block=(4weekATR/4 week average price100)x×52blocks per yeary\text{Rollover fee per block} = \frac{(4 week ATR/\text{4 week average price}*100)^x\times 52}{blocks~per~year*y}
X = 1.25
Y = 20
10,512,000 is number of blocks per year on BNB Chain.
Current block: 1,010,000
Trade open block: 1,000,000
Rollover fee %: 157% = 0.00001% per block
Collateral: $1,000
Rollover fee = (1,010,000 - 1,000,000) * 0.00001/100 * 1,000 = 1

Funding Rate

To book perpetual exchanges, a funding rate is introduced to incentivize perpetual prices to trade at par to spot prices through a funding rate mechanism, where longs pay shorts if contracts are traded at a premium to spot, and vice versa. Narwhal Finance uses oracle-based pricing but includes a funding fee to incentivize neutral long-short skew to protect NLP holders better. Similar to rollover fees, funding fees are charged per-block basis. However, fees are charged on the total position size rather than the initial collateral.
Funding fee per block=(ATR%4 week average)x×52blocks per yeary\text{Funding fee per block} = \frac{(ATR\% 4~ week~average)^x\times 52}{blocks~per~year*y}
X = 1.25
Y = 60
Blocks per year on BNB 10,512,000, and on Arbitrum 126,144,000
ATR: Average True Range; calculated as:
TR=max[(HL),(HCp),(LCp)]TR =\max[(H-L), |(H-C_p)|, |(L-C_p)|]
ATR=(1n)i=1nTRiATR = (\frac{1}{n})\sum^{n}_{i=1}{TR}_i
Accumulated funding fee per OI (long)+=(long OIshort OI)×blocks elapsed×funding fee per block%long OIAccumulated~funding~fee~per~OI~(long)\mathrel{+}=\frac{(long~OI-short~OI)\times blocks~elapsed\times funding~fee~per~block\%}{long~OI}
Accumulated funding fee per OI (long)+=(short OIlong OI)×blocks elapsed×funding fee per block%short OIAccumulated~funding~fee~per~OI~(long)\mathrel{+}=\frac{(short~OI-long~OI)\times blocks~elapsed\times funding~fee~per~block\%}{short~OI}
Funding fee=(Current accumulated funding fee per OIInitial accumulated funding fee per OI)×trade collateral×trade leverageFunding~fee=(Current~accumulated~funding~fee~per~OI-Initial~accumulated~funding~fee~per~OI)\times trade~collateral\times trade~leverage
If the value is negative, it is added to the trade value just like positive PnL, and the liquidation price goes further away. If the value is positive, it is removed from the trade value just like negative PnL, making the liquidation price closer.
However, if the funding fee rate per block corresponds to 40% per year, it doesn’t mean that 40% will be charged at all times. It will only be the case if there is 0 exposure on the opposite side, as the funding rate is only applied to the net exposure of the pair.
For example, if there is $1m long exposure and $500k short exposure on this pair, the funding fees paid will be ($1m — $500k) * 40 / 100 = $200k per year, which represents a cost of 20% / year for longs and a reward of 40% / year for shorts.