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

# SPL Token dan Token-2022

> Dua standar token yang Raydium operasikan — program SPL Token warisan dan program Token-2022 berbasis ekstensi. Apa itu masing-masing, bagaimana perbedaannya, dan produk Raydium mana yang mendukung yang mana.

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

  [Lihat versi bahasa Inggris →](/solana-fundamentals/spl-token-and-token-2022)
</Info>

Setiap aset yang dapat diperdagangkan di Solana — termasuk setiap base dan quote asset dari pool Raydium — adalah token yang dimint oleh salah satu dari dua program: program **SPL Token** warisan atau penggantinya, **Token-2022**. Keduanya adalah program terpisah di alamat terpisah, dengan tata letak akun dan semantik ekstensi yang berbeda. Raydium mendukung keduanya, tetapi tidak di semua tempat: CPMM, CLMM, dan Farm v6 menerima mint Token-2022; AMM v4 tidak. Memahami pemisahan ini sangat penting sebelum mengintegrasikan dengan pool apa pun.

## Dua program

|                             | SPL Token                                     | Token-2022                                    |
| --------------------------- | --------------------------------------------- | --------------------------------------------- |
| Program ID                  | `TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA` | `TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb` |
| Diluncurkan                 | 2020                                          | 2022                                          |
| Ukuran akun (token account) | 165 B                                         | 165 B + ekstensi (variabel)                   |
| Ekstensi                    | Tidak                                         | Ya — 17+ ekstensi resmi                       |
| Kompatibilitas warisan      | Penuh                                         | Opt-in per mint                               |

Keduanya dikelola oleh tim Solana Labs (sekarang Anza) dan berada di bawah repo `solana-program-library`.

## Mengapa dua program?

SPL Token dibekukan untuk kompatibilitas maju — bytecodenya secara efektif tidak dapat diubah, membuat garis dasar bersih untuk seluruh ekosistem. Seiring berkembangnya kasus penggunaan (stablecoin yang menginginkan biaya transfer, mint institusional yang membutuhkan otoritas pembekuan dengan nuansa, NFT yang membutuhkan pointer metadata), tim Solana memperkenalkan **Token-2022** sebagai program terpisah yang dapat diperluas alih-alih memperbarui SPL Token. Ini menjaga integrasi yang sudah ada dan memungkinkan setiap mint untuk memilih tepat ekstensi yang dibutuhkannya.

Token-2022 adalah superset ketat dalam fungsionalitas, bukan dalam ruang alamat: kedua program hidup berdampingan, dan mint pada alamat tertentu milik tepat satu dari keduanya.

## Struktur akun

### Akun mint

Mendefinisikan identitas token.

SPL Token mint (82 byte):

```
u32   mint_authority_option
Pubkey mint_authority
u64   supply
u8    decimals
bool  is_initialized
u32   freeze_authority_option
Pubkey freeze_authority
```

Token-2022 mint: tata letak dasar yang sama, ditambah nol atau lebih record **extension TLV** (type-length-value) yang ditambahkan setelah dasar.

### Token account

Menyimpan saldo mint tertentu untuk pemilik tertentu.

SPL Token account (165 byte):

```
Pubkey mint
Pubkey owner
u64    amount
u32    delegate_option
Pubkey delegate
u8     state         // initialized, frozen
u32    is_native_option
u64    is_native
u64    delegated_amount
u32    close_authority_option
Pubkey close_authority
```

Token-2022 account: dasar yang sama, ditambah record extension TLV jika ada ekstensi aktif.

## Ekstensi Token-2022

Ekstensi adalah fitur modular yang dapat dilampirkan ke mint atau akun. Setiap ekstensi adalah record TLV terpisah. Yang utama untuk Raydium:

### Transfer fee

Mint dapat mengenakan biaya persentase pada setiap transfer. Biaya masuk ke otoritas penarikan yang dikonfigurasi. Didukung oleh Raydium CPMM dan CLMM melalui `SwapV2` — program menghitung biaya saat menghitung nilai tukar, sehingga matematika pool tetap koheren.

```rust theme={null}
let extension = TransferFeeConfig {
    transfer_fee_config_authority,
    withdraw_withheld_authority,
    withheld_amount: 0,
    older_transfer_fee: ...,
    newer_transfer_fee: ...,
};
```

### Transfer hook

Mint menunjuk ke program yang runtime panggil pada setiap transfer. Program hook dapat menolak transfer atau melakukan efek samping (perbarui status kepatuhan, log, dll.). Raydium CPMM/CLMM memanggil hook melalui `SwapV2` — transaksi mencakup program hook dan akun tambahan apa pun yang dibutuhkannya.

### Interest-bearing

Saldo on-chain mengumpulkan bunga pada tingkat yang dikonfigurasi. Hanya tampilan (saldo muncul lebih tinggi seiring waktu) daripada mint aktual; pasokan dasar tidak berubah.

### Mint close authority

Memungkinkan mint ditutup sekali pasokan mencapai nol.

### Permanent delegate

Dompet yang ditunjuk dapat mentransfer atau membakar token dari akun apa pun tanpa syarat. **Raydium memblokir pembuatan pool untuk mint dengan ekstensi ini** — tidak kompatibel dengan invarian bahwa cadangan pool tidak dapat disita.

### Non-transferable

Token tidak dapat dipindahkan dari akun tempat mereka dimint. **Raydium memblokir pembuatan pool** — aset yang tidak dapat diperdagangkan tidak bisa menjadi base atau quote dari pool LP.

### Default account state

Akun token baru untuk mint ini dibekukan secara default dan harus dicairkan oleh otoritas pembekuan. Dapat digunakan tetapi jarang.

### Confidential transfer

Saldo dan jumlah transfer dienkripsi. Raydium tidak mendukung mint transfer rahasia (matematika pool memerlukan saldo teks biasa).

### Metadata pointer + token metadata

Menggantikan metadata Metaplex untuk mint Token-2022. Didukung untuk daftar pool Raydium.

### Group / Member pointer

Mendeklarasikan mint sebagai bagian dari grup (misalnya, koleksi NFT). Informatif; Raydium menggunakannya untuk tampilan.

Lihat [halaman ekstensi Token-2022 resmi](https://spl.solana.com/token-2022/extensions) untuk daftar lengkap.

## Produk Raydium mana yang mendukung apa

| Produk    | SPL Token | Token-2022 | Catatan                                           |
| --------- | --------- | ---------- | ------------------------------------------------- |
| AMM v4    | Ya        | Tidak      | Integrasi OpenBook memerlukan SPL Token           |
| CPMM      | Ya        | Ya         | Memerlukan `SwapV2` untuk pool Token-2022         |
| CLMM      | Ya        | Ya         | Memerlukan `SwapV2` untuk pool Token-2022         |
| Farm v6   | Ya        | Ya         | Didukung untuk mint stake dan reward              |
| LaunchLab | Ya        | Ya         | Pool CPMM yang lulus mewarisi dukungan Token-2022 |

Kelayakan mint untuk pool Raydium — semua ekstensi diizinkan kecuali yang terdaftar:

* **Diblokir**: non-transferable, permanent delegate, confidential transfer, default account state (dalam konfigurasi ditolak).
* **Diizinkan dengan caveat** (LP harus menerima risiko): transfer fee, transfer hook, freeze authority aktif.
* **Sepenuhnya diizinkan**: interest-bearing, metadata pointer, group pointer, mint close authority.

Respons `getPoolInfoFromRpc` mencakup flag ekstensi mint — klien harus memeriksa sebelum LPing.

## Standar token account

### Associated Token Account (ATA)

Kedua program berbagi konvensi **Associated Token Account**: PDA yang berasal dari `[owner, programId, mint]` melalui Associated Token Program (`ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL`). Hampir setiap akun token pengguna di Solana adalah ATA.

```ts theme={null}
import { getAssociatedTokenAddressSync } from "@solana/spl-token";

// SPL Token
const ata = getAssociatedTokenAddressSync(mint, owner);

// Token-2022
const ata22 = getAssociatedTokenAddressSync(
  mint,
  owner,
  false,               // allowOwnerOffCurve
  TOKEN_2022_PROGRAM_ID,
);
```

Program ATA membuat akun yang dimiliki oleh program token yang sesuai berdasarkan program mana yang memiliki mint.

### Token account non-ATA

Dompet dapat memiliki beberapa akun token untuk mint tunggal; ATA hanya konvensi. Vault pool, misalnya, bukan ATA — mereka adalah PDA dari program pool, memegang cadangan pool.

## Mendeteksi program mana yang dimiliki mint

Setiap akun mint memiliki field `owner` yang menunjuk ke SPL Token atau Token-2022:

```ts theme={null}
const mintInfo = await connection.getAccountInfo(mintPubkey);
if (mintInfo.owner.equals(TOKEN_PROGRAM_ID)) {
  console.log("SPL Token mint");
} else if (mintInfo.owner.equals(TOKEN_2022_PROGRAM_ID)) {
  console.log("Token-2022 mint");
}
```

SDK Raydium menangani deteksi ini secara otomatis — `getPoolInfoFromRpc` mengembalikan `programId` yang sesuai per token sehingga klien dapat membangun ATA yang benar.

## Instruksi swap per program

CPMM dan CLMM Raydium masing-masing memiliki dua instruksi swap:

| Instruksi                          | Mint yang didukung       |
| ---------------------------------- | ------------------------ |
| `Swap` / `SwapBaseInput` (warisan) | Hanya SPL Token          |
| `SwapV2` / `SwapBaseInputV2`       | SPL Token dan Token-2022 |

`SwapV2` memerlukan akun tambahan: akun mint untuk kedua sisi, program token untuk setiap sisi (karena mungkin berbeda), dan — untuk mint transfer-hook — program hook dan akun yang diperlukan.

Klien harus selalu menggunakan `SwapV2` ketika minimal satu sisi adalah Token-2022; `SwapV2` juga berfungsi untuk pool hanya SPL, tetapi `Swap` warisan lebih murah dalam komputasi.

SDK memilih varian yang benar secara otomatis.

## Migrasi proyek SPL Token ke Token-2022

Token-2022 bukan pengganti plug-in pada level mint — mint pada alamat X adalah SPL atau Token-2022, dan itu tetap pada pembuatan. Untuk "migrasi" Anda harus:

1. Buat mint baru di bawah Token-2022 dengan ekstensi yang Anda inginkan.
2. Sediakan mekanisme swap/wrap untuk pemilik mint SPL lama untuk menukar dengan yang baru.
3. Perbarui semua pool LP, farm, dan integrasi untuk mereferensikan mint baru.

Ini berat. Sebagian besar proyek yang diluncurkan di bawah SPL tetap di bawah SPL kecuali kebutuhan ekstensi spesifik memaksa perpindahan.

## Contoh yang dikerjakan: membuat mint Token-2022 dengan transfer fee

```ts theme={null}
import {
  Connection, Keypair, SystemProgram, Transaction, sendAndConfirmTransaction,
} from "@solana/web3.js";
import {
  TOKEN_2022_PROGRAM_ID, ExtensionType, createInitializeMintInstruction,
  getMintLen, createInitializeTransferFeeConfigInstruction,
} from "@solana/spl-token";

const connection = new Connection("https://api.mainnet-beta.solana.com");
const payer      = Keypair.generate();
const mint       = Keypair.generate();

const extensions    = [ExtensionType.TransferFeeConfig];
const mintLen       = getMintLen(extensions);
const rentLamports  = await connection.getMinimumBalanceForRentExemption(mintLen);

const tx = new Transaction().add(
  SystemProgram.createAccount({
    fromPubkey:       payer.publicKey,
    newAccountPubkey: mint.publicKey,
    space:            mintLen,
    lamports:         rentLamports,
    programId:        TOKEN_2022_PROGRAM_ID,
  }),
  createInitializeTransferFeeConfigInstruction(
    mint.publicKey,
    payer.publicKey,                  // transfer fee authority
    payer.publicKey,                  // withdraw-withheld authority
    50,                               // 50 bps = 0.5%
    BigInt(1_000_000),                // max fee per transfer (smallest units)
    TOKEN_2022_PROGRAM_ID,
  ),
  createInitializeMintInstruction(
    mint.publicKey,
    9,                                // decimals
    payer.publicKey,                  // mint authority
    null,                             // freeze authority
    TOKEN_2022_PROGRAM_ID,
  ),
);

await sendAndConfirmTransaction(connection, tx, [payer, mint]);
```

Mint ini dapat diLP ke dalam pool CPMM Raydium; swapper akan membayar biaya transfer 0,5% di atas biaya swap pool.

## Pertimbangan keamanan

Sebelum LPing ke atau swap melalui mint Token-2022:

* **Periksa `freeze_authority`**. Jika bukan null dan dipegang oleh pihak terpusat, mereka dapat membekukan ATA Anda (dan mungkin vault pool).
* **Periksa `transfer_hook`**. Program hook dapat memblokir transfer secara arbitrer — DYOR pada sumber hook.
* **Periksa `transfer_fee`**. Hitunglah biaya dalam output swap yang diharapkan.
* **Periksa `permanent_delegate` dan `non_transferable`**. Program Raydium menolak ini, tetapi verifikasi jika membangun integrasi khusus.

Lihat [`security/oracle-and-token-risks`](/id/security/oracle-and-token-risks) untuk kerangka penerimaan risiko lengkap.

## Pointer

* [`solana-fundamentals/account-model`](/id/solana-fundamentals/account-model) — model akun umum.
* [`reference/token-2022-support`](/id/reference/token-2022-support) — spesifik Token-2022 untuk CPMM dan CLMM.
* [`security/oracle-and-token-risks`](/id/security/oracle-and-token-risks) — risiko dari ekstensi mint berbahaya.

Sumber:

* [SPL Token docs](https://spl.solana.com/token).
* [Token-2022 docs](https://spl.solana.com/token-2022) — daftar ekstensi lengkap.
* [Associated Token Account](https://spl.solana.com/associated-token-account).
