Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
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 program ID’si ve PDA seed’leri
reference/program-addresses sayfasında kanonik olarak listelenir. Bu sayfa her hesabın ne işe yaradığına ve hangi değişmezleri koruduğuna 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 başvurduğu bir paylaşılanAmmConfig hesabı tarafından tam olarak tanımlanır. İki mint’e sahip olduğunuzda, ağa dokunmadan her şeyi belirleyici bir şekilde türetebilirsiniz.
| Hesap | Seed(ler) | Sahibi | Amaç |
|---|---|---|---|
authority | "vault_and_lp_mint_auth_seed" | CPMM | Her vault hareketi ve her LP mint/burn işlemi için imzalayan. Tüm CPMM havuzları arasında paylaşılır. |
poolState | "pool", ammConfig, token0Mint, token1Mint veya herhangi bir signer tarafından sağlanan rastgele keypair | CPMM | Havuzun state struct’ı — mint çifti, vault bakiyeleri, LP arzı, ücret birikimi, observation işaretçisi. CPMM Initialize komutu, dört seed’den türetilen kanonik PDA’yı veya oluşturucu tarafından imzalanan keyfi bir keypair’i kabul eder. Rastgele keypair yolu, bir adversary’nin mempool’u gözlemleyip ve meşru oluşturucu kanonik PDA’yı işgal etmesinden önce yarışa katılması durumunda bir ön-çalıştırma saldırısını yenmek için vardır. |
lpMint | "pool_lp_mint", poolState | SPL Token | Havuzun LP token’ı. Arz = toplam LP ödenmemiş. Mint yetkilisi = CPMM authority PDA. |
vault0 | "pool_vault", poolState, token0Mint | SPL Token / Token-2022 | Havuzun token0 bakiyesini tutar. Authority PDA tarafından sahip olunur. |
vault1 | "pool_vault", poolState, token1Mint | SPL Token / Token-2022 | Havuzun token1 bakiyesini tutar. Authority PDA tarafından sahip olunur. |
observation | "observation", poolState | CPMM | TWAP için kullanılan fiyat örneklerinin ring buffer’ı. Her swap’da yazılır. |
| Hesap | Seed(ler) | Sahibi | Amaç |
|---|---|---|---|
ammConfig | "amm_config", index: u16 | CPMM | İşlem/protokol/fon/oluşturucu ücret oranlarını ve yönetici anahtarlarını tutar. “Ücret tier’i” başına bir tane. Poolstate oluşturma sırasında birine bağlanır ve daha sonra değiştirilemez. |
Bir havuzu sadece iki mint’ten türetme
Havuz ID’si her zaman kanonik PDA değildir.
Initialize, yukarıdaki PDA’ya ek olarak pool_state olarak keyfi bir signer keypair’i kabul eder. Geçirilen hesap kanonik PDA ile eşleşmezse, program bunun signer olması gerektirir — yani oluşturucu kendileriyle imzaladıkları yeni bir keypair geçirir. Bu ön-çalıştırma savunmasıdır: kanonik PDA’yı kapmaya çalışan üçüncü bir taraf, meşru oluşturucu tarafından bunun yerine rastgele bir keypair kullanılarak atlatabileceği anlamına gelir. Aşağı akış PDA’ları (lpMint, vault0, vault1, observation) hala poolState.key() dosyasından türetilir, bu nedenle hangi adres kullanılırsa kullanılsın benzersiz kalırlar. Havuzları dizinlerken, pool ID’sini zincir üzerindeki state’ten keşfedin (örn. CPMM programı altındaki PoolState hesapları), kanonik PDA’yı türeterek değil — 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 entegrasyondan okuyacağınız alanlar.
PoolState
lp_supply— havuzun LP mint’inin toplam arzının dahili aynası. LP-hisse matematiği için kullanın; değer mint’in zincir üzerindeki arzıyla eşleşmeli, ancak bunuPoolStatedosyasından okumak ekstra bir hesap getirmesini önler.protocol_fees_token{0,1},fund_fees_token{0,1}— henüz süpürülmemiş biriktirilmiş ücretler. Bunlar swap fiyatlandırmasını etkilemez;CollectProtocolFee/CollectFundFeeçağrılana kadar vault’larda otururlar.status—Swap,Deposit,Withdrawöğelerinin izin verilip verilmediğini kontrol eden bir bitmask. Yönetici 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 yapacak token programı. Biri klasik SPL Token, diğeri Token-2022 olabilir; bağımsızdırlar.open_time— bir Unix zaman damgası. Bu zaman öncesindeki swap’lar başarısız olur. Depozitolara bu zaman öncesinde izin verilir böylece havuz tohumlanabilir.creator_fee_on/enable_creator_fee— birlikte isteğe bağlı oluşturucu ücretinin bu havuz için aktif olup olmadığını ve swap’ın hangi tarafından toplandığını kontrol eder.enable_creator_fee == falseoluşturucu-ücret yolunu tamamen sıfırlar. Etkinleştirildiğinde,creator_fee_onseçer:0= swap girişi olan hangi token’dan ücret alır (BothToken);1= sadecetoken_0dosyasından ücret alır (token_1 → token_0swap’larını atlar);2= sadecetoken_1dosyasından ücret alır.InitializeWithPermissionaracılığıyla havuz oluşturma sırasında ayarlanır; daha sonra değiştirilemez.creator_fees_token_{0,1}—CollectCreatorFeetarafından süpürülen biriktirilmiş oluşturucu ücretleri.
AmmConfig
trade_fee_ratevecreator_fee_ratehacim fraksiyonlarıdır, ikisi de1/1_000_000biriminde ifade edilir.2500işlem hacminin %0.25 anlamına gelir.protocol_fee_ratevefund_fee_rateişlem ücretinin fraksiyonlarıdır (hacim değil), aynı1/1_000_000paydası içinde. Oluşturucu ücreti işlem ücretinin fraksiyonu değildir — kendi bağımsız oranıdır. Tam aritmetikproducts/cpmm/feessayfasındadır.indexbiru16, bu yüzden seed hash’i 2 byte big-endian kullanır. Byte sırasındaki hatalı sayma yaygın bir entegrasyon hatası.AmmConfighavuz düzeyinde değişmez. Bir havuz oluşturma sırasında birAmmConfig’e işaret eder ve hiçbir zaman geçiş yapmaz. Ücret değişiklikleri yayılır çünkü havuz her swap’da config’i okur — ancak havuz ücret tier’leri arasında taşınamaz.
creator_fee_rate) AmmConfig üzerinde yaşar ve ücret tier’i arasında paylaşılır. Belirli bir havuzun aslında bunu talep edip etmediği (enable_creator_fee) ve swap’ın hangi tarafına iniş yaptığı (creator_fee_on) PoolState üzerinde yaşar. Oluşturucu ücreti işlem ücretinden bağımsızdır — kendi oranı, kendi sayaçlarına (creator_fees_token_{0,1}) biriktirilmiş ve hiçbir zaman LP / protokol / fon paylarını işlem ücretinden azaltmaz. Sweep CollectCreatorFee aracılığıyla yapılır. Tam mekanikler 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 geçiştirirken LaunchLab) belirli bir AmmConfig karşısında havuz oluşturmaya yetkili olduklarını kanıtlayabilmeleri için kısıtlanmış bir havuz-oluşturma yolunu destekler.
CreatePermissionPda aracılığıyla oluşturulur ve ClosePermissionPda aracılığıyla iptal edilir. Son kullanıcılar bu hesapla doğrudan etkileşim kurmaz — bu, çapraz program akışları için tesisattır.
Vault’lar ve Token-2022
vault0 ve vault1, CPMM authority PDA tarafından sahip olunur ve bunların token-programı sahibi (token_program), havuz oluşturma sırasında mint’in programı tarafından belirlenen SPL Token veya Token-2022’dir. Havuz iki durumu şeffaf bir şekilde işler — her bir taraf için Swap / Deposit / Withdraw komutu hesaplarında doğru token-programı ID’sini geçersiniz.
CPMM, havuz oluşturma sırasında katı bir extension allow-list (uzantı izin listesi) uygular (utils/token.rs dosyasındaki is_supported_mint). Bir Token-2022 mint, bir CPMM havuzunda kullanılabilir, ancak ve ancak taşıdığı her uzantı bu listedeyse:
TransferFeeConfig. Mint tarafından her transfer’de uygulanır. HavuzSwapBaseInputdepozitoleri için alıcı tarafı ve çekme işlemleri için gönderen tarafındadır. Program, vault’a inen net miktarı hesaplar ve eğriyi buna göre ayarlar. Bkz.algorithms/token-2022-transfer-fees.MetadataPointerveTokenMetadata. Mint’te standart metaveri. Swap matematiğine hiçbir etkisi yoktur.InterestBearingConfig. Mint’in UI miktarı faiz tahakkuk ettirir. Vault ham miktarları depolar; eğri sadece ham miktarlarda çalışır. APR gösteren UI’ler, UI miktarını oluşturmak için Token-2022 yardımcılarını çağırmalıdır.ScaledUiAmount. UI-görüntü ölçekleme uzantısı.InterestBearingConfigile aynı muamele — eğri ham miktarları kullanır.
PermanentDelegate, TransferHook, DefaultAccountState, NonTransferable, ConfidentialTransfer, Group/GroupMember, MintCloseAuthority, vb. — Initialize öğesinin NotSupportMint ile reddetmesine neden olur. İstisna, programdaki küçük bir hardcoded mint whitelist’i (bir avuç belirli pubkey), extension kontrolünü atlar; belirli mint’leri vakayla başa getirmek için kullanılır.
Doğrulanmış uzantı listesi ve mint whitelist’i CP-Swap kaynağında programs/cp-swap/src/utils/token.rs altında yaşar ve gelecekteki program yükseltmeleriyle değişebilir.
Observation
Observation hesabı, her biriblock_timestamp ve kümülatif fiyat depolayan ObservationState girişlerinin bir ring buffer’ıdır. Her swap’da, son birinden yeterli zaman geçmişse program yeni bir observation ekler. TWAP’lar iki observation okuarak ve Δcumulative / Δtime bölünerek hesaplanır.
ObservationState PDA çevresindeki alanlar ve discriminator’dan sonra yaklaşık 4.100 byte’tır.
İki tüketici kuralı:
- Tek bir observation’u fiyat olarak kullanmayın. Bu bir kümülatif, spot fiyat değildir. TWAP hesaplamak için bunlardan ikisini kullanın.
- En az bir blok arayla observation’ları seçin. Aynı blok içindeki swap’lar yeni bir observation üretmeyebilir; geri dönüşü kontrol etmek aynı kaydı döndürebilir.
products/clmm/accounts sayfasında daha fazla matematik.
Hesap yaşam döngüsü
| Olay | Oluşturulan hesaplar | Yok edilen hesaplar |
|---|---|---|
Initialize | poolState, lpMint, vault0, vault1, observation | — |
Deposit | — (kullanıcı LP ATA’sı oluşturabilir) | — |
Withdraw | — | — |
Swap | — (kullanıcı hedef ATA’sı oluşturabilir) | — |
CollectProtocolFee | — | — |
CollectFundFee | — | — |
UpdatePoolStatus | — | — |
poolState kalır. Bu kasıtlıdır: aynı havuzu daha sonra yeniden tohumlamak tarihsel observation buffer’ını korur ve PDA türetimi kararlı kalır.
Nereden ne okuyacağınız
- Komut hesap listeleri (yukarıdakilerden hangisinin her komut için yazılabilir/signer olduğu):
products/cpmm/instructions. - Ücret-birikimi anlambilimi:
products/cpmm/fees. - Swap matematiği / observation güncelleme kuralı:
products/cpmm/math. - Kanonik seed’ler / program ID’leri:
reference/program-addresses.


