Skip to main content DLMM is a concentrated liquidity AMM that uses a dynamic fee mechanism to adjust liquidity based on market conditions.
Price Calculation Formulas
price = ( 1 + bin_step BASIS_POINT_MAX ) active_id \text{price} = \left(1 + \frac{\text{bin\_step}}{\text{BASIS\_POINT\_MAX}}\right)^{\text{active\_id}}
price = ( 1 + BASIS_POINT_MAX bin_step ) active_id
Where:
BASIS_POINT_MAX = 10,000
Uses Q64.64 fixed-point arithmetic
Example: For bin_step = 10, price = (1.001)^active_id
Selling X for Y:
min_price = spot_price × BASIS_POINT_MAX − max_price_impact_bps BASIS_POINT_MAX \text{min\_price} = \text{spot\_price} \times \frac{\text{BASIS\_POINT\_MAX} - \text{max\_price\_impact\_bps}}{\text{BASIS\_POINT\_MAX}}
min_price = spot_price × BASIS_POINT_MAX BASIS_POINT_MAX − max_price_impact_bps
Selling Y for X:
min_price = spot_price × BASIS_POINT_MAX BASIS_POINT_MAX − max_price_impact_bps \text{min\_price} = \text{spot\_price} \times \frac{\text{BASIS\_POINT\_MAX}}{\text{BASIS\_POINT\_MAX} - \text{max\_price\_impact\_bps}}
min_price = spot_price × BASIS_POINT_MAX − max_price_impact_bps BASIS_POINT_MAX
Total Trading Fee
total_fee_rate = min ( base_fee_rate + variable_fee_rate , MAX_FEE_RATE ) \text{total\_fee\_rate} = \min(\text{base\_fee\_rate} + \text{variable\_fee\_rate}, \text{MAX\_FEE\_RATE})
total_fee_rate = min ( base_fee_rate + variable_fee_rate , MAX_FEE_RATE )
base_fee_rate = base_factor × bin_step × 1 0 base_fee_power_factor \text{base\_fee\_rate} = \text{base\_factor} \times \text{bin\_step} \times 10^{\text{base\_fee\_power\_factor}}
base_fee_rate = base_factor × bin_step × 1 0 base_fee_power_factor
variable_fee_rate = ( volatility_accumulator × bin_step ) 2 × variable_fee_control + OFFSET SCALE \text{variable\_fee\_rate} = \frac{(\text{volatility\_accumulator} \times \text{bin\_step})^2 \times \text{variable\_fee\_control} + \text{OFFSET}}{\text{SCALE}}
variable_fee_rate = SCALE ( volatility_accumulator × bin_step ) 2 × variable_fee_control + OFFSET
Where:
OFFSET = 99,999,999,999
SCALE = 100,000,000,000
composition_fee = swap_amount × total_fee_rate × ( 1 + total_fee_rate ) FEE_PRECISION 2 \text{composition\_fee} = \frac{\text{swap\_amount} \times \text{total\_fee\_rate} \times (1 + \text{total\_fee\_rate})}{\text{FEE\_PRECISION}^2}
composition_fee = FEE_PRECISION 2 swap_amount × total_fee_rate × ( 1 + total_fee_rate )
Where:
MAX_FEE_RATE = 100,000,000
L = price × x + y L = \text{price} \times x + y
L = price × x + y
Where:
L is liquidity
x and y are token amounts
Price is in Q64.64 format
liquidity_share = in_liquidity × liquidity_supply bin_liquidity \text{liquidity\_share} = \frac{\text{in\_liquidity} \times \text{liquidity\_supply}}{\text{bin\_liquidity}}
liquidity_share = bin_liquidity in_liquidity × liquidity_supply