Swap / DEX·Arbitrum · Arbitrum Nova
Camelot
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.
- 01Arbitrum token swaps
- 02long-tail / new-launch liquidity
- 03concentrated liquidity with dynamic fees
- 04Algebra-based pool customization
- 05spNFT / xGRAIL incentivized LPing
- pnpm add @camelot-exchange/sdk viem wagmi
| Variable | Scope | Description |
|---|---|---|
| NEXT_PUBLIC_ARBITRUM_RPC_URL | Client | Arbitrum One RPC URL used to query Camelot pools, the Algebra factory, and routers. |
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.
- ⚑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.