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

# Token-2022サポートマトリックス

> Raydiumのどのプログラムが Token-2022 をサポートしているか、プール作成時に各プログラムが実装する明示的な拡張機能許可リスト、およびそれ以外の方法で拒否されるミントを認める迂回パス（静的ミント許可リスト、ミント単位のレジストリ、Superstate検出）。

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

  [英語版を表示 →](/reference/token-2022-support)
</Info>

Raydium は任意の Token-2022 ミントを受け入れることができません。CPMM と CLMM は両方とも厳密な**許可リストモード**で動作します。デフォルトではごく少数の拡張機能のみがパスし、それ以外はすべてプール作成時に拒否されます。ハードコードされたアドレスで信頼できるミントのセットが許可され、CLMM はさらに管理者が管理するミント単位のレジストリとランタイム Superstate トークン検出をサポートします。このページは、何が実装されているか、どこで実装されているかの単一ページの参考資料で、プログラムソースへのファイル・行の引用を含みます。

## プログラムレベルのサポート

| プログラム           | Token-2022 ベース/クォートミント? | モード                                                                                                                                                                                                |
| --------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **CPMM**        | あり — ゲート制限              | 厳密な拡張機能許可リスト + 4ミントの静的許可リスト。                                                                                                                                                                       |
| **CLMM**        | あり — ゲート制限              | 厳密な拡張機能許可リスト + 6ミントの静的許可リスト + 管理者ミント単位レジストリ + Superstate検出。                                                                                                                                        |
| **AMM v4**      | いいえ                     | プログラムは Token-2022 以前のもので、両方のミントはクラシック SPL Token である必要があります。                                                                                                                                        |
| **Stable AMM**  | いいえ                     | AMM v4 と同じ制約。                                                                                                                                                                                      |
| **Farm v6**     | あり、部分的                  | リワードミントは Token-2022 にできます（ファームが CPMM/CLMM LP をラップする場合は同じ許可リストに従う）。ユーザーステーク LP ミントはラップされたプールから継承します。                                                                                                |
| **LaunchLab**   | あり、プログラム管理              | ベースミントは Token-2022 にできますが、専用の `initialize_with_token_2022` 命令を経由してのみ可能です。プログラム自体は `MetadataPointer`（常に）とオプションで `TransferFeeConfig`（レート ≤ 5%）でミントを作成します。任意の拡張機能を持つ既存の Token-2022 ミントはベースとして使用できません。 |
| **Burn & Earn** | プールプログラムをミラー            | CPMM / CLMM ゲートを継承します。                                                                                                                                                                             |

許可リストチェックは次の場所にあります：

* **CPMM**: `is_supported_mint` in [`raydium-cp-swap/programs/cp-swap/src/utils/token.rs:178`](https://github.com/raydium-io/raydium-cp-swap), `Initialize` から呼び出し。
* **CLMM**: `is_supported_mint` in [`raydium-clmm/programs/amm/src/util/token.rs:280`](https://github.com/raydium-io/raydium-clmm), `CreatePool` から呼び出し。
* **LaunchLab**: `initialize_with_token_2022` in `raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs`（ソースは公開されていません）。

CPMM または CLMM にはスワップ時のミントチェックがありません — ゲートはプール作成時にのみ発火します。プールが存在すると、スワップはミントが変更されなかったことを信頼します。これは Token-2022 ミント状態の不変部分に対して正しいです。

## CPMM および CLMM 拡張機能許可リスト

静的許可リストの短いサーキット後（以下で説明）、プログラムはミントの拡張機能を反復し、これらの 5 つ以外の拡張機能を持つミントを拒否します：

| 拡張機能                    | 許可される理由                                                                                                                               |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `TransferFeeConfig`     | プール数学は受信手数料を差し引きます。Token-2022 プログラムは送信手数料を処理します。[`algorithms/token-2022-transfer-fees`](/ja/algorithms/token-2022-transfer-fees) を参照。 |
| `MetadataPointer`       | 装飾的 — オンチェーンメタデータを指します。                                                                                                               |
| `TokenMetadata`         | 装飾的 — インラインメタデータ。                                                                                                                     |
| `InterestBearingConfig` | プールは元本金額を認識します。UI 乗数は装飾のみで、基礎残高は保持されます。                                                                                               |
| `ScaledUiAmount`        | 利息付きと同じ形状 — スケール係数は UI 表示にのみ適用されます。                                                                                                   |

このリストにないもの — `TransferHook`、`NonTransferable`、`ConfidentialTransferMint`、`PermanentDelegate`、`MintCloseAuthority`、`DefaultAccountState`、`GroupPointer`、`GroupMemberPointer`、`MemberPointer`、`Pausable` など — は `is_supported_mint` が `false` を返し、プール作成が戻ります。

関連する行（CPMM、CLMM で同じ形状）：

```rust theme={null}
for e in extensions {
    if e != ExtensionType::TransferFeeConfig
        && e != ExtensionType::MetadataPointer
        && e != ExtensionType::TokenMetadata
        && e != ExtensionType::InterestBearingConfig
        && e != ExtensionType::ScaledUiAmount
    {
        return Ok(false);
    }
}
Ok(true)
```

— [`cp-swap/src/utils/token.rs:190–200`](https://github.com/raydium-io/raydium-cp-swap)

## 迂回パス

許可リストに適合しない Token-2022 ミントは、3 つの明示的な迂回路のいずれかを通じて許可されることができます。拡張機能の反復が実行される前に、順番に試みられます。

### 1. 静的ミント許可リスト

定数 `MINT_WHITELIST` の base58 文字列の配列は各プログラムにハードコードされています。ミントのアドレスが一致する場合、関数は `true` を直ちに返し、拡張機能チェックは実行されません。

| プログラム | ホワイトリストされたミント                                                                                                                                                                                  |
| ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| CPMM  | `HVbpJAQGNpkgBaYBZQBR1t7yFdvaYVp2vCQQfKKEN4tM`, `Crn4x1Y2HUKko7ox2EZMT6N2t2ZyH7eKtwkBGVnhEq1g`, `FrBfWJ4qE5sCzKm3k3JaAtqZcXUh4LvJygDeketsrsH4`, `2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo` |
| CLMM  | 同じ 4 つ、加えて `DAUcJBg4jSpVoEzASxYzdqHMUN8vuTpQyG2TvDcCHfZg`, `AUSD1jCcCyPLybk1YnvPWsHQSrZ46dxwoMniN4N2UEB9`                                                                                      |

これらのアドレスはプログラムに焼き付けられています。リストを更新するには、3/4 アップグレード マルチシグを通じたプログラムアップグレードが必要です。

### 2. ミント単位のレジストリ — CLMM のみ

CLMM はさらに、シード `[b"support_mint", mint]` で `SupportMintAssociated` PDA に相談します。そのミントに対して PDA が存在する場合、その拡張機能セットに関係なく許可されます。

PDA は `CreateSupportMintAssociated` によって作成されます（[`admin/create_support_mint_associated.rs`](https://github.com/raydium-io/raydium-clmm)）。命令は 2 つの署名者にゲート制限されています：

* `crate::admin::ID` — 標準 Raydium 管理者権限。
* `crate::create_support_mint_associated_owner::ID` — この目的専用の権限：`RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY`（メインネット）、`rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5`（デブネット）。

効果：CLMM チームはプログラムアップグレードなしで特定の Token-2022 ミントをプール作成にオプトインできます。CPMM には同等のものがありません — その許可リストは厳密にソースコード化されています。

### 3. Superstate検出 — CLMM のみ

CLMM には、Superstate のトークン化資産専用の 3 番目のパスがあります。これらは CLMM プログラムにリンクされた `spl-token-2022` のバージョンがアンパックできない `ScaledUiConfig` 拡張機能を使用します。依存関係をアップグレードするのではなく、CLMM は Superstate トークンを権限形状によって検出します：

```rust theme={null}
superstate_allowlist::ID == freeze_authority
    && *mint_account_info.owner == spl_token_2022::ID
    && default_account_state_freeze
    && maybe_permanent_delegate
```

— [`raydium-clmm/programs/amm/src/util/token.rs:485`](https://github.com/raydium-io/raydium-clmm)

ミントは、**すべての 4 つ**が成立する場合、このブランチをパスします：

* そのプログラムの所有者は Token-2022 プログラムです。
* その凍結権限は `superstate_allowlist::ID` と等しい。メインネット：`2Yq4T3mPNfjtEyTxSbRjRKqLf1pwbTasuCQrWe6QpM7x`。デブネット：`3TRuL3MFvzHaUfQAb6EsSAbQhWdhmYrKxEiViVkdQfXu`。
* その `DefaultAccountState` 拡張機能は `Frozen` に設定されています。
* その永続的な委任者も `superstate_allowlist::ID` です。

これはレジストリではなくヒューリスティックです — Superstate が同じ権限形状を持つ将来のミントは自動的に許可されます。

## 迂回路が放棄しないもの

迂回路は拡張機能許可リストをスキップしますが、プログラムは依然として実装します：

* ミントは `Token` または `Token-2022` によって所有されています。カスタムトークンプログラムはアップストリームで拒否されます。
* プールボールトは Token-2022 プール用の正しい ATA 拡張機能で作成されます（`ImmutableOwner` など）。
* すべての転送は `transfer_checked` を通過します — 手数料付きミントはボールトに正しい金額を配置します。

ホワイトリストまたは PDA に登録されたミントが後で `TransferHook` を追加する場合、スワップ時チェックは取得されません。フックはすべての転送で実行され、スワップをブリックする可能性があります。したがって、ホワイトリストは高度な信頼アクションです。

## 「ブロック」セマンティクス

`is_supported_mint` が `false` を返すと、プール作成は `ErrorCode::NotSupportMint`（CPMM）/ `ErrorCode::NotSupportMint`（CLMM）で戻ります。数値コードについては [`reference/error-codes`](/ja/reference/error-codes) を参照してください。

既存のプールはこのチェックで遡及的に失敗することはできません — ゲートは作成時にのみ実行されます。ミント拡張機能は Raydium が拒否するカテゴリでは不変です（転送フック、非転送可能、機密転送は作成後に追加することはできません）ため、静的チェックで十分です。

## 除外された各拡張機能が除外される理由

* **TransferHook** — すべての転送で カスタムプログラムを呼び出します。任意の CU 消費、任意の失敗条件、呼び出し元プログラムの再入能力があります。安全なサンドボックスはありません。一部の DEX はフック許可リストを保持しており、Raydium はそうしません。
* **NonTransferable** — `Transfer` は常に失敗します。プールは保管を取ることができません。
* **ConfidentialTransfer** — 転送金額は暗号化されています。曲線はスワップを価格設定できません。
* **PermanentDelegate** — 委任者の保有者はプールボールトを含む任意のトークンアカウントをスイープできます。信頼できる発行者（例えば規制されたステーブルコイン）の場合のみ静的許可リストを介して許可されます。
* **MintCloseAuthority** — ミントは閉じることができます。既存のプールは使用不可になります。デフォルトで禁止されています。
* **DefaultAccountState (Frozen)** — プール ATA は `Frozen` 状態で着陸し、アカウントごとにチューニングが必要です。Superstate 検出でのみ許可されます。これは発行者が登録時に機関口座をチューニングすることを前提としています。
* **Group/Member ポインター** — 積極的に有害ではありませんが、レビューされていません。表面を狭く保つため、デフォルトで禁止されています。

## 転送手数料計算

`TransferFeeConfig` を持つミントの場合、すべてのスワップ、デポジット、および撤回では名目金額より少ない金額が移動します。SDK は計算の両半分を表示します：

```ts theme={null}
const { amountIn, amountOut, feeAmount, token2022FeeIn, token2022FeeOut } =
  await raydium.cpmm.computeSwapAmount({ ... });
```

正しい UI は以下を表示します：

* `amountIn + token2022FeeIn` を「送信」として
* `amountOut - token2022FeeOut` を「受け取る」として
* `feeAmount` をプール手数料（LP + プロトコル）として。これは Token-2022 転送手数料とは別です

`amountIn → amountOut` のみを表示するナイーブ UI はコストを過小評価します。

### `maximumFee` キャップ

Token-2022 転送手数料は転送ごとにキャップされます。1% ミントと 10,000 トークンのキャップの場合、100,000,000 トークン転送は手数料として 10,000 のみを支払います。SDK の `computeSwapAmount` はキャップを適用します。直接プログラム呼び出し元はそれを複製する必要があります。

### エポック遷移

ミント権限は、次のエポックで有効になる手数料レート変更をスケジュールできます。遷移ウィンドウ中、2 つの設定（`older`、`newer`）がミントに同時に存在し、`TransferChecked` は現在のエポックによって選択されます。CPMM `SwapV2` と CLMM `SwapV2` の両方とも、`accounts` に完全なミントアカウントを渡します。したがって、プログラムは余分なルックアップなしで正しい設定を読みます。

Trade API または SDK を通じて 1 つ以上のエポック前にクォートする場合、実行される手数料はクォートされた手数料と異なる可能性があります — より古い設定の `maximum_fee_basis_points` によってバインドされます。

## 利息付きおよび ScaledUiAmount

プールは元本金額を保持します。「UI 金額」は元本に時間に依存した、または管理者設定のスケール係数を乗じたものです。スワップ数学は元本で操作されます：

```
principal_in = ui_amount_in / ui_multiplier(now)
```

SDK は自動的に変換します。直接 RPC リーダーは `pool.token0Vault.amount` を元本として扱うべきです。

## 「Token-2022 プール」定義

プールは **いずれか**のミントが `programId == TokenzQdB...` を持つ場合、Token-2022 プールです。API は以下を表示します：

```
GET /pools/info/ids?ids=<POOL_ID>
```

```json theme={null}
{
  "data": [{
    "mintA": { "programId": "TokenzQdB...", "hasTransferFee": true, ... },
    "mintB": { "programId": "Tokenkeg...", ... }
  }]
}
```

ディスパッチには `programId` を使用し、UI 警告を表示するには `hasTransferFee` を使用してください。

## SDK ヘルパー

```ts theme={null}
import { Raydium, TOKEN_2022_PROGRAM_ID } from "@raydium-io/raydium-sdk-v2";
import { ExtensionType, getExtensionTypes, unpackMint } from "@solana/spl-token";

const raydium = await Raydium.load({ owner, connection });

const acct = await connection.getAccountInfo(mintPubkey);
if (!acct) throw new Error("mint not found");
const mint = unpackMint(mintPubkey, acct, acct.owner);

if (acct.owner.equals(TOKEN_2022_PROGRAM_ID)) {
  const extensions = getExtensionTypes(mint.tlvData);
  const accepted = new Set([
    ExtensionType.TransferFeeConfig,
    ExtensionType.MetadataPointer,
    ExtensionType.TokenMetadata,
    ExtensionType.InterestBearingConfig,
    ExtensionType.ScaledUiAmount,
  ]);
  const rejecting = extensions.filter(e => !accepted.has(e));
  if (rejecting.length) {
    console.warn("Pool creation will revert unless this mint is whitelisted:", rejecting);
  }
}
```

## 統合の一般的な誤り

* **プログラム ID のみをプリフライトする。** ミントは Token-2022 **かつ**サポートされていない可能性があります。許可リスト（および静的許可リスト）に対して拡張機能リストをウォークしてから、プール作成を許可してください。
* **ミントがまったく受け入れられていない場合、SDK のクォートを信頼する。** クォート API は拒否されません — プール作成が戻ります。UI でプール作成を公開する前に、`is_supported_mint` セマンティクスをオフチェーンで確認してください。
* **転送手数料カットなしでクォートする。** 0.25% CPMM プールの両側に 1% 転送手数料ミントがあると、実効手数料は約 2.25% であり、0.25% ではありません。SDK クォートまたは Trade API クォートを使用してください — プールの手数料層だけから手数料を手動計算しないでください。
* **Token-2022 プールで従来の `Swap` 命令を呼び出す。** `Swap` は Token-2022 以前のものです。いずれかのミントが Token-2022 であるときはいつでも `SwapV2` を使用してください。
* **新しい Token-2022 ミントを自動リストする。** ウォレットとアグリゲーターは、ミントをユーザーに表示する前に `TransferHook` と `NonTransferable` を確認する必要があります。両方とも Raydium に対して敵対的です。

## 今後の作業

このマトリックスを変更する Solana エコシステムとプロトコル ロードマップアイテム：

* Solana レベルで許可されている転送フックプログラム（エコシステム慣例進化中）。
* 機密転送互換 AMM（研究段階）。
* より広い CPMM ミント単位レジストリ（CLMM とのパリティ）。
* Superstate ヒューリスティックなしで CLMM の `ScaledUiConfig` デコーディングが機能するように依存関係をアップグレード。

何かが着陸すると、このページが更新されます。

## ポインター

* [`algorithms/token-2022-transfer-fees`](/ja/algorithms/token-2022-transfer-fees) — スワップの手数料数学。
* [`products/cpmm/instructions`](/ja/products/cpmm/instructions) — `SwapV2`, `Initialize`.
* [`products/clmm/instructions`](/ja/products/clmm/instructions) — `SwapV2`, `CreatePool`, `CreateSupportMintAssociated`.
* [`reference/error-codes`](/ja/reference/error-codes) — プログラムごとの `NotSupportMint` 数値コード。

ソース：

* `raydium-cp-swap/programs/cp-swap/src/utils/token.rs` — `MINT_WHITELIST`, `is_supported_mint`.
* `raydium-clmm/programs/amm/src/util/token.rs` — `MINT_WHITELIST`, `superstate_allowlist`, `is_superstate_token`, `is_supported_mint`.
* `raydium-clmm/programs/amm/src/instructions/admin/create_support_mint_associated.rs` — ミント単位レジストリ命令。
* `raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs` — LaunchLab Token-2022 ベースミント作成。
