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 →
ID program dan seed PDA untuk CPMM tercantum secara kanonik di
reference/program-addresses. Halaman ini fokus pada apa kegunaan setiap akun dan invarian yang dipertahankannya, bukan alamat yang dikodekan.Enam akun dari pool CPMM
Setiap pool CPMM sepenuhnya dijelaskan oleh enam program-derived addresses (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.
| Akun | Seed(s) | Pemilik | Tujuan |
|---|---|---|---|
authority | "vault_and_lp_mint_auth_seed" | CPMM | Penanda tangan untuk setiap pergerakan vault dan setiap LP mint/burn. Dibagikan di semua pool CPMM. |
poolState | "pool", ammConfig, token0Mint, token1Mint atau keypair acak yang disediakan penanda tangan | CPMM | Struct state pool — pasangan mint, saldo vault, pasokan LP, akrual biaya, pointer observasi. Instruksi CPMM Initialize menerima baik PDA kanonik yang diturunkan dari empat seed atau keypair arbitrer yang ditandatangani oleh pembuat. Jalur keypair acak ada untuk mengalahkan serangan front-running di mana penyerang mengawasi mempool dan berlomba menempati PDA kanonik sebelum pembuat sah. |
lpMint | "pool_lp_mint", poolState | SPL Token | Token LP pool. Pasokan = total LP yang beredar. Mint authority = CPMM authority PDA. |
vault0 | "pool_vault", poolState, token0Mint | SPL Token / Token-2022 | Menyimpan saldo token0 pool. Dimiliki oleh authority PDA. |
vault1 | "pool_vault", poolState, token1Mint | SPL Token / Token-2022 | Menyimpan saldo token1 pool. Dimiliki oleh authority PDA. |
observation | "observation", poolState | CPMM | Ring buffer sampel harga yang digunakan untuk TWAP. Ditulis pada setiap swap. |
| Akun | Seed(s) | Pemilik | Tujuan |
|---|---|---|---|
ammConfig | "amm_config", index: u16 | CPMM | Menyimpan tingkat biaya trade/protocol/fund/creator dan kunci admin. Satu per “fee tier”. Poolstate terikat pada satu saat pembuatan dan tidak dapat berubah kemudian. |
Menurunkan pool dari tidak ada selain dua mint
ID pool tidak selalu PDA kanonik.
Initialize menerima keypair penanda tangan arbitrer sebagai pool_state selain PDA di atas. Jika akun yang dilewatkan tidak cocok dengan PDA kanonik, program memerlukan itu menjadi penanda tangan — yaitu, pembuat melewatkan keypair segar yang mereka tandatangani. Ini adalah pertahanan front-run: pihak ketiga apa pun yang berlomba merebut PDA kanonik dapat dihindari oleh pembuat sah menggunakan keypair acak sebagai gantinya. PDA hilir (lpMint, vault0, vault1, observation) masih diturunkan dari poolState.key(), sehingga mereka tetap unik untuk alamat mana pun yang digunakan. Ketika Anda mengindeks pool, selalu temukan ID pool dari state on-chain (mis., akun PoolState di bawah program CPMM), bukan dengan menurunkan PDA kanonik — yang terakhir akan melewatkan pool keypair acak.Tata letak akun
Definisi Rust lengkap ada di sumberraydium-cp-swap. Bidang di bawah adalah yang akan Anda baca dari integrasi.
PoolState
lp_supply— cerminan internal pool dari pasokan total LP mint. Gunakan untuk matematis 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 yang belum disapu. Ini tidak mempengaruhi pricing swap; mereka duduk di vault hinggaCollectProtocolFee/CollectFundFeedipanggil.status— bitmask yang mengontrol apakahSwap,Deposit,Withdrawdiizinkan. Diperbarui oleh admin melaluiUpdatePoolStatus. SDK memeriksa ini sebelum membangun transaksi; jika Anda langsung CPI-ing, 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_timejadi pool dapat disemai.creator_fee_on/enable_creator_fee— bersama-sama mengontrol apakah biaya creator opsional aktif untuk pool ini dan sisi swap mana ia dikumpulkan.enable_creator_fee == falsemengosongkan jalur biaya creator sepenuhnya. Ketika diaktifkan,creator_fee_onmemilih:0= ambil biaya dari token mana pun yang merupakan input swap (BothToken);1= ambil biaya daritoken_0saja (lewati di swaptoken_1 → token_0);2= ambil biaya daritoken_1saja. Ditetapkan saat pembuatan pool melaluiInitializeWithPermission; tidak dapat berubah kemudian.creator_fees_token_{0,1}— biaya creator yang terakrual, disapu olehCollectCreatorFee.
AmmConfig
trade_fee_ratedancreator_fee_rateadalah fraksi dari volume, keduanya dinyatakan dalam unit1/1_000_000.2500berarti 0,25% dari volume trade.protocol_fee_ratedanfund_fee_rateadalah fraksi dari trade fee (bukan dari volume), dalam denominator1/1_000_000yang sama. Biaya creator bukan fraksi dari trade fee — ini adalah tingkat independen sendiri. Aritmetika lengkap ada diproducts/cpmm/fees.indexadalahu16, jadi seed hash menggunakan 2 byte big-endian. Kesalahan urutan byte adalah bug integrasi umum.AmmConfigtidak dapat diubah di tingkat pool. Pool menunjuk satuAmmConfigsaat pembuatan dan tidak pernah berpindah. Perubahan biaya menyebar karena pool membaca konfigurasi setiap swap — tetapi pool tidak dapat dipindahkan di antara fee tier.
creator_fee_rate) ada di AmmConfig dan dibagikan di seluruh fee tier. Apakah pool tertentu benar-benar mengenakan biayanya (enable_creator_fee) dan sisi swap mana yang dikenakannya (creator_fee_on) ada di PoolState. Biaya creator independen dari trade fee — ini adalah tingkat sendiri, terakrual ke penghitung sendiri (creator_fees_token_{0,1}), dan tidak pernah mengurangi bagian LP / protocol / fund dari trade fee. Penyapuan melalui CollectCreatorFee. Lihat products/cpmm/fees untuk mekanika lengkap.
Permission
Akun kontrol akses kecil yang digunakan oleh InitializeWithPermission. Program CPMM mendukung jalur pembuatan pool berupa izin sehingga program lain (mis. LaunchLab saat meluluskan token ke CPMM) dapat membuktikan mereka berhak membuat pool terhadap AmmConfig yang diberikan.
CreatePermissionPda dan dibatalkan melalui ClosePermissionPda. Pengguna akhir tidak berinteraksi dengan akun ini secara langsung — ini adalah pipa untuk alur lintas program.
Vault dan Token-2022
vault0 dan vault1 dimiliki oleh CPMM authority PDA, dan pemilik token-program mereka (token_program) adalah baik SPL Token atau Token-2022, ditentukan saat pembuatan pool oleh program mint. Pool menangani dua kasus secara transparan — Anda melewatkan token-program ID yang benar untuk setiap sisi di akun instruksi Swap / Deposit / Withdraw.
CPMM menerapkan daftar whitelist 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 di setiap transfer. Pool berada di sisi penerima untuk depositSwapBaseInputdan sisi pengirim untuk penarikan. Program menghitung jumlah bersih yang masuk ke vault dan mengatur kurva sesuai. Lihatalgorithms/token-2022-transfer-fees.MetadataPointerdanTokenMetadata. Metadata on-mint standar. Tidak ada pengaruh pada swap math.InterestBearingConfig. Jumlah UI mint terakrual 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 whitelist mint hard-coded kecil di program (beberapa pubkey spesifik) yang melewati pemeriksaan ekstensi; ini digunakan untuk mengonboardkan mint spesifik kasus per kasus.
Daftar ekstensi terverifikasi dan whitelist mint ada di sumber CP-Swap di 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 waktu yang cukup telah berlalu sejak yang terakhir. TWAP dihitung dengan membaca dua observasi dan membagi Δcumulative / Δtime.
ObservationState lengkap sekitar 4.100 byte setelah bidang sekitarnya dan discriminator.
Dua aturan konsumen:
- Jangan gunakan observasi tunggal sebagai harga. Itu adalah kumulatif, bukan harga spot. Gunakan dua di antaranya untuk menghitung TWAP.
- Pilih observasi setidaknya satu blok terpisah. Swap dalam blok yang sama mungkin tidak menghasilkan observasi baru; membaca back-to-back dapat mengembalikan record yang sama.
products/clmm/accounts.
Daur hidup akun
| Acara | Akun dibuat | Akun dihancurkan |
|---|---|---|
Initialize | poolState, lpMint, vault0, vault1, observation | — |
Deposit | — (mungkin membuat LP ATA pengguna) | — |
Withdraw | — | — |
Swap | — (mungkin membuat ATA tujuan pengguna) | — |
CollectProtocolFee | — | — |
CollectFundFee | — | — |
UpdatePoolStatus | — | — |
poolState tetap ada. Ini disengaja: menabur ulang pool yang sama nanti mempertahankan buffer observasi historikal dan derivasi PDA-nya tetap stabil.
Apa yang harus dibaca di mana
- Daftar akun instruksi (yang dari di atas dapat ditulis/penanda tangan untuk setiap instruksi):
products/cpmm/instructions. - Semantik akrual biaya:
products/cpmm/fees. - Math swap / aturan pembaruan observasi:
products/cpmm/math. - Seed kanonik / ID program:
reference/program-addresses.


