跳轉到主要內容

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

角色權限地址可執行操作
程式升級Squads 多簽 (3/4)部署新的程式位元碼
Pool 管理員Treasury 多簽 (3/5)切換池狀態、更新現有池的費率

CPMM

角色權限地址可執行操作
程式升級Squads 多簽 (3/4)部署新的程式位元碼
AmmConfig 管理員Treasury 多簽 (3/5)建立新的 AmmConfig(費率層級);切換現有設定
建立池費用接收方Treasury 多簽 (3/5)接收一次性的建池費用

CLMM

角色權限地址可執行操作
程式升級Squads 多簽 (3/4)部署新的程式位元碼
AmmConfig 管理員Treasury 多簽 (3/5)建立/修改 AmmConfig
DynamicFeeConfig 管理員Treasury 多簽 (3/5)CreateDynamicFeeConfig / UpdateDynamicFeeConfig — 校準 CreateCustomizablePool 呼叫可選用的動態費率層級
limit_order_admin(程式全域)鏈外操作熱錢包,非多簽代表限價單持有人結算並關閉限價單。Keeper 金鑰是單一的程式全域常數(主網與開發網的值不同),在 SettleLimitOrder / CloseLimitOrder 時透過 signer == limit_order.owner || signer == limit_order_admin::ID 驗證。輸出一律存入原始持有人的 ATA;Keeper 無法改變資金流向、修改訂單,也無法開新訂單。
limit_order_admin 是一個刻意設計為功能受限的操作角色。它的存在是為了讓鏈外 Keeper 能夠在訂單持有人無需上線的情況下,掃描已成交的訂單。Keeper 金鑰是熱錢包(存放在 Keeper 虛擬機上),其輪換與上述多簽相互獨立。具體而言,Keeper 的權限僅限於:
  • SettleLimitOrder — 以訂單的限定價格,將已成交訂單的輸出推送至持有人的 ATA。
  • CloseLimitOrder — 關閉已完全結算的訂單帳戶以收回租金(租金歸訂單持有人所有)。
Keeper 無法呼叫 OpenLimitOrderIncreaseLimitOrderDecreaseLimitOrder,無法修改任何池欄位,也無法為任何其他指令簽名——這些限制由指令的 Accounts 結構中的種子(seed)與 has_one 約束在鏈上強制執行。即使 Keeper 遭入侵,最壞的情況也只是 Keeper 無法使用(訂單將停留原地,直到持有人自行結算),或是以不同順序結算/關閉合法可成交的訂單;Keeper 無法將用戶資金移往持有人事先授權以外的地方。

Farm v6

角色權限地址可執行操作
程式升級Squads 多簽 (3/4)部署新的程式位元碼
Farm 建立者(每個 Farm)Farm 建立者的錢包為獎勵金庫注資、延長時程、收回未使用的獎勵
各個 Farm 沒有協議管理員——每個 Farm 的建立者只能管理自己的 Farm,且建立者的權限受到限制(無法沒收用戶的質押、無法更改質押 mint)。

LaunchLab

角色權限地址可執行操作
程式升級Squads 多簽 (3/4)部署新的程式位元碼
Launch 建立者(每個 Launch)Launch 建立者的錢包畢業後收取建立者費用;提取未畢業的曲線殘餘
Launch 沒有可以更改曲線或沒收募資資金的協議管理員。

程式升級權限

Raydium 的程式使用標準 Solana BPF Loader v3 升級機制。所有程式的升級權限均由 3/4 的 Squads 多簽持有。 採用 3/4 的原因:足夠的簽名人數確保單一金鑰遭入侵不足以通過驗證;同時人數又少到足以讓合法升級的協調作業切實可行。四位權限持有人分別是獨立、氣隙冷裝置的核心團隊成員。循序簽名可防止在同一筆交易上並行核准;交易設有固定的到期時間窗口。多簽操作定期與 Solana 的 STRIDE 計畫(Asymmetric Research) 合作審查。

移除升級權限

Raydium 尚未將任何程式的升級權限設為 null。協議的運作原則是:程式必須保持可升級性(以便修復漏洞、新增 Token-2022 等擴充功能、修正整合偏差)。代價在於:用戶需要信任 3/4 多簽只會部署經過嚴格審查的升級版本。 對於希望使用不可變替代方案的用戶,較舊的 AMM v4 程式自上次審計以來一直保持穩定;18 個月內零升級。儘管權限依然存在,但該程式碼路徑實際上已凍結。

AmmConfig 權限

每次建立新的 AmmConfig 都需要授權——3/5 的 Treasury 多簽負責批准新的費率層級與 tick 間距。現有的池通過 PDA 引用其 AmmConfig;池的費率由 AmmConfig 決定。 管理員能否更改現有的 AmmConfig? 技術上可以。updateAmmConfig 可由管理員呼叫。但在實際操作中,會避免修改已部署的 AmmConfig,因為這會在無聲無息中改變所有使用該設定的池的經濟模型。協議政策是針對任何變更建立新的 AmmConfig,再進行遷移。 管理員能否透過設定竊取協議費用? 不行——AmmConfig 包含費率參數,但不包含協議費用接收方;那是每個池各自獨立的不可變地址。

協議費用提取

一部分的 swap 費用(通常為 25 bps swap 費用中的 3–12 bps,視設定而定)會累積至協議費用金庫。多簽可以提取這些累積費用。用戶的 LP 餘額不會因此受到影響——這是協議預先分配的份額,並非 LP 的資金。

Farm 建立者權限

Farm v6 賦予建立者以下權力:
  • 為獎勵金庫注資(增加代幣)。
  • 延長時程(將結束時間往後推)。
  • 在結束時間後呼叫 withdrawReward 收回金庫中未使用的餘額。
Farm 建立者無法
  • 提取用戶質押的 LP。
  • 更改質押 mint。
  • 追溯修改排放速率(只能透過 setRewards 進行前瞻性調整)。
  • 凍結用戶的收割。
惡意的 Farm 建立者最壞的情況是讓金庫資金不足,導致 Farm 提前耗盡獎勵;用戶的本金質押始終是安全的。

Squads 多簽設定

Raydium 針對不同的風險面向,分別運作兩個獨立的 Squads 多簽。兩者均可透過 Squads Protocol 的介面在鏈上查閱。
多簽門檻時間鎖範圍
程式升級3/424 小時負責部署 AMM v4、CPMM、CLMM、LaunchLab、Lock、AMM Routing、Stable Swap 及舊版 Farm/Staking 程式新位元碼的唯一權限。查看:app.squads.so/.../FytDr…ceZQK
Treasury3/5Treasury 資產、協議收入、運營費用。目前同時持有 Raydium 有限的程式管理員權限(建立 AmmConfig、掃描協議費用、設定池參數)。查看:v3.squads.so/dashboard/RVha…dHdtYz09
升級多簽的操作特性:
  • 任何交易均有 24 小時時間鎖。 今日核准的升級最早在 24 小時後才能執行,給予用戶足夠的反應時間。
  • 氣隙冷裝置簽名。 冷裝置的網路卡已被實體移除;僅透過硬體錢包連接,並透過獨立熱裝置的 QR 碼讀取交易資料。
  • 循序簽名。 只有在一台冷裝置產生並簽署交易後,下一台冷裝置才能開始其簽名程序——防止在同一筆交易上產生衝突或並行的簽名。
  • 交易到期機制。 每筆交易均設有固定的到期時間窗口,過期的交易會自動失效。
  • TOTP 與實體金鑰強制執行,適用於用於交易發起和鏈上廣播的熱裝置。
  • 公開的交易佇列。 任何人均可在 Squads 介面上監控待處理的升級。
Treasury 多簽沒有時間鎖——其範圍較窄,且日常操作(建立 AmmConfig、掃描費用)需要當天完成。Treasury 多簽同時持有上述各程式表格中列出的有限程式管理員權限;這是過渡性安排,並定期與專案的安全合作夥伴一同審查。

在鏈上驗證權限

驗證程式當前升級權限最簡單的方式:
solana program show <PROGRAM_ID>
輸出包含:
Program Id:          CPMMoo8L3F4NbTegBCKVNunggL7H1Zpdmwpwh8KMoZ0F
Owner:               BPFLoaderUpgradeab1e11111111111111111111111
ProgramData Address: <ProgramDataPDA>
Authority:           <EXPECTED_MULTISIG_ADDRESS>
Last Deployed In Slot: <slot>
Data Length: <n> bytes
如果 Authority 不是預期的 Squads 多簽地址,則表示出現了問題。Raydium 在 reference/program-addresses 上公佈了預期的權限地址。 如需查詢 AmmConfig/池管理員角色,請取得鏈上帳戶並進行解碼:
const config = await raydium.cpmm.getAmmConfig(configPda);
console.log("AmmConfig admin:", config.admin.toBase58());
// Expected: 3/5 treasury multisig.

歷史權限變更

日期程式變更內容
2022-12AMM v4事件後,升級權限從單簽遷移至 3/4 多簽
2023-02所有程式所有操作角色統一由 3/5 Treasury 多簽管理
2023-11CLMM新增第二個多簽專門處理獎勵相關操作,以降低風險敞口
2024-05CPMM初始部署即採用多簽權限

用戶端注意事項

作為用戶/LP/整合者,你應該:
  1. 在大額配置前確認升級權限。 確認其與文件記載的多簽相符。
  2. 監控多簽活動。 Squads 介面會顯示待處理的交易;計畫中的升級給予你 24 小時的時間,若你不認同此變更,可在此期間撤出。
  3. 考量時間鎖的贖回策略。 若你正在運行自動複利器,請確保你的撤出路徑不依賴即將被變更的指令。
  4. 不要假設程式是不可變的。 Raydium 的所有程式均可升級;請事先規劃因應方案。

整合者的常見陷阱

1. 快取權限地址

若你在程式碼中硬編碼升級權限或管理員多簽地址,一旦地址輪換,你的驗證就會失敗。請在執行時從 reference/program-addresses 取得,或定期刷新。

2. 假設 AmmConfig 是穩定的

新的 AmmConfig 可能隨時建立。你的聚合器/路由器應定期重新取得完整的設定列表(每小時一次即可)。

3. Farm 建立者的惡意行為向量

如果你向信譽不佳的 Farm 存入資金,建立者可能提前結束 Farm 並收回獎勵金庫(前提是尚無用戶質押)。一旦用戶質押後,程式會強制執行按比例分配的權利;只有在合理結束後的剩餘部分才能被收回。

相關資源

參考來源: