Swap / DEX·Ethereum · BNB Chain · Polygon · Arbitrum · Base · Optimism · Avalanche · Linea · Scroll · Mantle
DODO
Proactive Market Maker (PMM) DEX. Instead of x*y=k, PMM uses an oracle/market-price anchor `i` and a slippage parameter `k` to concentrate liquidity around the current price, giving CEX-like efficiency for stablepairs and a single-sided LP option for long-tail tokens. Includes the DODO Route hosted aggregator.
- 01stable-pair / pegged-asset trading
- 02single-sided LPing for long-tail tokens
- 03PMM market-making for token launches
- 04aggregated swaps via DODO Route
- 05cross-chain swaps via DODO bridge
- pnpm add @dodoex/api viem
| Variable | Scope | Description |
|---|---|---|
| NEXT_PUBLIC_DODO_API_KEY | Client | Optional API key for DODO Route hosted aggregator (api.dodoex.io). Public endpoints work unauthenticated but are rate-limited. |
Use DODO for swaps via the DODO Route aggregator (`GET https://api.dodoex.io/route-service/v2/widget/getdodoroute?fromTokenAddress=&toTokenAddress=&fromAmount=&slippage=&userAddr=&chainId=&rpc=`) which returns calldata for the `DODORouteProxy` contract — sign and send the returned `to` + `data` + `value`. For direct PMM pool interaction, use `DVM` (Dynamic Vending Machine, no oracle), `DSP` (DodoStablePool, for pegged pairs), or `DPP` (DodoPrivatePool, owner-controlled with custom `i` and `k`); each pool exposes `querySellBase(amount)` / `querySellQuote(amount)` for quotes and `sellBase(to)` / `sellQuote(to)` for execution after a token transfer.
- ⚑PMM pricing depends on a price anchor `i` — for DSP/DPP the pool owner sets it, and a stale or manipulated `i` causes large MM losses or arbitrage opportunities; oracle health is the primary risk vector.
- ⚑The slippage factor `k` controls liquidity concentration: `k=0` is a constant-price book (infinite liquidity at `i`, blows up if reserves drain), `k=1` is constant-product; pick `k` based on asset volatility or LPs realize heavy IL.
- ⚑Single-sided LP isn't free: when the pool sells your asset to traders, your inventory becomes the *other* asset — IL is realized as inventory change, not just paper loss like in xy=k.
- ⚑DODO Route returns calldata that targets a specific `DODORouteProxy` per chain; the address rotates across versions — always use the API response's `to`, never hardcode.
- ⚑Token approvals go to a separate `ApproveProxy` (returned by the API as `tokenApproveAddr`), not to the route proxy itself — approving the wrong contract causes a silent revert on swap.
- ⚑Crowdpooling and MineV3 staking contracts have unlock schedules and can lock LP for a fixed window — read the campaign params before depositing.