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

# Universal Router

> 跨 V2 和 V3 协议执行交易的统一入口

# Universal Router

**Universal Router** 是一个单一的智能合约，可以跨 V2 和 V3 池执行交易。它是 Kroko DEX 所有交易操作的统一入口。

## 为什么需要 Universal Router？

如果没有它，通过 V2 和 V3 交易需要分别使用不同的合约和不同的交易。Universal Router：

* **统一执行** — 一个合约处理 V2、V3 和混合协议交易
* **支持复杂路由** — 跨 V2 和 V3 池的多跳交易
* **降低 Gas** — 在单笔交易中批量处理操作
* **集成 Permit2** — 通过 Permit2 拉取代币以简化授权

## 工作原理

Universal Router 通过其 `execute()` 函数接收编码的**命令**和**输入**：

```solidity theme={null}
function execute(
    bytes calldata commands,
    bytes[] calldata inputs,
    uint256 deadline
) external payable;
```

* **commands**：一个字节字符串，每个字节是一个命令代码（如 V2\_SWAP\_EXACT\_IN、V3\_SWAP\_EXACT\_IN、WRAP\_ETH、UNWRAP\_WETH 等）
* **inputs**：每个命令的 ABI 编码参数
* **deadline**：超过此 Unix 时间戳后交易将回滚

## 典型交易流程

```
1. Swap API 寻找最优路由
2. Swap API 将路由编码为 Universal Router 命令
3. 前端从 API 接收 { to, data, value }
4. 用户签名并发送交易
5. Universal Router 按顺序执行命令
```

开发者**不需要**手动编码命令 — Swap API 会处理这些。你只需转发响应：

```typescript theme={null}
const tx = await signer.sendTransaction({
  to: swapData.to,      // Universal Router 地址
  data: swapData.data,  // 编码的 execute() calldata
  value: swapData.value // 原生 KAS 金额（ERC-20 到 ERC-20 时为 0）
});
```

## 滑点保护

编码的 calldata 包含链上滑点检查：

| 交易类型         | 保护机制           | 描述           |
| ------------ | -------------- | ------------ |
| Exact Input  | `minAmountOut` | 如果输出低于最小值则回滚 |
| Exact Output | `maxAmountIn`  | 如果输入超过最大值则回滚 |

这些检查由 Universal Router 在链上强制执行，而不仅仅是 API。

## 原生 KAS 处理

当交易涉及原生 KAS（非 WKAS）时，Universal Router 自动：

* **卖出 KAS**：在交易前将作为 `msg.value` 发送的 KAS 包装为 WKAS
* **买入 KAS**：在交易后将 WKAS 解包为 KAS 并发送给接收者

当原生 KAS 是输入代币时，Swap API 响应中的 `value` 字段非零。
