Fee Structure
Trading fees, maker rebates, and fee economics
Diffusal uses a fee model that funds the insurance fund while incentivizing liquidity provision. Fees are collected on all trades executed through the order book and RFQ system.
Important: Fees are the only USDC transferred at trade time. Premium obligations are recorded as
premiumBalanceand settle at expiry—no premium changes hands when opening a position.
Fee Types
| Fee Type | Description | Can Be Negative? |
|---|---|---|
| Maker Fee | Charged to order creators (limit order makers) | Yes (rebates) |
| Taker Fee | Charged to order fillers (market takers) | No |
| RFQ Fee | Charged on RFQ trades with the MMM | No |
Fee Calculation
Notional Value Calculation
For each trade, the fee basis (notional value) is calculated from the price and fill amount:
Note: This notional value is used for fee calculation only. No premium transfers occur at trade time — premiumBalance is updated for both parties and settles at expiry.
Order Book Fees
The order book uses a maker/taker fee model where fees are expressed in basis points (1 BPS = 0.01%):
RFQ Fees
RFQ trades have a dedicated fee rate separate from limit order fees:
Maker Rebates
The maker fee can be negative, creating a rebate system that incentivizes liquidity provision:
Positive makerFeeBps: Maker pays fee to protocol
Negative makerFeeBps: Protocol pays rebate to maker
Example with makerFeeBps = -5 (0.05% rebate), takerFeeBps = 10 (0.10%):
Trade notional: $1,000
Maker receives: $0.50 rebate
Taker pays: $1.00 fee
Protocol receives: $1.00 - $0.50 = $0.50 net
Note: premiumBalance is updated for both parties; no premium transfer occurs at trade time.Fee Flow
Order Book Fee Flow
Taker Fee (always positive): Taker pays feeRecipient.
Maker Fee (can be negative): If positive, maker pays feeRecipient. If negative, feeRecipient pays maker (rebate).
Net Result: Protocol always receives positive net fees (guaranteed by the fee invariant).
RFQ Fee Flow
The RFQ fee is always paid by the taker to the feeRecipient, regardless of trade direction. premiumBalance is updated for both parties, and net settlement is determined at expiry.
Fee Invariant
The protocol enforces:
This ensures net positive protocol revenue even with maker rebates.
Fee Recipient
The feeRecipient address receives all collected fees. This is the address of the insurance fund contract, which uses accumulated fees to cover shortfalls during liquidations and settlements.
Typical Parameters
These are recommended deployment parameters, not hardcoded contract defaults. Fees are configurable via setFees() and set during contract initialization.
| Parameter | Typical Value | Description |
|---|---|---|
makerFeeBps | 0 | Maker fee in BPS (can be negative) |
takerFeeBps | 10 | Taker fee in BPS (0.10%) |
rfqFeeBps | 10 | RFQ fee in BPS (0.10%) |
Fee Examples
Standard Fees
With makerFeeBps = 5 and takerFeeBps = 10:
On a $1,000 notional trade:
- Maker pays $0.50 to the protocol
- Taker pays $1.00 to the protocol
- Total protocol revenue: $1.50
premiumBalance updated for both parties; actual net settlement determined at expiry.
Maker Rebate
With makerFeeBps = -3 and takerFeeBps = 10:
On a $1,000 notional trade:
- Maker receives $0.30 from the protocol (rebate)
- Taker pays $1.00 to the protocol
- Net protocol revenue: $0.70
premiumBalance updated for both parties; actual net settlement determined at expiry.
Contract Implementation
Fee parameters are managed by the trading contracts:
- Order Book Fees: DiffusalOptionsOrderBook —
setFees(makerFeeBps, takerFeeBps),setFeeRecipient(address) - RFQ Fees: DiffusalOptionsRFQ —
setRFQFee(rfqFeeBps),setFeeRecipient(address)
Related
Protocol Documentation
- Order Book — Limit order trading and fee collection
- RFQ Flow — RFQ trading and fee structure
- Liquidation — Insurance fund that receives fees
Contract Documentation
- DiffusalOptionsOrderBook — Order book fee implementation
- DiffusalOptionsRFQ — RFQ fee implementation
- DiffusalInsuranceFund — Fee recipient contract