Langsung ke konten utama
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
Akun (W = dapat ditulis, S = penandatangan) * 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_mint berdasarkan urutan byte).
  • Tidak ada mint yang menggunakan ekstensi di luar daftar izin CPMM (TransferFeeConfig, MetadataPointer, TokenMetadata, InterestBearingConfig, ScaledUiAmount) — lihat products/cpmm/accounts. Daftar izin kecil per-mint di dalam program memotong pemeriksaan untuk onboarding kasus demi kasus.
  • creator memiliki setidaknya init_amount_0 dan init_amount_1 di ATA masing-masing.
  • amm_config.disable_create_pool == false.
Kondisi akhir
  • pool_state ada dengan lp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP.
  • Pemula LP sebesar LOCKED_LP (100 lamport token LP) terkunci secara permanen di pool — pool_state.lp_supply mencatat liquidity − 100 sementara 100 unit LP tetap di luar peredaran, mencegah pool sepenuhnya dikuras dan pembagian dengan nol.
  • observation_state diinisialisasi; observation_index = 0 dan pool_id = pool_state.key().
  • create_pool_fee lamport 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 = false dan creator_fee_on = BothToken. Initialize tidak mendukung pengaktifan biaya pembuat — jalur itu adalah InitializeWithPermission.
  • open_time ditingkatkan ke block_timestamp + 1 jika pemanggil melewatkan nilai <= block_timestamp. Swap ditolak sebelum open_time; deposit dan penarikan bekerja segera.
Error umum (daftar lengkap di reference/error-codes)
  • InvalidInput — mint tidak diurutkan, atau mint identik.
  • NotSupportMint — ekstensi Token-2022 diblokir.
  • ExceededSlippage — jarang; jika init_amount_0/1 menghasilkan LP nol karena ketidakcocokan desimal.

Deposit

Tambahkan likuiditas dalam kedua token sebanding dengan pool. Argumen
Akun Matematika
Tidak ada perubahan proporsionalitas 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).
Error umumExceededSlippage, ZeroTradingTokens, InvalidStatus jika deposit dijeda.

Withdraw

Bakar token LP dan terima kedua token dasar secara pro-rata. Argumen
Akun (Identik dengan Deposit; lp_mint dapat ditulis karena token LP dibakar.) Matematika
Kondisi akhir
  • 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
Akun 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_status memungkinkan swap.
  • Tidak ada mint dijeda atau dibekukan untuk otoritas ini.
  • amount_in > 0.
Error umum
  • ExceededSlippageamount_out < minimum_amount_out.
  • ZeroTradingTokens — perdagangan dibulatkan menjadi nol.
  • NotApproved — pool dijeda untuk swap melalui UpdatePoolStatus.
  • InvalidInput — mint tidak cocok dengan salah satu mint vault pool.

SwapBaseOutput

Swap output-tepat. Argumen
Akun — sama dengan SwapBaseInput. Matematika — kurva terbalik dengan ceiling, lihat products/cpmm/math. Error umumExceededSlippage (gross_in > max_amount_in), ZeroTradingTokens, InvalidInput, NotApproved.

CollectProtocolFee

Bersihkan biaya protokol yang terakumulasi dari vault ke tujuan protokol. Argumen — tidak ada. Akun Efek
Tidak ada perubahan pada saldo efektif kurva (biaya terakumulasi sudah dikecualikan). Error umumNotApproved 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
Akun Kunci admin adalah otoritas upgrade pada program CPMM — dalam praktik, multisig Raydium. Lihat security/admin-and-multisig.

CreateAmmConfig

Buat tingkat biaya baru. Argumen
Akun Kondisi awal
  • Tidak ada AmmConfig yang ada dengan index yang 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 = 0trade_fee_rate
  • param = 1protocol_fee_rate
  • param = 2fund_fee_rate
  • param = 3new_protocol_owner (lewatkan byte Pubkey sebagai reinterpret)
  • param = 4new_fund_owner
  • param = 5create_pool_fee
  • param = 6disable_create_pool
Perubahan ditandatangani oleh admin dan mempengaruhi setiap pool terikat pada AmmConfig ini pada swap berikutnya. Tidak ada migrasi; pool hanya membaca nilai baru.

Matriks perubahan status

Ke mana selanjutnya

Sumber: