Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
AMM 是對抗性程式碼的誘人目標:LP 的資金完全可見地存放在池中;每次交換都會以確定性方式改變價格。本頁列舉了已在 AMM 上演示過的攻擊類別、它們如何適用於 Raydium,以及 Raydium(和整合者)如何防禦。

1. 三明治攻擊 / MEV 攻擊

攻擊

機器人監視記憶池 / 八卦流,看到使用者的交換,以相同方向的買入進行搶先交易(推高價格),讓使用者的交易以更差的價格執行,然後以相反的賣出進行後置交易。機器人從價差中獲利。

暴露程度

  • 最容易暴露:低 TVL CPMM 池和 AMM v4 池 — 即使是小額交易也會顯著改變價格。
  • 較少暴露:深度 CLMM 池 — 同一 tick 內的交易不會改變價格。
  • 不暴露:農場收穫、LP 存款(比例強制執行,不以相同方式對價格敏感)。

防禦

  • Jito 捆綁 (integration-guides/routing-and-mev) 將交易隱藏在公開記憶池之外。
  • 緊密滑點 — 最小輸出更接近預期值,使三明治攻擊無利可圖。低於約 0.3%,大多數三明治攻擊會虧損。
  • 較小的交易規模 — 將 $100k 交換分成 10 次 $10k;每次移動的價格都較少。

Raydium 的立場

Raydium 的核心程式不強制執行反 MEV 保護 — 它們在程式級別是中立的。保護發生在提交層(Jito、錢包的內建保護)。UI 預設滑點為 0.5%,這對大多數池來說是合理的。

2. 價格操縱

攻擊

大型交易者暫時移動池的價格(通過閃電貸或自籌資金的鯨魚),觸發某些依賴於價格的下游操作(清算、衍生自預言機的借款、衍生品支付),然後將價格恢復正常。

暴露程度

  • 原生 Raydium 操作:不暴露。進出交換只會產生往返費用;交易者虧損。
  • 整合程式:如果它們天真地讀取 Raydium 池價格,則暴露。

防禦

  • 使用 TWAP,而不是現貨價格,用於可組合性(見 security/oracle-and-token-risks)。
  • CLMM ObservationState 提供短時間窗口的 TWAP,不可在沒有持續資本承諾的情況下操縱。
  • 多預言機共識:如果你的程式讀取 Raydium、Pyth 和 Jupiter,只在它們在 1% 內一致時才行動,任何單一來源的閃電貸操縱都不夠。

Raydium 的立場

CLMM 提供 ObservationState TWAP 支援;忽視它並使用現貨價格的整合者需自行承擔風險。Raydium 的前端使用多個價格來源進行 USD 顯示。

3. 捐贈 / 通脹攻擊

攻擊

新池中的第一個 LP 存入少量(例如,6 位小數的 mint 各 1 個代幣 → 發行 1 個 LP 單位)。然後攻擊者通過 SPL Token 轉帳直接向池金庫「捐贈」1,000,000 個代幣。現在 1 個 LP 單位代表各 500,000 個 mint。任何後續存入少於該金額的 LP 都會四捨五入為 0 個 LP 單位並失去存款。

暴露程度

  • CPMM / AMM v4:在新建立的低流動性池上可能暴露。
  • CLMM:不暴露(沒有共享 LP mint;每個頭寸都是自己的 NFT,具有明確的流動性值)。

防禦

CPMM 的 initialize 指令將最小 LP 金額鎖定到池中(受 Uniswap V2 的 MINIMUM_LIQUIDITY 模式啟發)。這意味著第一個 LP 收到 sqrt(x × y) - MINIMUM_LIQUIDITY,其中 MINIMUM_LIQUIDITY(1000 單位)被銷毀到空地址。捐贈攻擊要求攻擊者捐贈 >> 初始存款,這變得不經濟。 此外,Raydium 的 SDK 在初始存款很小時會大聲警告,並引導使用者採用合理的金額。

Raydium 的立場

MINIMUM_LIQUIDITY 鎖定在 CPMM 中提供;AMM v4 有類似的機制。建立池的使用者應該用至少 10,000+ 個各 mint 單位進行種子投資,以使捐贈攻擊在任何情況下都不經濟。

4. Token-2022 轉帳 hook 濫用

攻擊

mint 的轉帳 hook 是可升級的。攻擊者在 mint 啟動時部署無害的 hook,在 Raydium 上列出,從使用者累積 LP。稍後,升級 hook 以阻止所有轉帳(實際上是軟地毯 — 使用者無法提取)。攻擊者使池只能在一個方向上交易,便宜地買入 LP,解鎖 hook,獲勝。

暴露程度

包含轉帳 hook mint 的池。

防禦

  • 程式級別:Raydium 程式在交換期間調用 hook;如果 hook 阻止,交換會回滾。這在機制上不能防止攻擊。
  • UI 級別:Raydium 標記具有轉帳 hook mint 的池。
  • 整合者級別:聚合器應預設跳過轉帳 hook mint,只允許列出已驗證的 hook。

Raydium 的立場

Raydium 不禁止轉帳 hook 池(合法的 hook 存在),但清楚地標記它們。聚合器可以通過 tags.includes("TRANSFER_HOOK") 進行篩選以排除。

5. 可組合性 / CPI 漏洞

攻擊

程式通過 CPI 組合 Raydium 並引入漏洞:例如,它傳遞錯誤的 observation_state、CLMM 交換的錯誤 tick 陣列,或雙重花費帳戶。攻擊者識別有漏洞的組合並利用。

暴露程度

  • 有漏洞的整合者 — 通常是漏洞的來源。
  • Raydium — 只有在漏洞觸發 Raydium 程式本身中的意外行為時。

歷史例子

Raydium 的程式都沒有通過 CPI 被利用 — Raydium 的帳戶驗證器捕捉形狀不當的帳戶並回滾。更廣泛生態系統中的漏洞發生在自訂程式漏洞中,這些漏洞組合了 AMM 但不源於 AMM。

防禦

  • 調用程式在可能時應使用 Anchor CPI 幫助程式(而不是手工構建的指令) — 類型安全捕捉大多數誤用。
  • 針對 mainnet 分叉狀態的整合測試涵蓋組合情況。

6. 管理員 / 密鑰洩露

攻擊

管理員密鑰(升級權限、AmmConfig 管理員、協議費用聲明)被洩露。攻擊者部署惡意升級以排空池,或修改 AmmConfig 以將費用路由到攻擊者錢包,或排空協議費用。

暴露程度

security/admin-and-multisig 中記錄的所有角色。

防禦

  • 3/4 多簽 在升級權限上需要洩露 4 個獨立簽署者。
  • 24 小時時間鎖 在升級上給使用者時間在惡意升級啟動前展開。
  • 操作監控 — 通過 Squads 的公開隊列對任何多簽活動發出警報。

歷史事件

AMM v4 的池權限密鑰在 2022 年 12 月被洩露(多簽前)。修復:將所有權限移至 Squads 多簽。修復後,沒有事件。

7. CLMM tick 數學的經濟攻擊

攻擊

老練的攻擊者利用 CLMM tick 數學中的四捨五入或費用會計邊界情況。在其他 CLMM 實現中發現的例子(不是 Raydium):
  • 費用增長會計對使用者四捨五入,累積灰塵。
  • Tick 交叉,信用/借記錯誤的 fee_growth delta。
  • sqrtPrice * liquidity 乘積中的整數溢位。

暴露程度

複雜的定製數學。審計和模糊測試是主要防禦。

Raydium 的立場

CLMM 已進行兩次獨立審計(OtterSec + MadShield)加上持續的基於屬性的模糊測試。迄今為止未發現生產影響的漏洞。sqrt_price_x64 Q64.64 算術使用飽和 128 位數學,單位測試涵蓋邊界 tick。

8. 頭寸 NFT 混淆

攻擊

使用者被欺騙簽署將其 CLMM 頭寸 NFT 轉移給攻擊者的交易。攻擊者現在擁有該頭寸的流動性。

暴露程度

任何頭寸 NFT 持有者。

防禦

  • 錢包 UI 應識別 Raydium 頭寸 NFT 並清楚地顯示它們(不是作為通用 NFT 「發送」)。
  • 使用者應警惕簽署轉移 NFT 的交易。
  • 新頭寸只有在使用 V2 開放路徑且底層金庫 mint 的凍結權限與 CLMM 的受限發行者列表匹配時才被凍結。該匹配的頭寸無法轉移或更改其代幣帳戶所有者;所有其他新頭寸保持可轉移。

Raydium 的立場

頭寸 NFT 實現 Metaplex 的元資料標準;理解 CLMM 頭寸的錢包應用將它們顯示為流動性頭寸而不是可交易的 NFT。截至 2026 年,大多數主要 Solana 錢包都特別顯示它們。受限發行者凍結是有針對性的,不保護普通可轉移頭寸。

9. 農場獎勵流操縱

攻擊

農場建立者為獎勵金庫提供資金,吸引質押者,然後使用使待定獎勵計算不穩定的參數調用 restartRewards,竊取收穫價值。

暴露程度

具有惡意建立者的農場。Farm v6 緊密限制建立者權力;此攻擊不起作用。

防禦

Farm v6 的管理員指令(setRewardsrestartRewardsaddReward)保留按比例分配的權利 — reward_per_share 在變更時調整,因此沒有變更前的應計被追溯損壞。

Raydium 的立場

OtterSec 的農場審計特別測試了重新啟動獎勵場景;未發現漏洞。

10. 模擬與執行分歧

攻擊

攻擊者構造一個模擬成功但在執行時回滾的交易(或反之)。用於騷擾依賴模擬進行顯示的錢包。

暴露程度

基於模擬顯示「你將收到 X」的錢包。

防禦

  • 使用 simulateTransaction 與實際提交相同的區塊哈希。
  • 將預期輸出顯示為「≈」(大約)而不是精確。
  • 在提交前立即重新模擬。

Raydium 的立場

CLMM 模擬在給定當前池狀態時是確定性的;分歧只在狀態在模擬和執行之間改變時發生(正常情況,通過滑點邊界處理)。

摘要表

使用者可以做什麼

  • 預設使用緊密滑點;只在需要時提高。
  • 使用啟用 Jito 的錢包 / 交換流。
  • 在 LP 前驗證 mint 擴展。
  • 監控 Squads 多簽以獲取待定升級。
  • 跨池多樣化;不要將所有 LP 集中在一個新啟動池中。

整合者可以做什麼

  • 使用 ObservationState TWAP 進行衍生品定價。
  • 通過 CPI 組合時驗證帳戶約束。
  • tags 欄位篩選池(跳過 scamhoneypot、未驗證的轉帳 hook)。
  • 設定合理的滑點邊界;不要接受使用者輸入的 0 滑點。
  • 謹慎使用 simulateTransaction — 記錄它是一個估計。

指標

來源: