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

# 路由概览

> AMM 路由程序的功能、为什么它是独立程序、以及何时应该使用它而不是客户端指令拼接。

<Info>
  **本页内容由 AI 自动翻译，所有内容以英文版本为准。**

  [查看英文版 →](/products/routing/overview)
</Info>

## 一句话总结

AMM 路由程序将多跳交换捆绑为单个链上交易，跨池连接流动性。你提供路由（池和中间代币的列表）以及一个带滑点参数的指令；路由器按顺序执行所有 N 个跳跃，将一个池的输出移动到下一个池的输入。不需要单独的链上路由逻辑来计算价格——每个跳跃的费用和曲线由其自己的池程序通过 CPI 处理——但路由器协调账户传递和代币流动。

## 为什么需要独立的路由程序？

Raydium 客户端和聚合器总可以在客户端编织多跳交换，而不使用路由器：构建 N 个交换指令（每个池一个）并在单个交易中提交。那么，为什么要有专门的路由程序呢？

### 使用路由器的理由

1. **来自其他程序的 CPI。** 如果你的程序需要调用路由作为更大交易的一部分（例如，交换费用以获取目标代币的流动性管理器），CPI 到路由器比捆绑 N 个子 CPI 并在合约中管理所有账户更简洁。

2. **原子账户状态。** 每个跳跃的账户列表在一个指令上下文中验证。如果中间池的状态被损坏或限价断言失败，整个路由以原子方式失败，没有部分结算。

3. **单个指令组合。** SDK 和前端可以将多跳路由表示为一个逻辑操作，而不是 N 个恰好连续的单独指令。

### 客户端拼接仍是默认方式

对于大多数应用，为每个池构建单独的 `Swap` 指令并按顺序提交它们更简单、更可组合且同样有效。Raydium SDK 的 `Trade.makeSwapTransaction` 和类似流程对大多数路由都是这样做的。

路由器是替代方案，不是替代品。在以下情况下使用：

* 你正在实现一个需要路由作为更大原子操作一部分的程序。
* 你正在构建一个希望有单个「提交此路由」操作的聚合器。

## 工作原理

路由指令携带：

* **交换参数**：精确输入（`amount_in`、`minimum_amount_out`）或精确输出（`maximum_amount_in`、`amount_out`）。
* **路由规范**：每个跳跃的 `program_id` + 子程序账户列表，按顺序。路由器读取每个跳跃组中的第一个账户来确定要调用哪个程序。
* **限价**（CLMM）：`sqrt_price_x64` 边界的 `VecDeque<u128>`。仅用于进入 CLMM 池的跳跃；对于较旧的指令变体，空队列是错误。

路由器然后：

1. **执行第一个跳跃：** 将 `amount_in`（或为精确输出计算所需输入）转移到第一个池的输入金库，调用该池的交换，并收集输出。
2. **链接后续跳跃：** 对于每个跳跃 N，将第 N−1 个跳跃的输出用作第 N 个跳跃的输入。
3. **强制执行滑点：** 在每个 CLMM 跳跃处，检查 `sqrt_price` 是否符合对应的 `limit_price`；在最后一个跳跃处，检查总输出是否符合全局 `minimum_amount_out`。

中间代币可以流经 **用户控制的 ATA**（每个跳跃一个，较慢但透明）或 **共享的 PDA 派生账户**（所有跳跃一个地址，较快，不透明）。

## 定价和费用委托

路由器 **不自行计算价格**。每个跳跃委托给子程序的曲线：

* **AMM v4**：使用常数乘积公式和 OpenBook 混合定价。
* **CPMM**：使用常数乘积公式和配置的费用等级。
* **CLMM**：使用集中流动性数学和基于 tick 的定价。
* **Stable**：对类似代币使用稳定交换曲线。

费用由每个池根据其自己的配置收取。路由器自己不收费。

## 何时避免使用路由器

* **跳跃次数少（1-2 次）。** 账户传递的开销最小；只需使用两个单独的交换指令。
* **非 Raydium 池。** 路由器只了解四种 Raydium 池类型。对于跨越外部程序的路由，在客户端编织指令。
* **条件路由。** 如果你需要根据价格或池状态在路由中途分支，链上路由的灵活性不如客户端组合。

## 心理模型

将路由器视为 **交易打包实用程序**。它接受你的路由规范并将其打包为一个指令、一个交易、一个计算预算。每个跳跃在内部 CPI 到其池程序并在那里处理曲线数学。路由器的工作是正确传递账户、在跳跃之间移动代币和检查滑点。

## 下一步

* [`products/routing/accounts`](/zh/products/routing/accounts) — 路由授权 PDA 和共享账户模式。
* [`products/routing/instructions`](/zh/products/routing/instructions) — 完整指令 API（所有 10 个变体）。
* [`products/routing/code-demos`](/zh/products/routing/code-demos) — 用 TypeScript 和原始 Rust 构建路由的示例。
* [`integration-guides/routing-and-mev`](/zh/integration-guides/routing-and-mev) — 多跳路由的更广泛策略。
