> ## 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 流动性管理合约接口

# V2 Router

V2 Router 提供了用于在 V2 流动性池中添加和移除流动性的辅助函数。它负责处理代币排序、交易对创建（如果需要）以及最优存入计算。

<Note>
  进行**兑换**操作时，请使用 [Universal Router](/contracts/universal-router)。V2 Router 主要用于**流动性操作**。
</Note>

## 核心函数

### addLiquidity

向 ERC-20 / ERC-20 交易对添加流动性。如果交易对不存在则自动创建。

```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
);
```

| 参数                                 | 描述               |
| ---------------------------------- | ---------------- |
| `tokenA`, `tokenB`                 | 代币地址             |
| `amountADesired`, `amountBDesired` | 期望存入的数量          |
| `amountAMin`, `amountBMin`         | 最小接受数量（滑点保护）     |
| `to`                               | LP 代币的接收地址       |
| `deadline`                         | 交易截止时间（Unix 时间戳） |

### addLiquidityETH

向 KAS / ERC-20 交易对添加流动性。通过 `msg.value` 发送原生 KAS。

```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

销毁 LP 代币并返回两种底层代币。

```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

销毁 KAS 交易对的 LP 代币，返回原生 KAS 和 ERC-20 代币。

```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)"
]
```

## 代币授权

调用 `addLiquidity` 之前，需要将两个代币授权给 V2 Router：

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

调用 `removeLiquidity` 之前，需要将 LP 代币授权给 V2 Router：

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