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 demolar, Solana mainnet-beta üzerinde
@raydium-io/raydium-sdk-v2@0.2.42-alpha ile 2026-04 tarihinde doğrulanmış şekilde çalışır. Program ID’leri SDK aracılığıyla reference/program-addresses sayfasından alınmaktadır.Kurulum
raydium-sdk-V2-demo/src/clmm dizinindeki bir dosyayla birebir örtüşmektedir; GitHub bağlantısı her bölümün yanında yer almaktadır. Başlangıç yapılandırması, demo deposunun config.ts.template dosyasını (kaynak) takip eder — basit olmayan entegrasyonlar için önerilen ayar disableFeatureCheck: true şeklindedir:
CLMM pool oluşturma
Kaynak:src/clmm/createPool.ts
mint1/mint2çiftini türetme öncesinde bayt sırasına göre sıralar.sqrt_price_x64 = floor(sqrt(initialPrice × 10^(dB−dA)) × 2^64)değerini hesaplar.observationvetick_array_bitmap_extensionhesaplarını oluşturur.ammConfigtarafından tanımlanan pool oluşturma ücretini öder.
Seçilen aralıkta pozisyon açma
Kaynak:src/clmm/createPosition.ts
InitTickArray talimatlarını işleme ekler.
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
decreaseLiquidity fonksiyonunu liquidity = new BN(0) ile çağırın. Talimatın yan etkisi olarak tokens_fees_owed_{0,1} hesaplanır ve bu değerler hesaptan çıkarılır.
Likidite ve ücretleri sıfırladıktan sonra pozisyonu tamamen kapatmak için son decreaseLiquidity çağrısında closePosition: true parametresini geçirin. SDK, ClosePosition talimatını ekler ve NFT’yi yakar.
Ödül toplama
Kaynak:src/clmm/harvestAllRewards.ts
harvestAllRewards, iletilen her pool’daki tüm pozisyonları tarar, CollectReward (ve varsa UpdateRewardInfos) talimatlarını toplu hâle getirir, gerekirse bunları birden fazla işleme böler.
Swap
Kaynak:src/clmm/swap.ts
computeAmountOutFormat, zincir üstü programla aynı mantığı kullanarak tick haritasını zincir dışında işler ve şunları döndürür:
- beklenen çıkış miktarı,
- slippage sonrası minimum çıkış miktarı,
- gerçek swap’ın dokunacağı tick dizisi hesaplarının listesi (
remainingAccounts).
remainingAccounts değerini her zaman iletin: çok az hesap gönderirseniz swap, yürütme sırasında TickArrayNotFound hatasıyla geri döner; güncel olmayan hesaplar gönderirseniz hesaplama gücü boşa harcanır.
Özelleştirilebilir CLMM pool oluşturma
createCustomizablePool, pool oluşturma sırasında dinamik ücret ve tek taraflı ücret seçeneklerini açığa çıkaran yeni giriş noktasıdır. createPool ile aynı yapıyı alır, üç ek alan barındırır:
createPool, varsayılan ücret, limit order yok ve dinamik ücret yok senaryosu için çalışmaya devam eder. Üç yeni seçenekten herhangi birine ihtiyaç duyduğunuzda createCustomizablePool kullanın. Zincir üstü hesap listesi için products/clmm/instructions sayfasına bakın.
Limit emirleri
Bir limit emri, kullanıcının girişini tek bir tick’te park eder ve bir swap o tick’i geçtiğinde FIFO sırasıyla doldurulur. Çıktılar, emir kapandığında sahibinin ATA’sına aktarılır; doldurulan emrin sahibinin çevrimiçi olması gerekmez.Limit emri açma
LimitOrderState PDA’sını (pool, owner, tick, nonce) kombinasyonundan türetir, (pool, owner) başına LimitOrderNonce değerini artırır ve emri söz konusu tick’teki FIFO kuyruğuna ekler.
Açık bir emrin miktarını artırma / azaltma
decreaseLimitOrder yalnızca emrin doldurulmamış kısmından miktar çıkarabilir; doldurulmuş kısım kapanışa kadar kilitli kalır. Emir tamamen dolmuşsa her iki talimat da InvalidOrderPhase hatasıyla geri döner.
Dolmuş bir emri kapatma
settleLimitOrder, emrin unfilled_ratio_x64 değerini kohort takipçisiyle karşılaştırır, doldurulan çıktıyı hesaplar ve sahibinin ATA’sına aktarır. Sahibi bu işlemi kendisi yapabileceği gibi zincir dışı bir operasyonel bekçi olan limit_order_admin de sahibi adına çağırabilir; çıktı her durumda sahibine gider.
Tamamen kapanmış emirleri kira geri kazanımı için kapatmak amacıyla closeLimitOrder (tekli) veya closeAllLimitOrder (toplu) kullanın. Aynı anda birden fazla emri kapatmak için settleAllLimitOrder, v0 işlemine sığabilecek kadar çok SettleLimitOrder çağrısını tek seferde paketler.
Bir cüzdanın açık emirlerini listeleme (zincir dışı)
totalAmount / filledAmount / pendingSettle alanları aşamaları birbirinden ayırır). Kapatılmış emir geçmişi için /limit-order/history/order/list-by-user?wallet=… (cüzdan bazında, nextPageId ile sayfalanmış) adresini kullanın; belirli bir emrin tam olay kaydı için ise /limit-order/history/event/list-by-pda?pda=… adresine başvurun.
Rust CPI şablonu
SwapV2 için kalan hesapların sırası:
Sık yapılan hatalar
- Tick uç noktalarının aralık dışı olması →
InvalidTickIndex. Her zamanTickUtils.getPriceAndTickaracılığıyla hizalayın. SwapV2’ye yeterli tick dizisi sağlanmaması →TickArrayNotFound. Tam listeyi almak içincomputeAmountOutFormatkullanın.- Bitmap uzantısı olmadan tam aralıklı pozisyon → uzantı PDA’sının yazılabilir olması gerekir; SDK bunu otomatik olarak yönetir.
sqrt_price_x64ilepricekarıştırılması → bu noktada 2 katlık bir karışıklık oldukça sorunlu sonuçlar doğurur. Şüphe duyduğunuzda SDK’nın bunu insan tarafından okunabilir bir fiyattan hesaplamasına izin verin.- Ödülleri çok sık toplamak → her toplama işlemi bir işlem maliyeti doğurur. Birden fazla pozisyon için
harvestAllRewardsile toplu yapın. - Kira hâlâ mint’e borçluyken NFT’yi yakmak →
ClosePositionaynı zamanda NFT mint ve ATA’yı da kapatır; bunları ayrı ayrı kapatmaya çalışırsanız program geri döner. - Aralık dışı bir tick’te limit emri açmak →
InvalidTickIndex. Her zamanTickUtils.getPriceAndTickile nicelendirin. - Tamamen dolmuş bir emirde
decreaseLimitOrderçağırmak →InvalidOrderPhase. Bunun yerinesettleLimitOrderve ardındancloseLimitOrderkullanın. enableDynamicFee: trueiletirkendynamicFeeConfigIdunutmak →CreateCustomizablePoolişlemiInvalidDynamicFeeConfigParamshatasıyla geri döner. Ya dinamik ücreti kapatın ya da/main/clmm-dynamic-configadresinden bir yapılandırma seçin.
Sonraki adımlar
sdk-api/typescript-sdk— eksiksiz SDK yüzeyi.sdk-api/rest-api— fiyat teklifi ve pool meta verisi uç noktaları.user-flows/create-clmm-pool— kod içermeyen adım adım kılavuz.integration-guides/aggregator— CLMM’yi bir yönlendirme yolunun parçası olarak kullanma.

