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 →
AMM v4 nặng về tài khoản hơn đáng kể so với CPMM hoặc CLMM vì mọi thao tác đều chạm vào trạng thái OpenBook. Trang này sắp xếp các tài khoản thành các phần “do pool sở hữu” và “do OpenBook sở hữu” để bạn có thể nhanh chóng nhìn thấy mỗi bên là gì.

Danh sách tài khoản

Một pool AMM v4 liên kết tới chính xác một thị trường OpenBook tại lúc tạo. Hình ảnh trực tiếp đầy đủ là:
Danh mụcTài khoảnChủ sở hữuVai trò
PoolAmmInfoChương trình AMM v4Trạng thái pool: phí tích luỹ, trạng thái, tham chiếu tới vaults và thị trường OpenBook.
Poolamm_authorityChương trình AMM v4PDA do chương trình sở hữu ký các phép di chuyển vault. Chia sẻ giữa tất cả các pool AMM v4.
Poolamm_open_ordersOpenBookTài khoản OpenOrders OpenBook của pool cho thị trường này.
Poolamm_target_ordersChương trình AMM v4Lưới các lệnh giới hạn mục tiêu của pool để đăng lại lên OpenBook.
Poolpool_coin_token_accountSPL TokenVault phía coin của pool (ATA của amm_authority).
Poolpool_pc_token_accountSPL TokenVault phía pc của pool.
Poollp_mintSPL TokenMint LP có thể hoán đổi.
Poolpool_withdraw_queueChương trình AMM v4Hàng đợi cũ cho rút tiền trì hoãn; giữ độ dài bằng không.
Poolpool_temp_lpChương trình AMM v4Tài khoản LP phụ trợ được sử dụng trong Initialize.
Market (OpenBook)serum_marketOpenBookThị trường chính nó (mint cơ sở/trích dẫn, vault signer, v.v.).
Marketserum_bids, serum_asksOpenBookCác hàng đợi giá mua và giá bán.
Marketserum_event_queueOpenBookCác sự kiện đang chờ xử lý (lần khớp, hủy).
Marketserum_coin_vault, serum_pc_vaultSPL TokenCác vault cấp thị trường của OpenBook.
Marketserum_vault_signerOpenBookPDA cấp thị trường ký các phép di chuyển serum_*_vault.
Lưu ý: “serum” được giữ lại như tiền tố trong IDL và tên trường của AMM v4 để tương thích ngược. Nó đề cập tới thị trường OpenBook ngày nay.

AmmInfo

Tài khoản trạng thái gốc của pool. Kích thước lớn (≈ 752 byte) vì nó mang cả tham chiếu pool và OpenBook nội tuyến.
// programs/amm/src/state.rs (tóm tắt; thứ tự trường / tên theo IDL)
pub struct AmmInfo {
    pub status: u64,           // bitmask: swap/deposit/withdraw/crank enabled
    pub nonce:  u64,           // bump used to derive amm_authority
    pub order_num: u64,
    pub depth: u64,
    pub coin_decimals: u64,
    pub pc_decimals:   u64,
    pub state:         u64,    // internal state machine
    pub reset_flag:    u64,
    pub min_size:      u64,
    pub vol_max_cut_ratio: u64,
    pub amount_wave: u64,
    pub coin_lot_size: u64,    // mirrors OpenBook market
    pub pc_lot_size:   u64,
    pub min_price_multiplier: u64,
    pub max_price_multiplier: u64,
    pub sys_decimal_value: u64,

    pub fees: Fees,            // trade/protocol/fund fee rates
    pub state_data: StateData,

    // Pool-owned accounts:
    pub coin_vault: Pubkey,
    pub pc_vault:   Pubkey,
    pub coin_vault_mint: Pubkey,
    pub pc_vault_mint:   Pubkey,
    pub lp_mint:  Pubkey,
    pub open_orders: Pubkey,   // pool's OpenOrders on OpenBook
    pub market: Pubkey,        // OpenBook market
    pub market_program: Pubkey, // OpenBook program ID
    pub target_orders: Pubkey,
    pub withdraw_queue: Pubkey,
    pub lp_vault:       Pubkey, // = pool_temp_lp
    pub owner: Pubkey,          // admin (multisig)
    pub lp_reserve: u64,
    pub padding: [u64; 3],
}

pub struct Fees {
    pub min_separate_numerator:   u64,     // 5
    pub min_separate_denominator: u64,     // 10_000
    pub trade_fee_numerator:      u64,     // 25  → used by OpenBook integration
    pub trade_fee_denominator:    u64,     // 10_000
    pub pnl_numerator:            u64,     // 12  → protocol's share OF the swap fee
    pub pnl_denominator:          u64,     // 100 → so 12/100 = 12% of fee, = 0.03% of volume
    pub swap_fee_numerator:       u64,     // 25  → 0.25% gross swap fee
    pub swap_fee_denominator:     u64,     // 10_000
}

pub struct StateData {
    pub need_take_pnl_coin: u64,
    pub need_take_pnl_pc:   u64,
    pub total_pnl_pc:   u64,
    pub total_pnl_coin: u64,
    pub pool_open_time: u64,
    pub punish_pc_amount: u64,
    pub punish_coin_amount: u64,
    pub orderbook_to_init_time: u64,
    pub swap_coin_in_amount: u128,
    pub swap_pc_out_amount:  u128,
    pub swap_acc_pc_fee:    u64,
    pub swap_pc_in_amount:  u128,
    pub swap_coin_out_amount: u128,
    pub swap_acc_coin_fee:  u64,
}
Các trường hướng tới tích hợp:
  • coin_vault, pc_vault — các vault SPL Token của pool. cointoken_0 theo quy ước Serum/OpenBook (cơ sở), pctoken_1 (trích dẫn).
  • coin_decimals, pc_decimals — khớp với các mint.
  • open_orders, target_orders, market — phải được chuyển tới mọi lệnh swap/deposit/withdraw.
  • fees.swap_fee_numerator / swap_fee_denominator — phí giao dịch kết hợp. Mặc định là 25 / 10_000 = 0.25%.
  • status — bitmask kiểm soát các thao tác. Có thể thiết lập bởi quản trị viên thông qua AdminSetStatus.
  • state_data.need_take_pnl_* — dельта giữa phí tích luỹ brutto và những gì đã được xử lý. TakePnl làm cho những cái này bằng không.

Kết nối OpenBook

Không còn hoạt động. Các pool AMM v4 không còn chia sẻ thanh khoản tới OpenBook — lưới lệnh giới hạn đã bị vô hiệu hóa. Các tài khoản OpenBook được mô tả trong phần này vẫn nằm trên AmmInfo của mỗi pool và vẫn được xác thực bởi các điểm cuối swap V1 (và bởi Initialize, Deposit, Withdraw) để tương thích ngược, nhưng trạng thái sách mà chúng tham chiếu là trống trong thực tế. Sử dụng các điểm cuối swap V2 (SwapBaseInV2 / SwapBaseOutV2) bỏ qua các tài khoản này hoàn toàn và đại diện cho con đường thực thi chính tắc ngày nay.
Khi bạn gọi bất kỳ lệnh đọc hoặc ghi V1 nào trên một pool AMM v4, bạn phải chuyển các tài khoản OpenBook. Chương trình re-derive và xác thực chúng, vì vậy chuyển một bộ không khớp sẽ hoàn nguyên. (Các biến thể swap V2 không yêu cầu những tài khoản này chút nào.)
const market = ...;  // OpenBook market PublicKey

// Fields OpenBook exposes on its market account:
const marketDecoded = OpenBookMarket.decode(marketAccountData);
const {
  bids:           serumBids,
  asks:           serumAsks,
  eventQueue:     serumEventQueue,
  requestQueue:   serumRequestQueue,
  baseVault:      serumCoinVault,
  quoteVault:     serumPcVault,
  vaultSignerNonce,
} = marketDecoded;

const serumVaultSigner = PublicKey.createProgramAddressSync(
  [market.toBuffer(), u64ToBytes(vaultSignerNonce)],
  OPENBOOK_PROGRAM_ID,
);
amm_open_orders của AMM là một tài khoản do OpenBook sở hữu giữ trạng thái lệnh giới hạn của pool trên thị trường này: các lệnh hoạt động, số dư đã thanh toán, người giới thiệu, v.v. amm_target_orders là phía AMM: nó giữ lưới dự định của AMM (giá/kích thước cho mỗi khe lệnh) để chương trình có thể so sánh rẻ với những gì hiện đang được đăng và đặt / hủy chênh lệch.

Các PDA Authority

Có chính xác một PDA amm_authority cho toàn bộ chương trình AMM v4. Seed của nó là tầm thường (["amm authority"]) và bump của nó được lưu trữ trên mỗi AmmInfo. Quyền này ký tất cả các phép di chuyển token cho tất cả các pool AMM v4.
const AMM_V4_PROGRAM_ID = new PublicKey(
  "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
);
const [ammAuthority] = PublicKey.findProgramAddressSync(
  [Buffer.from("amm authority")],
  AMM_V4_PROGRAM_ID,
);
Có một quyền authority được xác định phạm vi theo pool riêng biệt được suy dẫn cho mỗi pool để ký các thao tác OpenBook (amm_authority ở trên thực sự bao gồm cả hai trong thiết kế của chương trình này; các phiên bản khác nhau sử dụng suy dẫn khác nhau, vì vậy hãy kiểm tra AmmInfo.nonce của pool cụ thể trong mã).

Vaults

Các vault SPL Token của pool là những tài khoản token tiêu chuẩn có owneramm_authority. Không phải ATA — địa chỉ của chúng là những PDA cụ thể được suy dẫn tại Initialize với các seed ["amm_associated_seed", coin_mint_or_pc_mint, market, amm_id]. Địa chỉ được lưu trữ trên AmmInfo; suy dẫn là một điều tò mò một lần. Token-2022 không được hỗ trợ. Chương trình hardcode ID chương trình SPL Token cho tất cả các phép di chuyển vault. Cố gắng liên kết một pool AMM v4 tới một mint Token-2022 sẽ thất bại tại Initialize.

LP mint

Một mint SPL Token cổ điển có quyền là amm_authority. Tổng cung cấp theo dõi quyền sở hữu LP của pool; đốt LP trả lại token từ cả hai vault theo tỷ lệ. Vì AMM v4 có từ trước CPMM, không có lp_supply mirror trong trạng thái pool — đọc cung cấp trên chuỗi của mint trực tiếp.

Bitmask trạng thái

AmmInfo.status kiểm soát các thao tác. Các bit (vị trí có thể khác nhau giữa các phiên bản chương trình — xác nhận qua nguồn):
BitCờHiệu ứng
0SWAP_DISABLEDSwap* từ chối.
1DEPOSIT_DISABLEDDeposit từ chối.
2WITHDRAW_DISABLEDWithdraw từ chối.
3CLMM_LIKE_MIGRATECờ di chuyển được sử dụng bởi ops.
Multisig Raydium đặt những cái này thông qua AdminCancelOrders, AdminSetParams, v.v.

Quan sát / oracle

AMM v4 không có tài khoản quan sát chuyên dụng. Các giao thức khác cần TWAP trên chuỗi thường tiêu thụ các đường sách OpenBook gián tiếp hoặc đọc ngoài chuỗi. Nếu bạn cần Raydium TWAP với hỗ trợ chương trình, hãy sử dụng CPMM hoặc CLMM.

Suy dẫn các tài khoản của một pool từ đầu

Vì AMM v4 không được thiết kế cho các PDA xác định theo cặp (nó trước quy ước Solana đó), amm_id chính tắc là một keypair được seeded được suy dẫn với:
ammId = createWithSeed(
  owner: ammAuthority,
  seed:  marketPubkey.toBase58().slice(0, 32),
  programId: AMM_V4_PROGRAM_ID,
)
Mẫu seeded-key tương tự được áp dụng cho amm_open_orders, amm_target_orders, amm_withdraw_queue, pool_temp_lp, pool_coin_token_account, pool_pc_token_account, và lp_mint. SDK và API tính toán trước những cái này cho bạn; xem raydium-sdk-v2’s Liquidity.getAssociatedPoolKeys. Thực tế, bạn đọc toàn bộ bộ tài khoản của pool từ GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID> hoặc từ SDK. Suy dẫn tay hiếm khi cần thiết.

Tham khảo nhanh vòng đời

Sự kiệnTài khoản được tạoTài khoản bị xóa
Initialize2amm_info, amm_open_orders, amm_target_orders, vaults, lp_mint, pool_withdraw_queue, pool_temp_lp
Deposit— (có thể tạo ATA LP của người dùng)
Withdraw
SwapBaseIn / SwapBaseOut— (có thể tạo ATA của người dùng)
TakePnl
MonitorStep (crank)
Các pool và tài khoản của chúng tồn tại vô hạn. Ngay cả khi thanh khoản được rút hoàn toàn, AmmInfo vẫn ở lại.

Đọc ở đâu

Nguồn: