TopazTOPAZDocs

Liquidity

Concentrated Positions

Slipstream is Topaz's concentrated-liquidity engine — a fork of Aerodrome Slipstream, which adapts the Uniswap V3 design for the ve(3,3) flywheel. This page is the operating manual for LPing in Slipstream pools.

Pool identity: pair + tick spacing

A Slipstream pool is identified by (token0, token1, tickSpacing). The same pair can have multiple Slipstream pools — one per supported tick spacing. Each pool has its own price, its own liquidity, and its own fee. The router considers all of them when choosing a swap route, but as an LP you pick exactly one when minting.

ParameterValueDescription
10.01% default feeHighly correlated pairs (USDT/USDC, wrapped equivalents).
500.05% default feeTight-correlated pairs (ETH/stETH, BTC/WBTC) and low-volatility blue chips.
2000.30% default feeVolatile blue chip pairs.
20001.00% default feeLong-tail and emerging pairs.

The fees above are defaults at pool creation. Any individual pool's fee can be overridden by the protocol fee manager via the CustomSwapFeeModule (0%–3% range).

Default fees can be overridden per-pool via the CustomSwapFeeModule; a few pools may also have dynamic fees enabled via the DynamicSwapFeeModule. See Pool Fees.

Choosing a price range

The most important decision when minting. Range selection determines both your capital efficiency and your impermanent loss profile.

  • Tighter means more fees per dollar in range, more time spent out of range, and more sensitivity to IL when in range.
  • Wider means less fees per dollar but more passive — closer to v2-style exposure.
  • Both ticks must align to the pool's tick spacing. The app rounds your chosen prices to valid ticks automatically.
  • Tick range: −887,272 ≤ tick ≤ 887,272 (the pool's theoretical price domain). Picking the extreme ticks gives a full-range position.

For a deeper treatment of range strategy and the math behind capital efficiency, read Concentrated Liquidity and Impermanent Loss.

Minting a position

  1. 1Open app.topazdex.com/liquidity and pick the pair + tick-spacing tier.
  2. 2Set the price range. The app will show how much of each token you'll need.
  3. 3Approve each token once (one transaction per token).
  4. 4Mint. You receive an ERC-721 position NFT from the NonfungiblePositionManager. The NFT encodes the pool, range, liquidity, and fee accumulator.
  5. 5Optional: stake the NFT in the pool's gauge to earn TOPAZ emissions (you forfeit swap fees in exchange — staked positions earn emissions only).
One token at limit ticks
When you mint with the current price below your range, you deposit only the higher token (token1). When above your range, you deposit only token0. At the current price exactly inside the range, you deposit both. The app shows the ratio interactively as you adjust the range.

Managing an existing position

Position NFTs support four operations on the NonfungiblePositionManager contract:

  • increaseLiquidity — add more capital to the same NFT and range. Keeps fees accruing without minting a new position.
  • decreaseLiquidity — pull some or all liquidity from the position. The underlying tokens are transferred to the NFT's tokensOwed fields; you collect them in the next step.
  • collect — transfer accumulated fees and any decreased liquidity to a recipient (usually yourself). Pass type(uint128).max to drain both tokens.
  • burn — burn the NFT once liquidity is zero and fees are collected. Closes the position permanently.

Rebalancing

Concentrated-liquidity positions don't auto-adjust. If price moves out of your range, you have three options:

  • Wait for it to come back. The position stays valid; fees just don't accrue while out of range.
  • Withdraw and remint at a new range that brackets the current price. This is the standard 'rebalance' — and it crystallizes any IL since the last mint.
  • Mint additional positions at new ranges, keeping the old position open. Useful if you want exposure across multiple price bands.
Rebalancing isn't free
Each rebalance costs gas (mint + decrease + collect + burn or increase) and locks in IL. Frequent rebalancing on a volatile pair can eat fee earnings. If you can't actively manage, wider ranges or full-range positions are often better.

Working with ETH (BNB)

Slipstream pools hold WBNB, not native BNB. The position manager supports a multicall pattern to wrap-and-mint atomically:

solidity
bytes[] memory data = new bytes[](2);
data[0] = abi.encodeWithSelector(
    INonfungiblePositionManager.mint.selector,
    mintParams
);
data[1] = abi.encodeWithSelector(
    INonfungiblePositionManager.refundETH.selector
);
positionManager.multicall{value: bnbAmount}(data);

The app handles this for you when you check "use native BNB." The same pattern works for increaseLiquidity and for unwrapWETH9 on collect to receive native BNB instead of WBNB.

Staked vs unstaked positions

Slipstream lets you keep your position NFT in your wallet (unstaked) or deposit it into the pool's gauge (staked). The trade-off is structural:

ModeEarnsPays
UnstakedSwap fees from in-range tradesPool's unstaked-position fee (default 10%, max 50%) routed to staked LPs in the same pool — see Pool Fees.
StakedTOPAZ emissions based on gauge vote shareForfeits the swap fees on this position; those flow to voters via the FeesVotingReward contract.

Which is better depends on the gauge's emission rate vs. the fee yield. Active pools with low vote share may favor unstaked; pools with strong vote allocation often favor staked. See Staking in Gauges for the mechanics.

Common pitfalls

  • Ticks not divisible by tickSpacing → mint reverts. The app prevents this, but custom integrations need to round explicitly.
  • Token order matters: token0 must be the lower-address token. The app sorts for you; calling the contract directly does not.
  • Setting slippage too tight on the mint can cause MintTooLittle errors during volatile periods. Default 0.5–1.0% is usually fine.
  • Forgetting to collect fees before withdrawing — fees aren't auto-claimed on decreaseLiquidity, they sit in tokensOwed until you collect.
  • Staking a position into a gauge while it still has uncollected fees is fine, but you should collect first if you want to keep those fees — staked positions don't accumulate swap fees, only emissions.

Continue reading