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

# Matriks dukungan Token-2022

> Program Raydium mana yang mendukung Token-2022, daftar ekstensi yang diizinkan secara eksplisit oleh setiap program saat pembuatan pool, dan jalur bypass (daftar mint statis, registri per-mint, deteksi Superstate) yang mengakui mint yang sebaliknya ditolak.

<Info>
  **Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.**

  [Lihat versi bahasa Inggris →](/reference/token-2022-support)
</Info>

Raydium **tidak** menerima mint Token-2022 sembarangan. CPMM dan CLMM sama-sama menjalankan **mode daftar izin ketat**: hanya serangkaian kecil ekstensi yang lulus secara default; semuanya ditolak saat pembuatan pool. Beberapa mint tepercaya diterima melalui alamat yang dikode keras; CLMM juga mendukung registri per-mint yang dikelola admin dan deteksi token Superstate saat runtime. Halaman ini adalah referensi singkat untuk apa yang diterapkan dan di mana, lengkap dengan kutipan file-dan-baris ke sumber program.

## Dukungan tingkat program

| Program         | Mint Token-2022 base/quote? | Mode                                                                                                                                                                                                                                                                                                                          |
| --------------- | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **CPMM**        | Ya — gated                  | Daftar izin ekstensi ketat + daftar whitelist 4 mint statis.                                                                                                                                                                                                                                                                  |
| **CLMM**        | Ya — gated                  | Daftar izin ekstensi ketat + daftar whitelist 6 mint statis + registri per-mint admin + deteksi Superstate.                                                                                                                                                                                                                   |
| **AMM v4**      | Tidak                       | Program mendahului Token-2022; kedua mint harus SPL Token klasik.                                                                                                                                                                                                                                                             |
| **Stable AMM**  | Tidak                       | Batasan sama dengan AMM v4.                                                                                                                                                                                                                                                                                                   |
| **Farm v6**     | Ya, sebagian                | Mint reward dapat berupa Token-2022 (tunduk pada daftar izin yang sama saat farm membungkus LP CPMM/CLMM); mint LP stake pengguna mewarisi dari pool yang dibungkus.                                                                                                                                                          |
| **LaunchLab**   | Ya, dikelola program        | Mint base dapat berupa Token-2022, tetapi hanya melalui instruksi `initialize_with_token_2022` khusus; program itu sendiri membuat mint dengan `MetadataPointer` (selalu) dan secara opsional `TransferFeeConfig` (rate ≤ 5%). Mint Token-2022 yang sudah ada dengan ekstensi sembarangan tidak dapat digunakan sebagai base. |
| **Burn & Earn** | Cerminkan program pool      | Mewarisi gating CPMM / CLMM.                                                                                                                                                                                                                                                                                                  |

Pengecekan daftar izin berada di:

* **CPMM**: `is_supported_mint` di [`raydium-cp-swap/programs/cp-swap/src/utils/token.rs:178`](https://github.com/raydium-io/raydium-cp-swap), dipanggil dari `Initialize`.
* **CLMM**: `is_supported_mint` di [`raydium-clmm/programs/amm/src/util/token.rs:280`](https://github.com/raydium-io/raydium-clmm), dipanggil dari `CreatePool`.
* **LaunchLab**: `initialize_with_token_2022` di `raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs` (sumber tidak tersedia untuk umum).

**Tidak ada** pengecekan mint pada waktu swap di CPMM atau CLMM — gate hanya berfungsi saat pembuatan pool. Setelah pool ada, swap hanya mempercayai bahwa mint tidak berubah, yang benar untuk bagian-bagian yang tidak dapat diubah dari status mint Token-2022.

## Daftar izin ekstensi CPMM dan CLMM

Setelah shortcut daftar whitelist statis (dijelaskan di bawah), program mengulangi ekstensi mint dan menolak mint jika membawa **ekstensi apa pun** selain lima ini:

| Ekstensi                | Alasan diizinkan                                                                                                                                                             |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TransferFeeConfig`     | Matematika pool mengurangkan biaya masuk; program Token-2022 menangani biaya keluar. Lihat [`algorithms/token-2022-transfer-fees`](/id/algorithms/token-2022-transfer-fees). |
| `MetadataPointer`       | Dekoratif — menunjuk ke metadata on-chain.                                                                                                                                   |
| `TokenMetadata`         | Dekoratif — metadata inline.                                                                                                                                                 |
| `InterestBearingConfig` | Pool melihat jumlah pokok; pengali UI hanya dekorator dan saldo yang mendasar dipertahankan.                                                                                 |
| `ScaledUiAmount`        | Bentuk sama dengan interest-bearing — faktor skala hanya berlaku pada tampilan UI.                                                                                           |

Apa pun yang tidak ada di daftar ini — `TransferHook`, `NonTransferable`, `ConfidentialTransferMint`, `PermanentDelegate`, `MintCloseAuthority`, `DefaultAccountState`, `GroupPointer`, `GroupMemberPointer`, `MemberPointer`, `Pausable`, dll. — menyebabkan `is_supported_mint` mengembalikan `false` dan pembuatan pool kembali.

Baris-baris relevan (CPMM, bentuk identik di 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)

## Jalur bypass

Mint Token-2022 yang tidak sesuai daftar izin masih dapat diterima melalui salah satu dari tiga bypass eksplisit. Mereka dicoba secara berurutan, sebelum iterasi ekstensi berjalan.

### 1. Daftar whitelist mint statis

Array konstanta `MINT_WHITELIST` dari string base58 dikode keras di setiap program. Jika alamat mint cocok, fungsi mengembalikan `true` segera dan tidak ada pengecekan ekstensi yang dilakukan.

| Program | Mint yang di-whitelist                                                                                                                                                                         |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| CPMM    | `HVbpJAQGNpkgBaYBZQBR1t7yFdvaYVp2vCQQfKKEN4tM`, `Crn4x1Y2HUKko7ox2EZMT6N2t2ZyH7eKtwkBGVnhEq1g`, `FrBfWJ4qE5sCzKm3k3JaAtqZcXUh4LvJygDeketsrsH4`, `2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo` |
| CLMM    | Empat yang sama, ditambah `DAUcJBg4jSpVoEzASxYzdqHMUN8vuTpQyG2TvDcCHfZg`, `AUSD1jCcCyPLybk1YnvPWsHQSrZ46dxwoMniN4N2UEB9`                                                                       |

Alamat-alamat ini ditanamkan dalam program; memperbarui daftar memerlukan upgrade program melalui multisig upgrade 3/4.

### 2. Registri per-mint — CLMM saja

CLMM juga berkonsultasi dengan PDA `SupportMintAssociated` pada seed `[b"support_mint", mint]`. Jika PDA itu ada untuk mint, itu diterima terlepas dari set ekstensinya.

PDA dibuat oleh `CreateSupportMintAssociated` ([`admin/create_support_mint_associated.rs`](https://github.com/raydium-io/raydium-clmm)). Instruksi gated ke dua penanda:

* `crate::admin::ID` — otoritas admin Raydium standar.
* `crate::create_support_mint_associated_owner::ID` — otoritas khusus untuk tujuan ini: `RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY` (mainnet), `rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5` (devnet).

Efek: tim CLMM dapat mengaktifkan mint Token-2022 tertentu untuk pembuatan pool tanpa upgrade program. CPMM tidak memiliki padanannya — daftar izinnya benar-benar dikode sumber.

### 3. Deteksi Superstate — CLMM saja

CLMM memiliki jalur ketiga khusus untuk aset yang ditokenkan Superstate, yang menggunakan ekstensi `ScaledUiConfig` yang versi `spl-token-2022` yang ditautkan ke dalam program CLMM tidak dapat unpacked. Daripada upgrade dependency, CLMM mendeteksi token Superstate berdasarkan bentuk otoritasnya:

```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)

Mint lulus cabang ini jika **keempat** kondisi terpenuhi:

* Program pemiliknya adalah program Token-2022.
* Otoritas pembekuannya sama dengan `superstate_allowlist::ID`. Mainnet: `2Yq4T3mPNfjtEyTxSbRjRKqLf1pwbTasuCQrWe6QpM7x`. Devnet: `3TRuL3MFvzHaUfQAb6EsSAbQhWdhmYrKxEiViVkdQfXu`.
* Ekstensi `DefaultAccountState` diatur ke `Frozen`.
* Delegate permanen juga `superstate_allowlist::ID`.

Ini adalah heuristik, bukan registri — mint apa pun di masa depan yang dikeluarkan Superstate dengan bentuk otoritas yang sama akan diterima secara otomatis.

## Apa yang bypass tidak mengesampingkan

Bypass melewati daftar izin ekstensi, tetapi program masih menerapkan:

* Mint dimiliki oleh `Token` atau `Token-2022`. Program token khusus ditolak hulu.
* Vault pool dibuat dengan ekstensi ATA yang tepat untuk pool Token-2022 (`ImmutableOwner`, dll.).
* Semua transfer melalui `transfer_checked` — mint pemegang biaya mendarat jumlah yang tepat di vault.

Mint yang di-whitelist atau terdaftar PDA yang, misalnya, kemudian menambahkan `TransferHook` tidak mendapatkan pengecekan waktu swap; hook hanya akan berjalan pada setiap transfer dan bisa batu swap. Whitelisting karenanya adalah tindakan kepercayaan tinggi.

## Semantik "Blocked"

Ketika `is_supported_mint` mengembalikan `false`, pembuatan pool kembali dengan `ErrorCode::NotSupportMint` (CPMM) / `ErrorCode::NotSupportMint` (CLMM). Lihat [`reference/error-codes`](/id/reference/error-codes) untuk kode numerik.

Pool yang ada tidak bisa secara retroaktif gagal pengecekan ini — gate hanya berjalan saat pembuatan. Ekstensi mint tidak dapat diubah untuk kategori yang Raydium tolak (transfer hook, non-transferable, confidential transfer tidak dapat ditambahkan pasca-pembuatan), jadi pengecekan statis sudah cukup.

## Mengapa setiap ekstensi yang dikecualikan dikecualikan

* **TransferHook** — menjalankan program khusus pada setiap transfer, dengan konsumsi CU sembarang, kondisi kegagalan sembarang, dan kemampuan untuk masuk kembali ke program pemanggil. Tidak ada sandbox aman. Beberapa DEX mempertahankan daftar izin hook; Raydium tidak.
* **NonTransferable** — `Transfer` selalu gagal. Pool tidak dapat mengambil alih.
* **ConfidentialTransfer** — jumlah transfer dienkripsi; kurva tidak dapat harga swap.
* **PermanentDelegate** — pemegangnya dapat menyapu akun token apa pun, termasuk vault pool. Hanya diizinkan melalui daftar whitelist statis untuk penerbit tepercaya (misalnya, stablecoin yang diatur).
* **MintCloseAuthority** — mint dapat ditutup; pool yang ada menjadi tidak dapat digunakan. Dilarang secara default.
* **DefaultAccountState (Frozen)** — ATA pool akan mendarat di status `Frozen` dan memerlukan thawing per akun. Hanya diizinkan melalui deteksi Superstate, yang mengasumsikan penerbit thaws akun institusional saat enrollment.
* **Group/Member pointers** — tidak secara aktif berbahaya, tetapi tidak ditinjau. Dilarang secara default untuk menjaga permukaan tetap sempit.

## Akuntansi transfer-fee

Untuk mint membawa `TransferFeeConfig`, setiap swap, deposit, dan withdraw memindahkan lebih sedikit dari jumlah nominal. SDK melayani kedua belahan kalkulasi:

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

UI yang benar menunjukkan:

* `amountIn + token2022FeeIn` sebagai "Anda mengirim"
* `amountOut - token2022FeeOut` sebagai "Anda menerima"
* `feeAmount` sebagai pool fee (LP + protokol), yang terpisah dari biaya transfer Token-2022

UI naif yang hanya menunjukkan `amountIn → amountOut` meremehkan biaya.

### Cap `maximumFee`

Biaya transfer Token-2022 dibatasi per transfer. Untuk mint 1 % dengan cap 10.000-token, transfer 100.000.000-token hanya membayar 10.000 dalam biaya. `computeSwapAmount` SDK menerapkan cap; pemanggil program langsung harus mereplikanya.

### Transisi epoch

Otoritas mint dapat menjadwalkan perubahan tingkat biaya yang diaktifkan di epoch berikutnya. Selama jendela transisi, dua config (`older`, `newer`) hidup di mint sekaligus dan `TransferChecked` memilih berdasarkan epoch saat ini. CPMM `SwapV2` dan CLMM `SwapV2` keduanya melewatkan akun mint penuh di `accounts`, jadi program membaca config yang tepat tanpa lookup tambahan.

Jika Anda mengutip lebih dari satu epoch sebelumnya melalui Trade API atau SDK, biaya yang dieksekusi dapat berbeda dari biaya yang dikutip — dibatasi oleh `maximum_fee_basis_points` config yang lebih lama.

## Interest-bearing dan ScaledUiAmount

Pool memegang jumlah pokok; "jumlah UI" adalah pokok dikalikan dengan faktor skala yang bergantung waktu atau yang ditetapkan admin. Matematika swap beroperasi pada pokok:

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

SDK mengkonversi secara otomatis. Pembaca RPC langsung harus memperlakukan `pool.token0Vault.amount` sebagai pokok.

## Definisi "pool Token-2022"

Pool adalah pool Token-2022 jika **salah satu** mint memiliki `programId == TokenzQdB...`. API melayani ini:

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

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

Gunakan `programId` untuk dispatch, dan `hasTransferFee` untuk menampilkan peringatan UI.

## Helper 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);
  }
}
```

## Kesalahan integrasi umum

* **Pre-flighting hanya ID program.** Mint dapat berupa Token-2022 *dan* tidak didukung. Berjalan di daftar ekstensi terhadap daftar izin (dan daftar whitelist statis) sebelum mengizinkan pembuatan pool.
* **Mempercayai kutipan SDK ketika mint tidak diterima sama sekali.** API kutipan tidak menolak untuk mengutip — pembuatan pool adalah yang kembali. Konfirmasi semantik `is_supported_mint` off-chain sebelum mengekspos pembuatan pool di UI Anda.
* **Mengutip tanpa potongan rambut transfer-fee.** Mint transfer-fee 1% di kedua sisi pool CPMM 0,25% memiliki biaya efektif sekitar 2,25%, bukan 0,25%. Gunakan kutipan SDK atau kutipan Trade API — jangan pernah hitung biaya secara manual dari tingkat biaya pool saja.
* **Memanggil instruksi `Swap` legacy pada pool Token-2022.** `Swap` mendahului Token-2022. Gunakan `SwapV2` kapan pun salah satu mint adalah Token-2022.
* **Auto-listing mint Token-2022 baru.** Dompet dan agregator harus memeriksa `TransferHook` dan `NonTransferable` sebelum melayani mint kepada pengguna; keduanya bermusuhan dengan Raydium.

## Pekerjaan masa depan

Item roadmap ekosistem Solana dan protokol yang akan mengubah matriks ini:

* Program transfer-hook yang di-whitelist pada tingkat Solana (konvensi ekosistem berkembang).
* AMM yang kompatibel confidential-transfer (tahap penelitian).
* Registri per-mint CPMM yang lebih luas (paritas dengan CLMM).
* Upgrade dependency sehingga dekoding `ScaledUiConfig` CLMM berfungsi tanpa heuristik Superstate.

Halaman ini akan diperbarui ketika ada yang mendarat.

## Pointer

* [`algorithms/token-2022-transfer-fees`](/id/algorithms/token-2022-transfer-fees) — matematika biaya dalam swap.
* [`products/cpmm/instructions`](/id/products/cpmm/instructions) — `SwapV2`, `Initialize`.
* [`products/clmm/instructions`](/id/products/clmm/instructions) — `SwapV2`, `CreatePool`, `CreateSupportMintAssociated`.
* [`reference/error-codes`](/id/reference/error-codes) — kode numerik `NotSupportMint` per program.

Sumber:

* `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` — instruksi registri per-mint.
* `raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs` — pembuatan mint base Token-2022 LaunchLab.
