> ## 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.

# エラーコード

> Raydiumのオンチェーンプログラム別Anchorエラー列挙型。原因と推奨UXメッセージ付き。

<Info>
  **このページは AI による自動翻訳です。すべての内容は英語版を正とします。**

  [英語版を表示 →](/reference/error-codes)
</Info>

<Info>
  **信頼できる情報源。** 以下のテーブルは、公開されているRaydiumリポジトリ内の各プログラムの `error.rs` から再生成されています。プログラムがアップグレードされ新しいバリアントが追加された場合は、テーブルを並べ替えるのではなく、抽出処理（各テーブル下部のリンクを参照）を再実行して行を追記してください。Anchorエラーコードは名前ではなく**ソースの順序**で割り当てられるため、並べ替えるとインテグレーターのエラーハンドリングが壊れます。
</Info>

## Anchorエラーコードの仕組み

Anchorはプログラムの `ErrorCode` 列挙型の各バリアントに、`6000` から始まる数値コードを割り当てます。失敗したトランザクションでは次の情報が表示されます：

* **数値エラーコード**（例：`0x1771` = 6001）：トランザクションログに記録されます。
* **エラー名**（例：`InvalidOwner`）：IDLから取得されます。
* **`#[msg(...)]` 文字列**：Anchorが `log_messages` に出力します。

インテグレーターは**数値コード**で照合してください。メッセージ文字列はバージョンアップなしに変更される可能性があります。

```ts theme={null}
// Example: detect the CPMM slippage error and surface a clean UX message.
const CPMM_EXCEEDED_SLIPPAGE = 6005;

try {
  await sdk.cpmm.swap({ ... });
} catch (err: any) {
  const code = err?.error?.errorCode?.number ?? err?.code;
  if (code === CPMM_EXCEEDED_SLIPPAGE) {
    showToast("Price moved past your slippage tolerance. Increase slippage or retry.");
    return;
  }
  throw err;
}
```

## CPMM（標準AMM）エラー

プログラムID：[reference/program-addresses](/ja/reference/program-addresses#on-chain-programs) を参照。ソース：`raydium-cp-swap/programs/cp-swap/src/error.rs`。

| コード  | バリアント                          | `#[msg]` 文字列                                                                   | 典型的な原因                                                                             | 推奨UXメッセージ                                    |
| ---- | ------------------------------ | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- | -------------------------------------------- |
| 6000 | `NotApproved`                  | Not approved                                                                   | 呼び出し元が管理者向け命令に設定された認証済みアドレスではない。                                                   | 「プールの管理者のみがこの操作を実行できます。」                     |
| 6001 | `InvalidOwner`                 | Input account owner is not the program address                                 | 渡されたアカウントが別のプログラムによって所有されている（多くの場合、誤ったトークンプログラムまたは誤ったプログラムのPDA）。                   | 「内部エラー：アカウント所有者の不一致 — 更新して再試行してください。」        |
| 6002 | `EmptySupply`                  | Input token account empty                                                      | 正の量が必要なステップで、LPまたはトークンアカウントの残高がゼロ。                                                 | 「引き出すものがありません。」                              |
| 6003 | `InvalidInput`                 | InvalidInput                                                                   | 汎用的な不正引数（範囲外の量、誤ったフラグ）。                                                            | 「入力が無効です — 数量を確認して再試行してください。」                |
| 6004 | `IncorrectLpMint`              | Address of the provided lp token mint is incorrect                             | 渡されたLPミントアカウントが `pool_state.lp_mint` と一致しない。                                       | 「内部エラー：LPミントが間違っています — プールデータを更新してください。」     |
| 6005 | `ExceededSlippage`             | Exceeds desired slippage limit                                                 | 約定価格がユーザーの `minAmountOut` / `maxAmountIn` より不利。                                    | 「価格がスリッページ許容範囲を超えました。スリッページを拡大するか再試行してください。」 |
| 6006 | `ZeroTradingTokens`            | Given pool token amount results in zero trading tokens                         | 預入・引き出しの計算で一方がゼロに切り捨てられた（ポジションが小さすぎる）。                                             | 「このプールの最小量を下回っています。」                         |
| 6007 | `NotSupportMint`               | Not support token\_2022 mint extension *(文法はソースのまま)*                           | プールが安全に処理できないToken-2022の拡張機能（例：`TransferHook`、`DefaultAccountState=Frozen`）が検出された。 | 「このトークンの拡張機能はRaydium CPMMでサポートされていません。」      |
| 6008 | `InvalidVault`                 | invaild vault *(ソースのタイポ)*                                                      | 渡されたバルトアカウントが `pool_state` に記録されているものと一致しない。                                       | 「内部エラー：バルトが間違っています — 更新して再試行してください。」         |
| 6009 | `InitLpAmountTooLess`          | Init lp amount is too less(Because 100 amount lp will be locked) *(文法はソースのまま)* | プール初期化時に計算されたLPの供給量が永久ロック量を下回った。                                                   | 「初期流動性が少なすぎます。預入量を増やしてください。」                 |
| 6010 | `TransferFeeCalculateNotMatch` | TransferFee calculate not match                                                | Token-2022手数料ミントの転送後実測額が事前計算値と一致しなかった。                                             | 「トークン転送手数料がトランザクション中に変わりました。再試行してください。」      |
| 6011 | `MathOverflow`                 | Math overflow                                                                  | スワップ・預入・手数料の中間計算がオーバーフローした。                                                        | 「このプールには大きすぎる量です。」                           |
| 6012 | `InsufficientVault`            | Insufficient vault                                                             | プールのバルト残高が要求された出力をカバーするのに不足している。                                                   | 「このサイズのためのプール流動性が不足しています。」                   |
| 6013 | `InvalidFeeModel`              | Invalid fee model                                                              | 管理者がオンチェーンで拒否される `AmmConfig` パラメータの組み合わせを設定した。                                     | N/A — 管理者専用パス。                               |
| 6014 | `NoFeeCollect`                 | Fee is zero                                                                    | 回収可能な手数料がゼロの状態で `collect_protocol_fee` / `collect_fund_fee` が呼び出された。               | N/A — 管理者パス。ツールは無視してください。                    |

再生成ソース：[github.com/raydium-io/raydium-cp-swap — error.rs](https://github.com/raydium-io/raydium-cp-swap/blob/master/programs/cp-swap/src/error.rs)。

## CLMMエラー

プログラムID：[reference/program-addresses](/ja/reference/program-addresses#on-chain-programs) を参照。ソース：`raydium-clmm/programs/amm/src/error.rs`。

| コード  | バリアント                                    | `#[msg]` 文字列                                                                            | 典型的な原因                                                                                                     | 推奨UXメッセージ                                             |
| ---- | ---------------------------------------- | --------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
| 6000 | `NotApproved`                            | Not approved                                                                            | 呼び出し元がこの命令に設定された管理者ではない。                                                                                   | 「プールの管理者のみがこの操作を実行できます。」                              |
| 6001 | `InvalidUpdateConfigFlag`                | invalid update amm config flag                                                          | 管理者が `update_amm_config` に未認識の `param` 値を渡した。                                                              | N/A — 管理者専用パス。                                        |
| 6002 | `AccountLack`                            | Account lack                                                                            | 必要な残余アカウント（通常はティック配列またはオラクル拡張）がトランザクションに含まれていない。                                                           | 「内部エラー：アカウントが不足しています — プールデータを更新してください。」              |
| 6003 | `ClosePositionErr`                       | Remove liquidity, collect fees owed and reward then you can close position account      | 流動性・未回収手数料・未回収報酬が残っているポジションをクローズしようとした。                                                                    | 「ポジションをクローズする前に、すべての流動性を引き出し、手数料と報酬を回収してください。」        |
| 6004 | `InvalidTickIndex`                       | Tick out of range                                                                       | `tick_lower` または `tick_upper` が `[-443636, 443636]` の範囲外。                                                  | 「このプールの価格範囲が境界を超えています。」                               |
| 6005 | `TickInvalidOrder`                       | The lower tick must be below the upper tick                                             | `tick_lower >= tick_upper` の状態。                                                                            | 「下限価格は上限価格より低くする必要があります。」                             |
| 6006 | `TickLowerOverflow`                      | The tick must be greater, or equal to the minimum tick(-443636)                         | 下限ティックがアンダーフロー。                                                                                            | 「下限価格が低すぎます。」                                         |
| 6007 | `TickUpperOverflow`                      | The tick must be lesser than, or equal to the maximum tick(443636)                      | 上限ティックがオーバーフロー。                                                                                            | 「上限価格が高すぎます。」                                         |
| 6008 | `TickAndSpacingNotMatch`                 | tick % tick\_spacing must be zero                                                       | 渡されたティックがプールの `tick_spacing` の倍数ではない。                                                                      | 「価格を最も近い有効な刻みに合わせてください。」                              |
| 6009 | `InvalidTickArray`                       | Invalid tick array account                                                              | ティック配列スロットに誤ったPDAが渡された。                                                                                    | 「内部エラー：ティック配列が間違っています — プールデータを更新してください。」             |
| 6010 | `InvalidTickArrayBoundary`               | Invalid tick array boundary                                                             | ティック配列インデックスのオフバイワンエラー。                                                                                    | 「内部エラー：ティック配列境界エラー。」                                  |
| 6011 | `SqrtPriceLimitOverflow`                 | Square root price limit overflow                                                        | 呼び出し元が指定した `sqrt_price_limit` が有効範囲外。                                                                      | 「価格制限が範囲外です。」                                         |
| 6012 | `SqrtPriceX64`                           | sqrt\_price\_x64 out of range                                                           | スワップ中にプールの現在のsqrt価格が範囲外にずれた。                                                                               | 「スワップを再試行してください。」                                     |
| 6013 | `LiquiditySubValueErr`                   | Liquidity sub delta L must be smaller than before                                       | 流動性削減での内部不変条件違反。                                                                                           | 「内部エラー：流動性計算エラー。」                                     |
| 6014 | `LiquidityAddValueErr`                   | Liquidity add delta L must be greater, or equal to before                               | 流動性追加での内部不変条件違反。                                                                                           | 「内部エラー：流動性計算エラー。」                                     |
| 6015 | `ForbidBothZeroForSupplyLiquidity`       | Both token amount must not be zero while supply liquidity                               | `amount_0_max` と `amount_1_max` の両方がゼロの状態で流動性追加が呼び出された。                                                    | 「少なくとも一方のトークンを提供してください。」                              |
| 6016 | `LiquidityInsufficient`                  | Liquidity insufficient                                                                  | ポジションに引き出しを満たすのに十分な流動性がない。                                                                                 | 「引き出し量がポジションの流動性を超えています。」                             |
| 6017 | `PriceSlippageCheck`                     | Price slippage check                                                                    | 約定価格が呼び出し元のスリッページガードをクリアできなかった。                                                                            | 「価格がスリッページ許容範囲を超えました。スリッページを拡大するか再試行してください。」          |
| 6018 | `TooLittleOutputReceived`                | Too little output received                                                              | `SwapBaseInput`：出力量が `other_amount_threshold` を下回った。                                                       | 「スリッページ超過 — 最小出力量が満たされませんでした。」                        |
| 6019 | `TooMuchInputPaid`                       | Too much input paid                                                                     | `SwapBaseOutput`：入力量が `other_amount_threshold` を超えた。                                                       | 「スリッページ超過 — 最大入力量を超えました。」                             |
| 6020 | `ZeroAmountSpecified`                    | Swap special amount can not be zero                                                     | スワップ命令で `amount` がゼロ。                                                                                      | 「ゼロより大きい量を入力してください。」                                  |
| 6021 | `InvalidInputPoolVault`                  | Input pool vault is invalid                                                             | スワップの入力バルトアカウントがプールに記録されたバルトと一致しない。                                                                        | 「内部エラー：入力バルトが間違っています — プールデータを更新してください。」              |
| 6022 | `TooSmallInputOrOutputAmount`            | Swap input or output amount is too small                                                | スワップの計算がゼロに丸められた（非常に小さなダストなど）。                                                                             | 「このプールでスワップするには量が小さすぎます。」                             |
| 6023 | `NotEnoughTickArrayAccount`              | Not enough tick array account                                                           | スワップ範囲に対してティック配列の残余アカウントが不足している。                                                                           | 「内部エラー：ティック配列が不足しています — プールデータを更新してください。」             |
| 6024 | `InvalidFirstTickArrayAccount`           | Invalid first tick array account                                                        | 最初に渡されたティック配列アカウントが現在のティックをカバーしていない。                                                                       | 「内部エラー：最初のティック配列が間違っています — プールデータを更新してください。」          |
| 6025 | `InvalidRewardIndex`                     | Invalid reward index                                                                    | `reward_index` が `[0, 2]` の範囲外。                                                                            | N/A — 管理者パス。                                          |
| 6026 | `FullRewardInfo`                         | The init reward token reach to the max                                                  | プールにすでに最大数（3つ）の報酬ミントが設定されている。                                                                              | N/A — 管理者パス。                                          |
| 6027 | `RewardTokenAlreadyInUse`                | The init reward token already in use                                                    | 報酬ミントが既存のものと重複している。                                                                                        | N/A — 管理者パス。                                          |
| 6028 | `ExceptRewardMint`                       | The reward tokens must contain one of pool vault mint except the last reward            | スロット2以前では、報酬ミントはプールのバルトミントのいずれかと一致する必要がある。                                                                 | N/A — 管理者パス。                                          |
| 6029 | `InvalidRewardInitParam`                 | Invalid reward init param                                                               | 排出開始・終了時刻または秒間レートが不正。                                                                                      | N/A — 管理者パス。                                          |
| 6030 | `InvalidRewardInputAccountNumber`        | Invalid collect reward input account number                                             | `CollectReward` に渡された残余アカウント数が間違っている。                                                                      | 「内部エラー：アカウント数が間違っています — 更新して再試行してください。」               |
| 6031 | `InvalidRewardPeriod`                    | Invalid reward period                                                                   | 報酬排出期間が無効（`end <= start`、ゼロ期間）。                                                                            | N/A — 管理者パス。                                          |
| 6032 | `NotApproveUpdateRewardEmissions`        | Modification of emissions is allowed within 72 hours from the end of the previous cycle | 管理者がサイクル境界の72時間ウィンドウ外で排出量を変更しようとした。                                                                        | N/A — 管理者パス。                                          |
| 6033 | `UnInitializedRewardInfo`                | uninitialized reward info                                                               | 初期化されていない報酬スロットが参照された。                                                                                     | N/A — 管理者パス。                                          |
| 6034 | `NotSupportMint`                         | Not support token\_2022 mint extension                                                  | CLMMが処理できないToken-2022拡張機能が検出された。                                                                           | 「このトークンの拡張機能はRaydium CLMMでサポートされていません。」               |
| 6035 | `MissingTickArrayBitmapExtensionAccount` | Missing tickarray bitmap extension account                                              | スワップがベースビットマップでカバーされていないティック範囲を超えた。拡張ビットマップアカウントが必要。                                                       | 「内部エラー：ティック配列拡張が不足しています — プールデータを更新してください。」           |
| 6036 | `InsufficientLiquidityForDirection`      | Insufficient liquidity for this direction                                               | スワップの方向に十分な流動性がない。                                                                                         | 「このスワップサイズには流動性が不足しています。」                             |
| 6037 | `MaxTokenOverflow`                       | Max token overflow                                                                      | 入出力量がu64を超えた。                                                                                              | 「このプールには大きすぎる量です。」                                    |
| 6038 | `CalculateOverflow`                      | Calculate overflow                                                                      | 手数料・流動性の算術オーバーフロー。                                                                                         | 「このプールには大きすぎる量です。」                                    |
| 6039 | `TransferFeeCalculateNotMatch`           | TransferFee calculate not match                                                         | Token-2022転送手数料の観測額が期待値と一致しなかった。                                                                           | 「トークン転送手数料がトランザクション中に変わりました。再試行してください。」               |
| 6040 | `OrderAlreadyFilled`                     | Order already fully filled, cannot modify                                               | 未約定量がゼロの注文に対して `IncreaseLimitOrder` / `DecreaseLimitOrder` が呼び出された。                                        | 「この指値注文はすでに約定済みです — 出力を受け取るには決済してください。」               |
| 6041 | `InvalidOrderPhase`                      | Invalid order phase                                                                     | 注文のFIFOコホートフェーズがティックの現在のコホートと一致しなくなった状態で注文を変更しようとした。                                                       | 「この注文の現在の状態ではこの操作を実行できません。」                           |
| 6042 | `InvalidLimitOrderAmount`                | Invalid limit order amount                                                              | 注文の入力量がプールの最小値以下（またはゼロ）。                                                                                   | 「注文サイズがプールの最小値を下回っています。」                              |
| 6043 | `OrderPhaseSaturated`                    | Tick order phase saturated                                                              | ティック上のコホートの `order_phase` カウンターが飽和した。既存のコホートが決済されてロールオーバーするまで、そのティックでは新たな注文を開くことができない。                     | 「この価格ではアクティブな注文が多すぎます。近隣のティックを試すか、注文が決済されるまでお待ちください。」 |
| 6044 | `InvalidDynamicFeeConfigParams`          | Invalid dynamic fee config params                                                       | `CreateDynamicFeeConfig` / `UpdateDynamicFeeConfig` が拒否されたか、`CreateCustomizablePool` が有効な設定なしに動的手数料を有効化した。 | 管理者パスではN/A。ユーザーパスでは「動的手数料の設定が無効です」。                   |
| 6045 | `InvalidFeeOn`                           | Invalid fee on which token (must be 0, 1, or 2)                                         | `CreateCustomizablePool` が `{0, 1, 2}` 以外の `collect_fee_on` 値を渡した。                                         | 「内部エラー：無効な手数料モード。」                                    |
| 6046 | `ZeroSqrtPrice`                          | sqrt\_price\_x64 must be greater than 0                                                 | `CreateCustomizablePool`（またはカスタマイズ可能な初期sqrt価格を受け入れる別のパス）が `sqrt_price_x64 == 0` で呼び出された。                   | 「初期価格はゼロより大きくする必要があります。」                              |
| 6047 | `ZeroLiquidity`                          | liquidity must be greater than 0                                                        | 流動性提供パスが `liquidity == 0` かつ補償量なしで呼び出された。                                                                  | 「流動性量はゼロより大きくする必要があります。」                              |
| 6048 | `MissingBaseFlag`                        | base\_flag is required when liquidity is zero                                           | 量によるポジション開設パスが `liquidity == 0` を計算したが、呼び出し元がどちらの側がベースかを示す `base_flag` を指定しなかった。                           | 「ゼロ以外の流動性を提供するか、どちらのトークンがベースかを指定してください。」              |
| 6049 | `MissingMintAccount`                     | Mint account is required but not provided                                               | Token-2022対応パスが、拡張機能と転送手数料の検証に必要な入出力ミントアカウントなしで呼び出された。                                                     | 「内部エラー：ミントアカウントが不足しています — プールデータを更新してください。」           |
| 6050 | `MissingTokenProgram2022`                | Token-2022 program is required but not provided                                         | SPL-Token-2022プログラムアカウントについても同様。                                                                           | 「内部エラー：Token-2022プログラムが不足しています — 更新して再試行してください。」      |

> **番号付け変更に関する注意。** CLMMの `ErrorCode` 列挙型はこのリリースで番号が振り直されました。5つのレガシーバリアント（`LOK`、`ZeroMintAmount`、`InvalidLiquidity`、`TransactionTooOld`、`InvalidRewardDesiredAmount`）といくつかのタイポ（`Liquitity`、`enought`、`emissiones`）が削除・修正され、11個の新しいバリアントが追加されました。Anchorはソースの順序でエラーに番号を付けるため、`6000` 以降のすべてのコードはプレリリースビルドに対して相対的にずれています。以前のバージョンに対して数値コードをハードコードしているクライアントはリマップが必要です。

再生成ソース：[github.com/raydium-io/raydium-clmm — error.rs](https://github.com/raydium-io/raydium-clmm/blob/master/programs/amm/src/error.rs)。

## AMM v4、Farm v3 / v5 / v6、LaunchLabエラー

これらのプログラムはそれぞれの章に記載されています（[`products/amm-v4/instructions`](/ja/products/amm-v4/instructions)、[`products/farm-staking/instructions`](/ja/products/farm-staking/instructions)、[`products/launchlab/instructions`](/ja/products/launchlab/instructions) を参照）。これらのプログラムはAnchorとプレーンなSolanaエラーサーフェスが混在しているため、エラーテーブルはここではなく命令リファレンスの隣に記載されています。以下のコードはそれらの章によって予約されています：

| プログラム        | コード範囲（Anchorのみ）          | リファレンス                                                                         |
| ------------ | ------------------------ | ------------------------------------------------------------------------------ |
| AMM v4       | カスタムu32コード（Anchor形式ではない） | [`products/amm-v4/instructions`](/ja/products/amm-v4/instructions)             |
| Farm v3 / v5 | カスタムu32コード               | [`products/farm-staking/instructions`](/ja/products/farm-staking/instructions) |
| Farm v6      | 6000以上（Anchor）           | [`products/farm-staking/instructions`](/ja/products/farm-staking/instructions) |
| LaunchLab    | 6000以上（Anchor）           | [`products/launchlab/instructions`](/ja/products/launchlab/instructions)       |

## SDKエラーをプログラムエラーにマッピングする

公式TypeScript SDKは、オンチェーンエラーを `SendTransactionError` にラップし、Anchorプログラムの場合は `AnchorError` にもラップします：

```ts theme={null}
import { AnchorError } from "@coral-xyz/anchor";

try {
  await sdk.cpmm.swap({ ... });
} catch (err) {
  if (err instanceof AnchorError) {
    console.log(err.error.errorCode.number, err.error.errorCode.code, err.error.errorMessage);
    // 6005 ExceededSlippage "Exceeds desired slippage limit"
  } else {
    // Raw SendTransactionError — inspect err.logs for the "custom program error: 0x..." line.
  }
}
```

Anchorクライアントを使用していない場合は、トランザクションログを解析してください：

```
Program <ProgramID> invoke [1]
Program log: AnchorError caused by account: pool_state. Error Code: ExceededSlippage. Error Number: 6005. Error Message: Exceeds desired slippage limit.
```

パターン `Error Number: (\d+)` はAnchorバージョン間で安定しており、照合に安全に使用できます。

## テーブルの再生成

プログラムがアップグレードされて新しいエラーが追加された場合は、ソースから再抽出してください：

```bash theme={null}
# Clone and grep the error enum in order.
git clone --depth=1 https://github.com/raydium-io/raydium-cp-swap
awk '/#\[msg\(/{ gsub(/^[ \t]*#\[msg\("|"\)\][ \t]*/,""); m=$0; getline; gsub(/,/,""); gsub(/^[ \t]+/,""); print "6000+++\t" $0 "\t" m }' \
  raydium-cp-swap/programs/cp-swap/src/error.rs
# Replace 6000+++ with monotonically-increasing 6000,6001,... Append new rows to the table above.
```

新しいバリアントが追加された場合は、必ず [`reference/changelog`](/ja/reference/changelog) を更新してください。SDKをアップグレードするインテグレーターがエラーハンドラーを更新すべきタイミングを把握できます。

ソース：

* [raydium-cp-swap error.rs (mainnet CPMM)](https://github.com/raydium-io/raydium-cp-swap/blob/master/programs/cp-swap/src/error.rs)
* [raydium-clmm error.rs (mainnet CLMM)](https://github.com/raydium-io/raydium-clmm/blob/master/programs/amm/src/error.rs)
