Skip to main content
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
Raydium 的每个程序都至少有一个特权角色——一个可以升级程序、创建新配置或提取协议费用的密钥。最小化这些角色的权限(并通过带有延迟的多签来限制它们)是防止管理员被攻击的主要防线。本页列举了这些角色及其在实践中的安全措施。

按程序分类的角色

AMM v4

CPMM

创建者费用收集不引入特权角色。CollectCreatorFeePermissionless 接受任何支付者,将接收者所有者限制为 PoolState.pool_creator,并将两个目标都限制为该创建者的规范 ATA。调用者可以为缺失的 ATA 提供资金并触发扫描,但无法重定向费用。

CLMM

持有 Permission PDA 的权限可以调用 CreatePermissionedPool — 为已有规范池的交易对创建额外的池,每个都在不同的 seed_index 派生地址处。权限仅限于池创建:它无法移动资金、更改费用或触及任何现有池。撤销它(ClosePermissionPda)会阻止权限创建进一步的池,但已创建的池保持不变。 limit_order_admin 是一个刻意狭窄的操作角色。它的存在使链下 keeper 可以扫描已填充的订单,而无需订单所有者在线。keeper 密钥是热的(存在于 keeper VM 上)并独立于上述多签进行轮换。具体来说,keeper 权限限制为:
  • SettleLimitOrder — 将订单的已填充输出推送到所有者的 ATA,价格为订单的限价。
  • CloseLimitOrder — 关闭完全结算的订单账户以回收租金(租金进入订单所有者)。
它无法调用 OpenLimitOrderIncreaseLimitOrderDecreaseLimitOrder、变更任何池字段或为任何其他指令签名——这些检查由指令的 Accounts 结构中的种子和 has_one 约束在链上强制执行。被攻击的 keeper 最坏的情况是不可用(订单保持停放,直到所有者自己结算它们)或按顺序结算/关闭合法可填充的订单;它无法将用户资金移动到所有者已授权的地方之外。

Farm v6

单个农场没有协议管理员——每个农场的创建者仅控制他们的农场,创建者的权力受限(无法没收用户质押、无法更改质押铸币)。

LaunchLab

平台管理员允许列表是自限制的:它限制该平台下的启动可能使用的 GlobalConfig 账户。它不授予对其他平台或现有启动资金的权限。规范委托权限地址位于 reference/program-addresses

程序升级权限

Raydium 的程序使用标准 Solana BPF Loader v3 升级机制。所有程序的升级权限是 3/4 Squads 多签。 为什么是 3/4:足够的签名者使得单一妥协不足;足够少以至于协调合法升级是可行的。四个权限是独立的、气隙冷设备签名者,由核心团队成员持有。顺序签名防止同一交易上的并行批准;交易携带固定的过期窗口。多签操作定期与 Solana 的 STRIDE 计划(非对称研究) 合作审查。

移除升级权限

Raydium 尚未将任何程序的升级权限设置为空。该协议在程序需要可升级的原则下运作(以修补错误、添加 Token-2022 等扩展、修复集成漂移)。权衡:用户信任 3/4 多签将仅部署经过充分审查的升级。 对于想要不可变替代方案的用户,较旧的 AMM v4 程序自上次审计以来一直稳定;18 个月内零升级。该代码路径实际上是冻结的,尽管权限仍然存在。

AmmConfig 权限

每个新的 AmmConfig 创建都是受权限的——3/5 财务库多签授权新的费用等级和 tick 间距。现有池通过 PDA 引用其 AmmConfig;池的费用等级就是 AmmConfig 所说的。 管理员可以更改现有的 AmmConfig 吗? 是的,从技术上讲。updateAmmConfig 可由管理员调用。在实践中,避免对已部署的 AmmConfigs 进行修改,因为它会无声地改变使用该配置的所有池的经济学。协议政策是为任何更改创建新的 AmmConfig 并迁移。 管理员可以通过配置窃取协议费用吗? 不能——AmmConfig 包含费用参数但不包含协议费用接收者;那是每个池的单独不可变地址。

协议费用声明

交换费的一部分(通常是 25 bps 交换费的 3–12 bps,取决于配置)累积到协议费用金库。多签可以提取这些累积的费用。用户永远不会看到他们的 LP 余额因此改变——这是协议的预分配份额,不是 LP 资金。

农场创建者权限

Farms v6 给创建者权力:
  • 为奖励金库提供资金(添加更多代币)。
  • 延长计划(将结束时间推迟)。
  • 在结束时间后调用 withdrawReward 以回收未使用的金库余额。
农场创建者无法
  • 提取质押的用户 LP。
  • 更改质押铸币。
  • 追溯更改发放率(仅通过 setRewards 向前看)。
  • 冻结用户收获。
恶意农场创建者最坏的情况是为金库提供不足资金,使农场耗尽;用户的本金质押始终是安全的。

Squads 多签配置

Raydium 为不同的风险面运作两个独立的 Squads 多签。两者都可以通过 Squads 协议 UI 在链上检查。 升级多签的操作属性:
  • 24 小时时间锁在任何交易上。今天批准的升级最早在 24 小时后执行,给用户时间做出反应。
  • 气隙冷设备签名。 冷设备的网卡被物理移除;它们仅连接到硬件钱包,并通过单独的热设备的二维码读取交易数据。
  • 顺序签名。 只有在一个冷设备生成并签署交易后,下一个冷设备才能开始其签署过程——防止同一交易上的冲突或并行签名。
  • 交易过期。 每个交易都携带固定的过期窗口,因此陈旧的交易自动失效。
  • TOTP + 物理密钥强制在用于交易启动和链上广播的热设备上。
  • 公共交易队列。 任何人都可以在 Squads UI 上监控待处理的升级。
财务库多签没有时间锁——其范围更窄,日常操作(创建 AmmConfigs、扫描费用)需要当天完成。财务库多签还持有上述按程序表中列出的有限程序管理员权限;这是一个临时安排,定期与项目的安全合作伙伴审查。

在链上验证权限

验证程序当前升级权限的最简单方法:
输出包括:
如果 Authority 不是预期的 Squads 多签地址,则出现问题。Raydium 在 reference/program-addresses 上发布预期的权限地址。 对于 AmmConfig / 池管理员角色,获取链上账户并解码:

历史权限变更

用户端考虑

作为用户/LP/集成商,你应该做什么?
  1. 在大额分配前检查升级权限。 确认它与文档的多签匹配。
  2. 监控多签活动。 Squads UI 显示待处理交易;计划的升级给你 24 小时来展开,如果你不同意该变更。
  3. 时间锁感知的赎回策略。 如果你运行自动复合器,确保你的展开路径不需要正在更改的指令。
  4. 不要假设程序不可变性。 每个 Raydium 程序都可以升级;为此做计划。

集成商的陷阱

1. 缓存权限地址

如果你在代码中硬编码升级权限或管理员多签地址,并且它稍后轮换,你的验证失败。在运行时从 reference/program-addresses 获取或定期刷新。

2. 假设 AmmConfigs 是稳定的

新的 AmmConfig 可以随时创建。你的聚合器/路由器应该定期重新获取完整配置列表(每小时可以)。

3. 农场创建者悲伤向量

如果你存入低声誉农场,创建者可以提前结束农场并回收奖励金库(假设没有用户质押)。一旦用户质押,按比例权利由程序强制执行;回收仅获得理性结束后的剩余。

指针

来源: