> ## Documentation Index
> Fetch the complete documentation index at: https://docs.krokoswap.io/llms.txt
> Use this file to discover all available pages before exploring further.

# V2 Router

> V2 liquidity management contract interface

# 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.

<Note>
  For **swaps**, use the [Universal Router](/contracts/universal-router) instead. The V2 Router is primarily used for **liquidity operations**.
</Note>

## Key Functions

### addLiquidity

Adds liquidity to an ERC-20 / ERC-20 pair. Creates the pair if it doesn't exist.

```solidity theme={null}
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
);
```

| Parameter                          | Description                            |
| ---------------------------------- | -------------------------------------- |
| `tokenA`, `tokenB`                 | Token addresses                        |
| `amountADesired`, `amountBDesired` | Ideal amounts to deposit               |
| `amountAMin`, `amountBMin`         | Minimum accepted (slippage protection) |
| `to`                               | Recipient of LP tokens                 |
| `deadline`                         | Transaction deadline (Unix timestamp)  |

### addLiquidityETH

Adds liquidity to a KAS / ERC-20 pair. Send native KAS as `msg.value`.

```solidity theme={null}
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.

```solidity theme={null}
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.

```solidity theme={null}
function removeLiquidityETH(
    address token,
    uint256 liquidity,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline
) external returns (
    uint256 amountToken,
    uint256 amountETH
);
```

## ABI

```json theme={null}
[
  "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:

```typescript theme={null}
await tokenA.approve(V2_ROUTER, amountA);
await tokenB.approve(V2_ROUTER, amountB);
```

Before calling `removeLiquidity`, approve the LP token to the V2 Router:

```typescript theme={null}
await lpToken.approve(V2_ROUTER, lpAmount);
```
