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 →
Raydium không chấp nhận những mint Token-2022 bất kỳ. Cả CPMM và CLMM đều chạy ở chế độ danh sách cho phép nghiêm ngặt: chỉ có một tập nhỏ các extension được phép mặc định; mọi thứ khác bị từ chối khi tạo pool. Một số mint đáng tin cây được chấp nhận thông qua địa chỉ được mã hóa cứng; CLMM còn hỗ trợ thêm thanh ghi cho từng mint do quản trị viên quản lý và phát hiện token Superstate khi chạy. Trang này là tài liệu tham khảo duy nhất cho những gì được thực thi ở đâu, kèm theo các trích dẫn dòng file từ mã nguồn chương trình.

Hỗ trợ cấp chương trình

Chương trìnhMint Token-2022 base/quote?Chế độ
CPMMCó — bị kiểm soátDanh sách cho phép extension nghiêm ngặt + danh sách trắng tĩnh 4 mint.
CLMMCó — bị kiểm soátDanh sách cho phép extension nghiêm ngặt + danh sách trắng tĩnh 6 mint + thanh ghi cho từng mint do quản trị viên quản lý + phát hiện Superstate.
AMM v4KhôngChương trình ra đời trước Token-2022; cả hai mint phải là Token SPL cổ điển.
Stable AMMKhôngCác ràng buộc giống như AMM v4.
Farm v6Có, một phầnMint phần thưởng có thể là Token-2022 (tuân theo danh sách cho phép khi farm bọc LP của CPMM/CLMM); mint LP đặt cược của người dùng kế thừa từ pool được bọc.
LaunchLabCó, do chương trình quản lýMint base có thể là Token-2022, nhưng chỉ thông qua lệnh initialize_with_token_2022 chuyên dụng; chính chương trình tạo mint với MetadataPointer (luôn có) và tùy chọn TransferFeeConfig (tỷ lệ ≤ 5%). Những mint Token-2022 đã tồn tại với các extension bất kỳ không thể được sử dụng làm base.
Burn & EarnPhản ánh chương trình poolKế thừa kiểm soát của CPMM / CLMM.
Những kiểm tra danh sách cho phép nằm trong: Không có kiểm tra mint khi swap trên CPMM hoặc CLMM — cánh cổng chỉ kích hoạt khi tạo pool. Khi pool tồn tại, swap chỉ tin tưởng rằng mint không thay đổi, điều này chính xác cho những phần bất biến của trạng thái mint Token-2022.

Danh sách cho phép extension của CPMM và CLMM

Sau khi kiểm tra danh sách trắng tĩnh (được đề cập dưới đây), chương trình lặp qua những extension của mint và từ chối mint nếu nó mang bất kỳ extension nào khác ngoài năm extension này:
ExtensionLý do cho phép
TransferFeeConfigToán pool trừ đi phí đến; chương trình Token-2022 xử lý phí đi. Xem algorithms/token-2022-transfer-fees.
MetadataPointerTrang trí — trỏ đến metadata trên chuỗi.
TokenMetadataTrang trí — metadata nội tuyến.
InterestBearingConfigPool thấy số tiền gốc; bộ nhân UI chỉ là trang trí và số dư cơ bản được bảo toàn.
ScaledUiAmountHình dạng giống với lãi suất — hệ số tỷ lệ chỉ áp dụng cho hiển thị UI.
Bất cứ thứ gì không nằm trong danh sách này — TransferHook, NonTransferable, ConfidentialTransferMint, PermanentDelegate, MintCloseAuthority, DefaultAccountState, GroupPointer, GroupMemberPointer, MemberPointer, Pausable, v.v. — khiến is_supported_mint trả về false và tạo pool bị hoàn nguyên. Những dòng liên quan (CPMM, hình dạng giống hệt trong CLMM):
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

Đường dẫn vượt qua

Một mint Token-2022 không phù hợp với danh sách cho phép vẫn có thể được chấp nhận thông qua một trong ba đường dẫn vượt qua rõ ràng. Chúng được cố gắng theo thứ tự, trước khi lặp lại extension chạy.

1. Danh sách mint tĩnh

Một mảng hằng số MINT_WHITELIST của các chuỗi base58 được mã hóa cứng trong mỗi chương trình. Nếu địa chỉ mint khớp, hàm trả về true ngay lập tức và không có kiểm tra extension nào được thực hiện.
Chương trìnhMint được liệt kê
CPMMHVbpJAQGNpkgBaYBZQBR1t7yFdvaYVp2vCQQfKKEN4tM, Crn4x1Y2HUKko7ox2EZMT6N2t2ZyH7eKtwkBGVnhEq1g, FrBfWJ4qE5sCzKm3k3JaAtqZcXUh4LvJygDeketsrsH4, 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo
CLMMBốn cái giống nhau, cộng với DAUcJBg4jSpVoEzASxYzdqHMUN8vuTpQyG2TvDcCHfZg, AUSD1jCcCyPLybk1YnvPWsHQSrZ46dxwoMniN4N2UEB9
Những địa chỉ này được nướng vào chương trình; cập nhật danh sách yêu cầu nâng cấp chương trình thông qua multisig nâng cấp 3/4.

2. Thanh ghi cho từng mint — chỉ CLMM

CLMM còn tham khảo một PDA SupportMintAssociated tại seed [b"support_mint", mint]. Nếu PDA đó tồn tại cho mint, nó được chấp nhận bất kể tập hợp extension của nó. PDA được tạo bởi CreateSupportMintAssociated (admin/create_support_mint_associated.rs). Lệnh được kiểm soát với hai người ký:
  • crate::admin::ID — quyền hạn quản trị viên tiêu chuẩn của Raydium.
  • crate::create_support_mint_associated_owner::ID — quyền hạn chuyên dụng cho mục đích này: RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY (mainnet), rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5 (devnet).
Hiệu quả: nhóm CLMM có thể chọn một mint Token-2022 cụ thể vào tạo pool mà không cần nâng cấp chương trình. CPMM không có tương đương — danh sách cho phép của nó hoàn toàn là mã hóa nguồn.

3. Phát hiện Superstate — chỉ CLMM

CLMM có một đường dẫn thứ ba cụ thể cho những tài sản được token hóa của Superstate, sử dụng extension ScaledUiConfig mà phiên bản spl-token-2022 được liên kết vào chương trình CLMM không thể giải nén. Thay vì nâng cấp phụ thuộc, CLMM phát hiện token Superstate bằng hình dạng quyền hạn của chúng:
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 Một mint vượt qua nhánh này nếu tất cả bốn điều sau được thỏa mãn:
  • Chương trình sở hữu nó là chương trình Token-2022.
  • Quyền hạn đóng băng của nó bằng superstate_allowlist::ID. Mainnet: 2Yq4T3mPNfjtEyTxSbRjRKqLf1pwbTasuCQrWe6QpM7x. Devnet: 3TRuL3MFvzHaUfQAb6EsSAbQhWdhmYrKxEiViVkdQfXu.
  • Extension DefaultAccountState của nó được đặt thành Frozen.
  • Đại biểu vĩnh viễn của nó cũng là superstate_allowlist::ID.
Đây là một phương pháp heuristic, không phải thanh ghi — bất kỳ mint nào trong tương lai Superstate phát hành với hình dạng quyền hạn tương tự sẽ được chấp nhận tự động.

Những gì những đường dẫn vượt qua không miễn khỏi

Những đường dẫn vượt qua bỏ qua danh sách cho phép extension, nhưng chương trình vẫn thực thi:
  • Mint được sở hữu bởi Token hoặc Token-2022. Một chương trình token tùy chỉnh bị từ chối phía ngược dòng.
  • Những hầm pool được tạo với những extension ATA phù hợp cho pool Token-2022 (ImmutableOwner, v.v.).
  • Tất cả những lần chuyển đều đi qua transfer_checked — mint có phí hạ cánh số tiền đúng vào hầm.
Một mint được liệt kê trong danh sách trắng hoặc được đăng ký PDA mà, ví dụ, sau đó thêm TransferHook không nhận được kiểm tra khi swap; hook sẽ chỉ chạy trên mỗi lần chuyển và có thể gây trục trặc cho swap. Do đó, danh sách trắng là một hành động đòi hỏi lòng tin cao.

Ngữ nghĩa “Bị chặn”

Khi is_supported_mint trả về false, tạo pool bị hoàn nguyên với ErrorCode::NotSupportMint (CPMM) / ErrorCode::NotSupportMint (CLMM). Xem reference/error-codes để biết những mã số. Những pool hiện tại không thể không thành công kỳ vọng kiểm tra này — cánh cổng chỉ chạy khi tạo. Những extension mint là bất biến cho những danh mục Raydium từ chối (transfer hook, non-transferable, confidential transfer không thể được thêm sau tạo), vì vậy kiểm tra tĩnh là đủ.

Tại sao mỗi extension bị loại trừ lại bị loại trừ

  • TransferHook — gọi một chương trình tùy chỉnh trên mỗi lần chuyển, với tiêu thụ CU bất kỳ, những điều kiện lỗi bất kỳ, và khả năng nhập lại chương trình gọi. Không có hộp cát an toàn nào tồn tại. Một số DEX duy trì danh sách cho phép hook; Raydium thì không.
  • NonTransferableTransfer luôn thất bại. Một pool không thể giữ quyền nuôi.
  • ConfidentialTransfer — những số tiền chuyển được mã hóa; đường cong không thể định giá swap.
  • PermanentDelegate — người nắm giữ đại biểu có thể quét bất kỳ tài khoản token nào, bao gồm hầm pool. Chỉ được phép thông qua danh sách trắng tĩnh cho những nhà phát hành đáng tin cây (ví dụ, stablecoin được quản lý).
  • MintCloseAuthority — mint có thể được đóng; những pool hiện tại trở nên không sử dụng được. Bị cấm mặc định.
  • DefaultAccountState (Frozen) — những ATA của pool sẽ hạ cánh trong trạng thái Frozen và cần phải được giải phóng cho mỗi tài khoản. Chỉ được phép thông qua phát hiện Superstate, giả định rằng nhà phát hành giải phóng những tài khoản thể chế khi ghi danh.
  • Group/Member pointers — không tích cực gây hại, nhưng chưa được xem xét. Bị cấm mặc định để giữ bề mặt hẹp.

Kế toán phí chuyển

Đối với những mint mang TransferFeeConfig, mỗi swap, tiền gửi và rút lại di chuyển ít hơn số tiền danh nghĩa. SDK trình bày cả hai nửa của tính toán:
const { amountIn, amountOut, feeAmount, token2022FeeIn, token2022FeeOut } =
  await raydium.cpmm.computeSwapAmount({ ... });
Một UI chính xác hiển thị:
  • amountIn + token2022FeeIn là “bạn gửi”
  • amountOut - token2022FeeOut là “bạn nhận”
  • feeAmount là phí pool (LP + giao thức), riêng biệt với phí chuyển Token-2022
Một UI ngây thơ chỉ hiển thị amountIn → amountOut sẽ làm giảm những chi phí.

Giới hạn maximumFee

Những phí chuyển Token-2022 được giới hạn mỗi lần chuyển. Đối với mint 1 % với giới hạn 10,000 token, một lần chuyển 100,000,000 token chỉ trả 10,000 trong phí. Phương pháp computeSwapAmount của SDK áp dụng giới hạn; những người gọi chương trình trực tiếp phải sao chép nó.

Chuyển đổi epoch

Một quyền hạn mint có thể lên lịch thay đổi tỷ lệ phí kích hoạt ở epoch tiếp theo. Trong cửa sổ chuyển đổi, hai cấu hình (older, newer) tồn tại trên mint cùng một lúc và TransferChecked chọn theo epoch hiện tại. Cả SwapV2 của CPMM và SwapV2 của CLMM đều chuyển toàn bộ tài khoản mint trong accounts, vì vậy chương trình đọc cấu hình phù hợp mà không cần tra cứu thêm. Nếu bạn trích dẫn nhiều hơn một epoch trước qua Trade API hoặc SDK, phí đã thực thi có thể khác với phí được trích dẫn — được giới hạn bởi maximum_fee_basis_points của cấu hình cũ hơn.

Lãi suất và ScaledUiAmount

Pool giữ số tiền gốc; “số tiền UI” là số tiền gốc nhân với hệ số tỷ lệ phụ thuộc thời gian hoặc được đặt bởi quản trị viên. Toán swap hoạt động trên gốc:
principal_in = ui_amount_in / ui_multiplier(now)
SDK chuyển đổi tự động. Những người đọc RPC trực tiếp nên coi pool.token0Vault.amount là gốc.

Định nghĩa “pool Token-2022”

Một pool là pool Token-2022 nếu bất kỳ mint nào có programId == TokenzQdB.... API trình bày điều này:
GET /pools/info/ids?ids=<POOL_ID>
{
  "data": [{
    "mintA": { "programId": "TokenzQdB...", "hasTransferFee": true, ... },
    "mintB": { "programId": "Tokenkeg...", ... }
  }]
}
Sử dụng programId để điều phối, và hasTransferFee để trình bày cảnh báo UI.

Trợ giúp SDK

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);
  }
}

Những lỗi tích hợp phổ biến

  • Pre-flighting chỉ ID chương trình. Một mint có thể là Token-2022 không được hỗ trợ. Đi bộ danh sách extension so với danh sách cho phép (và danh sách trắng tĩnh) trước khi cho phép tạo pool.
  • Tin tưởng vào quote của SDK khi mint không được chấp nhận hoàn toàn. API quote không từ chối trích dẫn — tạo pool là những gì bị hoàn nguyên. Xác nhận ngữ nghĩa is_supported_mint ngoài chuỗi trước khi công khai tạo pool trong UI của bạn.
  • Trích dẫn mà không có cắt phí chuyển. Một mint phí chuyển 1% trên cả hai phía của pool CPMM 0.25% có phí hiệu quả khoảng 2.25%, không phải 0.25%. Sử dụng quote SDK hoặc quote Trade API — không bao giờ tính toán phí theo cách thủ công từ mức phí pool một mình.
  • Gọi lệnh Swap kế thừa trên pool Token-2022. Swap ra đời trước Token-2022. Sử dụng SwapV2 bất cứ khi nào bất kỳ mint nào là Token-2022.
  • Tự động liệt kê mint Token-2022 mới. Những ví và bộ tập hợp nên kiểm tra TransferHookNonTransferable trước khi trình bày mint cho người dùng; cả hai đều không thân thiện với Raydium.

Công việc trong tương lai

Những mục tiêu của bản đồ đường dùm lỗi hệ sinh thái Solana và giao thức sẽ thay đổi ma trận này:
  • Transfer-hook programs được cho phép ở cấp độ Solana (quy ước hệ sinh thái đang phát triển).
  • Những AMM tương thích với confidential-transfer (giai đoạn nghiên cứu).
  • Thanh ghi cho từng mint CPMM rộng hơn (bằng với CLMM).
  • Nâng cấp phụ thuộc để giải mã ScaledUiConfig của CLMM hoạt động mà không cần heuristic Superstate.
Trang này sẽ được cập nhật khi bất kỳ một trong những điều trên đổi vị trí.

Con trỏ

Nguồn:
  • raydium-cp-swap/programs/cp-swap/src/utils/token.rsMINT_WHITELIST, is_supported_mint.
  • raydium-clmm/programs/amm/src/util/token.rsMINT_WHITELIST, superstate_allowlist, is_superstate_token, is_supported_mint.
  • raydium-clmm/programs/amm/src/instructions/admin/create_support_mint_associated.rs — lệnh thanh ghi cho từng mint.
  • raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs — tạo mint base Token-2022 của LaunchLab.