跳转到主要内容

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 自动翻译,所有内容以英文版本为准。查看英文版 →

一句话总结

CLMM — Concentrated Liquidity Market Maker — 是 Raydium 的 Uniswap v3 风格 AMM。与其他 AMM 不同的是,CLMM 不是将流动性提供者的资金分散到整条价格曲线,而是让 LP 存入 特定价格范围。在该范围内,每一块钱的存款效率比 CPMM 池高许多倍;超出范围外,存款不产生收益,作为单边余额存放。协议按 tick(离散化的价格区间)跟踪流动性,用编码为 Q64.64 定点数的价格平方根(sqrt_price_x64)表示池状态,并为每个 LP 头寸铸造 NFT 而不是可互换的 LP 代币。

新增功能

最新的 CLMM 发布版本在 Uniswap v3 风格的核心基础上增加了三项功能。这些功能在池创建时可选,与现有的池和头寸向后兼容:
  • 限价单。LP 现在可以在特定价格的单个 tick 处挂单,当交换穿过该 tick 时,交换路径会按 FIFO 顺序成交。订单以限价结算到所有者的 ATA;链下守护者(limit_order_admin)可以清扫已成交的订单,无需所有者在线。详见指令 → OpenLimitOrder / SettleLimitOrder数学 → 交换中的限价单匹配
  • 单边费用(CollectFeeOn。池可以配置为从输入端口收取交换费(传统行为,模式 0),或始终从 token_01),或始终从 token_12)。当交易对的一侧是规范记账代币时很有用(如 USDC)。详见费用 → 单边费用
  • 动态费用。池可以选择加入波动率追踪费用附加费,随着快速 tick 移动而上升,随时间衰减。由每层级 DynamicFeeConfig 和每池 DynamicFeeInfo 校准。详见费用 → 动态费用数学 → 动态费用推导
新增指令 CreateCustomizablePool 在池创建时暴露所有三个旋钮。经典的 CreatePool 继续适用于不含限价单或动态费用的默认费用池。

CLMM 的优势

  • 资本效率。稳定币对 LP 将流动性集中在价平线周围 ±0.1% 范围内,可以比相同交易对的 CPMM 池每单位 TVL 赚取 100 倍以上的费用。
  • 头寸级费用核算。费用按头寸计算,而非按 LP 铸币。同一池内的两个头寸根据其范围和价格走势赚取不同的费用。
  • 每个交易对多个费用等级。一个交易对可以有多个 CLMM 池,每个绑定到不同的 AmmConfig,各有自己的交易费率和 tick 间距。Web UI 和路由器会显示当前价格下流动性最充足的等级。
  • 直接在池上激励。最多三个奖励代币流可以附加到池;头寸根据其贡献的秒数 × 范围内流动性按比例收集奖励。详见products/clmm/fees
  • NFT 头寸。每个头寸是一个非同质化代币,铸币等于确定性 PDA。转移 NFT 即转移头寸;钱包和 UI 可以像显示收藏品一样显示头寸。
  • Token-2022 支持在交易对的两侧,具有与 CPMM 相同的扩展限制。

CLMM 不是什么

  • 不是设定后就忘记的池。当 SOL 为 $160 时设置的范围,如果 SOL 跌至 $80 而你不主动调整,将不再产生收益。CLMM 奖励活跃的 LP;消极的 LP 应该留在 CPMM。
  • 不是零成本开启。头寸跨越的每个新 tick 数组必须初始化,需要支付租金。范围越宽越便宜;范围越窄越昂贵。
  • 不是 CLOB。与 AMM v4 不同,CLMM 不依赖 OpenBook。所有流动性都在 tick 映射上。
  • 不是 CPMM 的超集。跨越 [tick_min, tick_max] 的最大范围 CLMM 头寸行为 类似于 CPMM,但有不同的燃气成本、不同的费用核算模型,且没有可互换的 LP 代币。如果想要简单的可互换 LP 池,请使用 CPMM。

CLMM、CPMM 和 AMM v4 的对比

维度AMM v4CPMMCLMM
曲线恒定产品恒定产品集中(基于 tick)
LP 份额可互换 LP 铸币可互换 LP 铸币每头寸 NFT
流动性位置跨越所有价格跨越所有价格在用户选择的范围内
费用等级固定 0.25%AmmConfig(如 0.25%、1%)AmmConfig × tick 间距
主动管理不适用不适用必需
费用核算池级池级每头寸
奖励农场独立 Farm 程序独立 Farm 程序内置(最多 3 个奖励)
Token-2022
链上预言机observation每池 observation 数组

心智模型

可以将 CLMM 池视为三个重叠的数据结构:
  1. sqrt_price 空间中的连续曲线。池的价格表示为 sqrt_price_x64,一个 Q64.64 定点数。交换沿着这条曲线行走;在 tick 边界内,数学运算是标准的集中流动性 AMM 数学(详见algorithms/clmm-math)。
  2. 离散 tick 映射。价格量化为 tick — 1.0001 的整数次幂。每个 tick 有已知的 sqrt_price。头寸将其端点引用为整数 tick 索引。Tick 索引被分组为固定大小的 tick 数组以用于存储。
  3. 每头寸费用和奖励簿记。每个头寸存储上次更新时的全局 fee_growth_inside。当 LP 接触头寸(开启、关闭、调整、收集)时,程序从当前全局值减去存储值以计算应得收益。这就是 Uniswap v3 的 feeGrowthInside0X128 / feeGrowthInside1X128 模式。
每个用户操作分解为这三个结构上的状态转换:
  • 开启头寸:选择 tick 范围、存入代币、铸造 NFT、将流动性插入范围内的 tick 映射、初始化任何之前空的 tick 数组。
  • 增加/减少流动性:调整存储在 NFT 相关头寸账户和 tick 映射中的数量;同时收集累计费用。
  • 交换:从当前 sqrt_price_x64 沿交易方向行走,消费活跃流动性直到输入耗尽或到达下一个初始化的 tick;穿过 tick 并在新一侧拾取或放下流动性。
  • 收集费用/奖励:计算每一侧和每个奖励流的 fee_growth_inside_now − fee_growth_inside_last × position_liquidity;转出。
除此之外,池对哪些头寸开放无所谓。同一范围内的两个 LP 看到相同的费用增长路径,按各自的 liquidity 数量缩放。

何时选择 CLMM

当以下情况时选择 CLMM:
  • 你在为 稳定或均值回复交易对(USDC/USDT、jitoSOL/SOL、wBTC/BTC)提供流动性,并想在价平线附近集中。
  • 你是 做市商,愿意监控价格并重新平衡。
  • 你特别需要 每池激励排放,而不想单独建立农场。
  • 你需要 每头寸核算用于自己的 LP 产品(金库、结构化产品等)。
选择 CPMM 当:
  • 你正在推出价格发现未知的新代币。
  • 你想要单个可互换的 LP 代币,可以质押、锁定或组合。
  • 你想要消极的 LP 体验。
选择 AMM v4 当:
  • 你特别需要 AMM v4 在 OpenBook 上放置的混合 CLOB 深度。
  • 你在迁移现有的 AMM v4 集成,而不是开启新头寸。

头寸是 NFT

CLMM 头寸在链上由两个账户表示:
  • 头寸 NFT 铸币,供应量为 1。
  • 个人头寸状态账户,以 NFT 铸币为关键,持有头寸的 tick、流动性和上次观察的费用增长值。
转移 NFT 即转移头寸 — 个人头寸账户的权限是 NFT 所有者。这是与 Uniswap v3 率先推行的相同模式,在 Solana 账户模型中实现。详细说明见products/clmm/ticks-and-positions
较早的 CLMM 发布版本还为每个 (pool, tick_lower, tick_upper) 创建了 ProtocolPositionState 账户以聚合该范围的流动性。较新的发布版本不再创建或使用它 — 该字段仍作为 UncheckedAccount 出现在 OpenPosition / IncreaseLiquidity / DecreaseLiquidity 账户列表中以保持 ABI 兼容性,但程序不读或写它。聚合范围簿记直接存在于 tick 端点(liquidity_grossliquidity_net)。

接下来看什么

  • 账户 — 池、配置、tick 数组和头寸账户布局。
  • Tick 和头寸 — tick 映射、tick 间距、tick 数组大小、基于 NFT 的头寸。
  • 数学sqrt_price_x64、交换步进、fee_growth_inside 推导。
  • 指令OpenPositionIncreaseLiquiditySwapCollectRewards、限价单家族和 CreateCustomizablePool
  • 费用和奖励 — 每头寸费用模型、单边费用模式、动态费用和三个奖励槽。
  • 代码演示 — 用 TypeScript 演示开启/调整/交换/收集/限价单/可定制化池。
来源: