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 →
AMM v4 jauh lebih banyak akun dibanding CPMM atau CLMM karena setiap operasi menyentuh state OpenBook. Halaman ini mengelompokkan akun ke dalam bagian “pool-owned” dan “OpenBook-owned” sehingga integrator dapat dengan cepat melihat sisi mana yang mana.

Inventaris

Sebuah pool AMM v4 terikat ke tepat satu pasar OpenBook saat pembuatan. Gambaran lengkap saat ini adalah:
KategoriAkunPemilikPeran
PoolAmmInfoProgram AMM v4State pool: fee yang terakumulasi, status, referensi ke vault dan pasar OpenBook.
Poolamm_authorityProgram AMM v4PDA yang dimiliki program dan menandatangani pergerakan vault. Dibagikan di semua pool AMM v4.
Poolamm_open_ordersOpenBookAkun OpenOrders OpenBook pool untuk pasar ini.
Poolamm_target_ordersProgram AMM v4Grid target limit order di sisi pool untuk diposting kembali ke OpenBook.
Poolpool_coin_token_accountSPL TokenVault sisi coin pool (ATA dari amm_authority).
Poolpool_pc_token_accountSPL TokenVault sisi pc pool.
Poollp_mintSPL TokenMint LP yang dapat ditukar.
Poolpool_withdraw_queueProgram AMM v4Antrian legacy untuk penarikan tertunda; tetap kosong.
Poolpool_temp_lpProgram AMM v4Akun LP tambahan yang digunakan saat Initialize.
Market (OpenBook)serum_marketOpenBookPasar itu sendiri (mint base/quote, vault signer, dll).
Marketserum_bids, serum_asksOpenBookAntrian bid dan ask.
Marketserum_event_queueOpenBookEvent yang tertunda (fill, pembatalan).
Marketserum_coin_vault, serum_pc_vaultSPL TokenVault tingkat pasar OpenBook.
Marketserum_vault_signerOpenBookPDA tingkat pasar yang menandatangani pergerakan serum_*_vault.
Catatan: “serum” tetap digunakan sebagai prefiks di IDL dan nama field AMM v4 untuk kompatibilitas ke belakang. Ini mengacu ke pasar OpenBook saat ini.

AmmInfo

Akun state root pool. Besar (≈ 752 bytes) karena membawa referensi pool dan OpenBook secara inline.
// programs/amm/src/state.rs (diringkas; urutan field / nama mengikuti IDL)
pub struct AmmInfo {
    pub status: u64,           // bitmask: swap/deposit/withdraw/crank enabled
    pub nonce:  u64,           // bump digunakan untuk derive amm_authority
    pub order_num: u64,
    pub depth: u64,
    pub coin_decimals: u64,
    pub pc_decimals:   u64,
    pub state:         u64,    // mesin state internal
    pub reset_flag:    u64,
    pub min_size:      u64,
    pub vol_max_cut_ratio: u64,
    pub amount_wave: u64,
    pub coin_lot_size: u64,    // mencerminkan pasar OpenBook
    pub pc_lot_size:   u64,
    pub min_price_multiplier: u64,
    pub max_price_multiplier: u64,
    pub sys_decimal_value: u64,

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

    // Akun yang dimiliki pool:
    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,   // OpenOrders pool di OpenBook
    pub market: Pubkey,        // pasar OpenBook
    pub market_program: Pubkey, // ID program OpenBook
    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  → digunakan oleh integrasi OpenBook
    pub trade_fee_denominator:    u64,     // 10_000
    pub pnl_numerator:            u64,     // 12  → bagian protocol DARI fee swap
    pub pnl_denominator:          u64,     // 100 → jadi 12/100 = 12% dari fee, = 0.03% dari volume
    pub swap_fee_numerator:       u64,     // 25  → fee swap bruto 0.25%
    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,
}
Field yang relevan bagi integrator:
  • coin_vault, pc_vault — vault SPL Token pool. coin adalah token_0 menurut konvensi Serum/OpenBook (base), pc adalah token_1 (quote).
  • coin_decimals, pc_decimals — sesuai dengan mint.
  • open_orders, target_orders, market — harus diteruskan ke setiap instruksi swap/deposit/withdraw.
  • fees.swap_fee_numerator / swap_fee_denominator — fee trade gabungan. Default 25 / 10_000 = 0.25%.
  • status — bitmask yang mengontrol operasi. Dapat diatur admin melalui AdminSetStatus.
  • state_data.need_take_pnl_* — delta antara fee terakumulasi bruto dan apa yang telah disapu. TakePnl mengatur ulang ini ke nol.

Wirring OpenBook

Tidak lagi aktif. Pool AMM v4 tidak lagi berbagi likuiditas ke OpenBook — grid limit order telah dinonaktifkan. Akun OpenBook yang dijelaskan di bagian ini tetap ada di AmmInfo setiap pool dan masih divalidasi oleh entrypoint swap V1 (dan oleh Initialize, Deposit, Withdraw) untuk kompatibilitas ke belakang, tetapi state on-book yang direferensikan kosong dalam praktik. Gunakan entrypoint swap V2 (SwapBaseInV2 / SwapBaseOutV2) yang sepenuhnya melewatkan akun ini dan mewakili jalur eksekusi kanonis hari ini.
Saat Anda memanggil instruksi baca atau tulis V1 apa pun pada pool AMM v4, Anda harus meneruskan akun OpenBook. Program akan menurunkan ulang dan memvalidasinya, jadi meneruskan himpunan yang tidak cocok akan kembali. (Varian swap V2 tidak memerlukan akun ini sama sekali.)
const market = ...;  // PublicKey pasar OpenBook

// Field yang OpenBook expose di akun pasar:
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 AMM adalah akun yang dimiliki OpenBook menyimpan state limit order pool di pasar ini: order aktif, saldo settlement, referrer, dll. amm_target_orders adalah sisi AMM: ini menyimpan grid yang dimaksudkan AMM (harga/ukuran untuk setiap slot order) sehingga program dapat secara murah membandingkan dengan apa yang saat ini diposting dan menempatkan / membatalkan diff.

PDA Authority

Ada tepat satu PDA amm_authority untuk seluruh program AMM v4. Seed-nya trivial (["amm authority"]) dan bump-nya disimpan pada setiap AmmInfo. Authority ini menandatangani semua pergerakan token untuk semua pool AMM v4.
const AMM_V4_PROGRAM_ID = new PublicKey(
  "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
);
const [ammAuthority] = PublicKey.findProgramAddressSync(
  [Buffer.from("amm authority")],
  AMM_V4_PROGRAM_ID,
);
Ada authority berskop-pool yang terpisah diturunkan per pool untuk menandatangani operasi OpenBook (amm_authority di atas sebenarnya mencakup keduanya dalam desain program ini; versi berbeda menggunakan penurunan berbeda, jadi periksa AmmInfo.nonce pool spesifik dalam kode).

Vault

Vault SPL Token pool adalah akun token standar yang owner-nya adalah amm_authority. Bukan ATA — alamatnya adalah PDA spesifik yang diturunkan di Initialize dengan seed ["amm_associated_seed", coin_mint_or_pc_mint, market, amm_id]. Alamat disimpan di AmmInfo; penurunan adalah keingintahuan satu kali. Token-2022 tidak didukung. Program menghardcode ID program SPL Token untuk semua pergerakan vault. Mencoba mengikat pool AMM v4 ke mint Token-2022 gagal di Initialize.

Mint LP

Mint SPL Token klasik yang authority-nya adalah amm_authority. Total supply melacak kepemilikan LP dari pool; membakar LP mengembalikan token dari kedua vault secara pro-rata. Karena AMM v4 sebelum CPMM, tidak ada mirror lp_supply di state pool — baca supply mint on-chain secara langsung.

Bitmask status

AmmInfo.status mengontrol operasi. Bit (posisi mungkin berbeda di berbagai versi program — konfirmasi melalui sumber):
BitFlagEfek
0SWAP_DISABLEDSwap* menolak.
1DEPOSIT_DISABLEDDeposit menolak.
2WITHDRAW_DISABLEDWithdraw menolak.
3CLMM_LIKE_MIGRATEFlag migration-gate digunakan oleh ops.
Multisig Raydium menetapkan ini melalui AdminCancelOrders, AdminSetParams, dll.

Observation / oracle

AMM v4 tidak memiliki akun observation khusus. Protokol lain yang membutuhkan TWAP on-chain biasanya mengonsumsi penyeberangan buku OpenBook secara tidak langsung atau membaca off-chain. Jika Anda membutuhkan TWAP Raydium dengan dukungan program, gunakan CPMM atau CLMM. Karena AMM v4 tidak dirancang untuk PDA per-pasangan yang deterministik (itu sebelum konvensi Solana itu), amm_id kanonis adalah keypair berseeded yang diturunkan dengan:
ammId = createWithSeed(
  owner: ammAuthority,
  seed:  marketPubkey.toBase58().slice(0, 32),
  programId: AMM_V4_PROGRAM_ID,
)
Pola keypair berseeded yang sama berlaku untuk amm_open_orders, amm_target_orders, amm_withdraw_queue, pool_temp_lp, pool_coin_token_account, pool_pc_token_account, dan lp_mint. SDK dan API pra-menghitung ini untuk Anda; lihat raydium-sdk-v2’s Liquidity.getAssociatedPoolKeys. Dalam praktik, integrator membaca himpunan akun pool lengkap dari GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID> atau dari SDK. Menurunkan dengan tangan jarang dibutuhkan.

Referensi siklus hidup cepat

EventAkun dibuatAkun dihancurkan
Initialize2amm_info, amm_open_orders, amm_target_orders, vault, lp_mint, pool_withdraw_queue, pool_temp_lp
Deposit— (mungkin membuat user LP ATA)
Withdraw
SwapBaseIn / SwapBaseOut— (mungkin membuat user ATA)
TakePnl
MonitorStep (crank)
Pool dan akun mereka bertahan selamanya. Bahkan jika likuiditas sepenuhnya ditarik, AmmInfo tetap ada.

Apa yang dibaca di mana

Sumber: