Ana içeriğe atla
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

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
Hesaplar (W = yazılabilir, S = imzalayan) * 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
Hesaplar Matematik
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
Hesaplar (Deposit’e eşit; lp_mint yazılabilir çünkü LP token’leri yakılmıştır.) Matematik
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
Hesaplar 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
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 Etki
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: Argümanlar
Hesaplar 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
Hesaplar Ö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

Sonra nereye

Kaynaklar: