Skip to main content
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
Akun (W = dapat ditulis, S = penandatangan) * 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_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 per-mint kecil di dalam program melewati pemeriksaan untuk onboarding kasus per kasus.
  • creator memiliki setidaknya init_amount_0 dan init_amount_1 di ATA masing-masing.
  • amm_config.disable_create_pool == false.
Kondisi Pasca
  • pool_state ada dengan lp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP.
  • Pemula LP LOCKED_LP (100 lamport token LP) secara permanen terkunci di pool — pool_state.lp_supply mencatat liquidity − 100 sementara 100 unit LP tetap di luar sirkulasi, mencegah pool sepenuhnya dikuras dan membagi 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 semuanya 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.
Kesalahan Umum (daftar lengkap di reference/error-codes)
  • InvalidInput — mint tidak diurutkan, atau mint identik.
  • NotSupportMint — ekstensi Token-2022 yang 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 pada proporsionalitas 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).
Kesalahan 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 Pasca
  • 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
Akun 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_status memungkinkan swap.
  • Tidak ada mint yang dijeda atau dibekukan untuk otoritas ini.
  • amount_in > 0.
Kesalahan 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-pasti. Argumen
Akun — sama dengan SwapBaseInput. Matematika — kurva terbalik dengan ceiling, lihat products/cpmm/math. Kesalahan UmumExceededSlippage (gross_in > max_amount_in), ZeroTradingTokens, InvalidInput, NotApproved.

CollectProtocolFee

Kumpulkan biaya protokol yang terkumpul dari vault ke tujuan protokol. Argumen — tidak ada. Akun Efek
Tidak ada perubahan pada saldo efektif kurva (biaya yang terkumpul sudah dikecualikan). Kesalahan UmumNotApproved 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_0 dan creator_fees_token_1 dari vault pool ke ATA pembuat.
  • Menolkan kedua penghitung biaya pembuat dan memperbarui pool_state.recent_epoch.
  • Mengembalikan NoFeeCollect ketika kedua penghitung adalah 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 Pra
  • 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 (discriminator untuk bidang mana yang akan diperbarui) dan value: u64. Semantik 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 yang terikat pada AmmConfig ini pada swap berikutnya. Tidak ada migrasi; pool hanya membaca nilai baru.

Matriks perubahan status

Ke mana selanjutnya

Sumber: