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.
Talimat özeti
| Discriminator adı | İmza atan | Ne yapar |
|---|
Initialize | havuz 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 sahibi | Initialize 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. |
Deposit | LP | Her iki token’de likidite ekleyin; LP token’leri alın. |
Withdraw | LP | LP token’lerini yakın; her iki temel token’i oransal olarak alın. |
SwapBaseInput | swapper | Tam giriş swap’ı (amount_in içeri, ≥ minimum_amount_out dışarı). |
SwapBaseOutput | swapper | Tam çıkış swap’ı (≤ maximum_amount_in içeri, amount_out dışarı). |
CollectProtocolFee | protocol_owner (AmmConfig’dan) | Biriken protokol ücretlerini kasalardan alın. |
CollectFundFee | fund_owner (AmmConfig’dan) | Biriken fon ücretlerini kasalardan alın. |
CollectCreatorFee | pool_creator | Biriken yaratıcı ücretlerini alın (yaratıcı ücreti etkinse). |
UpdatePoolStatus | admin | Bir bitmask aracılığıyla havuzdaki belirli işlemleri duraklatın/sürdürün. |
UpdateAmmConfig | admin | Bir AmmConfig üzerindeki ücret oranlarını veya protokol/fon sahibini değiştirin. |
CreateAmmConfig | admin | Yeni bir ücret katmanı oluşturun (yeni AmmConfig hesabı). |
CreatePermissionPda | admin | Belirli bir otoritenin InitializeWithPermission çağırmasına izin veren bir Permission PDA’nı basın. |
ClosePermissionPda | admin | Daha ö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)
| # | Ad | W | S | Notlar |
|---|
| 1 | creator | W | S | Kirayı öder; pool_state.pool_creator olarak kaydedilir. |
| 2 | amm_config | | | Seçilen ücret katmanı. |
| 3 | authority | | | CPMM global otoritesi PDA. |
| 4 | pool_state | W | S* | 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. |
| 5 | token_0_mint | | | Sıralanmış: token_0_mint < token_1_mint. |
| 6 | token_1_mint | | | |
| 7 | lp_mint | W | | Burada init edilir. Otoriteye authority olarak ayarlanır. |
| 8 | creator_token_0 | W | | init_amount_0 için kaynak ATA. |
| 9 | creator_token_1 | W | | init_amount_1 için kaynak ATA. |
| 10 | creator_lp_token | W | | LP için hedef (eksikse oluşturulur). |
| 11 | token_0_vault | W | | Burada init edilir. authority tarafından sahiplenilir. |
| 12 | token_1_vault | W | | |
| 13 | create_pool_fee | W | | Yaratıcı tarafından ödenen create_pool_fee için hedef ATA. |
| 14 | observation_state | W | | Burada init edilir. |
| 15 | token_program | | | SPL Token (LP mint için). |
| 16 | token_0_program | | | SPL Token veya Token-2022. |
| 17 | token_1_program | | | SPL Token veya Token-2022. |
| 18 | associated_token_program | | | |
| 19 | system_program | | | |
| 20 | rent | | | |
* 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
| # | Ad | W | S |
|---|
| 1 | owner | | S |
| 2 | authority | | |
| 3 | pool_state | W | |
| 4 | owner_lp_token | W | |
| 5 | token_0_account | W | |
| 6 | token_1_account | W | |
| 7 | token_0_vault | W | |
| 8 | token_1_vault | W | |
| 9 | token_program | | |
| 10 | token_program_2022 | | |
| 11 | vault_0_mint | | |
| 12 | vault_1_mint | | |
| 13 | lp_mint | W | |
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 hatalar — ExceededSlippage, 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
| # | Ad | W | S |
|---|
| 1 | owner | | S |
| 2 | authority | | |
| 3 | pool_state | W | |
| 4 | owner_lp_token | W | |
| 5 | token_0_account | W | |
| 6 | token_1_account | W | |
| 7 | token_0_vault | W | |
| 8 | token_1_vault | W | |
| 9 | token_program | | |
| 10 | token_program_2022 | | |
| 11 | vault_0_mint | | |
| 12 | vault_1_mint | | |
| 13 | lp_mint | W | |
(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).
Tam giriş swap’ı.
Argümanlar
amount_in: u64
minimum_amount_out: u64
Hesaplar
| # | Ad | W | S |
|---|
| 1 | payer | | S |
| 2 | authority | | |
| 3 | amm_config | | |
| 4 | pool_state | W | |
| 5 | input_token_account | W | |
| 6 | output_token_account | W | |
| 7 | input_vault | W | |
| 8 | output_vault | W | |
| 9 | input_token_program | | |
| 10 | output_token_program | | |
| 11 | input_token_mint | | |
| 12 | output_token_mint | | |
| 13 | observation_state | W | |
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
ExceededSlippage — amount_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
Hesaplar — SwapBaseInput ile aynı.
Matematik — tavan ile ters eğri, bkz. products/cpmm/math.
Yaygın hatalar — ExceededSlippage (gross_in > max_amount_in), ZeroTradingTokens, InvalidInput, NotApproved.
CollectProtocolFee
Biriken protokol ücretlerini kasalardan protokol hedefine alın.
Argümanlar — hiçbiri.
Hesaplar
| # | Ad | W | S | |
|---|
| 1 | owner | | S | amm_config.protocol_owner ile eşleşmelidir. |
| 2 | authority | | | |
| 3 | pool_state | W | | |
| 4 | amm_config | | | |
| 5 | token_0_vault | W | | |
| 6 | token_1_vault | W | | |
| 7 | vault_0_mint | | | |
| 8 | vault_1_mint | | | |
| 9 | recipient_token_0_account | W | | |
| 10 | recipient_token_1_account | W | | |
| 11 | token_program | | | |
| 12 | token_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:
| Bit | Bayrak | Ayarlanmışken etki |
|---|
| 0 | DEPOSIT_DISABLED | Deposit NotApproved ile reddeder. |
| 1 | WITHDRAW_DISABLED | Withdraw reddeder. |
| 2 | SWAP_DISABLED | SwapBaseInput / SwapBaseOutput reddeder. |
Argümanlar
status: u8 // yeni bitmask
Hesaplar
| # | Ad | W | S | |
|---|
| 1 | authority | | S | CPMM programı üzerindeki admin anahtarı ile eşleşmelidir. |
| 2 | pool_state | W | | |
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
| # | Ad | W | S | |
|---|
| 1 | owner | W | S | Admin. |
| 2 | amm_config | W | | Burada init edilir. |
| 3 | system_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 = 0 → trade_fee_rate
param = 1 → protocol_fee_rate
param = 2 → fund_fee_rate
param = 3 → new_protocol_owner (yeniden yorumlama olarak Pubkey baytlarını geçirin)
param = 4 → new_fund_owner
param = 5 → create_pool_fee
param = 6 → disable_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
| Talimat | lp_supply | Kasa bakiyeleri | Biriken-ücret alanları | observation |
|---|
Initialize | + init LP | + init_amount_{0,1} | 0 | init |
InitializeWithPermission | + init LP | + init_amount_{0,1} | 0 | init |
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: