Ana içeriğe atla

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.

Bu sayfa yapay zekâ tarafından otomatik olarak çevrilmiştir. İngilizce sürüm esas alınır.İngilizce sürümü görüntüle →

Talimat özeti

Discriminator adıİmza atanNe yapar
Initializehavuz oluşturucuİki mint ve bir AmmConfig adresinden yeni bir CPMM havuzu oluşturun. İzin gerektirmez; herkes çağırabilir. Yeni havuzda enable_creator_fee = false değeri sabitlenmiştir. pool_state hesabı, kanonik PDA veya yeni rastgele bir keypair olabilir (bkz. Initialize hesapları).
InitializeWithPermissionödeme yapan + Permission PDA sahibiInitialize işleminin izin gerektiren varyantı. Çağıran (payer), kendi açık anahtarından türetilmiş bir Permission PDA’ya sahip olmalıdır. Havuz oluşturmayı kapılı tutan platformlar tarafından kullanılır (örn. LaunchLab mezunları). Çağıran creator_fee_on değerini (BothToken / OnlyToken0 / OnlyToken1) sabitleyebilir ve yeni havuzda enable_creator_fee = true değerini zorlar. pool_state üzerindeki creator alanı, ödeme yapanın değil, ayrıca iletilen creator hesabı olarak ayarlanır. pool_state için kanonik PDA veya rastgele keypair esnekliği Initialize ile aynıdır.
DepositLPHer iki token’de likidite ekleyin; LP token’leri alın.
WithdrawLPLP token’lerini yakın; her iki temel token’i oransal olarak alın.
SwapBaseInputswapperTam giriş swap’ı (amount_in içeri, ≥ minimum_amount_out dışarı).
SwapBaseOutputswapperTam çıkış swap’ı (≤ maximum_amount_in içeri, amount_out dışarı).
CollectProtocolFeeprotocol_owner (AmmConfig’dan)Biriken protokol ücretlerini kasalardan alın.
CollectFundFeefund_owner (AmmConfig’dan)Biriken fon ücretlerini kasalardan alın.
CollectCreatorFeepool_creatorBiriken yaratıcı ücretlerini alın (yaratıcı ücreti etkinse).
UpdatePoolStatusadminBir bitmask aracılığıyla havuzdaki belirli işlemleri duraklatın/sürdürün.
UpdateAmmConfigadminBir AmmConfig üzerindeki ücret oranlarını veya protokol/fon sahibini değiştirin.
CreateAmmConfigadminYeni bir ücret katmanı oluşturun (yeni AmmConfig hesabı).
CreatePermissionPdaadminBelirli bir otoritenin InitializeWithPermission çağırmasına izin veren bir Permission PDA’nı basın.
ClosePermissionPdaadminDaha önce yayınlanan bir Permission PDA’nı iptal edin.
Durum bitmask’ı: her havuzun status değeri bir u8 olup, bit 0 = deposit devre dışı, bit 1 = withdraw devre dışı, bit 2 = swap devre dışı (PoolStatusBitIndex { Deposit, Withdraw, Swap } programda). Temiz bir bit işlemin izin verildiği anlamına gelir; ayarlanmış bir bit duraklatıldığı anlamına gelir. UpdatePoolStatus ham bir u8 alır ve mevcut değerin üzerine yazar. Sonraki bölümler her birini ayrıntılı olarak incelemektedir. Hesap sıralaması CPMM IDL’sini izler; SDK ve raydium-cp-swap/programs/cp-swap/src/instructions içindeki Rust istemcisi bu sıraya uyar.

Initialize

Yeni bir CPMM havuzu oluşturun. Argümanlar
init_amount_0: u64
init_amount_1: u64
open_time:     u64   // Unix timestamp; bu tarihten önce swap'lar reddedilir
Hesaplar (W = yazılabilir, S = imzalayan)
#AdWSNotlar
1creatorWSKirayı öder; pool_state.pool_creator olarak kaydedilir.
2amm_configSeçilen ücret katmanı.
3authorityCPMM global otoritesi PDA.
4pool_stateWS*Burada init edilir. Ya kanonik PDA ["pool", amm_config, token_0_mint, token_1_mint] ya da yeni rastgele bir keypair — kanonik PDA olmadığında, program pool_state’in imzalamasını gerektirir (require_eq!(pool_account_info.is_signer, true)). Rastgele keypair yolu, yaratıcının kanonik PDA üzerindeki ön işlem deneme girişimlerinden kaçınmasına olanak tanır. İndirilen PDA’lar (lp_mint, vaults, observation_state) her iki durumda da pool_state.key() adresinden türetilir.
5token_0_mintSıralanmış: token_0_mint < token_1_mint.
6token_1_mint
7lp_mintWBurada init edilir. Otoriteye authority olarak ayarlanır.
8creator_token_0Winit_amount_0 için kaynak ATA.
9creator_token_1Winit_amount_1 için kaynak ATA.
10creator_lp_tokenWLP için hedef (eksikse oluşturulur).
11token_0_vaultWBurada init edilir. authority tarafından sahiplenilir.
12token_1_vaultW
13create_pool_feeWYaratıcı tarafından ödenen create_pool_fee için hedef ATA.
14observation_stateWBurada init edilir.
15token_programSPL Token (LP mint için).
16token_0_programSPL Token veya Token-2022.
17token_1_programSPL Token veya Token-2022.
18associated_token_program
19system_program
20rent
* pool_state yalnızca rastgele keypair yolunda imza atar; kanonik PDA yolu pool_state’in imzalaması olmadan çalışır. Ön koşullar
  • Mint’ler sıralanmıştır (token_0_mint < token_1_mint byte sırasına göre).
  • Hiçbir mint, CPMM izin listesi dışında bir uzantı kullanmaz (TransferFeeConfig, MetadataPointer, TokenMetadata, InterestBearingConfig, ScaledUiAmount) — bkz. products/cpmm/accounts. Programın içindeki küçük mint başına izin listesi kâlıp geçişli ekleme için kontrol’ü atlar.
  • creator’ün ilgili ATA’larda en az init_amount_0 ve init_amount_1 değeri vardır.
  • amm_config.disable_create_pool == false.
Son koşullar
  • pool_state, lp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP ile var.
  • LOCKED_LP (100 lamport LP token) LP başlatıcısı kalıcı olarak havuzda kilitlenir — pool_state.lp_supply liquidity − 100 kaydederken, havuzdan tamamen drenajını ve sıfıra bölmeyi önlemek için 100 LP birimi dolaşım dışında kalır.
  • observation_state başlatılır; observation_index = 0 ve pool_id = pool_state.key().
  • create_pool_fee lamportlar yaratıcıdan alıcıya aktarılır ve yerel SOL olarak senkronize edilir (bir wSOL ATA’sıdır).
  • Havuzun durum bitmask’ı 0’dır (deposit / withdraw / swap tümü etkindir).
  • enable_creator_fee = false ve creator_fee_on = BothToken. Initialize, yaratıcı ücretini etkinleştirmeyi desteklemez — bu yol InitializeWithPermission’dır.
  • open_time, çağıran <= block_timestamp değeri iletirse block_timestamp + 1 değerine yükseltilir. Swap’lar open_time öncesinde reddedilir; depozitolar ve çekimler hemen çalışır.
Yaygın hatalar (tam liste reference/error-codes’da)
  • InvalidInput — mint’ler sırasız veya özdeş.
  • NotSupportMint — engellenen Token-2022 uzantısı.
  • ExceededSlippage — nadiren; init_amount_0/1 ondalık uyumsuzluğu nedeniyle sıfır LP ile sonuçlanırsa.

Deposit

Havuza oransal olarak her iki token’de likidite ekleyin. Argümanlar
lp_token_amount:   u64   // LP'ye basılacak kaç LP token'i
maximum_token_0:   u64
maximum_token_1:   u64
Hesaplar
#AdWS
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
Matematik
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")
k’nin orantılılığında hiçbir değişiklik yok — hem kasalar hem de lp_supply aynı faktörle ölçeklenir. Son koşullar
  • lp_supply += lp_token_amount.
  • vault_0 += needed_token_0 (girişte Token-2022 aktarım ücretinin net değeri).
  • vault_1 += needed_token_1 (girişte Token-2022 aktarım ücretinin net değeri).
Yaygın hatalarExceededSlippage, ZeroTradingTokens, deposit duraklatılmışsa InvalidStatus.

Withdraw

LP token’lerini yakın ve her iki temel token’i oransal olarak alın. Argümanlar
lp_token_amount:   u64
minimum_token_0:   u64
minimum_token_1:   u64
Hesaplar
#AdWS
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
(Deposit’e eşit; lp_mint yazılabilir çünkü LP token’leri yakılmıştır.) Matematik
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")
Son koşullar
  • lp_supply -= lp_token_amount.
  • Kasalar out_token_0 / out_token_1 gönderir (brüt; kullanıcı herhangi bir Token-2022 aktarım ücretinin net değerini alır).

SwapBaseInput

Tam giriş swap’ı. Argümanlar
amount_in:            u64
minimum_amount_out:   u64
Hesaplar
#AdWS
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
Sıralama giriş → çıkış havuzun kanonik token_0 / token_1’i tarafından değil, kullanıcının yönü tarafından belirlenmiştir. Program, mint’leri eşleştirerek hangi kasanın hangisi olduğunu anlayıp belirler. Matematik — bkz. products/cpmm/math. Ön koşullar
  • open_time <= now.
  • pool_status swap’a izin verir.
  • Bu otorite için hiçbir mint duraklatılmış veya dondurulmuş değildir.
  • amount_in > 0.
Yaygın hatalar
  • ExceededSlippageamount_out < minimum_amount_out.
  • ZeroTradingTokens — işlem sıfıra yuvarlanır.
  • NotApproved — havuz UpdatePoolStatus aracılığıyla swap’lar için duraklatılmıştır.
  • InvalidInput — mint’ler havuzun kasa mint’lerinden birine uymuyor.

SwapBaseOutput

Tam çıkış swap’ı. Argümanlar
max_amount_in:  u64
amount_out:     u64
HesaplarSwapBaseInput ile aynı. Matematik — tavan ile ters eğri, bkz. products/cpmm/math. Yaygın hatalarExceededSlippage (gross_in > max_amount_in), ZeroTradingTokens, InvalidInput, NotApproved.

CollectProtocolFee

Biriken protokol ücretlerini kasalardan protokol hedefine alın. Argümanlar — hiçbiri. Hesaplar
#AdWS
1ownerSamm_config.protocol_owner ile eşleşmelidir.
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
Etki
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
Eğrinin etkin bakiyelerinde hiçbir değişiklik yok (biriken ücretler zaten dışlandı). Yaygın hata — imzalayan protocol_owner değilse NotApproved.

CollectFundFee

CollectProtocolFee ile aynı biçim ancak fund_owner tarafından imzalanır ve fund_fees_* sayaçlarını sıfırlar.

CollectCreatorFee

Yine aynı biçim, pool_state.pool_creator tarafından imzalanır. Havuz sıfır olmayan yaratıcı-ücret oranı ile başlatıldıysa aktarımları gönderir.

UpdatePoolStatus

Bir havuzdaki bireysel işlemleri duraklatın veya sürdürün. status alanı bir bitmask’tır:
BitBayrakAyarlanmışken etki
0DEPOSIT_DISABLEDDeposit NotApproved ile reddeder.
1WITHDRAW_DISABLEDWithdraw reddeder.
2SWAP_DISABLEDSwapBaseInput / SwapBaseOutput reddeder.
Argümanlar
status: u8      // yeni bitmask
Hesaplar
#AdWS
1authoritySCPMM programı üzerindeki admin anahtarı ile eşleşmelidir.
2pool_stateW
Admin anahtarı CPMM programı üzerindeki yükseltme otoritesidir — uygulamada, Raydium multisig’i. Bkz. security/admin-and-multisig.

CreateAmmConfig

Yeni bir ücret katmanı oluşturun. Argümanlar
index:             u16
trade_fee_rate:    u64
protocol_fee_rate: u64
fund_fee_rate:     u64
create_pool_fee:   u64
Hesaplar
#AdWS
1ownerWSAdmin.
2amm_configWBurada init edilir.
3system_program
Ön koşullar
  • Aynı index ile mevcut AmmConfig yok.
  • protocol_fee_rate + fund_fee_rate <= FEE_RATE_DENOMINATOR_VALUE.

UpdateAmmConfig

Mevcut bir AmmConfig üzerindeki ücret oranlarını veya sahipliği değiştirin. Bir param: u8 (güncellenmesi gereken alan için discriminator) ve bir value: u64 alır. Parametre başına değer anlamları kaynakta olup, yaygın olanlar:
  • param = 0trade_fee_rate
  • param = 1protocol_fee_rate
  • param = 2fund_fee_rate
  • param = 3new_protocol_owner (yeniden yorumlama olarak Pubkey baytlarını geçirin)
  • param = 4new_fund_owner
  • param = 5create_pool_fee
  • param = 6disable_create_pool
Değişiklikler admin tarafından imzalanır ve sonraki swap’ta bu AmmConfig’a bağlı her havuzu etkiler. Göçeyim yok; havuzlar yeni değerleri okur.

Durum değişim matrisi

Talimatlp_supplyKasa bakiyeleriBiriken-ücret alanlarıobservation
Initialize+ init LP+ init_amount_{0,1}0init
InitializeWithPermission+ init LP+ init_amount_{0,1}0init
Deposit++ her ikisi
Withdraw− her ikisi
SwapBaseInput+ in, − out+ protokol/fon’a bölünen trade_fee; etkinse + creator_fee+ (aralık geçmişse)
SwapBaseOutput+ in, − out+ protokol/fon’a bölünen trade_fee; etkinse + creator_fee+ (aralık geçmişse)
CollectProtocolFee− (protokol bucketları tarafından)protocol_* → 0
CollectFundFee− (fon bucketları tarafından)fund_* → 0
CollectCreatorFee− (yaratıcı bucketları tarafından)creator_* → 0
UpdatePoolStatus

Sonra nereye

Kaynaklar: