Back to skills
extension
Category: Development & EngineeringNo API key required

turbos

This skill should be used when the user asks about Turbos Finance, Turbos CLMM, Turbos DEX, Turbos concentrated liquidity, or wants to integrate with Turbos on Sui. Covers swaps, multi-hop routing, position management, liquidity provision, and pool queries.

personAuthor: jakexiaohubgithub

Turbos Finance on Sui

Turbos is a concentrated liquidity market maker (CLMM) DEX on Sui. Like Cetus, it uses a Uniswap V3-style tick-based AMM, but pools are parameterized with a third type parameter T2 representing the fee tier.

Package IDs

| Package | Original ID | Description | |---------|------------|-------------| | CLMM Core | 0x91bfbc386a41afcfd9b2533058d7e915a1d3829089cc268ff4333d54d6339ca1 | Pool, position, swap, fee logic |

Source Files

Decompiled Move source: packages/mainnet_most_used/0x54/61b2aa79e5da5057da1d51c6e988354bcd974328128edbf5c3d38a4c4ab75e/decompiled_modules/

Architecture

  • Pool<T0, T1, T2>: CLMM pool where T2 is a fee tier witness type (e.g., fee::FeeType500, fee::FeeType3000, fee::FeeType10000)
  • TurbosPositionNFT: Owned NFT referencing a position in the Positions table
  • Positions: Shared object storing all position data (keyed by NFT address)
  • Fee<T0>: Fee tier configuration (fee amount + tick spacing)
  • Versioned: Version gate for upgradeable contracts
  • PoolConfig: Pool registry tracking deployed pools

Key Modules

| Module | Purpose | |--------|---------| | pool | Pool struct, flash swap, state queries, tick/position lookups | | swap_router | Entry points for single-hop and multi-hop swaps | | position_manager | Mint, burn, increase/decrease liquidity, collect fees/rewards | | pool_factory | Pool deployment, protocol fee collection, admin operations | | pool_fetcher | Read-only swap simulation, tick fetching | | fee | Fee tier types and configuration | | position_nft | TurbosPositionNFT struct and accessors | | math_swap | Core swap computation math | | math_liquidity | Liquidity <-> amount conversions |

Common Integration Patterns

Swap A to B

// Single-hop swap (entry function)
swap_router::swap_a_b<CoinA, CoinB, FeeType>(
    pool, coins_in, amount, amount_threshold,
    sqrt_price_limit, amount_specified_is_input,
    recipient, deadline, clock, versioned, ctx
);

// With return value (programmable)
let (coin_out, coin_remaining) = swap_router::swap_a_b_with_return_<CoinA, CoinB, FeeType>(
    pool, coins_in, amount, amount_threshold,
    sqrt_price_limit, amount_specified_is_input,
    recipient, deadline, clock, versioned, ctx
);

Swap B to A

swap_router::swap_b_a<CoinA, CoinB, FeeType>(
    pool, coins_in, amount, amount_threshold,
    sqrt_price_limit, amount_specified_is_input,
    recipient, deadline, clock, versioned, ctx
);

Multi-Hop Swap (A->B->C)

swap_router::swap_a_b_b_c<A, B, FeeAB, B, C, FeeBC>(
    pool_ab, pool_bc, coins_in, amount, amount_threshold,
    sqrt_price_limit_ab, sqrt_price_limit_bc,
    amount_specified_is_input, recipient, deadline,
    clock, versioned, ctx
);

Mint Position (Add Liquidity)

position_manager::mint<CoinA, CoinB, FeeType>(
    pool, positions, coins_a, coins_b,
    tick_lower_index, tick_lower_is_neg,
    tick_upper_index, tick_upper_is_neg,
    amount_a_desired, amount_b_desired,
    amount_a_min, amount_b_min,
    recipient, deadline, clock, versioned, ctx
);

Decrease Liquidity + Collect

position_manager::decrease_liquidity<CoinA, CoinB, FeeType>(
    pool, positions, nft, liquidity_delta,
    min_amount_a, min_amount_b, deadline,
    clock, versioned, ctx
);
position_manager::collect<CoinA, CoinB, FeeType>(
    pool, positions, nft, amount_a_max, amount_b_max,
    recipient, deadline, clock, versioned, ctx
);

Pool Queries

let (balance_a, balance_b) = pool::get_pool_balance<T0, T1, T2>(pool);
let sqrt_price = pool::get_pool_sqrt_price<T0, T1, T2>(pool);
let tick = pool::get_pool_current_index<T0, T1, T2>(pool);
let liquidity = pool::get_pool_liquidity<T0, T1, T2>(pool);
let fee = pool::get_pool_fee<T0, T1, T2>(pool);

Compute Swap Result (read-only quote)

let result = pool_fetcher::compute_swap_result<T0, T1, T2>(
    pool, a_to_b, amount, by_amount_in,
    sqrt_price_limit, clock, versioned, ctx
);

Related Skills

  • cetus -- Primary CLMM DEX on Sui (similar architecture, no fee type param)
  • deepbook -- CLOB DEX
  • kriya -- AMM/PMM DEX
  • sui-framework -- Core Coin, Balance types