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) sürümüne karşı ç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 iskeletinin hedefi raydium-clmm üzerinde chore/upgrade-anchor dalı, Anchor 1.0.2, CPMM sayfasıyla aynı pin olup, ikisi bir crate içinde yaşayabilir. master hâlâ 0.32.1 pinlemektedir. 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) dosyasını takip eder — disableFeatureCheck: true herhangi bir önemsiz entegrasyon için önerilen ayardır:
CLMM havuzu oluşturma
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çma
Kaynak:src/clmm/createPosition.ts
OpenPosition* eksik bir tick dizisini kendisi ayırır, ödeyicinin masrafına.
Mevcut bir pozisyonda likidite artırma
Kaynak:src/clmm/increaseLiquidity.ts
Likiditeyi azaltma (ve aynı anda ücretleri toplama)
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, her ikisini de toplama tek yoludur.
Likiditeyi sıfırladıktan ve ücretleri topladı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(leri) toplama
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 bunları 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 hâlâ var, ancak bir ComputeClmmPoolInfo (getPoolInfoFromRpc öğesinden computePoolInfo, API havuzu nesnesi değil) 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şturma
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çma
LimitOrderState PDA’sını (owner, nonce PDA, order nonce) öğesinden türetir, cüzdan başına LimitOrderNonce öğesini arttırır ve emri o tick’teki FIFO kohortuna ekler.
Açık bir emri artırma / azaltma
decreaseLimitOrder yalnızca emrin doldurulmamış kısmından kaldırabilir; doldurulmuş kısım kapatılana kadar kilitlidir. Her iki talimat da emir zaten tamamen doldurulduysa 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 tutucu) da sahibinin adına çağırabilir — çıktı yine de sahibine gider.
Tamamen kapatılmış emirleri kira kurtarmak için kapatmak için closeLimitOrder (tek) veya closeAllLimitOrder (toplu) kullanın. Aynı anda birçoğunu kapatmak için settleAllLimitOrder, bir v0 tx’e sığan kadar SettleLimitOrder çağrısını paketler.
Bir cüzdanın park edilmiş emirlerini listele (ç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 iskeletı
SwapV2 için kalan hesap sırası:
Yaygın tuzaklar
- Aralık dışı tick uç noktaları →
TickAndSpacingNotMatch. Her zamanTickUtil.getPriceAndTick(tekilTickUtil) aracılığıyla yasla. 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 bir faktör-2 karışıklığı ö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 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 kapatma →
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 emri açma boşluk dışı tick’te →
TickAndSpacingNotMatch. Her zaman dışa aktarılangetOrderTickyardımcısı aracılığıyla nicelleyin. - Tamamen doldurulmuş bir emride
decreaseLimitOrderçağırma →InvalidOrderPhase. Bunun yerinesettleLimitOrdersonracloseLimitOrderkullanın. enableDynamicFeebayrağı bekleme → 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.

