Configuration
PoolConfig
Initialization
Available Actions
mint_position
mint_position
Description: Create a concentrated liquidity position in a tick range.Parameters:Mechanics:
tick_lower(i32): Lower tick boundarytick_upper(i32): Upper tick boundaryamount0_desired(u128): Desired amount of token0amount1_desired(u128): Desired amount of token1
- Calculate liquidity from desired amounts
- Compute actual amounts needed (may use less than desired)
- Mint position NFT (tracked by position_id)
- Update tick data and global liquidity if in range
- Deducts
amount0andamount1from wallet (actual used, not desired) - Refunds unused amounts
- Returns position_id
(position_id, amount0, amount1, liquidity)burn_position
burn_position
Description: Remove liquidity from a position.Parameters:Effects:
position_id(u64): Position ID to burnliquidity(u128): Amount of liquidity to remove
- Reduces position liquidity
- Credits
amount0andamount1to wallet - Removes position if liquidity reaches zero
(amount0, amount1)add_liquidity
add_liquidity
Description: Legacy action for full-range liquidity (backwards compatibility).Parameters:
token0(u32): Token0 IDtoken1(u32): Token1 IDamount0(u128): Amount of token0amount1(u128): Amount of token1
Internally converted to a full-range
mint_position call.remove_liquidity
remove_liquidity
Description: Legacy action to remove liquidity (backwards compatibility).Parameters:
shares(u128): Amount of liquidity to remove
Burns from the user’s largest position.
swap_exact_in
swap_exact_in
Description: Swap exact input amount using V3 sqrt price math.Parameters:Mechanics:
token_in(u32): Token ID to swap inamount_in(u128): Exact input amountmin_out(u128): Minimum output amount (slippage protection)
- Deduct fee:
amount_in_after_fee = amount_in * (10000 - fee_bps) / 10000 - Compute next sqrt price using V3 formula
- Calculate output using
get_amount0_deltaorget_amount1_delta - Update pool state (sqrt_price, current_tick)
- Deducts
amount_inof token_in from wallet - Credits
amount_outof token_out to wallet - Fails if
amount_out < min_out
Pool State
Current State
Position
View Methods
view_user
Returns user positions:view_market
Returns pool state:Usage Examples
Mint Concentrated Position
Swap with Slippage Protection
Full-Range Liquidity
Concentrated Liquidity Math
Liquidity Calculation
Given desired amounts and price range:Amount Deltas
Swap Math
Tick Spacing
Positions must align to tick spacing:- 0.01% → tick_spacing = 1
- 0.05% → tick_spacing = 10
- 0.30% → tick_spacing = 60
- 1.00% → tick_spacing = 200
Price from Tick
- tick = 0 → price = 1.0
- tick = 6932 → price ≈ 2.0
- tick = -6932 → price ≈ 0.5
Limitations
Advanced: Multi-Hop Swaps
For multi-hop swaps (e.g., ETH → USDC → DAI), execute multipleswap_exact_in actions:
See Also
- Protocol Overview - Registry setup
- Source:
source/protocols/uniswap-v3/src/lib.rs - Uniswap V3 Whitepaper