Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Ringkasan instruksi
Bitmask status: setiap
status pool adalah u8 dimana 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 hanya menandatangani pada jalur keypair acak; jalur PDA kanonik berjalan tanpa pool_state menandatangani.
Kondisi awal
- 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 kecil per-mint di dalam program memotong pemeriksaan untuk onboarding kasus demi 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 sebesar
LOCKED_LP(100lamport token LP) terkunci secara permanen di pool —pool_state.lp_supplymencatatliquidity − 100sementara100unit LP tetap di luar peredaran, mencegah pool sepenuhnya dikuras dan pembagian 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 semua 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 diblokir.ExceededSlippage— jarang; jikainit_amount_0/1menghasilkan LP nol karena ketidakcocokan desimal.
Deposit
Tambahkan likuiditas dalam kedua token sebanding dengan pool.
Argumen
Matematika
k — vault dan lp_supply skala dengan faktor yang sama.
Kondisi akhir
lp_supply += lp_token_amount.vault_0 += needed_token_0(net dari biaya transfer Token-2022 apa pun pada input).vault_1 += needed_token_1(net 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 net dari biaya transfer Token-2022 apa pun).
SwapBaseInput
Swap input-tepat.
Argumen
Urutan input → output adalah menurut arah pengguna, bukan
token_0 / token_1 kanonik pool. Program menentukan vault mana yang mana dengan mencocokkan mint.
Matematika — lihat products/cpmm/math.
Kondisi awal
open_time <= now.pool_statusmemungkinkan swap.- Tidak ada mint 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-tepat.
Argumen
SwapBaseInput.
Matematika — kurva terbalik dengan ceiling, lihat products/cpmm/math.
Error umum — ExceededSlippage (gross_in > max_amount_in), ZeroTradingTokens, InvalidInput, NotApproved.
CollectProtocolFee
Bersihkan biaya protokol yang terakumulasi 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 menolak penghitung fund_fees_*.
CollectCreatorFee
Bentuk yang sama lagi, ditandatangani oleh pool_state.pool_creator. Hanya memancarkan transfer jika pool diinisialisasi dengan tarif biaya pembuat bukan 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 awal
- 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 (diskriminator untuk bidang mana yang diperbarui) dan value: u64. Semantika 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 error Anchor lengkap.products/cpmm/fees— model akumulasi biaya yangCollectProtocolFee/CollectFundFee/CollectCreatorFeekosongkan.

