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
| Discriminator adı | İmza atan | Ne yapar |
|---|---|---|
Initialize | havuz oluşturucu | İki mint ve bir AmmConfig adresinden yeni bir CPMM havuzu oluşturun. İzin gerektirmez; herkes çağırabilir. Yeni havuzda enable_creator_fee = false değeri sabitlenmiştir. pool_state hesabı, kanonik PDA veya yeni rastgele bir keypair olabilir (bkz. Initialize hesapları). |
InitializeWithPermission | ödeme yapan + Permission PDA sahibi | Initialize işleminin izin gerektiren varyantı. Çağıran (payer), kendi açık anahtarından türetilmiş bir Permission PDA’ya sahip olmalıdır. Havuz oluşturmayı kapılı tutan platformlar tarafından kullanılır (örn. LaunchLab mezunları). Çağıran creator_fee_on değerini (BothToken / OnlyToken0 / OnlyToken1) sabitleyebilir ve yeni havuzda enable_creator_fee = true değerini zorlar. pool_state üzerindeki creator alanı, ödeme yapanın değil, ayrıca iletilen creator hesabı olarak ayarlanır. pool_state için kanonik PDA veya rastgele keypair esnekliği Initialize ile aynıdır. |
Deposit | LP | Her iki token’de likidite ekleyin; LP token’leri alın. |
Withdraw | LP | LP token’lerini yakın; her iki temel token’i oransal olarak alın. |
SwapBaseInput | swapper | Tam giriş swap’ı (amount_in içeri, ≥ minimum_amount_out dışarı). |
SwapBaseOutput | swapper | Tam çıkış swap’ı (≤ maximum_amount_in içeri, amount_out dışarı). |
CollectProtocolFee | protocol_owner (AmmConfig’dan) | Biriken protokol ücretlerini kasalardan alın. |
CollectFundFee | fund_owner (AmmConfig’dan) | Biriken fon ücretlerini kasalardan alın. |
CollectCreatorFee | pool_creator | Biriken yaratıcı ücretlerini alın (yaratıcı ücreti etkinse). |
UpdatePoolStatus | admin | Bir bitmask aracılığıyla havuzdaki belirli işlemleri duraklatın/sürdürün. |
UpdateAmmConfig | admin | Bir AmmConfig üzerindeki ücret oranlarını veya protokol/fon sahibini değiştirin. |
CreateAmmConfig | admin | Yeni bir ücret katmanı oluşturun (yeni AmmConfig hesabı). |
CreatePermissionPda | admin | Belirli bir otoritenin InitializeWithPermission çağırmasına izin veren bir Permission PDA’nı basın. |
ClosePermissionPda | admin | Daha önce yayınlanan bir Permission PDA’nı iptal edin. |
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
| # | Ad | W | S | Notlar |
|---|---|---|---|---|
| 1 | creator | W | S | Kirayı öder; pool_state.pool_creator olarak kaydedilir. |
| 2 | amm_config | Seçilen ücret katmanı. | ||
| 3 | authority | CPMM global otoritesi PDA. | ||
| 4 | pool_state | W | S* | Burada init edilir. Ya kanonik PDA ["pool", amm_config, token_0_mint, token_1_mint] ya da yeni rastgele bir keypair — kanonik PDA olmadığında, program pool_state’in imzalamasını gerektirir (require_eq!(pool_account_info.is_signer, true)). Rastgele keypair yolu, yaratıcının kanonik PDA üzerindeki ön işlem deneme girişimlerinden kaçınmasına olanak tanır. İndirilen PDA’lar (lp_mint, vaults, observation_state) her iki durumda da pool_state.key() adresinden türetilir. |
| 5 | token_0_mint | Sıralanmış: token_0_mint < token_1_mint. | ||
| 6 | token_1_mint | |||
| 7 | lp_mint | W | Burada init edilir. Otoriteye authority olarak ayarlanır. | |
| 8 | creator_token_0 | W | init_amount_0 için kaynak ATA. | |
| 9 | creator_token_1 | W | init_amount_1 için kaynak ATA. | |
| 10 | creator_lp_token | W | LP için hedef (eksikse oluşturulur). | |
| 11 | token_0_vault | W | Burada init edilir. authority tarafından sahiplenilir. | |
| 12 | token_1_vault | W | ||
| 13 | create_pool_fee | W | Yaratıcı tarafından ödenen create_pool_fee için hedef ATA. | |
| 14 | observation_state | W | Burada init edilir. | |
| 15 | token_program | SPL Token (LP mint için). | ||
| 16 | token_0_program | SPL Token veya Token-2022. | ||
| 17 | token_1_program | SPL Token veya Token-2022. | ||
| 18 | associated_token_program | |||
| 19 | system_program | |||
| 20 | rent |
* 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
| # | Ad | W | S |
|---|---|---|---|
| 1 | owner | S | |
| 2 | authority | ||
| 3 | pool_state | W | |
| 4 | owner_lp_token | W | |
| 5 | token_0_account | W | |
| 6 | token_1_account | W | |
| 7 | token_0_vault | W | |
| 8 | token_1_vault | W | |
| 9 | token_program | ||
| 10 | token_program_2022 | ||
| 11 | vault_0_mint | ||
| 12 | vault_1_mint | ||
| 13 | lp_mint | W |
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
| # | Ad | W | S |
|---|---|---|---|
| 1 | owner | S | |
| 2 | authority | ||
| 3 | pool_state | W | |
| 4 | owner_lp_token | W | |
| 5 | token_0_account | W | |
| 6 | token_1_account | W | |
| 7 | token_0_vault | W | |
| 8 | token_1_vault | W | |
| 9 | token_program | ||
| 10 | token_program_2022 | ||
| 11 | vault_0_mint | ||
| 12 | vault_1_mint | ||
| 13 | lp_mint | W |
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
| # | Ad | W | S |
|---|---|---|---|
| 1 | payer | S | |
| 2 | authority | ||
| 3 | amm_config | ||
| 4 | pool_state | W | |
| 5 | input_token_account | W | |
| 6 | output_token_account | W | |
| 7 | input_vault | W | |
| 8 | output_vault | W | |
| 9 | input_token_program | ||
| 10 | output_token_program | ||
| 11 | input_token_mint | ||
| 12 | output_token_mint | ||
| 13 | observation_state | W |
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
| # | Ad | W | S | |
|---|---|---|---|---|
| 1 | owner | S | amm_config.protocol_owner ile eşleşmelidir. | |
| 2 | authority | |||
| 3 | pool_state | W | ||
| 4 | amm_config | |||
| 5 | token_0_vault | W | ||
| 6 | token_1_vault | W | ||
| 7 | vault_0_mint | |||
| 8 | vault_1_mint | |||
| 9 | recipient_token_0_account | W | ||
| 10 | recipient_token_1_account | W | ||
| 11 | token_program | |||
| 12 | token_program_2022 |
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:
| Bit | Bayrak | Ayarlanmışken etki |
|---|---|---|
| 0 | DEPOSIT_DISABLED | Deposit NotApproved ile reddeder. |
| 1 | WITHDRAW_DISABLED | Withdraw reddeder. |
| 2 | SWAP_DISABLED | SwapBaseInput / SwapBaseOutput reddeder. |
| # | Ad | W | S | |
|---|---|---|---|---|
| 1 | authority | S | CPMM programı üzerindeki admin anahtarı ile eşleşmelidir. | |
| 2 | pool_state | W |
security/admin-and-multisig.
CreateAmmConfig
Yeni bir ücret katmanı oluşturun.
Argümanlar
| # | Ad | W | S | |
|---|---|---|---|---|
| 1 | owner | W | S | Admin. |
| 2 | amm_config | W | Burada init edilir. | |
| 3 | system_program |
- 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
| Talimat | lp_supply | Kasa bakiyeleri | Biriken-ücret alanları | observation |
|---|---|---|---|---|
Initialize | + init LP | + init_amount_{0,1} | 0 | init |
InitializeWithPermission | + init LP | + init_amount_{0,1} | 0 | init |
Deposit | + | + her ikisi | — | — |
Withdraw | − | − her ikisi | — | — |
SwapBaseInput | — | + in, − out | + protokol/fon’a bölünen trade_fee; etkinse + creator_fee | + (aralık geçmişse) |
SwapBaseOutput | — | + in, − out | + protokol/fon’a bölünen trade_fee; etkinse + creator_fee | + (aralık geçmişse) |
CollectProtocolFee | — | − (protokol bucketları tarafından) | protocol_* → 0 | — |
CollectFundFee | — | − (fon bucketları tarafından) | fund_* → 0 | — |
CollectCreatorFee | — | − (yaratıcı bucketları tarafından) | creator_* → 0 | — |
UpdatePoolStatus | — | — | — | — |
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.

