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
* 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_mintbayt 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. creatorilgili ATA’larda en azinit_amount_0veinit_amount_1değerine sahiptir.amm_config.disable_create_pool == false.
pool_statelp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LPile var olur.LOCKED_LP(100lamport LP token) başlangıç değeri havuzda kalıcı olarak kilitlenir —pool_state.lp_supplyliquidity − 100kaydeder,100LP birimi dolaşımın dışında kalır, havuzun tamamen boşaltılmasını ve sıfıra bölünmeyi engeller.observation_statebaşlatılır;observation_index = 0vepool_id = pool_state.key().create_pool_feelamport’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 = falsevecreator_fee_on = BothToken.Initializeoluşturucu ücretini etkinleştirmeyi desteklemez — bu yolInitializeWithPermissionadresindedir.open_time, çağıran<= block_timestampdeğeri geçtiyseblock_timestamp + 1olarak yükseltilir. Takaşlaropen_timeöncesinde reddedilir; depozitolar ve çekimler hemen çalışır.
reference/error-codes adresinde)
InvalidInput— mint’ler sıralanmamış veya özdeş mint’ler.NotSupportMint— engellenen Token-2022 uzantısı.ExceededSlippage— nadiren;init_amount_0/1ondalı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
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).
ExceededSlippage, ZeroTradingTokens, depozito duraklatılmışsa InvalidStatus.
Withdraw
LP token’lerini yak ve her iki temel token’i orantılı olarak al.
Argümanlar
(
Deposit ile özdeş; lp_mint yazılabilir çünkü LP token’leri yakılır.)
Matematik
lp_supply -= lp_token_amount.- Kasalar
out_token_0/out_token_1gönderir (brüt; kullanıcı herhangi bir Token-2022 transfer ücreti net olarak alır).
SwapBaseInput
Tam giriş takaşı.
Argümanlar
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_statustakaşa izin verir.- Bu yetki için hiçbir mint duraklatılmamış veya dondurulmamış.
amount_in > 0.
ExceededSlippage—amount_out < minimum_amount_out.ZeroTradingTokens— ticaret sıfıra yuvarlanır.NotApproved— havuzUpdatePoolStatusaracı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
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
Birikmiş protokol ücretlerini kasalardan protokol hedefine topla.
Argümanlar — yok.
Hesaplar
Etki
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_0vecreator_fees_token_1değ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_epochgünceller. - Her iki sayaç da sıfır olduğunda
NoFeeCollectdöndürür.
UpdatePoolStatus
Bir havuzdaki bireysel işlemleri duraklat veya devam ettir. status alanı bir bit maskesidir:
Argümanlar
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
Ön koşullar
- Aynı
indexile mevcutAmmConfigyok. 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 = 0→trade_fee_rateparam = 1→protocol_fee_rateparam = 2→fund_fee_rateparam = 3→new_protocol_owner(yeniden yorumlama olarakPubkeybaytlarını geç)param = 4→new_fund_ownerparam = 5→create_pool_feeparam = 6→disable_create_pool
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
products/cpmm/code-demos— yukarıdakiler için çalıştırılabilir TypeScript örnekleri.reference/error-codes— tam Anchor hata tablosu.products/cpmm/fees—Collect*Feetalimatlarının boşalttığı ücret birikme modeli.

