このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
AMMは悪意のあるコードにとって魅力的なターゲットです。LPの資金は完全に可視化されたプール内にあり、すべてのスワップは決定論的に価格を変更します。このページでは、AMMに対して実証されている攻撃クラス、Raydiumに対する適用方法、およびRaydium(とインテグレーター)が実施する防御方法をまとめています。
1. サンドイッチ / MEV攻撃
攻撃
ボットがメモプール / ゴシップストリームを監視し、ユーザーのスワップを検出します。同じ方向の買いで先制攻撃を行い(価格を上昇させ)、ユーザーのトランザクションをより悪い価格で実行させ、その後反対方向の売りで後攻撃を行います。ボットはスプレッドから利益を得ます。露出度
- 最も露出: 低TVLのCPMMプールとAMM v4プール — 小さなトレードでも価格が大きく変動します。
- 露出が少ない: 深いCLMMプール — ティック内のトレードは価格を変動させません。
- 露出なし: ファーム収穫、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小数点のミント各1トークン → 1単位のLP発行)。その後、攻撃者は1,000,000トークンをSPLトークン転送でプールボルトに直接「寄付」します。現在、1 LP単位は各ミントの500,000を表します。その後、それより少ない金額を預金するLPは0 LP単位に丸められ、預金を失います。露出度
- CPMM / AMM v4: 新しく作成された低流動性プールで潜在的に露出します。
- CLMM: 露出なし(共有LP ミントなし;各ポジションは明示的な流動性値を持つ独自のNFTです)。
防御
CPMMのinitialize命令は、最小LP額をプールにロックします(Uniswap V2のMINIMUM_LIQUIDITYパターンにインスパイアされています)。これは、最初のLPがsqrt(x × y) - MINIMUM_LIQUIDITYを受け取り、MINIMUM_LIQUIDITY(1000単位)がnullにバーンされることを意味します。ドネーション攻撃には、攻撃者が初期預金よりも大幅に寄付する必要があり、これは経済的に採算が取れなくなります。
さらに、RaydiumのSDKは初期預金が小さい場合に大きく警告し、ユーザーを合理的な金額に導きます。
Raydiumの姿勢
MINIMUM_LIQUIDITYロックアップはCPMMに搭載されています。AMM v4も同様のメカニズムを持っています。プールを作成するユーザーは、いずれの場合でもドネーション攻撃を経済的に採算が取れなくするために、各ミントの少なくとも10,000+単位でシードする必要があります。
4. Token-2022転送フック悪用
攻撃
ミントの転送フックはアップグレード可能です。攻撃者はミント起動時に無害なフックをデプロイし、Raydiumにリストされ、ユーザーからLPを蓄積します。その後、フックをアップグレードしてすべての転送をブロック(実質的にソフトラグ — ユーザーは引き出せません)。攻撃者はプールを一方向のみで取引可能にし、LPを安く買い上げ、フックをアンロック、勝利します。露出度
転送フックミントを含むプール。防御
- プログラムレベル: Raydiumプログラムはスワップ中にフックを呼び出します。フックがブロックする場合、スワップは戻ります。これは攻撃を機械的に防ぎません。
- UIレベル: Raydiumは転送フックミントを含むプールにフラグを付けます。
- インテグレーターレベル: アグリゲーターはデフォルトで転送フックミントをスキップし、検証されたフックのみをホワイトリストに登録する必要があります。
Raydiumの姿勢
Raydiumは転送フックプールを禁止しません(正当なフックが存在します)が、明確にタグ付けします。tags.includes("TRANSFER_HOOK")でフィルタリングするアグリゲーターは、必要に応じて除外できます。
5. コンポーザビリティ / CPI悪用
攻撃
プログラムがCPI経由でRaydiumを構成し、バグを導入します。例えば、間違ったobservation_state、CLMMスワップの間違ったティック配列、またはアカウントの二重支出を渡します。攻撃者は不具合な構成を特定して悪用します。
露出度
- 不具合なインテグレーター — 通常、バグの原因。
- Raydium — バグがRaydiumプログラム自体で意図しない動作をトリガーする場合のみ。
歴史的な例
Raydiumのプログラムは、CPI経由で悪用されたことはありません — Raydiumのアカウント検証者は不正な形のアカウントをキャッチして戻ります。より広いエコシステムでの悪用は、AMMと構成されたがAMMから生じなかったカスタムプログラムバグを通じて発生しました。防御
- 呼び出しプログラムは、可能な場合、手作りの命令ではなくAnchor CPIヘルパーを使用する必要があります — 型安全性はほとんどの誤用をキャッチします。
- メインネットフォーク状態に対する統合テストは、構成ケースをカバーします。
6. 管理者 / キー侵害
攻撃
管理者キー(アップグレード権限、AmmConfig管理者、プロトコル手数料請求)が侵害されます。攻撃者は、プールをドレインする悪意のあるアップグレードをデプロイするか、AmmConfigsを変更して手数料を攻撃者ウォレットにルーティングするか、プロトコル手数料をドレインします。露出度
security/admin-and-multisigに記載されているすべてのロール。
防御
- 3/4マルチシグ — アップグレード権限には4つの独立した署名者を侵害する必要があります。
- 24時間タイムロック — アップグレードにより、ユーザーは悪意のあるアップグレードが有効になる前に巻き戻す時間があります。
- 運用監視 — Squads公開キューを介したマルチシグアクティビティのアラート。
歴史的なインシデント
AMM v4のプール権限キーは2022年12月に侵害されました(マルチシグ前)。修正:すべての権限をSquadsマルチシグに移動しました。修正後、インシデントはありません。7. CLMMティック数学への経済攻撃
攻撃
洗練された攻撃者がCLMMティック数学の丸めまたは手数料会計エッジケースを悪用します。他の CLMM実装(Raydiumではない)で見つかった例:- ユーザーに対して丸められ、ダストを蓄積する手数料成長会計。
- 間違った手数料成長デルタをクレジット/デビットするティック交差。
sqrtPrice * liquidity製品での整数オーバーフロー。
露出度
複雑なカスタム数学。監査とファジングが主な防御です。Raydiumの姿勢
CLMMは2つの独立した監査(OtterSec + MadShield)と継続的なプロパティベースのファジングを受けています。本番環境に影響を与えるバグは見つかっていません。sqrt_price_x64 Q64.64算術は、境界ティックをカバーするユニットテストを備えた飽和128ビット数学を使用します。
8. ポジションNFT混乱
攻撃
ユーザーはCLMMポジションNFTを攻撃者に転送するトランザクションに署名するようにだまされます。攻撃者はポジションの流動性を所有しています。露出度
任意のポジションNFT保有者。防御
- ウォレットUIはRaydiumポジションNFTを認識し、それらを異なる方法で表示する必要があります(「送信」する一般的なNFTではなく)。
- ユーザーはNFTを転送するトランザクションに署名する際に注意する必要があります。
- 新しいポジションは、V2オープンパスを使用し、基礎となるボルトミントの凍結権限がCLMMの制限発行者リストと一致する場合にのみ凍結されます。その一致するポジションは転送できず、トークンアカウント所有者を変更できません。他のすべての新しいポジションは転送可能なままです。
Raydiumの姿勢
ポジションNFTはMetaplexのメタデータ標準を実装しています。CLMMポジションを理解するウォレットアプリは、取引可能なNFTではなく流動性ポジションとして表示します。2026年現在、ほとんどの主要なSolanaウォレットはそれらを特別に表示します。制限発行者凍結は対象を絞ったもので、通常の転送可能なポジションを保護しません。9. ファーム報酬ストリーム操作
攻撃
ファーム作成者は報酬ボルトに資金を提供し、ステーカーを引き付け、その後restartRewardsを呼び出して、保留中の報酬計算を不安定にし、収穫値を盗みます。
露出度
悪意のある作成者を持つファーム。Farm v6は作成者の権限を厳しく制限します。この攻撃は機能しません。防御
Farm v6の管理命令(setRewards、restartRewards、addReward)は、比例配分の権利を保持します — reward_per_shareは変更の瞬間に調整されるため、変更前の発生は遡及的に破損しません。
Raydiumの姿勢
OtterSecのファーム監査は特にリスタート報酬シナリオをテストしました。悪用は見つかりませんでした。10. シミュレーション対実行の相違
攻撃
攻撃者は、シミュレーションで正常に実行されるがシミュレーション時に戻るトランザクション(またはその逆)を構築します。シミュレーションに依存するウォレットを悩ませるために使用されます。露出度
シミュレーションに基づいて「X を受け取ります」を表示するウォレット。防御
- 実際の提出と同じブロックハッシュで
simulateTransactionを使用します。 - 予想出力を正確ではなく「≈」(約)として表示します。
- 提出直前に再シミュレーションします。
Raydiumの姿勢
CLMMシミュレーションは現在のプール状態が与えられた場合、決定論的です。相違はシミュレーションと実行の間に状態が変わる場合にのみ発生します(通常のケース、スリッページ境界で処理)。サマリーテーブル
ユーザーができること
- デフォルトでタイトなスリッページを使用します。必要な場合のみ引き上げます。
- Jito対応ウォレット / スワップフローを使用します。
- LPの前にミント拡張を確認します。
- Squadsマルチシグで保留中のアップグレードを監視します。
- プール全体に分散します。すべてのLPを1つの新規起動プールに集中させないでください。
インテグレーターができること
- デリバティブ価格設定にObservationState TWAPを使用します。
- CPI経由で構成する場合、アカウント制約を検証します。
tagsフィールドでプールをフィルタリングします(scam、honeypot、未検証の転送フックをスキップ)。- 合理的なスリッページ境界を設定します。ユーザー入力から0スリッページを受け入れないでください。
simulateTransactionを慎重に使用します — これは推定値であることを文書化します。
ポインター
security/oracle-and-token-risks— Token-2022リスク詳細。security/admin-and-multisig— 権限構造。security/disclosure— バグバウンティプログラム。integration-guides/routing-and-mev— MEV軽減。
- Rekt News — このリストを知らせるDeFiポストモーテム。
security/auditsにリンクされた監査レポート。

