Skip to main content

V2 Router

The V2 Router provides helper functions for adding and removing liquidity from V2 pools. It handles token sorting, pair creation (if needed), and optimal deposit calculations.
For swaps, use the Universal Router instead. The V2 Router is primarily used for liquidity operations.

Key Functions

addLiquidity

Adds liquidity to an ERC-20 / ERC-20 pair. Creates the pair if it doesn’t exist.
function addLiquidity(
    address tokenA,
    address tokenB,
    uint256 amountADesired,
    uint256 amountBDesired,
    uint256 amountAMin,
    uint256 amountBMin,
    address to,
    uint256 deadline
) external returns (
    uint256 amountA,
    uint256 amountB,
    uint256 liquidity
);
ParameterDescription
tokenA, tokenBToken addresses
amountADesired, amountBDesiredIdeal amounts to deposit
amountAMin, amountBMinMinimum accepted (slippage protection)
toRecipient of LP tokens
deadlineTransaction deadline (Unix timestamp)

addLiquidityETH

Adds liquidity to a KAS / ERC-20 pair. Send native KAS as msg.value.
function addLiquidityETH(
    address token,
    uint256 amountTokenDesired,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline
) external payable returns (
    uint256 amountToken,
    uint256 amountETH,
    uint256 liquidity
);

removeLiquidity

Burns LP tokens and returns both underlying tokens.
function removeLiquidity(
    address tokenA,
    address tokenB,
    uint256 liquidity,
    uint256 amountAMin,
    uint256 amountBMin,
    address to,
    uint256 deadline
) external returns (
    uint256 amountA,
    uint256 amountB
);

removeLiquidityETH

Burns LP tokens from a KAS pair and returns native KAS + ERC-20 token.
function removeLiquidityETH(
    address token,
    uint256 liquidity,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline
) external returns (
    uint256 amountToken,
    uint256 amountETH
);

ABI

[
  "function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) returns (uint256 amountA, uint256 amountB, uint256 liquidity)",
  "function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity)",
  "function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) returns (uint256 amountA, uint256 amountB)",
  "function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) returns (uint256 amountToken, uint256 amountETH)"
]

Token Approval

Before calling addLiquidity, approve both tokens to the V2 Router:
await tokenA.approve(V2_ROUTER, amountA);
await tokenB.approve(V2_ROUTER, amountB);
Before calling removeLiquidity, approve the LP token to the V2 Router:
await lpToken.approve(V2_ROUTER, lpAmount);