← Protocols
Camelot
Swap / DEX·Arbitrum · Arbitrum Nova

Camelot

01Description

Arbitrum-native DEX. v2 is a Uniswap-v2-style AMM with directional fees; v3 is built on Algebra Integral and adds concentrated liquidity with dynamic fees, limit orders, customizable tick spacing, and rebasing-token support. Heavily used as a launchpad for Arbitrum protocols.

02Best for
  • 01Arbitrum token swaps
  • 02long-tail / new-launch liquidity
  • 03concentrated liquidity with dynamic fees
  • 04Algebra-based pool customization
  • 05spNFT / xGRAIL incentivized LPing
03Install
  • pnpm add @camelot-exchange/sdk viem wagmi
04Environment variables
VariableScopeDescription
NEXT_PUBLIC_ARBITRUM_RPC_URLClientArbitrum One RPC URL used to query Camelot pools, the Algebra factory, and routers.
05Prompt snippet
Use Camelot for swaps and LPing on Arbitrum. For v2 (Uniswap-v2-style) swaps, call the Camelot v2 `Router` at `0xc873fEcbd354f5A56E00E710B90EF4201db2448d` with `swapExactTokensForTokensSupportingFeeOnTransferTokens(...)` and a `referrer` address. For v3 swaps and quotes, use the v3 `SwapRouter` and `QuoterV2` from the Algebra Integral deployment; `@camelot-exchange/sdk` exposes `Pool`, `Route`, `Trade`, and `SwapRouter.swapCallParameters` for encoding. v3 pools use Algebra `IAlgebraPool` (no `fee` arg in `getPool` — pools are identified by `(token0, token1)` only) and fees are charged dynamically by the Algebra fee plugin. spNFT staking and xGRAIL rewards are managed via the `NFTPool` and `NitroPool` contracts.
06Gotchas
  • v3 pools are identified by `(token0, token1)` only — there is no fee tier in the pool key because Algebra computes fees dynamically per swap; SDK code copy-pasted from Uniswap v3 will mis-call `getPool`.
  • Camelot v2 charges asymmetric directional fees (different fees for token0->token1 vs token1->token0) — quoting with a vanilla UniswapV2Router formula is wrong; always use the on-chain `getAmountsOut`.
  • Liquidity is held as spNFTs (staked-position NFTs), and rewards (GRAIL + xGRAIL) are claimed via `NFTPool.harvestPosition(tokenId)`; xGRAIL is non-transferable and requires a vesting redeem to convert to GRAIL.
  • Rebasing tokens behave correctly only in pools with the appropriate Algebra plugin enabled — adding a rebasing token to a vanilla pool will desync reserves.
  • MEV / sandwich risk: v3 quotes are dynamic-fee dependent and can shift block-to-block; pass conservative `amountOutMinimum` and consider private mempools for large trades.
  • Limit orders on v3 are emulated via single-tick LP positions; they fill only if price crosses the tick and require the position holder to withdraw — they are not stop/limit orders in the CEX sense.
07Alternatives