Skip to main content
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 products/clmm/accounts (hesaplar nedir) ve products/clmm/math (matematik nedir) ile birlikte kullanılır. Argümanlar ve hesap sıralaması için yetkilidir; belirli bayt düzenleri IDL’den gelir.

Talimat envanteri

init-tick-array diye bir talimat yoktur ve gerekmez. Bir tick dizisi, OpenPosition* / IncreaseLiquidity* talimatlarının içinde, bedeli payer tarafından ödenerek TickArrayState::get_or_create_tick_array ile oluşturulur. (Muhtemelen hâlâ başlatılmamış, system’e ait) tick dizisi PDA’sını tick_array_lower / tick_array_upper olarak geçirin; eksikse program onu ayırır. OpenLimitOrder da tek tick_array hesabı için aynısını yapar.
Yalnızca yöneticiye açık talimatların çoğu (CreateAmmConfig, UpdateAmmConfig, UpdatePoolStatus, CreateOperationAccount, UpdateOperationAccount, CloseProtocolPosition) programın sabit kodlanmış admin genel anahtarı tarafından kapılanır. CreatePermissionPda / ClosePermissionPda, admin genel anahtarını veya özel bir permission_pda_admin anahtarını kabul eder; CreateSupportMintAssociated / CloseSupportMintAssociated ise admin genel anahtarını veya özel bir destek-mint sahibi anahtarını kabul eder. Ödül akışı yönetici talimatları (TransferRewardOwner, CollectRemainingRewards) program yöneticisi değil, ödül fon sağlayıcısı tarafından kapılanır. V2 soneki “Token-2022’yi kasa / NFT’de destekler, bitmap uzantı yuvası gerektirir” anlamına gelir. SDK yeni havuzlar için varsayılan olarak V2’yi seçer.

CreatePool

Argümanlar
Hesaplar (kısaltılmış)
10 ve 11. yuvalar mint başınadır; “önce SPL Token, sonra Token-2022” değildir. Her biri, eşleşen mint üzerindeki mint::token_program kısıtıyla bağlanır; bu nedenle token_mint_0’ı Token-2022, token_mint_1’i klasik SPL olan bir havuz için 10. yuvada Token-2022’yi, 11. yuvada ise SPL Token’ı geçirmeniz gerekir. CreateCustomizablePool ve CreatePermissionedPool aynı iki yuvayı kullanır.
Ön koşullar
  • token_mint_0 < token_mint_1 bayt sırasına göre.
  • amm_config.disable_create_pool == false.
  • Mint’ler Token-2022 uzantısı izin listesi tarafından reddedilmez.
Son koşullar
  • pool_state.sqrt_price_x64 = sqrt_price_x64, tick_current = floor(log_{1.0001}(price)).
  • pool_state.liquidity = 0 (henüz pozisyon yok).
  • pool_state.fee_on = FromInput (eski varsayılan).
  • pool_state.dynamic_fee_info sıfırlanır (dinamik ücret devre dışı).

CreateCustomizablePool

Yeni havuzlar için önerilir. CreatePool ile aynı etki artı havuz başına ücret toplama modu ve isteğe bağlı dinamik ücret katılım bayrağı. Argümanlar
Hesaplar — tam olarak CreatePool’un bildirilen 13 hesabı. dynamic_fee_config bildirilen bir hesap değildir.
enable_dynamic_fee = true olduğunda, anlık görüntüsü alınacak DynamicFeeConfig, son remaining_account olarak sağlanmalıdır — işleyici ctx.remaining_accounts.last() değerini okur. Bu nedenle her SupportMintAssociated atlama PDA’sı ondan önce gelmelidir; aksi hâlde program yanlış hesabın anlık görüntüsünü alır ve deserileştirme başarısız olur. Bayrak ayarlıyken bunu atlamak AccountLack ile başarısız olur.
Ön koşullarCreatePool ile aynı. enable_dynamic_fee = false ise hiçbir remaining_account gerekmez ve geçirilen hesaplar yalnızca destek-mint kayıtları için taranır. Son koşullar
  • pool_state.fee_on seçilen CollectFeeOn varyantına ayarlanır.
  • Dinamik ücret etkinleştirilirse: pool_state.dynamic_fee_info sağlanan DynamicFeeConfig öğesinden başlatılır (beş kalibrasyon parametresi kopyalanır; durum alanları sıfırlanır).
  • Aksi takdirde: pool_state.dynamic_fee_info sıfırlanır (= bu havuz için dinamik ücret sonsuza kadar etkin değil).
fee_on ve dinamik ücret etkinleştirme biti yalnızca havuz oluşturma sırasında ayarlanır. Yerinde yükseltme yoktur — eski CreatePool aracılığıyla oluşturulan havuzlar geriye dönük olarak dinamik ücret veya tek taraflı ücret kazanamaz. Yeni dağıtımlar varsayılan olarak bu talimata geçmelidir.

CreatePermissionedPool

Hem CreatePool hem de CreateCustomizablePool havuz PDA’sını ["pool", amm_config, token_mint_0, token_mint_1] öğesinden türetir, bu nedenle (config, mint0, mint1) üçlüsü başına tam olarak bir kanonik havuz adresi vardır — aynı seed’lerde ikinci bir init başarısız olur. CreatePermissionedPool istemci tarafından sağlanan seed_index: u16 öğesini havuz PDA seed’lerine katarak bu kısıtlamayı kaldırır; aynı çift ve ücret seviyesi için birden fazla havuza izin verir — her biri kendi adresinde. Keyfi bir havuz adresi ayrıcalıklı bir yetenek olduğundan, ödeyici bunu yetkilendiren bir Permission PDA’sı tutmalıdır. Havuzun diğer her şeyi CreateCustomizablePool ile aynıdır: aynı CreateCustomizableParams öğesini alır ve tek taraflı ücret ve dinamik ücret katılımını destekler. Argümanlar
Hesaplar (kısaltılmış)CreateCustomizablePool ile aynı artı, başında: pool_state PDA’sı ["pool", amm_config, token_mint_0, token_mint_1, seed_index.to_le_bytes()] öğesinden türetilir. Ön koşullar
  • seed_index != 0. 0 değerindeki seed_index eski havuzlar için ayrılmıştır ve burada reddedilir; [0, 0] seed bileşeni, eski bir havuz adresinin klasik dört seed formuna çökmesini sağlayan şeydir.
  • payer için permission PDA’sı var (yönetici tarafından CreatePermissionPda aracılığıyla oluşturulmuş).
  • CreatePool ile aynı mint / izin listesi kuralları.
Son koşullar
  • Yeni bir pool_state seed_index türetilmiş adresinde var; pool_state.seed_index = seed_index.
  • Diğer tüm son durum CreateCustomizablePool ile eşleşir (ücret modu, isteğe bağlı dinamik ücret).
Bu talimat genel havuz oluşturma erişimini genişletmez — izinsiz oluşturma CreatePool / CreateCustomizablePool aracılığıyla devam eder; bunlar çift başına bir havuz kalır. CreatePermissionedPool beyaz listeye alınan bir operatörün aynı çift için birden fazla havuza ihtiyaç duyduğu (örn. farklı başlangıç fiyatları veya başlatma kohortları) ve yönetici tarafından verilen Permission PDA’sı tuttuğu belirli durum için vardır.

OpenPositionV2 / OpenPositionWithToken22Nft

Mevcut bir havuz içinde yeni bir pozisyon oluşturun. Argümanlar
Hesaplar (kısaltılmış) OpenPositionWithToken22Nft, aynı listenin metadata_account (5) ve metadata_program (19) kaldırılmış hâlidir — pozisyonun metadata’sını bunun yerine NFT mint’i üzerindeki Token-2022 metadata uzantısı aracılığıyla yazar — ve böylece 20 hesap eder. Onun position_nft_mint’i yalın bir Signer, position_nft_account’ı ise bir UncheckedAccount’tur.
tick_array_bitmap_extension her iki varyantta da bildirilen bir hesap değildir. Pozisyonun aralığı havuzun satır içi tick_array_bitmap’inin dışına düştüğünde (±512 tick dizisi), ["pool_tick_array_bitmap_extension", pool_state] tohumlarındaki TickArrayBitmapExtension PDA’sını remaining_accounts[0] olarak ekleyin.
Matematikproducts/clmm/math öğesine bakın. base_flag verildiğinde, program liquidity veya (amount_0_max, amount_1_max) öğesini gerçek L ve tüketilen gerçek token tutarlarına çözer. Ön koşullar
  • tick_lower < tick_upper, her ikisi de pool.tick_spacing katları, [MIN_TICK, MAX_TICK] içinde.
  • İki tick dizisi PDA’sı geçirilir. Bunların önceden var olması gerekmezget_or_create_tick_array, eksik olanı bu talimatın içinde payer’ın masrafıyla ayırır. Ayrı bir init-tick-array talimatı yoktur.
  • Kullanıcı kaynak ATA’larında en az amount_0_max ve amount_1_max bulundurur.
Son koşullar
  • personal_position var, liquidity ayarlanmış, fee_growth_inside_last anlık görüntüsü alınmış.
  • Tick dizisi girdileri tick_lower ve tick_upper öğelerinde güncellenir (liquidity_gross += L, liquidity_net ± L, ücret büyümesi anlık görüntüleri korunur).
  • pool_state.liquidity += L pozisyon aralıkta ise (tick_lower ≤ tick_current < tick_upper).
  • Pozisyon NFT mint’i pool_state öğesini dondurma yetkilisi olarak kaydeder. Mint yetkilisi tek NFT basıldıktan sonra kaldırılır. Dondurma yetkilisini kaydetmek NFT token hesabının durumunu değiştirmez.
  • NFT token hesabı donmamış kalır; yalnızca talimat OpenPositionV2 ya da OpenPositionWithToken22Nft ise ve kasa mint’lerinden herhangi birinin dondurma yetkilisi CLMM’nin kısıtlı yayıncı listesiyle eşleşiyorsa dondurulur. Yalnızca eşleşen bu V2 yolu hesabı dondurur. OpenPosition V1 dondurmaz.
Yaygın hatalarTickInvalidOrder (tick_lower >= tick_upper), TickAndSpacingNotMatch (bir uç nokta tick_spacing’in katı değil), InvalidTickIndex ([MIN_TICK, MAX_TICK] dışında), MissingTickArrayBitmapExtensionAccount (aralık satır içi bitmap’in dışında ve uzantı eklenmemiş), NotApproved (pool_state.status açmayı engelliyor), ZeroAmountSpecified.
Pozisyon dondurma, bildirilen talimat hesaplarını veya argümanlarını eklemez. İstemciler bu pozisyonları mevcut V2 düzenleriyle açabilir. Davranış vault_0_mint ve vault_1_mint öğesinden zincir üzerinde seçilir.

IncreaseLiquidityV2

Zaten açık olan bir pozisyona likidite ekleyin. Argümanlar
Hesaplar — 15 tane ve OpenPosition’dan türetilemez: rent yok, system_program yok, associated_token_program yok ve metadata hesabı yok. Pozisyonun aralığı satır içi bitmap’in dışında olduğunda TickArrayBitmapExtension PDA’sını remaining_accounts[0] olarak başa ekleyin. Etki
  • amount_0_actual / amount_1_actual öğesini kullanıcıdan → kasalara aktarır.
  • personal_position.liquidity ve pool_state.liquidity (aralıkta ise) ile uç nokta tick’inin liquidity_gross / liquidity_net değerlerini buna göre artırır.
  • Son dokunuştan bu yana borçlu olunan ücretleri ve ödülleri toplar ve bunları token_fees_owed_{0,1} / reward_amount_owed hesabına yazar. Bunlar yalnızca DecreaseLiquidity / DecreaseLiquidityV2 sırasında ödenir, artışta değil — bağımsız bir toplama talimatı yoktur.

DecreaseLiquidityV2

Bir pozisyondan likiditeyi kaldırın. Argümanlar
Hesaplar — 16 tane ve IncreaseLiquidityV2 ile aynı şekle ya da sıraya sahip değil: personal_position ile pool_state yer değiştirmiştir, kasalar tick dizilerinden önce gelir, kullanıcı tarafındaki hesaplar recipient_token_account_* olarak adlandırılır ve fazladan bir memo_program vardır. Kalan hesaplar — toplanan her etkin ödül için üç tane; reward_token_vault(W), recipient_token_account(W), reward_vault_mint sırasıyla. Pozisyonun aralığı satır içi bitmap’in dışında olduğunda TickArrayBitmapExtension PDA’sını başa ekleyin.
Bu aynı zamanda ücret ve ödül toplamanın tek yoludur. Pozisyonu değiştirmeden toplamak için bunu liquidity = 0, amount_0_min = 0, amount_1_min = 0 ile çağırın.
Etki
  • Geçerli sqrt_price_x64 verilen kaldırılan L için (amount_0, amount_1) öğesini hesaplar.
  • Son dokunuştan bu yana tahakkuk eden ücretleri/ödülleri kapatır; IncreaseLiquidity ile aynı.
  • amount_0 + fees_owed_0 ve amount_1 + fees_owed_1 öğesini kasalardan kullanıcıya aktarır.
  • Likidite sayaçlarını azaltır; yeni personal_position.liquidity == 0 ise, pozisyon ClosePosition için uygun hale gelir.
Kaymaamount_0_min ve amount_1_min kullanıcının çıktı tarafında Token-2022 transfer ücretleri net olarak kabul ettiği minimumlar.

ClosePosition

Pozisyon NFT’sini yakın ve PersonalPositionState öğesini kapatın. Bildirilen hesaplar Kalan hesaplar
  • Donmuş olmayan NFT: hiçbiri gerekli değil; ekstra havuz hesabı zararsızdır çünkü işleyici onu okumaz.
  • Donmuş NFT: personal_position.pool_id öğesini ilk kalan hesap olarak ekleyin. Program bunu PoolState olarak yükler ve çözmek için PDA seed’lerini kullanır.
Ön koşullar
  • personal_position.liquidity == 0.
  • tokens_fees_owed_{0,1} == 0.
  • Tüm ödül sayaçları reward_amount_owed == 0.
(Yani, her şeyi toplayın ve önce sıfıra azaltın.) Etki
  • NFT token hesabı donmuşsa, ilk kalan hesabın personal_position.pool_id öğesine eşit olduğunu doğrular, sonra havuz PDA’sı ile çözer.
  • NFT’yi yakar.
  • NFT token hesabını ve personal_position öğesini kapatır; kirayı nft_owner öğesine geri verir. Pozisyon NFT’si Token-2022 kullanıyorsa, NFT mint’ini de kapatır; klasik SPL Token mint’leri kapatılamaz ve sıfır arzla kalır.
Çözme, yakma ve kapatma atomiktir. NFT bu adımlar arasında aktarılabilir hale gelemez. Koşullu istemci kırılması — bildirilen IDL düzeni değişmez, bu nedenle eski istemciler mevcut ve donmuş olmayan pozisyonları kapatmaya devam eder. Havuz kalan hesabını atlayan eski bir oluşturucu donmuş bir pozisyonu kapatırken AccountLack ile başarısız olur. Her kapatma için havuzu geçmek en basit uyumlu stratejidir.

SwapV2

Likidite eğrisini yürüyün; is_base_input öğesine bağlı olarak tam giriş veya tam çıkış. Argümanlar
Hesaplar (kısaltılmış) Arayanlar beklenen swap yürüyüşünü kapsayan sıralanmış bir tick dizileri listesi geçer; program ihtiyaç duyduğu kadarını kullanır. SDK bu listeyi PoolUtils.computeAmountOutFormat veya API’nin alıntı uç noktası aracılığıyla hesaplar. Ön koşullar
  • pool_state.status swapa izin verir.
  • now >= open_time.
  • sqrt_price_limit_x64 yön için sqrt_price_x64 öğesinin doğru tarafında.
Yaygın hatalarTooLittleOutputReceived (tam-giriş kayması), TooMuchInputPaid (tam-çıkış kayması), SqrtPriceLimitOverflow, NotEnoughTickArrayAccount, InvalidFirstTickArrayAccount, MissingTickArrayBitmapExtensionAccount, LiquidityInsufficient, NotApproved (pool_state.status üzerinde swap biti ayarlı). CLMM’de ExceededSlippage varyantı yoktur — o ad CPMM’ye aittir — ve TickArrayNotFound da yoktur. SwapV2 öğesinin arayanların bilmesi gereken dahili olarak yaptığı şey (2025 sonrası sürüm):
  1. Dinamik ücret ek ücretipool.dynamic_fee_info sıfır değilse, program son swaptan bu yana geçilen tick mesafesini kullanarak oynaklık biriktiricisini günceller (filtre/bozunma kuralları products/clmm/fees öğesinden) ve AmmConfig.trade_fee_rate öğesinin üzerine dynamic_fee_component ekler. Toplam ücret %10 ile sınırlandırılır (MAX_FEE_RATE_NUMERATOR / 1_000_000).
  2. Limit emri eşleştirmesi — fiyat yürüyüşü açık limit emirleri tutan bir tick’i geçtiğinde, program önce o tick’te mevcut limit emri likiditeyi doldurur (FIFO order_phase öğesine göre), sonra LP likidite eğrisi boyunca ilerler. Doldurulmuş tutarlar tick.unfilled_ratio_x64 ve tick.part_filled_orders_remaining öğesini daha sonraki kapatma için günceller; emirler kendileri sahibi SettleLimitOrder çağırana kadar harcı olmaz.
  3. Tek taraflı ücret yönlendirmesipool.fee_on = Token0Only veya Token1Only olduğunda, swap adımı yine de aynı giriş-çıkış ticaretini hesaplar; ücret daha sonra yapılandırılan tarafa yönlendirilir. Yapılandırılan ücret tarafının çıkış olduğu yönler için, ücret swap çıkışından düşülür (kullanıcı out − fee alır); yapılandırılan tarafın giriş olduğu yönler için davranış FromInput ile eşleşir. PoolState öğesinde is_fee_on_input(zero_for_one) ve is_fee_on_token0(zero_for_one) öğesine bakın.
Swap (V1) SwapV2 ile aynı dinamik ücret, tek taraflı ücret yönlendirmesi ve limit emri eşleştirmesini uygular; eksik olduğu tek özellik Token-2022 desteğidir — her iki kasa da klasik SPL Token olmalıdır. Herhangi bir Token-2022 mint’i olan havuzlar SwapV2 aracılığıyla değiştirilmelidir. Toplayıcı ve SDK zaten her CLMM bacağı için V2’yi tercih eder, bu nedenle arayanlar mint türüne göre dallanmak zorunda değildir.

OpenLimitOrder

Belirli bir tick’te satış emri verin. Emir, tick başına FIFO kohortunda oturur ve fiyat geçtikçe doldurulur. Argümanlar
Hesaplar (kısaltılmış) Kalan hesaplar[0] tick_array_bitmap_extension, yalnızca başlangıç indeksi havuzun satır içi bitmap’inin dışına düşen bir tick dizisi başlatılırken gereklidir. Aksi hâlde hiçbir şey geçirmeyin.
rent hesabı yoktur: yapı system_program ile biter, yani 13 bildirilen hesap. 14. konumdaki başıboş bir rent, tam olarak isteğe bağlı bitmap uzantısının okunduğu yere denk gelir; bu yüzden sıralama, satır içi bitmap’in dışındaki bir tick dizisinin ilk kez oluşturulması gerekene kadar çalışıyor gibi görünür — sonra da başarısız olur.
Hesap listesi değişikliği (2026-07 sürümü). OpenLimitOrder artık giriş tarafına ek olarak çıkış tarafı hesaplarını da alır — output_token_account, output_vault ve output_vault_mint. Bunlar yalnızca doğrulama için kullanılır: program sahibinin giriş veya çıkış token hesabı donmuşsa emri reddeder. Bu, doldurmanın gerçekten sahibinin çıkış ATA’sına kapatılabileceğini garanti eder; bu, izin listesi / varsayılan donmuş Token-2022 mint’leri (örn. izinli tokenler) için önemlidir; burada bir hesap henüz çözülmemiş olabilir. Eski tek taraflı hesap listesine karşı oluşturulan istemciler üç çıkış hesabını eklemelidir.
Ön koşullar
  • Ne input_token_account ne de output_token_account donmuş değildir (aksi takdirde NotApproved).
  • pool_state.status hem swap (bit 4) hem de limit emri (bit 5) işlemlerine izin verir (aksi takdirde NotApproved).
  • tick_index % pool.tick_spacing == 0 ve [MIN_TICK, MAX_TICK] içinde.
  • tick_index seçilen yön için pool.tick_current öğesinin sağ tarafında (token0 satışı → tick geçerli olmalıdır, ve tersi). Zaten geçilmiş bir tick’te satış hemen eşleştirilir ve reddedilir.
Son koşullar
  • limit_order var; açılış zamanında tick.order_phase ve tick.unfilled_ratio_x64 anlık görüntüsü alınmış.
  • tick.orders_amount += amount (geçerli kohortunda).
  • limit_order_nonce.order_nonce += 1.
  • OpenLimitOrderEvent yayınlandı.
Yaygın hatalarNotApproved (giriş veya çıkış token hesabı donmuş ya da havuzda swap / limit emri devre dışı), ZeroAmountSpecified (giriş tarafı transfer ücretinden sonra amount == 0), InvalidLimitOrderAmount (miktar, o tick’te 1 taban biriminin altında bir çıktı üretir veya u64 taşar), InvalidTickIndex ([MIN_TICK, MAX_TICK] dışında veya seçilen yön için tick_current öğesinin yanlış tarafında), TickAndSpacingNotMatch (tick_index % pool.tick_spacing != 0), OrderPhaseSaturated.

IncreaseLimitOrder

Mevcut açık emre ekleyin. Yalnızca emrin owner öğesi tarafından çağrılabilir. Argümanlar
Hesaplar — 8 tane, yalnızca giriş tarafı. Nonce hesabını, üç çıkış tarafı hesabının tümünü ve system_program’ı düşürür. Ön koşullar
  • limit_order.owner == signer.
  • Emir hala aynı kohortda (tick.order_phase == limit_order.order_phase). Kohort zaten doldurulmaya başlamışsa, emir kısmen kapatılmıştır — çağıran önce DecreaseLimitOrder veya SettleLimitOrder çağırmalıdır.
Etki
  • amount öğesini sahibi ATA’sından input_vault öğesine aktarır.
  • limit_order.total_amount += amount; tick.orders_amount += amount.

DecreaseLimitOrder

Açık emri azaltın veya tamamen iptal edin. Doldurulmayan kalanı sahibine geri ödeyin, artı geçmiş kısmi doldurmalar tarafından zaten kapatılan çıktı. Argümanlar
Hesaplar — hem giriş hem de çıkış token tarafları: Etki
  • Emrin doldurulmuş tutarını açılıştan bu yana kohortun unfilled_ratio_x64 öğesinden yeniden hesaplar.
  • Doldurulmuş çıktıyı output_token_account öğesine gönderir.
  • amount doldurulmayan girişi input_token_account öğesine geri gönderir.
  • limit_order öğesini buna göre günceller. Yeni doldurulmayan kalan sıfırsa, program hesabı kapatır ve kirayı owner öğesine geri verir.

SettleLimitOrder

Emrin doldurulmayan kalanını değiştirmeden doldurulmuş çıktı tokenlerini sahibine gönderin. auto_withdraw görevlileri uzun süreli kısmi doldurmalar damla ödemek istediğinde kullanışlıdır. Çağıran — emrin owner öğesi veya programın limit_order_admin öğesi (otomatik görevli döngüsü çalıştıran çevrimdışı operasyonel sıcak cüzdan). Görevlinin başka yetkilisi yoktur — kullanıcı fonlarını doldurulmuş çıktıyı emrin owner ATA’sına göndermek dışında hareket ettiremez. Hesaplar Etki
  • (limit_order.unfilled_ratio_x64, tick.unfilled_ratio_x64) kullanarak borçlu olunan kümülatif çıktıyı hesaplar.
  • Deltayı output_token_account öğesine aktarır.
  • limit_order.settled_output öğesini günceller.
  • Emri kapatmaz; kalan giriş karşısında hala açıktır.

CloseLimitOrder

Tamamen tüketilmiş emir hesabını kapatın. Kira kim imzalarsa imzasın her zaman limit_order.owner öğesine döner. Çağıranowner veya limit_order_admin. Ön koşullar
  • Emrin sıfır doldurulmayan kalanı var (amount == total_amount doldurulmuş ve kapatılmış veya sahibi daha önce emri sıfıra azaltmış ve kapatmayı unutmuş).
Etki
  • limit_order öğesini kapatır; kira limit_order.owner öğesine gönderilir.

CreateDynamicFeeConfig (yönetici)

u16 dizini altında yeniden kullanılabilir parametre seti oluşturun. Argümanlar
Hesaplar Yaygın hatalarInvalidDynamicFeeConfigParams decay_period <= filter_period ise veya herhangi bir 0 değerli alan sınırların dışında ise.

UpdateDynamicFeeConfig (yönetici)

Mevcut DynamicFeeConfig öğesini değiştirin. Oluşturma zamanında yapılandırmayı zaten anlık görüntü alan havuzlar geriye dönük olarak güncellenmez; yalnızca bu yapılandırmaya başvuran yeni oluşturulan havuzlar yeni değerleri alacaktır. ArgümanlarCreateDynamicFeeConfig ile aynı beş kalibrasyon alanı (filter_period, decay_period, reduction_factor, dynamic_fee_control, max_volatility_accumulator); index oluşturma zamanında sabitlenir ve burada yeniden geçilmez.

CollectProtocolFee / CollectFundFee

Havuzun kasalarından tahakkuk eden protokol/fon ücretlerini bir alıcıya süpürür ve ilgili PoolState.protocol_fees_* / fund_fees_* alanlarını sıfırlar. Bu, CPMM’nin düzeni değildir — CLMM’de authority hesabı yoktur ve alıcı alanları recipient_token_{0,1}_account değil, recipient_token_account_{0,1} olarak adlandırılır. Argümanlaramount_0_requested: u64, amount_1_requested: u64.

InitializeReward

Havuza yeni bir ödül akışı ekleyin. Aynı anda en fazla 3 akış etkin olabilir. Argümanlar — tek bir param yapısı, yani param: InitializeRewardParam:
Kablo kodlaması üç alanın arka arkaya gelmesi biçimindedir; dolayısıyla elle oluşturulmuş bir talimat etkilenmez — ancak IDL tabanlı bir istemci üç konumsal argüman yerine tek bir param nesnesi geçirmelidir. Hesaplar Ön koşullar
  • Havuzda şu anda 3’ten az akış etkin.
  • Fon sağlayıcı bu talimatın bir parçası olarak total_emission = emissions_per_second × (end_time − open_time) değerinde ödül tokenini kasaya yatırır.
  • operation_state başına beyaz listeye alınan ödül mint’i.

SetRewardParams

Mevcut bir ödül akışını uzatın, doldurabilir veya emisyon oranını değiştirin. Tipik olarak havuz oluşturucu veya Raydium multisig tarafından çağrılır. Kısıtlamalar zincir üzerinde yaşar: genellikle end_time öğesini uzatabilir veya emisyonları artırabilir, geriye dönük olarak küçültemezsiniz. operation_state öğesinin sahibi listesini kontrol edin.

UpdateRewardInfos

Saf muhasebe — reward_growth_global_x64 öğesini geçerli zamana kapatır; emissions_per_second × Δt / liquidity öğesini çarparak. Her likidite dokunuşu talimatı tarafından dahili olarak çağrılır. Harici aktörlerin (UI’ler, kranklar) bunu tetiklemek istediği için bağımsız talimat olarak açığa çıkarılır.

Collecting rewards

Bağımsız bir ödül toplama talimatı yoktur. Program hiçbir CollectReward giriş noktası sunmaz ve yayınlanan IDL’de de böyle bir şey bulunmaz.
Bir pozisyona borçlu olunan ödüller DecreaseLiquidity / DecreaseLiquidityV2 tarafından ödenir. Pozisyonu değiştirmeden toplamak için bunu liquidity = 0, amount_0_min = 0, amount_1_min = 0 ile çağırın. Ödül kasaları ve alıcı hesapları, etkin ödül başına üçerli gruplar hâlinde remaining_accounts içine, reward_token_vault(W), recipient_token_account(W), reward_vault_mint sırasıyla girer. CollectRemainingRewards farklı bir şeydir: bir akışın end_time değerinden sonra ödül fon sağlayıcısının, hiçbir pozisyona ayrılmamış tokenları süpürmesine izin verir.

Durum değişikliği matrisi

Sonraki adım

Kaynaklar: