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
* 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_mintbyte 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 azinit_amount_0veinit_amount_1değeri vardır.amm_config.disable_create_pool == false.
pool_state,lp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LPile var.LOCKED_LP(100lamport LP token) LP başlatıcısı kalıcı olarak havuzda kilitlenir —pool_state.lp_supplyliquidity − 100kaydederken, havuzdan tamamen drenajını ve sıfıra bölmeyi önlemek için100LP birimi dolaşım dışında kalır.observation_statebaşlatılır;observation_index = 0vepool_id = pool_state.key().create_pool_feelamportlar 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 = falsevecreator_fee_on = BothToken.Initialize, yaratıcı ücretini etkinleştirmeyi desteklemez — bu yolInitializeWithPermission’dır.open_time, çağıran<= block_timestampdeğeri iletirseblock_timestamp + 1değerine yükseltilir. Swap’laropen_timeöncesinde reddedilir; depozitolar ve çekimler hemen çalışır.
reference/error-codes’da)
InvalidInput— mint’ler sırasız veya özdeş.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 oransal olarak her iki token’de likidite ekleyin.
Argümanlar
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).
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
(
Deposit’e eşit; lp_mint yazılabilir çünkü LP token’leri yakılmıştır.)
Matematik
lp_supply -= lp_token_amount.- Kasalar
out_token_0/out_token_1gönderir (brüt; kullanıcı herhangi bir Token-2022 aktarım ücretinin net değerini alır).
SwapBaseInput
Tam giriş swap’ı.
Argümanlar
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_statusswap’a izin verir.- Bu otorite için hiçbir mint duraklatılmış veya dondurulmuş değildir.
amount_in > 0.
ExceededSlippage—amount_out < minimum_amount_out.ZeroTradingTokens— işlem sıfıra yuvarlanır.NotApproved— havuzUpdatePoolStatusaracı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
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
Etki
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
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
Ö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ş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_rateparam = 1→protocol_fee_rateparam = 2→fund_fee_rateparam = 3→new_protocol_owner(yeniden yorumlama olarakPubkeybaytlarını geçirin)param = 4→new_fund_ownerparam = 5→create_pool_feeparam = 6→disable_create_pool
AmmConfig’a bağlı her havuzu etkiler. Göçeyim yok; havuzlar yeni değerleri okur.
Durum değişim matrisi
Sonra nereye
products/cpmm/code-demos— yukarıdaki için çalıştırılabilir TypeScript örnekleri.reference/error-codes— tam Anchor hata tablosu.products/cpmm/fees—CollectProtocolFee/CollectFundFee/CollectCreatorFee’nin drene ettiği ücret-tahakkuk modeli.

