Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Program ID dan seed PDA untuk CPMM tercantum secara kanonik di
reference/program-addresses. Halaman ini berfokus pada apa fungsi setiap akun dan invarian yang dipertahankannya, bukan alamat yang dikodekan keras.Enam akun dari pool CPMM
Setiap pool CPMM sepenuhnya dijelaskan oleh enam alamat yang diturunkan program (PDA) di bawah program CPMM, ditambah satu akunAmmConfig bersama yang dirujuknya. Setelah Anda memiliki dua mint, Anda dapat menurunkan semuanya secara deterministik tanpa menyentuh jaringan.
Dan konfigurasi bersama:
Menurunkan pool dari tidak ada apa pun selain dua mint
ID pool tidak selalu PDA kanonik.
Initialize menerima keypair penandatangan arbitrer sebagai pool_state selain PDA di atas. Jika akun yang dilewatkan tidak cocok dengan PDA kanonik, program memerlukan itu menjadi penandatangan — yaitu, pembuat melewatkan keypair segar yang mereka tandatangani. Ini adalah pertahanan front-run: pihak ketiga mana pun yang berlomba merebut PDA kanonik dapat dihindari oleh pembuat yang sah menggunakan keypair acak sebagai gantinya. PDA hilir (lpMint, vault0, vault1, observation) masih diturunkan dari poolState.key(), jadi mereka tetap unik untuk alamat mana pun yang digunakan. Saat Anda mengindeks pool, selalu temukan ID pool dari state on-chain (misalnya, akun PoolState di bawah program CPMM), bukan dengan menurunkan PDA kanonik — yang terakhir akan melewatkan pool dengan keypair acak.Tata letak akun
Definisi Rust lengkap berada di sumberraydium-cp-swap. Bidang di bawah adalah yang akan Anda baca dari integrasi.
PoolState
lp_supply— cerminan internal pool dari total pasokan LP mint. Gunakan untuk matematika LP-share; nilainya harus cocok dengan pasokan on-chain mint, tetapi membacanya dariPoolStatemenghindari pengambilan akun tambahan.protocol_fees_token{0,1},fund_fees_token{0,1}— biaya yang terakrual belum disapu. Ini tidak mempengaruhi penetapan harga swap; mereka duduk di vault sampaiCollectProtocolFee/CollectFundFeedipanggil.status— bitmask yang mengontrol apakahSwap,Deposit,Withdrawdiizinkan. Diperbarui oleh admin melaluiUpdatePoolStatus. SDK memeriksa ini sebelum membangun transaksi; jika Anda melakukan CPI secara langsung, periksa sendiri.token0_program/token1_program— program token untuk CPI ke dalam untuk setiap vault. Satu dapat berupa SPL Token klasik dan yang lain Token-2022; mereka independen.open_time— timestamp Unix. Swap sebelum waktu ini gagal. Deposit diizinkan sebelumopen_timesehingga pool dapat disemai.creator_fee_on/enable_creator_fee— bersama-sama mengontrol apakah biaya pembuat opsional aktif untuk pool ini dan sisi swap mana biaya itu dikumpulkan.enable_creator_fee == falsemenghilangkan jalur biaya pembuat sepenuhnya. Saat diaktifkan,creator_fee_onmemilih:0= ambil biaya dari token mana pun yang merupakan input swap (BothToken);1= ambil biaya daritoken_0saja (lewati pada swaptoken_1 → token_0);2= ambil biaya daritoken_1saja. Ditetapkan saat pembuatan pool melaluiInitializeWithPermission; tidak dapat berubah kemudian.creator_fees_token_{0,1}— biaya pembuat yang terakrual, disapu olehCollectCreatorFeeatauCollectCreatorFeePermissionless. Kedua jalur menghilangkan penghitung penuh; jalur tanpa izin memperbaiki penerima ke ATA kanonikpool_creator.
AmmConfig
trade_fee_ratedancreator_fee_rateadalah fraksi volume, keduanya dinyatakan dalam satuan1/1_000_000.2500berarti 0,25% dari volume perdagangan.protocol_fee_ratedanfund_fee_rateadalah fraksi dari biaya perdagangan (bukan volume), dalam penyebut1/1_000_000yang sama. Biaya pembuat bukan fraksi dari biaya perdagangan — itu adalah tingkat independen sendiri. Aritmatika lengkap ada diproducts/cpmm/fees.indexadalahu16, jadi seed hash menggunakan 2 byte big-endian. Off-by-one pada urutan byte adalah bug integrasi umum.AmmConfigtidak dapat diubah di tingkat pool. Pool menunjuk ke satuAmmConfigsaat pembuatan dan tidak pernah beralih. Perubahan biaya menyebar karena pool membaca konfigurasi setiap swap — tetapi pool tidak dapat dipindahkan antar tier biaya.
creator_fee_rate) berada di AmmConfig dan dibagikan di seluruh tier biaya. Apakah pool tertentu benar-benar mengenakan biaya (enable_creator_fee) dan sisi swap mana biaya itu mendarat (creator_fee_on) berada di PoolState. Biaya pembuat independen dari biaya perdagangan — itu adalah tingkat sendiri, terakrual ke penghitung sendiri (creator_fees_token_{0,1}), dan tidak pernah mengurangi saham LP / protokol / dana dari biaya perdagangan. Penyapuan melalui CollectCreatorFee atau CollectCreatorFeePermissionless yang dibatasi tujuan. Lihat products/cpmm/fees untuk mekanika lengkap.
Permission
Akun kontrol akses kecil yang digunakan oleh InitializeWithPermission. Program CPMM mendukung jalur pembuatan pool berizin sehingga program lain (misalnya LaunchLab saat meluluskan token ke CPMM) dapat membuktikan mereka berhak membuat pool terhadap AmmConfig tertentu.
CreatePermissionPda oleh admin CPMM atau otoritas pembuat PDA izin khusus. Hanya admin CPMM yang dapat mencabut melalui ClosePermissionPda. Pengguna akhir tidak berinteraksi dengan akun ini secara langsung — itu adalah pipa untuk alur lintas program. Lihat security/admin-and-multisig untuk batas peran dan reference/program-addresses untuk alamat kanonik.
Vault dan Token-2022
vault0 dan vault1 dimiliki oleh PDA otoritas CPMM, dan pemilik program token mereka (token_program) adalah SPL Token atau Token-2022, ditentukan saat pembuatan pool oleh program mint. Pool menangani kedua kasus secara transparan — Anda melewatkan ID program token yang tepat untuk setiap sisi dalam akun instruksi Swap / Deposit / Withdraw.
CPMM memberlakukan daftar izin ekstensi yang ketat saat pembuatan pool (is_supported_mint di utils/token.rs). Mint Token-2022 dapat digunakan dalam pool CPMM hanya jika setiap ekstensi yang dibawanya ada di daftar ini:
TransferFeeConfig. Diterapkan oleh mint pada setiap transfer. Pool berada di sisi penerima untuk depositSwapBaseInputdan sisi pengirim untuk penarikan. Program menghitung jumlah bersih yang mendarat di vault dan menetapkan kurva sesuai. Lihatalgorithms/token-2022-transfer-fees.MetadataPointerdanTokenMetadata. Metadata on-mint standar. Tidak ada efek pada matematika swap.InterestBearingConfig. Jumlah UI mint mengakrual bunga. Vault menyimpan jumlah mentah; kurva beroperasi hanya pada jumlah mentah. UI yang menampilkan APR harus memanggil pembantu Token-2022 untuk merender jumlah UI.ScaledUiAmount. Ekstensi penskalaan tampilan UI. Perlakuan yang sama denganInterestBearingConfig— kurva menggunakan jumlah mentah.
PermanentDelegate, TransferHook, DefaultAccountState, NonTransferable, ConfidentialTransfer, Group/GroupMember, MintCloseAuthority, dll. — menyebabkan Initialize ditolak dengan NotSupportMint. Pengecualiannya adalah daftar whitelist mint yang dikodekan keras kecil dalam program (segelintir pubkey spesifik) yang melewati pemeriksaan ekstensi; itu digunakan untuk memasukkan mint spesifik kasus demi kasus.
Daftar ekstensi yang telah diverifikasi dan daftar whitelist mint berada di sumber CP-Swap di bawah programs/cp-swap/src/utils/token.rs dan dapat berubah dengan upgrade program di masa depan.
Observation
Akun observasi adalah ring buffer dari entriObservationState, masing-masing menyimpan block_timestamp dan harga kumulatif. Pada setiap swap, program menambahkan observasi baru jika cukup waktu telah berlalu sejak yang terakhir. TWAP dihitung dengan membaca dua observasi dan membagi Δcumulative / Δtime.
ObservationState penuh sekitar 4.100 byte setelah bidang sekitarnya dan diskriminator.
Dua aturan konsumen:
- Jangan gunakan observasi tunggal sebagai harga. Itu adalah kumulatif, bukan harga spot. Gunakan dua dari mereka untuk menghitung TWAP.
- Pilih observasi setidaknya satu blok terpisah. Swap dalam blok yang sama mungkin tidak menghasilkan observasi baru; membaca kembali-ke-belakang dapat mengembalikan catatan yang sama.
products/clmm/accounts.
Siklus hidup akun
Pool CPMM dan PDA mereka tidak pernah ditutup. Bahkan pada likuiditas nol
poolState tetap ada. Ini disengaja: re-seeding pool yang sama kemudian melestarikan buffer observasi historisnya dan derivasi PDA-nya tetap stabil.
Apa yang harus dibaca di mana
- Daftar akun instruksi (yang dari di atas dapat ditulis/penandatangan untuk setiap instruksi):
products/cpmm/instructions. - Semantik akrual biaya:
products/cpmm/fees. - Matematika swap / aturan pembaruan observasi:
products/cpmm/math. - Seed kanonik / ID program:
reference/program-addresses.

