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 →
Bir aggregatörün görevi, kullanıcıya birçok havuz arasında mümkün olan en iyi fiyatı sunmak, tek bir girdişi birden fazla havuz rotası arasında bölmek ve bunu atomik olarak yürütmektir. Bu sayfa bu işin Raydium’a özgü kısımlarını belgelemektedir: keşif, fiyat teklifi ve işlem oluşturma.

Keşif

Havuz envanteri

Her ürün için canlı Raydium havuzlarının tam listesine ihtiyacınız vardır. Üç seçenek:
  1. REST API (en basit): GET https://api-v3.raydium.io/pools/info/list?poolType=all&pageSize=1000&page=1 havuzları 1000’lik gruplar halinde döndürür. Tümünü elde edene kadar sayfalandırın. 1–5 dakika için önbelleğe alın.
  2. Zincir üstü tarama: CPMM, CLMM ve AMM v4 program kimliklerinde getProgramAccounts çalıştırın, durum hesabı ayırıcısı tarafından filtrelenmiş. ~10 saniye RPC zamanı ile ~her canlı havuzu verir. API’nin kapalı olduğu veya hız sınırlandırıldığı durumlarda kullanışlıdır.
  3. Hibrit: API’yi birincil kaynak olarak kullanın; günlük bir zincir üstü tarama sanity kontrolü olarak çalıştırın. Takım API’nin kapsamlı tutulmasına taahhüt eder, ancak doğrudan CPI aracılığıyla oluşturulan havuzlar (ön uç yok) bazen geride kalabilir.

Mint-çifti araması

Belirli bir (mintA, mintB) çifti için GET /pools/info/mint?mint1=...&mint2=...&poolType=all&sort=liquidity kullanın. Herhangi bir ücret katmanında ve ürün türünde her havuzu döndürür. İyi trafiği olan mintler için çifti başına ~10 sonuç yaygındır; TVL’ye göre sıralayın ve yönlendirme için en iyi birkaçını alın.

Fiyat teklifi

Fiyat teklifi matematiği ürüne göre farklılık gösterir. Yeniden uygulamak zorunda kalmamanız için SDK’nın saf matematik işlevlerini kullanın:
Üç ürün bir imzayı paylaşmaz. computeAmountOut yalnızca raydium.liquidity (AMM v4) üzerinde ve CLMM için PoolUtils.computeAmountOut(Format) olarak mevcuttur; CPMM’nin eşdeğeri computeSwapAmount olarak adlandırılır ve farklı parametreler alır. Ürün üzerinde parametreleştirme yapmak yerine üç çağrıyı açıkça yazın.
Aggregatör karşılaştırması için her birinden amountOut (slippage öncesi) kullanın.

Önbellek tazeliği

Havuz durumu hızlı bir şekilde eski hale gelir. Önerilen tazelik hedefleri: İnteraktif gecikme ile fiyat teklifi alan bir aggregatör için, her ilgili havuz durumunda WebSocket hesap güncellemelerine (accountSubscribe) abone olun. Bu modeli yoklamadan itmeye çevirir.

Token-2022 ayarlamaları

Rotadaki herhangi bir mint’in Token-2022 transfer ücreti varsa, fiyat teklifi matematiği algorithms/token-2022-transfer-fees başına girdileri ve çıktıları ayarlamalıdır. SDK bunu poolInfo.mintA.extensions.transferFeeConfig doldurulmuşsa işler. Fiyat teklifine güvenmeden önce .extensions alanına bakarak onaylayın.

Yönlendirme

Tek havuz rotaları

Çoğu rota tek havuzdur. amountOut’u en yüksek olan havuzu seçin. Birden fazla yakınsa, ücret katmanına göre bağlantıyı kırın (düşük daha iyidir), ardından TVL’ye göre (daha fazla daha güvenlidir).

Bölünmüş yönlendirme

Tek bir havuzun >5% fiyat etkisine sahip olduğu büyük işlemler için havuzlar arasında bölün. Basit bir açgözlü algoritma:
Bu, toplam etkiyi en aza indiren bir yönlendirme vektörü [(pool_A, 0.6), (pool_B, 0.3), (pool_C, 0.1)] üretir. Uygun bir dışbükey optimizasyon çözümü (örn. havuzlar arasında marjinal fiyatları eşitleme) pratikte açgözlü sonucun ~1% içindedir.

Çok atlamalı rotalar

USDC → RAY → SOL iki ayrı havuz aracılığıyla, hiçbir doğrudan USDC-SOL havuzu iyi bir fiyat teklifi vermediğinde yaygındır (nadir). Atlamalı slippage sınırları uygulayın; her atlama kendi minAmountOut’unu uygular. algorithms/slippage-and-price-impact bölümüne bakın. Aynı havuz üzerinde çok atlamalı (SOL-USDC üzerinde iki CLMM atlaması gibi) her zaman tek atlamaya kıyasla suboptimaldir — bu tür rotalar oluşturmayın.

İşlem oluşturma

Tek atlama, tek havuz

Tek bir havuz için, o havuz türünün kendi swap oluşturucusunu çağırın — raydium.liquidity.swap, raydium.cpmm.swap veya raydium.clmm.swap. raydium.tradeV2.swap çok atlamalı rota yürütücüsüdür ve tamamen farklı bir şekil alır ({ swapInfo, swapPoolKeys, routeProgram, ownerInfo, txVersion }); raydium.trade yoktur.

Bölünmüş ve çok atlamalı

ATA’ları + talimatları manuel olarak oluşturun. Desen:
Tümü atomiklik için bir işlem içinde. V0 üzerinde 3 havuz bölünmesi için adres arama tabloları ile bu tipik olarak ~1100 bayta sığar. 4+ havuz için, işlem boyutu sınırı ya çok işlem ya da bir hub mint’te konsolidasyon zorunlu kılar.

Atomiklik

Aggregatörler atomikliği garantilemek zorundadır: tam rota iner veya hiçbiri inmez. Raydium’un swap talimatları ExceededSlippage üzerinde geri döner, bu nedenle bir atlaması başarısız olan çok havuz rotası tüm işlemin geri dönmesine neden olur. Ücretsiz. Tek istisna: rotanız Raydium + üçüncü taraf DEX’ten geçerse, o DEX’in de slippage’a geri dönme modeli olduğundan emin olun. Bazı programlar slippage sınırlarını yok sayar (nadir).

Tuzaklar

1. Eski fiyat teklifleri

Kullanıcı “125.43 RAY alacaksınız” gördüğü ile işlem iner arasında rezervler değişebilir. Gönderimden hemen önce havuz durumunu yeniden getirin; yeniden fiyat teklifi alın; yeni fiyat teklifi >1% daha kötüyse, duraklatın ve kullanıcıyla yeniden onaylayın.

2. Havuz kara listeleri

Bazı Raydium havuzları, transfer ücretleri %99’a ayarlanmış veya aktarılamayan uzantılara sahip dolandırıcı jetonlardır. REST API bunları etiketler (tags alanına bakın); scam veya honeypot olarak etiketlenen herhangi bir havuzu atlayın. Raydium’un etiketlerinin üstüne kendi güvenlik kontrollerinizi çalıştırmak ihtiyatlıdır.

3. CLMM’de gözlem durumu gereksinimi

CLMM SwapV2 bir observation_state hesabı alır. SDK bunu sizin için doldurur; elle oluşturulan talimatlar sık sık unutur, bu da programın AccountNotFound ile geri dönmesine neden olur. Her zaman bunu ekleyin.

4. Adres arama tabloları

Raydium, en çok kullanılan hesapları (ana mintler, program kimlikler, AmmConfigs) için genel arama tabloları tutar. Aggregatörler bunları tüketmelidir — işlem başına ~100 bayt tasarruf sağlar ve daha büyük rotaların V0’a sığmasını sağlar. LUT adreslerini çekme:

5. Tıkanıklığı işleme

Yüksek hacimli pencereler sırasında, işlemler mempool’da birden fazla blok için oturabilir. TX süresi dolması üzerinde agresif yeniden deneme (geri dönüş üzerinde değil — geri dönüşler deterministiktir) önerilir. SDK’nın sendAndConfirm seçeneği temel yeniden denemeler yapar; üretim aggregatörleri bunun üstüne kendi mantıklarını katmanlar (Jito paketleri, çok RPC yayını).

Kontrol listesi

Canlı olmadan önce doğrulayın:
  • Havuz keşfi CPMM + CLMM + AMM v4’ü kapsamlı olarak kapsar.
  • Fiyat teklifleri bir avuç test işleminde Raydium’un kendi arayüzü fiyat teklifinin 1 baz puan içinde eşleşir.
  • Bölünmüş yönlendirme herhangi bir tek havuzda >5% etkili işlemler için başlar.
  • Öncelik ücretleri son havuz programı ücretlerine karşı boyutlandırılır (bkz. integration-guides/priority-fee-tuning).
  • Token-2022 transfer ücretleri hesaplanır ve kullanıcıya görüntülenir.
  • İşlemler slippage aşıldığında temiz bir şekilde geri döner.
  • Yeniden deneme mantığı tx süresi dolması (yeniden dene) ile geri dönüş (yeniden denemeyin) arasında ayrım yapar.

İşaretçiler

Kaynaklar: