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.
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
路由器不执行数学运算
路由程序不实现任何定价逻辑。它纯粹是一个编排器:接受一条路由,将账户传递给子程序,并链接代币流。 每个跳转从其自己的池程序曲线进行定价:- AMM v4 跳转:使用常数乘积公式(
x · y = k)加上 OpenBook 混合定价。参见products/amm-v4/math。 - CPMM 跳转:使用常数乘积公式,支持可配置的费用分层。参见
products/cpmm/math。 - CLMM 跳转:使用集中流动性 tick 数学。参见
algorithms/clmm-math。 - 稳定币池跳转:为类似资产使用稳定交换曲线。参见
products/stable/math。
- 通过 CPI 调用每个池的交换指令。
- 收集输出数量。
- 将其作为输入数量传递给下一个跳转。
- 根据调用者的滑点限制检查最终输出。
滑点复合叠加
在多跳路由中,每个跳转的滑点会复合叠加。跳转 1 的小滑点在跳转 2 中变成更大的滑点,因为流入跳转 2 的量已经减少。 示例:minimum_amount_out 时,路由器会根据此全局限制检查你的最终输出。每个跳转也会针对其本地费用结构检查自己的交换,但路由器不会在中途重新报价——你必须提前计算路由并加入足够的滑点容差。
CLMM 跳转和 limit_prices
对于进入 CLMM 池的每个跳转,路由器检查池的当前sqrt_price_x64 是否在指定边界内。边界以称为 limit_prices 的 VecDeque<u128> 传递:
- 路由中每个 CLMM 跳转一个
sqrt_price_x64。 sqrt_price_x64是 CLMM 使用的基于 tick 的价格表示。参见algorithms/clmm-math了解定义。- 路由器强制执行:
指令变体和 limit_prices
-
SwapBaseInWithUserAccount,SwapBaseOutWithUserAccount(传统,标签 0 和 1):limit_pricesVecDeque 必需。如果任何跳转是 CLMM 池,空队列会被拒绝并返回错误。你必须为每个 CLMM 跳转按顺序提供一个价格。 -
SwapBaseIn,SwapBaseOut(当前,标签 8 和 9):limit_pricesVecDeque 可选。空队列被静默忽略;不执行价格检查。新代码应使用这些指令。
构建 limit_prices
对于有 M 个 CLMM 跳转的路由,队列应包含恰好 M 个条目。按跳转顺序排列:何时检查 limit_prices
sqrt_price_x64 是池当前价格的快照。随着交换执行,它不断变化。你应该:
- 从链上获取池的当前状态。
- 计算可接受的边界(例如,当前价格的 ±0.5%)。
- 将这些边界编码到
limit_prices中。 - 在路由指令中包含这些边界。
费用处理
每个池根据其配置收取自己的费用:- AMM v4:0.25%(固定),在 LP、协议和基金之间分配。
- CPMM:每个
AmmConfig可配置(默认 0.25%,按分层分配方式不同)。 - CLMM:每个池可配置,从输入金额中扣除。
- 稳定币池:与 AMM v4 相同,0.25% 分配。
多跳会计示例
假设你通过两个常数乘积池路由 USDC → SOL → STEP,每个池费率为 0.25%:精度考虑
与所有 Solana 程序一样,路由器使用整数算术:- 所有金额都是
u64(lamport 或代币最小单位)。 - 曲线计算在需要时使用
u128中间值以避免溢出。 - 舍入约定取决于子程序。路由器不重新舍入。
后续内容
products/amm-v4/math— 常数乘积数学。products/cpmm/math— CPMM 常数乘积与 Token-2022。algorithms/clmm-math— 集中流动性定价。products/stable/math— 稳定交换曲线。products/routing/code-demos— 路由前报价示例。


