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 自动翻译,所有内容以英文版本为准。查看英文版 →
不变式
常数乘积做市商(CPMM)持有两个储备x 和 y,并强制以下条件:
k 是交易前的储备乘积。对于无费用市场,x · y = k 完全相等。有费用时,k 会严格增长(LP 费用份额保留在储备中)。
这个不变式是刻意设计的几何形式:它保证无论一个储备变多小,另一个都会无限增长来匹配——也就是说,池子在任何一侧都永远不会被完全耗尽。
定价
现货价格
在任何时刻,用x 表示的 y 的边际价格是曲线的切线:
x · y = k 进行隐函数求导得到 dy/dx = −y/x;忽略符号,|dy/dx| = y/x)。
这是池子为无穷小交易报价的价格。对于任何有限交易,因为沿曲线的滑点,实现的价格会更差。
精确输入交换(给出 Δx,接收 Δy)
有费用的情况下,设 f 为费用率(例如 f = 0.0025 表示 25 个基点)。将费用应用于输入,然后使用不变式求解输出:
Δx 进入储备。费用的 LP 份额保留在 x' 中;协议份额通过单独的会计步骤从曲线中排除(见下方的费用会计变体)。
精确输出交换(接收 Δy,支付最小的 Δx)
Δx 向上舍入,以确保池子不会低估费用。
滑点和价格影响
价格影响衡量交易导致池子现货价格变动的幅度:Δx / x,一阶泰勒展开给出:
p_before 和 effective 之间的差价是滑点。链上 UI 通常将 slippage 表示为 (effective − p_before) / p_before;SDK 的 computeAmountOut 返回 amountOut 和 priceImpact 是为了这个原因。
代码中的不变式检查
交换后,协议重新验证:费用会计变体
不变式检查假设 LP 费用保留在储备中。不同的 Raydium 产品对协议/基金/创建者分量的处理方式不同:CPMM 约定
费用是基于1_000_000 分母的 u64 基点类似费率。交易费用分为 trade_fee_rate(总计),然后通过 protocol_fee_rate、fund_fee_rate、creator_fee_rate 细分。每次交换时:
protocol_fees_*、fund_fees_*、creator_fees_*)中,这些计数器被排除在不变式中使用的储备之外。这就是如何在不移动曲线的情况下清扫费用的方式。参见products/cpmm/fees。
AMM v4 约定
费用是基于10_000 分母的 numerator / denominator 比率。分割在池子创建时固定,并存储在 AmmInfo.fees 上:
pnl_share 累积到 state_data.need_take_pnl_* 中并从储备中排除;lp_share 保留在保险库中。参见products/amm-v4/fees。
两种约定以相同方式保留不变式——区别仅是表面(分母 + 子类别数量)。
舍入规则
- 费用计算向上舍入。 确保池子永远不会低估费用。
- 输出金额向下舍入。 确保不变式严格成立(即使在添加费用之前
k' > k)。 - 精确输出输入金额向上舍入。 确保用户不会少付。
u128 来计算中间的 x · Δx 乘积,以避免大型储备上的溢出。最终结果通过饱和检查转换回 u64。
边界情况
空池子
在首次Deposit 之前,x = y = 0。交换指令拒绝预存款。
零输出
如果Δx 足够小,使得舍入后的 Δy 为 0,指令将以 ZeroTradingTokens 错误回滚。这防止了无需支付而提取价值;也意味着高度不平衡池子上的尘埃交换失败。
尘埃 LP
首次Deposit 有特殊处理:它将初始 LP 供应计算为 sqrt(x · y),并销毁少量”初始销毁”金额(通常 100 LP 单位)以防止”首存款膨胀攻击”(攻击者向保险库捐赠并膨胀 LP 代币价值)。后续存款使用按比例计算。
与套利的关系
CPMM 池子的价格仅通过以下方式改变:- 通过池子本身的交易(用户沿曲线行走)。
- 捐赠(不进行交换而向保险库发送代币)。
详细示例
示例 1——小额交易,可忽略的滑点
池子:x = 1_000_000, y = 2_000_000, k = 2·10^12。费用 f = 0.0025。
交易 Δx = 1_000:
1000 / 1993.01 ≈ 0.5018。之前现货:0.5。影响:约 0.36%。
示例 2——中等交易,明显滑点
同一池子,Δx = 100_000(x 的 10%):
100_000 / 181_405 ≈ 0.5513。影响:约 10.3%——大约是 2 · 10% = 20% 经验法则的一半(该法则是无费用常数乘积曲线的最坏情况上限;交易费用加上公式中的反演会降低它)。
相关页面
products/cpmm/math— CPMM 的特定舍入 + 费用分母选择。products/amm-v4/math— AMM v4 的 OpenBook 集成储备如何扩展此模型。algorithms/slippage-and-price-impact— 关于为 UI 调整滑点容差的专题页面。
- Uniswap v2 白皮书 —
x · y = k的规范陈述。 - Raydium CPMM 程序源代码。
- Raydium AMM v4 程序源代码。


