How-to guide

Remove liquidity

Use this guide to withdraw an LP position from a trading pool.

Remove in the UI

  1. Open the market and select the Liquidity tab, then Remove.
  2. Enter the LP tokens to remove in Amount. You receive ≈ shows the Yes and No you get back.
  3. Select Remove liquidity and confirm. The transaction reverts if it would return less than the estimate allows after your slippage tolerance.
The Liquidity tab with Remove selected, 0.001 LP entered, the note that removal returns Yes and No shares to the wallet rather than ETH, an expected 0.001 Yes and 0.001 No worth about 0.001 ETH at the current trading pool price, and an enabled Remove liquidity button.
Removing liquidity. The UI calls the trading pool directly, so it never asks for a router allowance.

Remove through the trading pool contract

  1. Compute the outputs from getEffectiveReserves(): each reserve × liquidity ÷ LP total supply, rounded down. Removal first synchronizes the reserves, so donated shares count.
  2. Call the trading pool's removeLiquidity(liquidity, minYes, minNo, recipient, deadline) with minYes and minNo set from those outputs and your tolerance. The deadline is enforced on chain.

After either path, your LP balance has fallen by liquidity, your Yes and No balances have risen by the outputs, and the trading pool has emitted LiquidityRemoved.

Integrations that need router-based removal call the router's removeLiquidityWithPermit, whose bounds are named minYesOut and minNoOut. The router reference gives the values the permit must sign and the allowance fallback. Never grant a permanent or infinite allowance.

What removal does not do

Removal always returns raw Yes and No, before and after question end, resolution, and forks. It does not use your wallet Invalid, redeem complete sets, settle winning shares, choose a child branch, or migrate liquidity. For those, see Handle resolution and Handle a universe fork.