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 →
CPMM için Program ID ve PDA seed’leri
reference/program-addresses sayfasında kanonik olarak listelenmiştir. Bu sayfa her hesabın ne işe yaradığına ve koruduğu değişmezliklere odaklanır, hardcoded adresler değil.Bir CPMM havuzunun altı hesabı
Her CPMM havuzu, CPMM programı altında altı program türetilmiş adres (PDA) ve referans verdiği bir paylaşılanAmmConfig hesabı tarafından tamamen tanımlanır. İki mint’e sahip olduğunuzda, ağa dokunmadan her şeyi deterministik olarak türetebilirsiniz.
Ve paylaşılan config:
Sadece iki mint’ten bir havuz türetme
Havuz ID’si her zaman kanonik PDA değildir.
Initialize, yukarıdaki PDA’ya ek olarak pool_state olarak rastgele bir imzalayan keypair’i kabul eder. Geçirilen hesap kanonik PDA’yla eşleşmiyorsa, program bunun bir imzalayan olmasını gerektirir — yani yaratıcı imzaladığı yeni bir keypair geçirir. Bu ön-çalıştırma savunmasıdır: kanonik PDA’yı ele geçirmeye çalışan herhangi bir üçüncü taraf, meşru yaratıcı tarafından bunun yerine rastgele bir keypair kullanılarak atlatılabilir. Aşağı akış PDA’ları (lpMint, vault0, vault1, observation) yine de poolState.key() öğesinden türetilir, bu nedenle kullanılan hangi adres olursa olsun benzersiz kalırlar. Havuzları indekslerken, kanonik PDA’yı türeterek değil, zincir üstü state’ten havuz ID’sini keşfedin (örn. CPMM programı altında PoolState hesapları) — ikincisi rastgele keypair havuzlarını kaçıracaktır.Hesap düzenleri
Tam Rust tanımlarıraydium-cp-swap kaynağında bulunur. Aşağıdaki alanlar, bir entegrasyon sırasında okuduğunuz alanlardır.
PoolState
lp_supply— havuzun LP mint’inin toplam arzının iç yansıması. LP-share matematiği için kullanın; değer mint’in zincir üstü arzıyla eşleşmeli, ancak bunuPoolState’ten okumak ekstra bir hesap getirmesini önler.protocol_fees_token{0,1},fund_fees_token{0,1}— henüz taranmamış birikmiş ücretler. Bunlar swap fiyatlandırmasını etkilemez;CollectProtocolFee/CollectFundFeeçağrılana kadar vault’larda kalırlar.status—Swap,Deposit,Withdraw’ın izin verilip verilmediğini kontrol eden bir bitmask. Admin tarafındanUpdatePoolStatusaracılığıyla güncellenir. SDK bunu bir işlem oluşturmadan önce kontrol eder; doğrudan CPI yapıyorsanız, kendiniz kontrol edin.token0_program/token1_program— her vault için CPI yapılacak token programı. Biri klasik SPL Token, diğeri Token-2022 olabilir; bağımsızdırlar.open_time— Unix zaman damgası. Bu tarihten önce swap’lar başarısız olur. Havuz tohumlanabilmesi içinopen_timeöncesinde mevduatlar izin verilir.creator_fee_on/enable_creator_fee— birlikte bu havuz için isteğe bağlı yaratıcı ücretinin etkin olup olmadığını ve swap’ın hangi tarafından toplandığını kontrol eder.enable_creator_fee == falseyaratıcı-ücret yolunu tamamen sıfırlar. Etkinleştirildiğinde,creator_fee_onseçer:0= swap girdisi olan token’dan ücret al (BothToken);1= sadecetoken_0’dan ücret al (token_1 → token_0swap’larını atla);2= sadecetoken_1’den ücret al.InitializeWithPermissionaracılığıyla havuz oluşturmada ayarlanır; daha sonra değişemez.creator_fees_token_{0,1}—CollectCreatorFeeveyaCollectCreatorFeePermissionlesstarafından taranmış birikmiş yaratıcı ücretleri. Her iki yol da tam sayaçları sıfırlar; izinsiz yol alıcılarıpool_creator’ın kanonik ATA’larına sabitler.
AmmConfig
trade_fee_ratevecreator_fee_ratehacmin kesirleridir, her ikisi de1/1_000_000birimlerinde gösterilir.2500işlem hacminin %0.25’i anlamına gelir.protocol_fee_ratevefund_fee_rateişlem ücretinin kesirleridir (hacmin değil), aynı1/1_000_000paydası ile. Yaratıcı ücreti işlem ücretinin bir kesri değildir — kendi bağımsız oranıdır. Tam aritmetikproducts/cpmm/feessayfasındadır.indexbiru16’dır, bu nedenle seed hash’i 2 bayt big-endian kullanır. Byte sırasında bir hata entegrasyon hatasının yaygın nedenidir.AmmConfighavuz seviyesinde değişmezdir. Bir havuz oluşturmada birAmmConfig’e işaret eder ve asla değişmez. Ücret değişiklikleri yayılır çünkü havuz her swap’ta config’i okur — ancak havuz ücret seviyeleri arasında taşınamaz.
creator_fee_rate) AmmConfig’te bulunur ve ücret seviyesi arasında paylaşılır. Belirli bir havuzun gerçekten bunu talep edip etmediği (enable_creator_fee) ve swap’ın hangi tarafında yer aldığı (creator_fee_on) PoolState’te bulunur. Yaratıcı ücreti işlem ücretinden bağımsızdır — kendi oranıdır, kendi sayaçlarına birikir (creator_fees_token_{0,1}), ve asla LP / protokol / fon paylarını işlem ücretinden azaltmaz. Tarama CollectCreatorFee veya hedef-kısıtlı CollectCreatorFeePermissionless aracılığıyla yapılır. Tam mekanik için products/cpmm/fees sayfasına bakın.
Permission
InitializeWithPermission tarafından kullanılan küçük bir erişim-kontrol hesabı. CPMM programı, diğer programların (örn. bir token’ı CPMM’ye yükseltirken LaunchLab) belirli bir AmmConfig’e karşı havuz oluşturmaya yetkili olduklarını kanıtlayabilmeleri için izinli bir havuz-oluşturma yolunu destekler.
CreatePermissionPda aracılığıyla oluşturulur. Sadece CPMM admin’i ClosePermissionPda aracılığıyla iptal edebilir. Son kullanıcılar bu hesapla doğrudan etkileşime girmezler — bu, çapraz program akışları için altyapıdır. Rol sınırı için security/admin-and-multisig sayfasına ve kanonik adresler için reference/program-addresses sayfasına bakın.
Vault’lar ve Token-2022
vault0 ve vault1 CPMM authority PDA tarafından sahiplenilir ve bunların token-program sahibi (token_program) havuz oluşturmada mint’in programı tarafından belirlenen SPL Token veya Token-2022’dir. Havuz iki durumu şeffaf bir şekilde işler — Swap / Deposit / Withdraw talimatı hesaplarında her taraf için doğru token-program ID’sini geçersiniz.
CPMM, havuz oluşturmada katı bir extension allow-list uygular (is_supported_mint in utils/token.rs). Bir Token-2022 mint, CPMM havuzunda kullanılabilir, ancak ve ancak taşıdığı her extension bu listedeyse:
TransferFeeConfig. Mint tarafından her transferde uygulanır. HavuzSwapBaseInputmevduatları için alıcı taraf ve çekilişler için gönderen taraftır. Program vault’a inen net miktarı hesaplar ve eğriyi buna göre ayarlar.algorithms/token-2022-transfer-feessayfasına bakın.MetadataPointerveTokenMetadata. Mint üzerinde standart meta veriler. Swap matematiğine hiçbir etkisi yoktur.InterestBearingConfig. Mint’in UI miktarı faiz biriktirir. Vault ham miktarları depolar; eğri sadece ham miktarlar üzerinde çalışır. APR gösteren UI’lar, UI miktarını render etmek için Token-2022 yardımcılarını çağırmalıdır.ScaledUiAmount. UI-görüntü ölçekleme extension’ı.InterestBearingConfigile aynı işlem — eğri ham miktarları kullanır.
PermanentDelegate, TransferHook, DefaultAccountState, NonTransferable, ConfidentialTransfer, Group/GroupMember, MintCloseAuthority, vb. — Initialize’ın NotSupportMint ile reddetmesine neden olur. İstisna, programda küçük bir hardcoded mint whitelist’i (bir avuç belirli pubkey) extension kontrolünü atlar; belirli mint’leri duruma göre entegre etmek için kullanılır.
Doğrulanmış-extension listesi ve mint whitelist’i CP-Swap kaynağında programs/cp-swap/src/utils/token.rs altında bulunur ve gelecekteki program yükseltmeleriyle değişebilir.
Observation
Observation hesabı, her biri birblock_timestamp ve kümülatif fiyat depolayan ObservationState girdilerinin ring buffer’ıdır. Her swap’ta, son birinden yeterli zaman geçtiyse program yeni bir observation ekler. TWAP’lar iki observation okuyarak ve Δcumulative / Δtime bölerek hesaplanır.
ObservationState PDA’sı çevre alanları ve discriminator’dan sonra yaklaşık 4.100 bayttır.
İki tüketici kuralı:
- Tek bir observation’ı fiyat olarak kullanmayın. Bu bir kümülatif, spot fiyat değildir. TWAP hesaplamak için ikisini kullanın.
- En az bir blok aralıklı observation’ları seçin. Aynı blok içindeki swap’lar yeni bir observation üretmeyebilir; arka arkaya okumak aynı kaydı döndürebilir.
products/clmm/accounts sayfasındadır.
Hesap yaşam döngüsü
CPMM havuzları ve bunların PDA’ları asla kapatılmaz. Sıfır likidite olsa bile
poolState kalır. Bu kasıtlıdır: aynı havuzu daha sonra yeniden tohumlamak, tarihsel observation buffer’ını korur ve PDA türetmesi istikrarlı kalır.
Nerede ne okuyacağınız
- Talimat hesap listeleri (yukarıdakilerden hangisinin her talimat için yazılabilir/imzalayan olduğu):
products/cpmm/instructions. - Ücret-birikimi semantiği:
products/cpmm/fees. - Swap matematiği / observation güncelleme kuralı:
products/cpmm/math. - Kanonik seed’ler / program ID’leri:
reference/program-addresses.

