Skip to main content
本页内容由 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)
在交换、存入或提取期间不会查询外部预言机。这是 AMM 设计的”无需信任”部分:如果池数学正确,外部对价格源的任何操纵都无法破坏它。

CLMM ObservationState 作为 TWAP 预言机

CLMM 池维护一个 ObservationState 账户,记录历史 sqrt_price 快照。其他程序可以基于此进行组合,以推导出抗操纵的时间加权平均价格:
这与 Uniswap V3 使用的模式相同。短期价格操纵(鲸鱼临时推动池)不会破坏 TWAP,因为它是在数百个槽上平均的。 需要 CLMM 代币更安全价格源的程序(清算预言机、期权定价等)应使用 ObservationState TWAP 而不是即时价格。 不要将即时 CLMM 价格用于可组合性。 单次大额交换可在浅池上推动现货价格 10% 以上;TWAP 会平滑这种波动。有关数据布局,请参见 products/clmm/accounts#observation-state

外部:前端/API 上的美元定价

Raydium 的前端和 api-v3.raydium.io 显示美元价值(TVL、费用 APR、$ 交易量)。这些来自:
  • Pyth 作为主要预言机用于主要代币。
  • Jupiter 的聚合器价格 作为备选。
  • 池衍生价格 用于没有外部预言机覆盖的长尾代币。
美元显示纯粹是装饰性的——链上操作从不读取 Pyth,池数学也不使用美元。如果 Pyth 停止为某个代币提供数据,UI 显示”——“;池继续运行。

预言机操纵不适用于 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 受限发行者冻结权限应用额外控制。当任一池代币的冻结权限与程序的硬编码列表匹配时,通过 OpenPositionV2OpenPositionWithToken22Nft 打开的新头寸的 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 API 的聚合器应向用户显示这些标签。

集成商检查清单

在与 Raydium 池组合之前:
  • 通过 getMint(mint, TOKEN_2022_PROGRAM_ID) 检查每个代币的扩展。
  • 跳过任何代币具有 permanent_delegate 或 non_transferable 的池(这些不应该存在于 Raydium 中,但深度防御)。
  • 检查两个代币的冻结权限;仅限空或受信任的权限。
  • 在提供头寸转移、托管或 Burn & Earn 之前,确认 CLMM 头寸 NFT 代币账户未被冻结。
  • 对于转账钩子池,根据白名单验证钩子程序 ID。
  • 根据转账费场景调整敞口(如果费用达到最大值会怎样?)。
  • 使用 CLMM TWAP(ObservationState)而不是现货价格进行衍生品定价。

残留风险接受声明

Raydium 的程序强制执行在程序级别可以强制执行的内容:
  • 池创建拒绝永久委托 / 不可转移代币。
  • 交换数学正确调整当前转账费。
  • ObservationState 提供抗操纵预言机。
用户必须接受的残留风险:
  • 代币的冻结权限可以冻结池。
  • 代币的费用权限可以随时提高转账费(直到 maximum_fee 上限)。
  • 转账钩子程序可以升级为恶意代码。
  • 计息代币的应计率可以更改。
正确的防御是 LP 前的尽职调查:不要存入具有你不信任的集中权限的代币的池。Raydium 无法为你决定这种信任;它只能显示相关事实。

指针

来源:
  • SPL Token-2022 扩展文档
  • 池初始化验证逻辑:src/raydium/cpmm/instrument.tssrc/raydium/clmm/instrument.ts
  • Pyth — 前端使用的外部价格预言机。