Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Ringkasan instruksi
Bitmask status:
status setiap pool adalah u8 di mana bit 0 = deposit dinonaktifkan, bit 1 = withdraw dinonaktifkan, bit 2 = swap dinonaktifkan (PoolStatusBitIndex { Deposit, Withdraw, Swap } dalam program). Bit yang jelas berarti operasi diizinkan; bit yang diatur berarti dijeda. UpdatePoolStatus mengambil u8 mentah dan menimpa nilai yang ada.
Bagian berikutnya membahas masing-masing secara detail. Urutan akun mengikuti IDL CPMM; SDK dan klien Rust di raydium-cp-swap/programs/cp-swap/src/instructions cocok dengan urutan ini.
Initialize
Buat pool CPMM baru.
Argumen
* pool_state menandatangani hanya pada jalur keypair acak; jalur PDA kanonik berjalan tanpa pool_state menandatangani.
Kondisi Pra
- Mint diurutkan (
token_0_mint < token_1_mintberdasarkan urutan byte). - Tidak ada mint yang menggunakan ekstensi di luar daftar izin CPMM (
TransferFeeConfig,MetadataPointer,TokenMetadata,InterestBearingConfig,ScaledUiAmount) — lihatproducts/cpmm/accounts. Daftar izin per-mint kecil di dalam program melewati pemeriksaan untuk onboarding kasus per kasus. creatormemiliki setidaknyainit_amount_0daninit_amount_1di ATA masing-masing.amm_config.disable_create_pool == false.
pool_stateada denganlp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP.- Pemula LP
LOCKED_LP(100lamport token LP) secara permanen terkunci di pool —pool_state.lp_supplymencatatliquidity − 100sementara100unit LP tetap di luar sirkulasi, mencegah pool sepenuhnya dikuras dan membagi dengan nol. observation_statediinisialisasi;observation_index = 0danpool_id = pool_state.key().create_pool_feelamport ditransfer dari pembuat ke penerima dan disinkronkan sebagai SOL asli (ini adalah ATA wSOL).- Bitmask status pool adalah
0(deposit / withdraw / swap semuanya diaktifkan). enable_creator_fee = falsedancreator_fee_on = BothToken.Initializetidak mendukung pengaktifan biaya pembuat — jalur itu adalahInitializeWithPermission.open_timeditingkatkan keblock_timestamp + 1jika pemanggil melewatkan nilai<= block_timestamp. Swap ditolak sebelumopen_time; deposit dan penarikan bekerja segera.
reference/error-codes)
InvalidInput— mint tidak diurutkan, atau mint identik.NotSupportMint— ekstensi Token-2022 yang diblokir.ExceededSlippage— jarang; jikainit_amount_0/1menghasilkan LP nol karena ketidakcocokan desimal.
Deposit
Tambahkan likuiditas dalam kedua token sebanding dengan pool.
Argumen
Matematika
k — kedua vault dan lp_supply diskalakan dengan faktor yang sama.
Kondisi Pasca
lp_supply += lp_token_amount.vault_0 += needed_token_0(bersih dari biaya transfer Token-2022 apa pun pada input).vault_1 += needed_token_1(bersih dari biaya transfer Token-2022 apa pun pada input).
ExceededSlippage, ZeroTradingTokens, InvalidStatus jika deposit dijeda.
Withdraw
Bakar token LP dan terima kedua token dasar secara pro-rata.
Argumen
(Identik dengan
Deposit; lp_mint dapat ditulis karena token LP dibakar.)
Matematika
lp_supply -= lp_token_amount.- Vault mengirim
out_token_0/out_token_1(kotor; pengguna menerima bersih dari biaya transfer Token-2022 apa pun).
SwapBaseInput
Swap input-pasti.
Argumen
Urutan input → output adalah berdasarkan arah pengguna, bukan
token_0 / token_1 kanonik pool. Program mengetahui vault mana yang mana dengan mencocokkan mint.
Matematika — lihat products/cpmm/math.
Kondisi Pra
open_time <= now.pool_statusmemungkinkan swap.- Tidak ada mint yang dijeda atau dibekukan untuk otoritas ini.
amount_in > 0.
ExceededSlippage—amount_out < minimum_amount_out.ZeroTradingTokens— perdagangan dibulatkan menjadi nol.NotApproved— pool dijeda untuk swap melaluiUpdatePoolStatus.InvalidInput— mint tidak cocok dengan salah satu mint vault pool.
SwapBaseOutput
Swap output-pasti.
Argumen
SwapBaseInput.
Matematika — kurva terbalik dengan ceiling, lihat products/cpmm/math.
Kesalahan Umum — ExceededSlippage (gross_in > max_amount_in), ZeroTradingTokens, InvalidInput, NotApproved.
CollectProtocolFee
Kumpulkan biaya protokol yang terkumpul dari vault ke tujuan protokol.
Argumen — tidak ada.
Akun
Efek
NotApproved jika penandatangan bukan protocol_owner.
CollectFundFee
Bentuk yang sama dengan CollectProtocolFee tetapi ditandatangani oleh fund_owner dan menolkan penghitung fund_fees_*.
CollectCreatorFee
Ditandatangani oleh pool_state.pool_creator. Ini mentransfer saldo creator_fees_token_0 dan creator_fees_token_1 penuh ke akun token pembuat, kemudian menolkan kedua penghitung. Ini mengembalikan NoFeeCollect ketika kedua penghitung adalah nol.
CollectCreatorFeePermissionless
Siapa pun dapat memicu pengumpulan biaya pembuat. Instruksi selalu mengirim saldo yang terkumpul penuh ke akun token terkait kanonik yang dimiliki oleh pool_state.pool_creator; pemanggil tidak dapat memilih pembuat atau tujuan lain. Jika salah satu ATA hilang, payer mendanai pembuatannya.
CollectCreatorFee asli tetap dapat dipanggil, jadi klien yang ada tetap kompatibel.
Argumen — tidak ada.
Akun
Efek
- Mentransfer semua
creator_fees_token_0dancreator_fees_token_1dari vault pool ke ATA pembuat. - Menolkan kedua penghitung biaya pembuat dan memperbarui
pool_state.recent_epoch. - Mengembalikan
NoFeeCollectketika kedua penghitung adalah nol.
UpdatePoolStatus
Jeda atau lanjutkan operasi individual pada pool. Bidang status adalah bitmask:
Argumen
Kunci admin adalah otoritas upgrade pada program CPMM — dalam praktik, multisig Raydium. Lihat
security/admin-and-multisig.
CreateAmmConfig
Buat tingkat biaya baru.
Argumen
Kondisi Pra
- Tidak ada
AmmConfigyang ada denganindexyang sama. protocol_fee_rate + fund_fee_rate <= FEE_RATE_DENOMINATOR_VALUE.
UpdateAmmConfig
Ubah tarif biaya atau kepemilikan pada AmmConfig yang ada. Mengambil param: u8 (discriminator untuk bidang mana yang akan diperbarui) dan value: u64. Semantik nilai per param ada di sumber; umumnya:
param = 0→trade_fee_rateparam = 1→protocol_fee_rateparam = 2→fund_fee_rateparam = 3→new_protocol_owner(lewatkan bytePubkeysebagai reinterpret)param = 4→new_fund_ownerparam = 5→create_pool_feeparam = 6→disable_create_pool
AmmConfig ini pada swap berikutnya. Tidak ada migrasi; pool hanya membaca nilai baru.
Matriks perubahan status
Ke mana selanjutnya
products/cpmm/code-demos— sampel TypeScript yang dapat dijalankan untuk di atas.reference/error-codes— tabel kesalahan Anchor lengkap.products/cpmm/fees— model akrual biaya yang dikuras oleh instruksiCollect*Fee.

