Langsung ke konten utama

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.

Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
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 TokenToken-2022
Program IDTokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DATokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
Diluncurkan20202022
Ukuran akun (token account)165 B165 B + ekstensi (variabel)
EkstensiTidakYa — 17+ ekstensi resmi
Kompatibilitas warisanPenuhOpt-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.
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 untuk daftar lengkap.

Produk Raydium mana yang mendukung apa

ProdukSPL TokenToken-2022Catatan
AMM v4YaTidakIntegrasi OpenBook memerlukan SPL Token
CPMMYaYaMemerlukan SwapV2 untuk pool Token-2022
CLMMYaYaMemerlukan SwapV2 untuk pool Token-2022
Farm v6YaYaDidukung untuk mint stake dan reward
LaunchLabYaYaPool 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.
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:
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:
InstruksiMint yang didukung
Swap / SwapBaseInput (warisan)Hanya SPL Token
SwapV2 / SwapBaseInputV2SPL 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

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 untuk kerangka penerimaan risiko lengkap.

Pointer

Sumber: