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 自动翻译,所有内容以英文版本为准。查看英文版 →
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 上的 USD 价格
Raydium 前端和api-v3.raydium.io 显示 USD 价值(TVL、费用 APR、$ 交易量)。这些来自:
- Pyth 作为主要预言机,用于主流代币。
- Jupiter 的聚合器价格 作为备选。
- 池推导价格 用于无外部预言机覆盖的长尾代币。
预言机操纵不适用于 Raydium 池
因为池状态就是预言机,所以不存在漏洞赏金文献所说的「预言机攻击」——没有可被攻击者破坏的外部可操纵数据源。对池状态的经济攻击(闪电贷式操纵)在security/attack-vectors 中有说明。
Token-2022 扩展风险
SPL Token-2022(又称「Token Extensions」)通过扩展向代币添加可配置行为。某些扩展改变了包含它们的池的信任属性。Raydium 程序会自动处理某些扩展,并将其他的显示为用户警告。转账费用
是什么: 可配置的费用(转账的百分比,上限为maximum_fee 上限),由发送者在每次转账时支付给代币权限。
风险: 费用可由代币的费用配置权限持有者更改。如果你在费用为 1% 时存入流动性,而权限将其提高到 50%,后续交换的返回会大幅减少。
Raydium 中的缓解: 池在交换时读取当前 transferFeeConfig 并调整数学。池本身不会损坏,但用户看到更差的输出。费用权限也可以安排延迟费用更改;Raydium 的 UI 会标记有即将更改费用的池。
残留风险: 如果恶意费用权限在你的交换进行中改变费用,你的 minimumAmountOut 会保护下行风险——交易会回滚。如果你信任代币发行者,这没问题;如果不信任,就不要提供流动性。
转账钩子
是什么: 转账调用一个单独的程序(「钩子」)来运行自定义验证或副作用。 风险: 钩子可以阻止任何转账,包括池在交换期间的内部转账。可升级的钩子稍后可能变为恶意——在存入时安全的东西在取出时可能变为无法交换。 Raydium 中的缓解: Raydium 在池状态中列出钩子程序 ID。集成应该向用户显示钩子程序 ID,以便他们验证它是预期的(不可升级、已审计)程序。 残留风险: 如果钩子可升级且其权限变为敌对,池可能被冻结。Raydium 不阻止带转账钩子的池,但会对其进行标记。只有在钩子经过验证安全时,才应提供流动性。冻结权限
是什么: 代币的冻结权限可以冻结任何持有该代币的代币账户,防止所有转账。 风险: 具有冻结池的保险库账户能力的冻结权限实际上会关闭池——用户无法取出,交易者无法交换。这适用于 SPL Token 和 Token-2022;这不是 Token-2022 的新东西,但仍然是风险。 Raydium 中的缓解: 程序级别没有缓解——SPL Token 的冻结对池是透明的。Raydium 的 UI 在有可冻结代币的池上发出警告。存入的用户应验证冻结权限为空或受信任的多签(USDC 有冻结权限;由发行商 Circle 持有)。 残留风险: 接受可冻结代币可能被冻结的事实。主流代币(USDC、USDT、USDY)的冻结权限由发行商持有,仅用于监管合规;这通常是可接受的。永久委托
是什么: 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,但深度防御)。
- 检查两个代币的冻结权限;仅限空或受信任的权限。
- 对于转账钩子池,根据白名单验证钩子程序 ID。
- 根据转账费用情景确定风险敞口规模(如果费用达到最大值会怎样?)。
- 对衍生品定价使用 CLMM TWAP(ObservationState)而非现货价格。
残留风险接受声明
Raydium 程序强制执行程序级别可以强制的内容:- 池创建拒绝 permanent-delegate / non-transferable 代币。
- 交换数学针对当前转账费用正确调整。
- 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 —— 前端使用的外部价格预言机。


