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 TypeScript örnekleri
@raydium-io/raydium-sdk-v2@0.2.64-alpha hedeflemektedir; son olarak 0.2.42-alpha (2026-04) karşısında çalıştırılmış ve çağrı imzaları 2026-09-09 tarihinde 0.2.64-alpha kaynağına karşı Solana mainnet-beta üzerinde yeniden kontrol edilmiştir. Sonundaki Rust CPI iskeleti master üzerinde raydium-clmm hedeflemektedir ve Anchor =0.32.1 sabitlemektedir — CPMM sayfasının kullandığı 1.0.2 değildir; ikisi bir crate içinde yaşayamaz. Program ID’leri reference/program-addresses üzerinden SDK aracılığıyla gelir.Kurulum
raydium-sdk-V2-demo/src/clmm içindeki bir dosyayı yansıtır; GitHub bağlantısı her bölümün yanında yer alır. Bootstrap, demo repo’nun config.ts.template (kaynak) izler — disableFeatureCheck: true herhangi bir önemsiz entegrasyon için önerilen ayardır:
CLMM havuzu oluşturun
Kaynak:src/clmm/createPool.ts
- 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.observationvetick_array_bitmap_extensionhesaplarını oluşturur.ammConfigtarafından tanımlanan havuz oluşturma ücretini öder.
Seçilen aralıkta pozisyon açın
Kaynak:src/clmm/createPosition.ts
OpenPosition* eksik bir tick dizisini kendisi ayırır, ödeyenin masrafına.
Mevcut bir pozisyonda likiditeyi artırın
Kaynak:src/clmm/increaseLiquidity.ts
Likiditeyi azaltın (ve aynı anda ücretleri toplayın)
Kaynak:src/clmm/decreaseLiquidity.ts ve src/clmm/closePosition.ts
decreaseLiquidity öğesini liquidity = new BN(0) ile çağırın. Talimatın yan etkisi token_fees_owed_{0,1} ve reward_amount_owed öğelerini kapatmak ve bunları aktarmaktır — bu, ikisini de toplamak için tek yoldur.
Likiditeyi ve ücretleri sıfırladıktan sonra pozisyonu tamamen kapatmak için, son decreaseLiquidity çağrısında ownerInfo: { closePosition: true } geçirin. SDK ClosePosition ekler ve NFT’yi yakar.
Doğrudan bir Anchor istemcisi için, bildirilen hesapları değişmeden tutun ve havuzu ekleyin:
poolId geçirebilirsiniz. CLMM bunu yalnızca positionNftAccount dondurulduğunda okur, bu da bir istemci yolunu eski ve yeni pozisyonlarla uyumlu tutar.
Ödülü (ödülleri) toplayın
Kaynak:src/clmm/harvestAllRewards.ts
harvestAllRewards, iletilen her havuzdaki her pozisyonu yürür, ücretleri ve ödülleri kapatmak için sıfır likidite DecreaseLiquidity çağrılarını (artı herhangi bir UpdateRewardInfos) toplu hale getirir ve gerekirse işlemler arasında böler.
Swap
Kaynak:src/clmm/swap.ts
amountCalculated) artı swap’ın dokunacağı tam hesap listesini (accounts) döndürür.
Her zaman simülasyonun döndürdüğü remainingAccounts öğesini geçirin: çok az ve swap NotEnoughTickArrayAccount ile yürüyüş ortasında geri döner; eski olanlar sadece işlem harcamasını boşa harcar.
PoolUtils.computeAmountOutFormat hala var, ancak bir ComputeClmmPoolInfo (API havuzu nesnesi değil, getPoolInfoFromRpc öğesinden computePoolInfo) artı iki daha gerekli argüman — tickarrayBitmapExtension ve blockTimestamp — gerektirir ve raydium.clmm.fetchTickArrays yöntemi yoktur (fetchTickArrays serbest bir işlevdir; modül düzeyindeki yardımcılar PoolUtils.fetchMultiplePoolTickArrays ve getPoolInfoFromRpc tarafından döndürülen tickData / tickArrays öğeleridir).Özelleştirilebilir CLMM havuzu oluşturun
createCustomizablePool, havuz oluşturma zamanında dinamik ücret ve tek taraflı ücret geçişlerini ortaya çıkaran giriş noktasıdır. createPool şeklini artı iki ek alır:
createPool varsayılan ücret, dinamik ücret yok yolu için çalışmaya devam eder. Her iki düğmeye de 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 olarak doldurulur. Çıktılar, sahibinin ATA’sına kapatma zamanında itilir; sahibinin doldurulması için çevrimiçi olması gerekmez.Limit emri açın
LimitOrderState PDA’sını (owner, nonce PDA, order nonce) öğesinden türetir, cüzdan başına LimitOrderNonce öğesini çıkarır ve emri o tick’teki FIFO kohortuna ekler.
Açık bir emri artırın / azaltın
decreaseLimitOrder yalnızca emrin doldurulmamış kısmından kaldırabilir; doldurulmuş kısım kapatılana kadar kilitlenir. Her iki talimat da emir zaten tamamen doldurulduysa InvalidOrderPhase ile geri döner.
Doldurulmuş bir emri kapatın
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 kira kurtarmak için kapatmak için closeLimitOrder (tek) veya closeAllLimitOrder (toplu) kullanın. Aynı anda birçoğunu kapatmak için, settleAllLimitOrder kadar çok SettleLimitOrder çağrısını bir v0 tx’e sığdırır.
Bir cüzdanın park edilmiş emirlerini listeleyin (çevrimdışı)
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 iskeleti
SwapV2 için kalan hesap sırası:
Yaygın tuzaklar
- Aralık dışı tick uç noktaları →
TickAndSpacingNotMatch. Her zamanTickUtil.getPriceAndTick(tekilTickUtil) aracılığıyla yapıştırın. SwapV2içinde sağlanan yeterli tick dizisi yok →NotEnoughTickArrayAccount. ListeyiswapInternal(...).accountsöğesinden alın.- Bitmap uzantısı olmayan tam aralık pozisyonu → uzantı PDA yazılabilir olmalı; SDK bunu otomatik olarak işler.
sqrt_price_x64öğesinipriceile 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 hevesli toplamak → her toplama sıfır likidite
DecreaseLiquidityve bir işlem maliyeti.harvestAllRewardsaracılığıyla birçok pozisyon arasında toplu hale getirin veexecuteöğesinin{ sequentially: true }gerektirdiğini unutmayın. - NFT hesaplarını kendiniz kapatmak →
ClosePositionNFT’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ı olarak kapatmayın veya talimat geri döner. - Limit emrini boşluksuz olmayan tick’te açmak →
TickAndSpacingNotMatch. Her zaman dışa aktarılangetOrderTickyardımcısı aracılığıyla nicelleyin. - Tamamen doldurulmuş bir emride
decreaseLimitOrderçağırmak →InvalidOrderPhase. Bunun yerinesettleLimitOrdersonracloseLimitOrderkullanın. enableDynamicFeebayrağı beklentisi → yok.dynamicFeeConfigöğesini atlayarak, sessizce ve hatasız statik ücretli bir havuz oluşturursunuz. Dinamik ücretler istiyorsanız,/main/clmm-dynamic-configöğesinden seçilen yapılandırma hesabınınPublicKeyöğesini geçirin.
Sonraki adımlar
sdk-api/typescript-sdk— tam SDK yüzeyi.sdk-api/rest-api— alıntı ve havuz meta veri uç noktaları.user-flows/create-clmm-pool— kod olmayan kılavuz.integration-guides/aggregator— CLMM’yi bir yolun parçası olarak yönlendirme.

