本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
Raydium 的核心产品不依赖外部预言机进行定价——池状态本身就是预言机。但 API 和 SDK 使用外部预言机来显示向用户展示的美元价格,而 Token-2022 代币相比 SPL Token 提供了更丰富的控制集合,其中一些从根本上改变了池的信任模型。本页列举了两者。
Raydium 中的预言机
内部:池即预言机
对于 AMM v4、CPMM 和 CLMM,协议对”当前价格”的定义仅从池状态推导:- AMM v4 / CPMM:
price = vaultB_balance / vaultA_balance(考虑小数位)。 - CLMM:
price = (sqrtPriceX64 / 2^64)^2 × 10^(decimalsA - decimalsB)。
CLMM ObservationState 作为 TWAP 预言机
CLMM 池维护一个 ObservationState 账户,记录历史 sqrt_price 快照。其他程序可以基于此进行组合,以推导出抗操纵的时间加权平均价格:
products/clmm/accounts#observation-state。
外部:前端/API 上的美元定价
Raydium 的前端和api-v3.raydium.io 显示美元价值(TVL、费用 APR、$ 交易量)。这些来自:
- Pyth 作为主要预言机用于主要代币。
- Jupiter 的聚合器价格 作为备选。
- 池衍生价格 用于没有外部预言机覆盖的长尾代币。
预言机操纵不适用于 Raydium 池
因为池状态就是预言机,所以不存在漏洞赏金文献意义上的”预言机攻击”——没有外部可操纵的数据源供攻击者破坏。对池状态的经济攻击(闪电贷风格的操纵)在security/attack-vectors 中介绍。
Token-2022 扩展风险
SPL Token-2022(又称”代币扩展”)通过扩展向代币添加可配置行为。某些扩展改变了包含它们的池的信任属性。Raydium 程序自动处理某些扩展,并将其他扩展作为用户警告显示。转账费
是什么: 可配置的费用(转账的百分比,上限为绝对金额的maximum_fee 上限),由发送者在每次转账时支付给代币权限。
风险: 费用可由代币的费用配置权限更改。如果你在费用为 1% 时存入流动性,而权限将其提高到 50%,后续交换返回的金额会少得多。
Raydium 中的缓解: 池在交换时读取当前 transferFeeConfig 并调整数学。池本身不会被破坏,但用户看到更差的输出。费用权限也可以安排延迟费用变更;Raydium 的 UI 标记具有即将到来的费用变更的池。
残留风险: 如果恶意费用权限在你的交换进行中更改费用,你的 minimumAmountOut 保护下行——交易恢复。如果你信任代币发行者,这很好;如果你不信任,就不要 LP。
转账钩子
是什么: 转账调用一个单独的程序(“钩子”)来运行自定义验证或副作用。 风险: 钩子可以阻止任何转账,包括池在交换期间的内部转账。可升级的钩子稍后可能变成恶意的——存入时安全的东西在提取时可能变成无法交换的。 Raydium 中的缓解: Raydium 在池状态中列出钩子程序 ID。集成应向用户显示钩子程序 ID,以便他们可以验证它是预期的(不可升级、已审计)程序。 残留风险: 如果钩子可升级且其权限变成敌对的,池可能被冻结。Raydium 不阻止具有转账钩子的池,但它会标记它们。仅当钩子经过验证安全时,才 LP 进入转账钩子池。冻结权限
是什么: 代币的冻结权限可以冻结持有该代币的任何代币账户,防止所有转账。 风险: 具有冻结池的保险库账户能力的冻结权限实际上会关闭池——用户无法提取,交易者无法交换。这适用于 SPL Token 和 Token-2022;这不是 Token-2022 的新功能,但仍然是一个风险。 Raydium 中的缓解: 程序级别没有缓解——SPL Token 的冻结对池是不透明的。Raydium 的 UI 在具有可冻结代币的池上发出警告。存入的用户应验证冻结权限为空或他们信任的多签(USDC 有冻结权限;它是发行者 Circle)。 残留风险: 接受可冻结代币可能被冻结的事实。主要代币(USDC、USDT、USDY)的冻结权限由发行者持有,仅用于监管合规;这通常是可接受的。CLMM 受限发行者头寸 NFT
CLMM 为选定的 KYC 受限发行者冻结权限应用额外控制。当任一池代币的冻结权限与程序的硬编码列表匹配时,通过OpenPositionV2 或 OpenPositionWithToken22Nft 打开的新头寸的 NFT 代币账户立即被冻结。相应的池 PDA 是头寸 NFT 代币的冻结权限。
这防止头寸被转移到未批准的钱包或更改其代币账户所有者。它不给予基础代币发行者对头寸 NFT 的控制:只有 CLMM 池 PDA 是头寸 NFT 冻结权限,程序仅在 ClosePosition 期间作为解冻的一部分使用它。流动性管理和费用或奖励收集继续需要 NFT 所有者。
现有头寸保持未冻结。集成商必须将可转移性视为头寸特定状态,并读取 NFT 代币账户的 isFrozen 标志。
永久委托
是什么: Token-2022 扩展,指定一个永久委托,可以在没有批准的情况下从任何持有者转移代币。 风险: 永久委托可以随时排空池的保险库。 Raydium 中的缓解: CPMM 和 CLMM 拒绝创建具有永久委托代币的池。初始化恢复。没有运行的 Raydium 池具有永久委托代币。 残留风险: 零(只要检查正确,两次审计都验证了)。不可转移
是什么: 持有者无法转移的代币。 风险: 池依赖可转移性在用户 ATA 和池保险库之间移动代币。不可转移代币会平凡地破坏池。 Raydium 中的缓解: 池创建在不可转移代币上恢复。农场也拒绝不可转移的质押代币。默认冻结 / 关闭权限 / 计息
Raydium 处理的低影响扩展:- 默认冻结:新代币账户需要在使用前解冻。Raydium 在 ATA 创建时透明地处理这个。
- 关闭权限:指定的权限可以关闭代币账户。池保险库由池的程序衍生权限拥有,所以代币上的关闭权限不适用于保险库。
- 计息:显示的余额会产生利息;
amount保持固定但uiAmount增长。Raydium 池数学使用amount,不是计息;显示单独调整。
代币权限
不是 Token-2022 特定的风险,但值得注意:如果代币保留代币权限,持有者可以随意膨胀供应。对于已启动的代币,这会按池的当前价格稀释 LP。LaunchLab 拒绝创建启动,除非代币权限为空。UI 中的风险标签
Raydium 的前端用适用的风险标签标记每个池:- TRANSFER_FEE — 非零转账费。
- TRANSFER_HOOK — 转账钩子扩展活跃。
- FREEZE — 代币有冻结权限。
- MINT — 代币有代币权限(供应可以膨胀)。
- CLOSE — 代币有关闭权限。
集成商检查清单
在与 Raydium 池组合之前:- 通过
getMint(mint, TOKEN_2022_PROGRAM_ID)检查每个代币的扩展。 - 跳过任何代币具有 permanent_delegate 或 non_transferable 的池(这些不应该存在于 Raydium 中,但深度防御)。
- 检查两个代币的冻结权限;仅限空或受信任的权限。
- 在提供头寸转移、托管或 Burn & Earn 之前,确认 CLMM 头寸 NFT 代币账户未被冻结。
- 对于转账钩子池,根据白名单验证钩子程序 ID。
- 根据转账费场景调整敞口(如果费用达到最大值会怎样?)。
- 使用 CLMM TWAP(ObservationState)而不是现货价格进行衍生品定价。
残留风险接受声明
Raydium 的程序强制执行在程序级别可以强制执行的内容:- 池创建拒绝永久委托 / 不可转移代币。
- 交换数学正确调整当前转账费。
- ObservationState 提供抗操纵预言机。
- 代币的冻结权限可以冻结池。
- 代币的费用权限可以随时提高转账费(直到
maximum_fee上限)。 - 转账钩子程序可以升级为恶意代码。
- 计息代币的应计率可以更改。
指针
algorithms/token-2022-transfer-fees— 转账费代币的数学调整。security/attack-vectors— 这些风险如何表现为具体攻击。integration-guides/wallet-integration— 显示 Token-2022 风险标签。products/clmm/accounts— ObservationState 布局。
- SPL Token-2022 扩展文档。
- 池初始化验证逻辑:
src/raydium/cpmm/instrument.ts、src/raydium/clmm/instrument.ts。 - Pyth — 前端使用的外部价格预言机。

