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 →
Bunun yaptığı şey. Seçtiğiniz ücret katmanında yeni bir CLMM havuzu oluşturur, ardından ilk yoğunlaştırılmış pozisyonu açar. Dört dosya (config.ts, createPool.ts, createPosition.ts ve utils.ts) arasında iki işlem — npx tsx ile çalıştırılır. Kod, raydium-sdk-V2-demo/src/clmm içindeki resmi demolardan alınmış ve bağımsız olarak çalışacak şekilde uyarlanmıştır.

Kurulum

Hızlı başlangıç ön koşullarını okuduğunuzdan ve RPC_URL, KEYPAIR ile bağımlılıkların yüklü olduğundan emin olun. Hızlı başlangıçtaki bağımlılıklara ek olarak şunlara ihtiyacınız vardır:
  • decimal.jscreatePool.ts ve createPosition.ts içinde fiyat ve tick matematiği.
  • bs58KEYPAIR_BS58 kullanırsanız config.ts içinde base58 kodlu keypair’i çözer (JSON keyfile yerine).
  • tsx — aşağıdaki .ts dosyalarını npx tsx aracılığıyla doğrudan çalıştırır; swap ve CPMM scriptlerinden farklı olarak, bu dosya node ile çalıştırılan düz bir .mjs dosyası değildir.
CLMM havuzu oluşturmanın bir kerelik ücreti ve ilk pozisyon için tick-array kirasıdır. Ayrıca her iki seed mint’e de cüzdanınızda sahip olmanız gerekir — fiyat seçilen aralığın içinde olduğunda bir pozisyon açmak her iki tarafta da likidite gerektirir. Bunu devnet’te çalıştırmak. config.ts içinde cluster değerini "devnet" olarak değiştirmek tek başına yeterli değildir. createPool.ts, sabit bir mainnet sabiti olan programId: CLMM_PROGRAM_ID iletir ve bu cluster değerini takip etmez — bunu hemen üstündeki yorum satırı olan DEVNET_PROGRAM_ID.CLMM_PROGRAM_ID ile değiştirin. createPosition.ts ayrıca mainnet poolId (RAY-USDC havuzu) sabit kodlar; bunu Adım 2’de oluşturduğunuz devnet havuzunun kimliğiyle değiştirin.

Adım 1 — config.ts

config.ts olarak kaydedin. Bu, demo repo’nun src/config.ts.template ile aynı şekildedir — disableFeatureCheck true olarak zorlanır (SDK’nın başlangıç özellik algılama çağrısında engellenmemesi için herhangi bir önemsiz olmayan entegrasyon için önerilir):
config.ts

Adım 2 — createPool.ts

config.ts ile birlikte kaydedin. Kaynak: src/clmm/createPool.ts.
createPool.ts

Adım 3 — createPosition.ts

Kaynak: src/clmm/createPosition.ts.
createPosition.ts

Adım 4 — utils.ts

Kaynak: src/clmm/utils.ts.
utils.ts

Çalıştırın

Ne oldu

İşlem 1 — raydium.clmm.createPool başlatıldı:
  • havuz durumu (mint1, mint2, ammConfig) için kanonik PDA’da,
  • token_0_vault ve token_1_vault (mint bayt sırasına göre sıralanmış),
  • observation halka arabelleği,
  • satır içi tick-array bitmap,
ve ilk sqrt_price_x64 değerini initialPrice değerinizden ayarladı. İşlem 2 — raydium.clmm.openPositionFromBase yoğunlaştırılmış bir pozisyon açtı:
  • cüzdanınıza bir pozisyon NFT’si bastı (NFT pozisyondur; onu aktarmak pozisyonu aktarır),
  • alt ve üst sınırlarda tick dizileri tahsis etti (bu aralıklardaki ilk pozisyon için bir kerelik kira; tick dizileri program tarafından hiçbir zaman kapatılmaz, bu nedenle aynı dizilerdeki sonraki pozisyonlar ek kira ödemez),
  • inputAmount kadarını mint1 ve eşleşen çift miktarını mint2 (tarafından hesaplanan PoolUtils.getLiquidityAmountOutFromAmountIn) yatırdı,
  • pozisyonu aralık genişliğiyle orantılı likidite ile kredilendirdi.
Aralık ne kadar dar olursa, TVL başına sermaye verimliliği o kadar yüksek olur — ve fiyat aralığın dışına çıktığında kalıcı olmayan kayıp o kadar acı verici olur. Yukarıda kullanılan aralık ([0.000001, 100000]) etkili olarak tam aralıktır; ücretleri mevcut spot’a yakın yoğunlaştırmak için daraltın.

Ücret katmanı seçme

clmmConfigs[0] en düşük ücret katmanıdır. Tam set GET https://api-v3.raydium.io/main/clmm-config adresinde yayınlanır: Tam karar matrisi için user-flows/choosing-a-pool-type bölümüne bakın.

Yaygın hatalar

  • Pool already exists for this config — Bu (mint1, mint2, ammConfig) üçlüsü için zaten bir CLMM havuzu vardır. Mevcut havuz kimliğini arayın ve Adım 2’yi atlayın.
  • Insufficient funds for amount B — Cüzdanınızda istenen mintA miktarı vardır ancak eşleşen mintB yoktur. Fiyat aralığın içinde olduğunda bir pozisyon açmak her iki tarafta da likidite gerektirir.
  • Tick out of rangelowerPrice veya upperPrice değeriniz temsil edilebilir fiyat aralığının dışında kalır. Mevcut fiyata göre daha makul bir aralık kullanın.
  • Eski fiyat — API’den alınan bir teklif 5–60 saniye eski olabilir. executePosition slippage’da başarısız olursa, imzalamadan hemen önce canlı fiyatı yeniden getirmek için createPosition.ts içindeki getRpcClmmPoolInfo bloğunun açıklamasını kaldırın.

Uyarılar

  • Pozisyon NFT’si tek tutamaçtır. NFT’yi kaybederseniz veya aktarırsanız, pozisyona erişimi kaybedersiniz. Bunu bir anahtar gibi ele alın.
  • Aralık dışı pozisyonlar ücret kazanmaz. Fiyat [lowerPrice, upperPrice] dışına çıkarsa, pozisyonunuz tamamen bir varlıkta park edilir ve yeniden dengeleyene kadar hiçbir şey kazanmaz.
  • Tick array kirasıdır tek yönlüdür. İlk pozisyon hiç başlatılmamış bir tick dizisine dokunduğunda kirasını öder; program tick dizilerini kapatmak için bir yol sunmaz, bu nedenle bu kira kalıcıdır. Aynı dizideki sonraki pozisyonlar ücretsizdir.

Sonraki

Kaynaklar: