Langsung ke konten utama

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 →

Ringkasan instruksi

Nama diskriminatorSiapa menandatanganiApa yang dilakukan
Initializepembuat poolBuat pool CPMM baru dari dua mint dan sebuah AmmConfig. Tanpa izin; siapa saja dapat memanggilnya. Mengaturkan enable_creator_fee = false pada pool baru. Akun pool_state dapat berupa PDA kanonik atau keypair acak baru (lihat akun Initialize).
InitializeWithPermissionpembayar + pemegang PDA PermissionVarian berizin dari Initialize. Pemanggil (payer) harus memiliki PDA Permission yang berasal dari pubkey mereka sendiri. Digunakan oleh platform yang memerlukan pembuatan pool gerbang (misalnya kelulusan LaunchLab). Memungkinkan pemanggil mengatur creator_fee_on (BothToken / OnlyToken0 / OnlyToken1) dan memaksa enable_creator_fee = true pada pool baru. Bidang creator pada pool_state diatur ke akun creator yang dilewatkan secara terpisah, bukan pembayar. Fleksibilitas PDA-kanonik-atau-keypair-acak yang sama untuk pool_state seperti Initialize.
DepositLPTambahkan likuiditas dalam kedua token; terima token LP.
WithdrawLPBakar token LP; terima kedua token dasar secara pro-rata.
SwapBaseInputswapperSwap input-tepat (amount_in masuk, ≥ minimum_amount_out keluar).
SwapBaseOutputswapperSwap output-tepat (≤ maximum_amount_in masuk, amount_out keluar).
CollectProtocolFeeprotocol_owner (dari AmmConfig)Bersihkan biaya protokol yang terakumulasi dari vault.
CollectFundFeefund_owner (dari AmmConfig)Bersihkan biaya dana yang terakumulasi dari vault.
CollectCreatorFeepool_creatorBersihkan biaya pembuat yang terakumulasi (jika biaya pembuat diaktifkan).
UpdatePoolStatusadminJeda / lanjutkan operasi spesifik pada pool melalui bitmask.
UpdateAmmConfigadminUbah tarif biaya atau pemilik protokol/dana pada AmmConfig.
CreateAmmConfigadminBuat tingkat biaya baru (akun AmmConfig baru).
CreatePermissionPdaadminCetak PDA Permission yang memungkinkan otoritas spesifik untuk memanggil InitializeWithPermission.
ClosePermissionPdaadminCabut PDA Permission yang sebelumnya dikeluarkan.
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
init_amount_0: u64
init_amount_1: u64
open_time:     u64   // Unix timestamp; swap ditolak sebelum ini
Akun (W = dapat ditulis, S = penandatangan)
#NamaWSCatatan
1creatorWSMembayar rent; dicatat sebagai pool_state.pool_creator.
2amm_configTingkat biaya yang dipilih.
3authorityPDA otoritas global CPMM.
4pool_stateWS*Di-init di sini. Baik PDA kanonik ["pool", amm_config, token_0_mint, token_1_mint] atau keypair acak baru — ketika bukan PDA kanonik, program memerlukan pool_state untuk menandatangani (require_eq!(pool_account_info.is_signer, true)). Jalur keypair acak memungkinkan pembuat menghindari upaya front-running pada PDA kanonik. PDA hilir (lp_mint, vaults, observation_state) diturunkan dari pool_state.key() juga.
5token_0_mintDiurutkan: token_0_mint < token_1_mint.
6token_1_mint
7lp_mintWDi-init di sini. Otoritas diatur ke authority.
8creator_token_0WATA sumber untuk init_amount_0.
9creator_token_1WATA sumber untuk init_amount_1.
10creator_lp_tokenWTujuan untuk LP (dibuat jika hilang).
11token_0_vaultWDi-init di sini. Dimiliki oleh authority.
12token_1_vaultW
13create_pool_feeWATA tujuan untuk create_pool_fee yang dibayar oleh pembuat.
14observation_stateWDi-init di sini.
15token_programSPL Token (untuk mint LP).
16token_0_programSPL Token atau Token-2022.
17token_1_programSPL Token atau Token-2022.
18associated_token_program
19system_program
20rent
* 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
lp_token_amount:   u64   // berapa banyak token LP untuk dicetak ke LP
maximum_token_0:   u64
maximum_token_1:   u64
Akun
#NamaWS
1ownerS
2authority
3pool_stateW
4owner_lp_tokenW
5token_0_accountW
6token_1_accountW
7token_0_vaultW
8token_1_vaultW
9token_program
10token_program_2022
11vault_0_mint
12vault_1_mint
13lp_mintW
Matematika
needed_token_0 = ceil(lp_token_amount * vault_0 / lp_supply)
needed_token_1 = ceil(lp_token_amount * vault_1 / lp_supply)
require(needed_token_0 <= maximum_token_0, "ExceededSlippage")
require(needed_token_1 <= maximum_token_1, "ExceededSlippage")
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
lp_token_amount:   u64
minimum_token_0:   u64
minimum_token_1:   u64
Akun
#NamaWS
1ownerS
2authority
3pool_stateW
4owner_lp_tokenW
5token_0_accountW
6token_1_accountW
7token_0_vaultW
8token_1_vaultW
9token_program
10token_program_2022
11vault_0_mint
12vault_1_mint
13lp_mintW
(Identik dengan Deposit; lp_mint dapat ditulis karena token LP dibakar.) Matematika
out_token_0 = floor(lp_token_amount * vault_0 / lp_supply)
out_token_1 = floor(lp_token_amount * vault_1 / lp_supply)
require(out_token_0 >= minimum_token_0, "ExceededSlippage")
require(out_token_1 >= minimum_token_1, "ExceededSlippage")
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
amount_in:            u64
minimum_amount_out:   u64
Akun
#NamaWS
1payerS
2authority
3amm_config
4pool_stateW
5input_token_accountW
6output_token_accountW
7input_vaultW
8output_vaultW
9input_token_program
10output_token_program
11input_token_mint
12output_token_mint
13observation_stateW
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
max_amount_in:  u64
amount_out:     u64
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
#NamaWS
1ownerSHarus cocok dengan amm_config.protocol_owner.
2authority
3pool_stateW
4amm_config
5token_0_vaultW
6token_1_vaultW
7vault_0_mint
8vault_1_mint
9recipient_token_0_accountW
10recipient_token_1_accountW
11token_program
12token_program_2022
Efek
transfer pool_state.protocol_fees_token0 from vault_0 to recipient_0
transfer pool_state.protocol_fees_token1 from vault_1 to recipient_1
pool_state.protocol_fees_token0 = 0
pool_state.protocol_fees_token1 = 0
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:
BitBenderaEfek saat diatur
0DEPOSIT_DISABLEDDeposit menolak dengan NotApproved.
1WITHDRAW_DISABLEDWithdraw menolak.
2SWAP_DISABLEDSwapBaseInput / SwapBaseOutput menolak.
Argumen
status: u8      // bitmask baru
Akun
#NamaWS
1authoritySHarus cocok dengan kunci admin pada program CPMM.
2pool_stateW
Kunci admin adalah otoritas upgrade pada program CPMM — dalam praktik, multisig Raydium. Lihat security/admin-and-multisig.

CreateAmmConfig

Buat tingkat biaya baru. Argumen
index:             u16
trade_fee_rate:    u64
protocol_fee_rate: u64
fund_fee_rate:     u64
create_pool_fee:   u64
Akun
#NamaWS
1ownerWSAdmin.
2amm_configWDi-init di sini.
3system_program
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

Instruksilp_supplySaldo vaultBidang biaya terakumulasiobservation
Initialize+ init LP+ init_amount_{0,1}0init
InitializeWithPermission+ init LP+ init_amount_{0,1}0init
Deposit++ both
Withdraw− both
SwapBaseInput+ in, − out+ trade_fee dibagi menjadi protokol/dana; + creator_fee jika diaktifkan+ (jika interval berlalu)
SwapBaseOutput+ in, − out+ trade_fee dibagi menjadi protokol/dana; + creator_fee jika diaktifkan+ (jika interval berlalu)
CollectProtocolFee− (oleh bucket protokol)protocol_* → 0
CollectFundFee− (oleh bucket dana)fund_* → 0
CollectCreatorFee− (oleh bucket pembuat)creator_* → 0
UpdatePoolStatus

Ke mana selanjutnya

Sumber: