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 →
Sürüm notu. Tüm örnekler @raydium-io/raydium-sdk-v2@0.2.42-alpha sürümünü Solana mainnet-beta’ya karşı hedefler, 2026-04’te doğrulanmıştır. Program ID’leri SDK aracılığıyla reference/program-addresses kaynağından gelir.

Kurulum

Bu sayfadaki her örnek raydium-sdk-V2-demo/src/clmm klasöründeki bir dosyayı yansıtır; GitHub bağlantısı her bölümün yanında yer alır. Başlatma, demo repo’sunun config.ts.template dosyasını (kaynak) takip eder — disableFeatureCheck: true herhangi bir önemsiz entegrasyon için önerilen ayardır:

CLMM havuzu oluşturma

Kaynak: src/clmm/createPool.ts
SDK şunları yapar:
  • Türetme öncesinde mint1/mint2 öğelerini bayt sırasına göre sıralar.
  • sqrt_price_x64 = floor(sqrt(initialPrice × 10^(dB−dA)) × 2^64) hesaplar.
  • observation ve tick_array_bitmap_extension hesaplarını oluşturur.
  • ammConfig tarafından tanımlanan havuz oluşturma ücretini öder.

Seçilen aralıkta pozisyon açma

Kaynak: src/clmm/createPosition.ts
SDK otomatik olarak aralığın hangi tick dizilerini etkilediğini hesaplar ve başlatılmamış olanlar için InitTickArray talimatlarını paketler.

Mevcut bir pozisyonda likidite artırma

Kaynak: src/clmm/increaseLiquidity.ts

Likidite azaltma (ve aynı anda ücret toplama)

Kaynak: src/clmm/decreaseLiquidity.ts ve src/clmm/closePosition.ts
Yalnızca ücret toplamak için, decreaseLiquidity öğesini liquidity = new BN(0) ile çağırın. Talimatın yan etkisi tokens_fees_owed_{0,1} öğesini kapatmak ve bunları aktarmaktır. Likiditeyi ve ücretleri sıfırladıktan sonra pozisyonu tamamen kapatmak için, son decreaseLiquidity çağrısında closePosition: true geçirin. SDK ClosePosition ekler ve NFT’yi yakar.
Kısıtlı yayıncı pozisyonları uyumlu bir kapatma oluşturucusu gerektirir. Bu pozisyonların dondurulmuş bir NFT token hesabı vardır. ClosePosition, CLMM’nin hesabı yakmadan önce çözmesi için havuz ID’sini ilk kalan hesap olarak eklemelidir. Program kaynağı dalı SDK değişikliği içermez. Kısıtlı yayıncı pozisyon oluşturmayı etkinleştirmeden önce SDK sürümünüzün dondurulmuş kapatma yolunu açıkça desteklediğini doğrulayın.
Doğrudan bir Anchor istemcisi için, bildirilen hesapları değişmeden tutun ve havuzu ekleyin:
Her kapatmada poolId geçirebilirsiniz. CLMM bunu yalnızca positionNftAccount dondurulduğunda okur, bu da bir istemci yolunu eski ve yeni pozisyonlarla uyumlu tutar.

Ödül(leri) toplama

Kaynak: src/clmm/harvestAllRewards.ts
harvestAllRewards, geçirilen her havuzdaki her pozisyonu yürür, CollectReward (ve herhangi bir UpdateRewardInfos) talimatlarını toplu hale getirir ve gerekirse işlemler arasında böler.

Swap

Kaynak: src/clmm/swap.ts
computeAmountOutFormat, zincir dışında tick haritasını zincir üstü programla aynı mantığı kullanarak yürür ve şunları döndürür:
  • beklenen çıkış miktarı,
  • kayma sonrası minimum çıkış miktarı,
  • gerçek swap’ın dokunacağı tick dizisi hesaplarının listesi (remainingAccounts).
Simülasyon tarafından döndürülen remainingAccounts öğesini her zaman geçirin: çok az geçirirseniz, swap TickArrayNotFound ile yürüyüş ortasında geri döner; eski olanları geçirirseniz, boşa harcanan işlem.

Özelleştirilebilir CLMM havuzu oluşturma

createCustomizablePool, havuz oluşturma zamanında dinamik ücret ve tek taraflı ücret geçişlerini ortaya koyan yeni giriş noktasıdır. createPool ile aynı şekli alır ve üç ek öğe:
createPool, varsayılan ücret, limit emri yok, dinamik ücret yok yolu için çalışmaya devam eder. Üç yeni düğmeden herhangi birine ihtiyacınız olduğunda createCustomizablePool kullanın. Zincir üstü hesap listesi için products/clmm/instructions bölümüne bakın.

Limit emirleri

Bir limit emri, kullanıcı girdisini tek bir tick’te park eder ve bir swap bu tick’i geçtiğinde FIFO’da doldurulur. Çıktılar, sahibinin ATA’sına kapatma zamanında itilir; sahibinin doldurulması için çevrimiçi olması gerekmez.

Limit emri açma

SDK, LimitOrderState PDA’sını (pool, owner, tick, nonce) öğesinden türetir, başına LimitOrderNonce öğesini çıkarır ve emri o tick’teki FIFO kohortuna ekler.

Açık bir emri artırma / azaltma

decreaseLimitOrder, emrin yalnızca doldurulmamış kısmından kaldırabilir; doldurulmuş kısım kapatılana kadar kilitlenir. Her iki talimat da emir zaten tamamen doldurulmuşsa InvalidOrderPhase ile geri döner.

Doldurulmuş bir emri kapatma

settleLimitOrder, emrin unfilled_ratio_x64 öğesini kohort izleyicisine karşı okur, doldurulmuş çıktıyı hesaplar ve sahibinin ATA’sına aktarır. Sahibi bunu kendileri çağırabilir; limit_order_admin (çevrimdışı operasyonel bekçi) de sahibinin adına çağırabilir — çıktı yine de sahibine gider. Tamamen kapatılan emirleri kapat kirasını kurtarmak için closeLimitOrder (tek) veya closeAllLimitOrder (toplu) kullanın. Aynı anda birçoğunu kapatmak için settleAllLimitOrder, v0 tx’e sığan kadar SettleLimitOrder çağrısını paketler.

Bir cüzdanın park edilmiş emirlerini listeleme (çevrimdışı)

Etkin emirler uç noktası, doldurulmamış ve kısmen doldurulmuş emirleri tek bir yüklemede döndürür (totalAmount / filledAmount / pendingSettle aşamaları ayırt eder). Kapalı emir geçmişi için /limit-order/history/order/list-by-user?wallet=… kullanın (cüzdan başına, nextPageId ile sayfalandırılmış); belirli bir emrin tam olay günlüğü için /limit-order/history/event/list-by-pda?pda=… kullanın.

Rust CPI iskelet

SwapV2 için kalan hesap sırası:
Swap hiçbir zaman uzantıya ihtiyaç duymazsa, atla; aksi takdirde ilk kalan hesaptır.

Yaygın tuzaklar

  • Aralık dışı tick uç noktalarıInvalidTickIndex. Her zaman TickUtils.getPriceAndTick aracılığıyla yasla.
  • SwapV2 içinde sağlanan yeterli tick dizisi yokTickArrayNotFound. Tam listeyi almak için computeAmountOutFormat kullanın.
  • Bitmap uzantısı olmayan tam aralık pozisyonu → uzantı PDA yazılabilir olmalıdır; SDK bunu otomatik olarak işler.
  • sqrt_price_x64 öğesini price ile karıştırmak → burada 2 faktörlü bir karışıklık özellikle acı vericidir. Şüphe duyduğunuzda, SDK’nın bunu insan tarafından okunabilir bir fiyattan hesaplamasına izin verin.
  • Ödülleri çok hevesle toplama → her toplama bir işlem maliyeti. harvestAllRewards aracılığıyla birçok pozisyon arasında toplu hale getirin.
  • NFT hesaplarını kendiniz kapatmaClosePosition NFT’yi yakar ve ATA’sını kapatır. Ayrıca Token-2022 NFT mint’ini kapatır; klasik SPL Token mint’i sıfır arzda kalır çünkü bu program mint’leri kapatamaz. Desteklenen hesapları ayrı ayrı kapatmayın veya talimat geri döner.
  • Limit emrini boşluk dışı tick’te açmaInvalidTickIndex. Her zaman TickUtils.getPriceAndTick aracılığıyla nicelleştirin.
  • Tamamen doldurulmuş bir emride decreaseLimitOrder çağırmaInvalidOrderPhase. Bunun yerine settleLimitOrder ardından closeLimitOrder kullanın.
  • enableDynamicFee: true geçerken dynamicFeeConfigId unutmaCreateCustomizablePool geri dönüşü InvalidDynamicFeeConfigParams olur. Dinamik ücreti kapatın veya /main/clmm-dynamic-config öğesinden bir yapılandırma seçin.

Sonraki adımlar

Kaynaklar: