Skip to main content
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 →
Bu sayfa yetkili talimat referansıdır. Bu talimatları gerçekten oluşturan kod için bkz. products/cpmm/code-demos. Hata kodu anlamları için bkz. reference/error-codes.

Talimat özeti

Durum bit maskesi: her havuzun status değeri, bit 0 = depozito devre dışı, bit 1 = çekim devre dışı, bit 2 = takas devre dışı (PoolStatusBitIndex { Deposit, Withdraw, Swap } programda) olan bir u8 değeridir. 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 açıklar. Hesap sıralaması CPMM IDL’sini takip eder; SDK ve raydium-cp-swap/programs/cp-swap/src/instructions içindeki Rust istemcisi bu sırayı eşleştirir.

Initialize

Yeni bir CPMM havuzu oluştur. Argümanlar
Hesaplar (W = yazılabilir, S = imzalayan) * pool_state yalnızca rastgele anahtar çifti yolunda imzalar; kanonik-PDA yolu pool_state imzalaması olmadan çalışır. Ön koşullar
  • Mint’ler sıralanmıştır (token_0_mint < token_1_mint bayt 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 içindeki küçük bir mint başına izin listesi, durum bazında ekleme için kontrolü atlar.
  • creator ilgili ATA’larda en az init_amount_0 ve init_amount_1 değerine sahiptir.
  • amm_config.disable_create_pool == false.
Son koşullar
  • pool_state lp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP ile var olur.
  • LOCKED_LP (100 lamport LP token) başlangıç değeri havuzda kalıcı olarak kilitlenir — pool_state.lp_supply liquidity − 100 kaydeder, 100 LP birimi dolaşımın dışında kalır, havuzun tamamen boşaltılmasını ve sıfıra bölünmeyi engeller.
  • observation_state başlatılır; observation_index = 0 ve pool_id = pool_state.key().
  • create_pool_fee lamport’ları oluşturucudan alıcıya aktarılır ve yerel SOL olarak senkronize edilir (wSOL ATA’sıdır).
  • Havuzun durum bit maskesi 0 (depozito / çekim / takas tümü etkindir).
  • enable_creator_fee = false ve creator_fee_on = BothToken. Initialize oluşturucu ücretini etkinleştirmeyi desteklemez — bu yol InitializeWithPermission adresindedir.
  • open_time, çağıran <= block_timestamp değeri geçtiyse block_timestamp + 1 olarak yükseltilir. Takaşlar open_time öncesinde reddedilir; depozitolar ve çekimler hemen çalışır.
Yaygın hatalar (tam liste reference/error-codes adresinde)
  • InvalidInput — mint’ler sıralanmamış veya özdeş mint’ler.
  • 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 orantılı olarak her iki token’de likidite ekle. Argümanlar
Hesaplar Matematik
k’nin orantılılığında 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ş üzerindeki herhangi bir Token-2022 transfer ücreti net).
  • vault_1 += needed_token_1 (giriş üzerindeki herhangi bir Token-2022 transfer ücreti net).
Yaygın hatalarExceededSlippage, ZeroTradingTokens, depozito duraklatılmışsa InvalidStatus.

Withdraw

LP token’lerini yak ve her iki temel token’i orantılı olarak al. Argümanlar
Hesaplar (Deposit ile özdeş; lp_mint yazılabilir çünkü LP token’leri yakılı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 transfer ücreti net olarak alır).

SwapBaseInput

Tam giriş takaşı. Argümanlar
Hesaplar Sıralama giriş → çıkış, havuzun kanonik token_0 / token_1 değeri değil, kullanıcının yönüne göre yapılır. Program, mint’leri eşleştirerek hangi kasanın hangisi olduğunu belirler. Matematik — bkz. products/cpmm/math. Ön koşullar
  • open_time <= now.
  • pool_status takaşa izin verir.
  • Bu yetki için hiçbir mint duraklatılmamış veya dondurulmamış.
  • amount_in > 0.
Yaygın hatalar
  • ExceededSlippageamount_out < minimum_amount_out.
  • ZeroTradingTokens — ticaret sıfıra yuvarlanır.
  • NotApproved — havuz UpdatePoolStatus aracılığıyla takaşlar için duraklatılmış.
  • InvalidInput — mint’ler havuzun kasa mint’lerinden hiçbiriyle eşleşmez.

SwapBaseOutput

Tam çıkış takaşı. 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

Birikmiş protokol ücretlerini kasalardan protokol hedefine topla. Argümanlar — yok. Hesaplar Etki
Eğrinin etkili bakiyelerinde değişiklik yok (birikmiş ücretler zaten hariç tutulmuştu). Yaygın hata — imzalayan protocol_owner değilse NotApproved.

CollectFundFee

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

CollectCreatorFee

pool_state.pool_creator tarafından imzalanır. Tam creator_fees_token_0 ve creator_fees_token_1 bakiyelerini oluşturucunun token hesaplarına aktarır, ardından her iki sayacı sıfırlar. Her iki sayaç da sıfır olduğunda NoFeeCollect döndürür.

CollectCreatorFeePermissionless

Herkes oluşturucu ücreti toplamayı tetikleyebilir. Talimat her zaman tam birikmiş bakiyeleri pool_state.pool_creator tarafından sahiplenilen kanonik ilişkili token hesaplarına gönderir; çağıran başka bir oluşturucu veya hedef seçemez. Herhangi bir ATA eksikse, ödeyici oluşturulmasını finanse eder. Orijinal CollectCreatorFee çağrılabilir kalır, bu nedenle mevcut istemciler uyumlu kalır. Argümanlar — yok. Hesaplar Etki
  • Tüm creator_fees_token_0 ve creator_fees_token_1 değerlerini havuz kasalarından oluşturucu ATA’larına aktarır.
  • Her iki oluşturucu ücreti sayacını sıfırlar ve pool_state.recent_epoch günceller.
  • Her iki sayaç da sıfır olduğunda NoFeeCollect döndürür.

UpdatePoolStatus

Bir havuzdaki bireysel işlemleri duraklat veya devam ettir. status alanı bir bit maskesidir: Argümanlar
Hesaplar Admin anahtarı, CPMM programındaki yükseltme yetkilisidir — pratikte Raydium çoklu imza. Bkz. security/admin-and-multisig.

CreateAmmConfig

Yeni bir ücret katmanı oluştur. 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ştir. Bir param: u8 (hangi alanın güncelleneceğinin ayırıcısı) ve bir value: u64 alır. Param başına değer semantiği kaynakta; yaygın olarak:
  • param = 0trade_fee_rate
  • param = 1protocol_fee_rate
  • param = 2fund_fee_rate
  • param = 3new_protocol_owner (yeniden yorumlama olarak Pubkey baytlarını geç)
  • param = 4new_fund_owner
  • param = 5create_pool_fee
  • param = 6disable_create_pool
Değişiklikler admin tarafından imzalanır ve bu AmmConfig’e bağlı her havuzu sonraki takaşta etkiler. Geçiş yok; havuzlar yeni değerleri okur.

Durum değişikliği matrisi

Sonraki adımlar

Kaynaklar: