Chuyển đến nội dung chính

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.

Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.Xem bản tiếng Anh →
Mọi tài sản có thể giao dịch trên Solana — bao gồm cả tài sản cơ sở và tài sản định giá của mỗi pool Raydium — đều là token được mint bởi một trong hai chương trình: chương trình SPL Token cũ hoặc chương trình thế hệ tiếp theo của nó, Token-2022. Chúng là các chương trình riêng biệt ở các địa chỉ riêng biệt, với bố cục tài khoản khác nhau và ngữ nghĩa tiện ích khác nhau. Raydium hỗ trợ cả hai, nhưng không ở mọi nơi: CPMM, CLMM và Farm v6 chấp nhận mint Token-2022; AMM v4 thì không. Hiểu rõ sự khác biệt này là điều cần thiết trước khi tích hợp với bất kỳ pool nào.

Hai chương trình

SPL TokenToken-2022
Program IDTokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DATokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
Ra mắt năm20202022
Kích thước tài khoản (token account)165 B165 B + extensions (thay đổi)
Tiện íchKhôngCó — 17+ tiện ích chính thức
Tương thích cũĐầy đủTùy chọn trên mỗi mint
Cả hai được duy trì bởi đội ngũ Solana Labs (hiện tại là Anza) và nằm trong kho solana-program-library.

Tại sao lại có hai chương trình?

SPL Token đã bị đóng lại để đảm bảo tương thích tiến - mã bytecode của nó thực tế là bất biến, tạo ra một nền tảng sạch sẽ cho toàn bộ hệ sinh thái. Khi các trường hợp sử dụng phát triển (stablecoins muốn phí chuyển, mints tổ chức cần quyền freeze có chi tiết, NFT cần con trỏ metadata), đội ngũ Solana đã giới thiệu Token-2022 như một chương trình riêng biệt, có thể mở rộng thay vì nâng cấp SPL Token. Điều này bảo vệ các tích hợp hiện có và cho phép mỗi mint chọn đúng các tiện ích mà nó cần. Token-2022 là một tập hợp con hoàn toàn trong chức năng, không phải trong không gian địa chỉ: hai chương trình tồn tại song song, và một mint tại một địa chỉ nhất định chỉ thuộc về một trong hai.

Cấu trúc tài khoản

Mint account

Xác định bản sắc của token. SPL Token mint (82 bytes):
u32   mint_authority_option
Pubkey mint_authority
u64   supply
u8    decimals
bool  is_initialized
u32   freeze_authority_option
Pubkey freeze_authority
Token-2022 mint: cùng bố cục cơ sở, cộng với không hoặc nhiều bản ghi extension TLV (type-length-value) được thêm vào sau phần cơ sở.

Token account

Lưu giữ số dư của một mint cụ thể cho một chủ sở hữu cụ thể. SPL Token account (165 bytes):
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: cùng cơ sở, cộng với các bản ghi extension TLV nếu có bất kỳ tiện ích nào hoạt động.

Tiện ích Token-2022

Tiện ích là các tính năng mô-đun có thể được đính kèm vào mint hoặc tài khoản. Mỗi tiện ích là một bản ghi TLV riêng. Những tiện ích chính cho Raydium:

Transfer fee

Mint có thể tính phí theo tỷ lệ phần trăm cho mỗi lần chuyển. Phí sẽ đi đến một quyền thẩm quyền rút tiền đã được cấu hình. Được hỗ trợ bởi Raydium CPMM và CLMM thông qua SwapV2 — chương trình tính đến phí khi tính toán tỷ giá, do đó toán học pool vẫn nhất quán.
let extension = TransferFeeConfig {
    transfer_fee_config_authority,
    withdraw_withheld_authority,
    withheld_amount: 0,
    older_transfer_fee: ...,
    newer_transfer_fee: ...,
};

Transfer hook

Mint trỏ đến một chương trình mà runtime gọi trên mỗi lần chuyển. Chương trình hook có thể từ chối lần chuyển hoặc thực hiện các tác dụng phụ (cập nhật trạng thái tuân thủ, ghi nhật ký, v.v.). Raydium CPMM/CLMM gọi hook thông qua SwapV2 — giao dịch bao gồm chương trình hook và bất kỳ tài khoản bổ sung nào mà nó cần.

Interest-bearing

Số dư trên chuỗi tích lũy lãi suất với tỷ lệ được cấu hình. Chỉ hiển thị (số dư xuất hiện cao hơn theo thời gian) thay vì mint thực tế; nguồn cung bên dưới không thay đổi.

Mint close authority

Cho phép mint bị đóng lại khi nguồn cung đạt tới không.

Permanent delegate

Một ví được chỉ định có thể chuyển hoặc đốt token từ bất kỳ tài khoản nào một cách vô điều kiện. Raydium chặn việc tạo pool cho mint với tiện ích này — nó không tương thích với bất biến rằng dự trữ pool không thể bị chiếm đoạt.

Non-transferable

Token không thể được di chuyển từ tài khoản mà chúng được mint vào. Raydium chặn việc tạo pool — một tài sản không thể giao dịch không thể là tài sản cơ sở hoặc định giá của pool LP.

Default account state

Các tài khoản token mới cho mint này bị đóng lại theo mặc định và phải được mở khóa bởi quyền freeze. Có thể sử dụng nhưng hiếm.

Confidential transfer

Số dư và số tiền chuyển được mã hóa. Raydium không hỗ trợ mint chuyển bảo mật (toán học pool yêu cầu số dư rõ ràng).

Metadata pointer + token metadata

Thay thế metadata Metaplex cho mint Token-2022. Được hỗ trợ cho danh sách pool Raydium.

Group / Member pointer

Khai báo mint như là một phần của một nhóm (ví dụ: một bộ sưu tập NFT). Thông tin; Raydium sử dụng điều này để hiển thị. Xem trang tiện ích Token-2022 chính thức để xem danh sách đầy đủ.

Sản phẩm Raydium nào hỗ trợ cái gì

Sản phẩmSPL TokenToken-2022Ghi chú
AMM v4KhôngTích hợp OpenBook yêu cầu SPL Token
CPMMYêu cầu SwapV2 cho pool Token-2022
CLMMYêu cầu SwapV2 cho pool Token-2022
Farm v6Được hỗ trợ cho cả mint stake và reward mint
LaunchLabPool CPMM đã hoàn thành thừa kế hỗ trợ Token-2022
Khả năng đủ điều kiện mint cho pool Raydium — tất cả tiện ích được phép trừ khi được liệt kê:
  • Bị chặn: non-transferable, permanent delegate, confidential transfer, default account state (trong cấu hình bị từ chối).
  • Được phép với cảnh báo (LP phải chấp nhận rủi ro): transfer fee, transfer hook, freeze authority hoạt động.
  • Được phép đầy đủ: interest-bearing, metadata pointer, group pointer, mint close authority.
Phản hồi getPoolInfoFromRpc bao gồm các cờ tiện ích của mint — máy khách nên kiểm tra trước khi tạo LP.

Tiêu chuẩn tài khoản token

Associated Token Account (ATA)

Cả hai chương trình chia sẻ quy ước Associated Token Account: một PDA được dẫn xuất từ [owner, programId, mint] thông qua Associated Token Program (ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL). Gần như mọi tài khoản token người dùng trên Solana là một 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,
);
Chương trình ATA tạo các tài khoản sở hữu bởi chương trình token thích hợp dựa trên chương trình nào sở hữu mint.

Token account không phải ATA

Một ví có thể có nhiều tài khoản token cho một mint duy nhất; ATA chỉ là quy ước. Ví dụ, vault pool không phải là ATA — chúng là PDA của chương trình pool, giữ dự trữ của pool.

Phát hiện mint thuộc chương trình nào

Mỗi tài khoản mint có một trường owner trỏ đến SPL Token hoặc 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");
}
Raydium SDK xử lý phát hiện này tự động — getPoolInfoFromRpc trả về programId thích hợp cho mỗi token để máy khách có thể xây dựng ATA chính xác.

Swap instruction theo chương trình

Mỗi CPMM và CLMM của Raydium có hai swap instruction:
InstructionMint được hỗ trợ
Swap / SwapBaseInput (cũ)Chỉ SPL Token
SwapV2 / SwapBaseInputV2Cả SPL Token và Token-2022
SwapV2 cần các tài khoản bổ sung: mint account cho cả hai bên, chương trình token cho mỗi bên (vì chúng có thể khác nhau), và — đối với mint chứa transfer hook — chương trình hook và các tài khoản bắt buộc của nó. Máy khách nên luôn sử dụng SwapV2 khi ít nhất một bên là Token-2022; SwapV2 cũng hoạt động cho pool chỉ SPL, nhưng Swap cũ sẽ rẻ hơn về compute. SDK chọn biến thể chính xác tự động.

Di chuyển dự án SPL Token sang Token-2022

Token-2022 không phải là thay thế trực tiếp ở cấp độ mint — một mint tại địa chỉ X hoặc là SPL hoặc Token-2022, và điều đó được xác định ở thời điểm tạo. Để “di chuyển” bạn phải:
  1. Tạo một mint mới dưới Token-2022 với các tiện ích bạn muốn.
  2. Cung cấp cơ chế swap/wrap cho những người giữ mint SPL cũ để trao đổi lấy cái mới.
  3. Cập nhật tất cả các pool LP, farm và tích hợp để tham chiếu đến mint mới.
Điều này rất nặng nề. Hầu hết các dự án được khởi chạy dưới SPL vẫn ở dưới SPL trừ khi một nhu cầu tiện ích cụ thể buộc phải di chuyển.

Ví dụ thực tế: tạo mint Token-2022 với 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 này có thể được LP vào pool CPMM của Raydium; những người swap sẽ phải trả phí chuyển 0,5% trên top phí swap của pool.

Các xem xét bảo mật

Trước khi tạo LP hoặc swap qua mint Token-2022:
  • Kiểm tra freeze_authority. Nếu không null và được giữ bởi một bên tập trung, họ có thể đóng lại ATA của bạn (và có thể là vault pool).
  • Kiểm tra transfer_hook. Chương trình hook có thể chặn các lần chuyển một cách tùy ý — DYOR trên nguồn của hook.
  • Kiểm tra transfer_fee. Tính đến phí trong kết quả swap dự kiến.
  • Kiểm tra permanent_delegatenon_transferable. Chương trình Raydium từ chối những cái này, nhưng xác minh nếu xây dựng tích hợp tùy chỉnh.
Xem security/oracle-and-token-risks để tìm khung công việc chấp nhận rủi ro đầy đủ.

Con trỏ

Nguồn: