Ana içeriğe atla

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

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 →
Her Solana işlemi iki parametreyi (örtük veya açık olarak) ayarlar: bir hesaplama-birimi limiti (işlemin tüketebileceği en fazla CU; varsayılan olarak talimat sayısı × 200.000, işlem başına sınırlandırılmış) ve öncelik ücreti (CU başına mikro-lamport cinsinden). Her ikisinin de eksik boyutlandırılması işlemleri öldürür — çok düşük CU limitleri ProgramFailedToComplete hatasına neden olur; çok düşük öncelik ücretleri işlemin süresi doluncaya kadar onaylanmamış kalmasına neden olur.

İki ayar

import { ComputeBudgetProgram } from "@solana/web3.js";

const tx = new Transaction()
  .add(ComputeBudgetProgram.setComputeUnitLimit({ units: 250_000 }))
  .add(ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 50_000 }))
  .add(yourRaydiumSwapIx);
  • setComputeUnitLimit(units) — hesaplamayı sınırlandırır; işlem en fazla units CU için ödeme yapar.
  • setComputeUnitPrice(microLamports) — CU başına mikro-lamport cinsinden öncelik ücreti teklifi. Toplam öncelik ücreti = units × microLamports × 1e-6 lamport.
Ücret hesaplaması: 250k CU limitinde 50k mikro-lamport/CU, 250_000 × 50_000 / 1e6 = 12.500 lamport ≈ 0.0000125 SOL ≈ 200 SOL’da $0.003 teklif eder. Bu ölçekte öncelik ücretleri çoğu kullanıcı takası için önemsizdir, ancak günde 1000 işlem yapan botlar için önemlidir.

Talimat başına CU kıyaslamaları

Ana ağ yürütme günlüklerinden kıyaslamalar, son çalıştırmalar arasında ortalaması alınmış. Sayılar yaklaşıktır (±%15); belirli akışlarınız için yeniden ölçün.
TalimatSPL TokenToken-2022 (basit)Token-2022 (transfer ücreti)
CPMM initialize_pool180.000200.000
CPMM swap_base_input140.000180.000200.000
CPMM swap_base_output150.000185.000205.000
CPMM deposit130.000160.000180.000
CPMM withdraw120.000150.000170.000
CLMM create_pool70.00085.000
CLMM open_position_v2120.000140.000160.000
CLMM increase_liquidity_v2150.000175.000195.000
CLMM decrease_liquidity_v2140.000165.000185.000
CLMM swap_v2 (0 tick geçişi)170.000205.000225.000
CLMM swap_v2 (1 tick geçişi)220.000255.000275.000
CLMM swap_v2 (3 tick geçişi)320.000355.000375.000
CLMM collect_fee80.00095.000105.000
AMM v4 swap_base_in140.000
AMM v4 deposit120.000
AMM v4 withdraw110.000
Farm v6 create_farm70.00085.000
Farm v6 deposit (1 ödül yuvası)130.000155.000175.000
Farm v6 deposit (3 ödül yuvası)220.000255.000275.000
Farm v6 withdrawdeposit ile eşleşir
Farm v6 harvestdeposit ile eşleşir
Farm v3/v5 deposit100.000
LaunchLab initialize100.000
LaunchLab buy_exact_in140.000
LaunchLab graduate250.000
CLMM için “tick geçişleri” satırı en büyük CU değişkenidir. Swapın kaç tick geçeceğini bilmiyorsanız, en kötü duruma bütçeyin — 8 geçiş sabit sınırdır (program en fazla 8 tick dizisini yükler).

Birleştirilmiş işlemler

Bireysel bütçeleri toplayın ve şunu ekleyin:
  • +1.500 CU her CPI çerçevesi başına — her program dışı çağrının sabit çalışma zamanı yükü.
  • +20.000 CU her ATA oluşturması başınacreate_associated_token_account bedava değildir.
  • +5.000 CU her setComputeUnitLimit / setComputeUnitPrice için.
Örnek: çıkış ATA’sını oluşturan ve yerel SOL’u sarmalayan bir kullanıcı swapı:
wrap_sol (create_ata + system transfer + sync_native)   ≈ 30.000
CPMM swap_base_input (SPL)                              ≈ 140.000
close_account (unwrap)                                  ≈ 5.000
ComputeBudget talimatları                               ≈ 10.000
────────────────────────────────────────────────────────
Toplam                                                  ≈ 185.000 → 250.000 bütçe
Yastıklama: CU limitini beklenen kullanımın ~%25 üzerine ayarlayın. Eksik tahmin etmek tüm işlemi maliyetlendirir; aşırı tahmin etmek sadece öncelik ücreti maliyetini orantılı olarak arttırır (öncelik ücreti units × microLamports olduğundan, ~%25 fazla bütçe öncelik ücrette %25 ek maliyet verir).

Öncelik ücreti tahmini

Solana’nın yerel ücret pazarı, öncelik ücretlerinin yazılabilir-hesap başına olduğu anlamına gelir. Sıcak bir hesaba yazan bir işlem (popüler pool durumu) soğuk bir hesaba yazan bir işlemden daha fazla öder. Küresel ücret düzeyi Raydium swapları için doğru metrik değildir; dokunduğunuz belirli havuzlardaki ücretler istenir.

Strateji 1: RPC sağlayıcı tahmincisi

Her büyük RPC sağlayıcı, belirli hesaplardaki son ücretleri sorgulayan bir öncelik ücreti tahmincisi yayınlar:
// Helius
const response = await fetch(`https://mainnet.helius-rpc.com/?api-key=${apiKey}`, {
  method: "POST",
  body: JSON.stringify({
    jsonrpc: "2.0",
    id:      "fee-estimate",
    method:  "getPriorityFeeEstimate",
    params: [{
      accountKeys: [poolStatePubkey.toBase58()],
      options:     { priorityLevel: "High" },
    }],
  }),
});
const { result } = await response.json();
const microLamports = result.priorityFeeEstimate;
Çoğu sağlayıcı arasında öncelik seviyeleri: Min / Low / Medium / High / VeryHigh / UnsafeMax. Bunları yüzdelik dilime eşleyin:
SeviyeYüzdelikKullanım durumu
Min25.Arka plan, acil olmayan bot trafiği
Low50.Normal kullanıcı swapları
Medium60.Cüzdan arayüzleri için varsayılan
High75.Zaman duyarlı arbitraj
VeryHigh95.Tasfiyeler, son çıkış şansı
Sağlayıcılar: Helius (getPriorityFeeEstimate), Triton (getRecentPrioritizationFees hesap listesi ile), QuickNode (benzer).

Strateji 2: Doğrudan RPC sorgusu

Standart getRecentPrioritizationFees RPC’sini kullanın:
const fees = await connection.getRecentPrioritizationFees({
  lockedWritableAccounts: [poolStatePubkey],
});

// fees: Array<{ slot, prioritizationFee }>
// Son N slot; varsayılan ~150 slot.

const median = percentile(fees.map(f => f.prioritizationFee), 0.5);
Bu standart Solana RPC yöntemidir; herhangi bir sağlayıcı ile çalışır. Dezavantaj: örnek küçüktür (150 slot ≈ 60 saniye) ve gürültülüdür. Daha düzgün tahminler için sağlayıcının toplama işlemini kullanın.

Strateji 3: Tarihsel kendi kendini ayarlama

Sabit akış çalıştıran botlar için kendi iniş ve süresi dolmuş oranlarınızı takip edin:
havuz başına hedef: 80% iniş oranı <30s'de
eğer current_land_rate < 80%: priorityFee += 10%
eğer current_land_rate > 95%: priorityFee -= 5%
Bu kamu tahminlericilerinden daha hızlı kendi kendini düzeltir ve kamu tahminlericilerinin her zaman görmediği havuz başına yapıyı yakalar.

CU-tükenmesi hatalarının işlenmesi

Belirti: işlem exceeded maximum number of instructions allowed (200000) veya ProgramFailedToComplete ile başarısız olur. Tanı:
solana confirm <tx-sig> -v
# "consumed N of M compute units" ve hangi talimatın tükendiğini arayın.
Düzeltmeler:
  1. CU limitini yükseltin. İşleminiz 200k bütçeden 195k kullanıyorsa, 300k’ye çıkartın.
  2. İşlemi bölün. 1.4M işlem başına sınırı vurursan, iki işleme ayır. Farm harvest then stake ödüller çok olduğunda bölünecek klasik bir örneğidir.
  3. Hesapları budayın. Her ek yazılabilir hesap ~2.000 CU ekler. Kullanılmayan hesapları budamak sınır durumlarında yardımcı olur.
  4. Arama tablolarını kullanın. LUT aramaları ~50 CU her çözümlenen adres başına, giriş başına tam hesap referansının 5.000 CU’sinden tasarruf eder.

Takılı işlemlerin işlenmesi

Belirti: işlem gönderilir, asla onaylanmaz, sonunda BlockhashNotFound ile süresi dolar. Tanı:
  • getSignatureStatuses([sig]) null döndürür → lider bunu asla görmedi.
  • { confirmationStatus: null } döndürür → lider onu gördü ama dahil etmedi.
Düzeltmeler:
  1. Öncelik ücretini yükseltin. Mevcut ücretin 2× ile yeniden gönderin.
  2. Taze blockhash ile yeniden oluşturun. Blockhash ömrü ~60 saniyedir; bundan sonra işlem ücretlerden bağımsız olarak geçersizdir.
  3. Çok-RPC yayını. Bazı RPC’ler diğerlerinden daha iyi lider bağlantısına sahiptir. Paralel olarak 3–5’e gönderin.
  4. Jito bundle’larına geçin. Bkz. integration-guides/routing-and-mev. Bundle’lar halkın paket sıralarını atlar.
Yeniden deneme mantığı iskeleti:
async function submitWithRetry(buildTx, maxAttempts = 5) {
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
    const tx = await buildTx({
      priorityFee: basePriorityFee * Math.pow(1.5, attempt),
      blockhash:   (await connection.getLatestBlockhash()).blockhash,
    });

    try {
      const sig = await connection.sendRawTransaction(tx.serialize(), {
        skipPreflight: attempt > 0,  // gecikmeyi kaydetmek için ilk denemeden sonra atla
      });

      const result = await connection.confirmTransaction(sig, "confirmed");
      if (result.value.err) {
        // Mantık hatası; yeniden denemeyin.
        throw result.value.err;
      }
      return sig;

    } catch (e) {
      if (isExpiredError(e)) continue;  // yeniden dene
      if (isRevertError(e)) throw e;    // yeniden denemeyin; belirleyici hata
      throw e;
    }
  }
  throw new Error("submit: yeniden denemeler tükenmiş");
}

Tıkanıklık altında

Ağ tıkanık olduğunda (Jupiter / Jito bundle panolar birikintileri gösterir, RPC gecikmesi yükselir, işlem süresi dolma oranları artar), ayarlayın:
ParametreNormal koşullarTıkanık koşullar
CU limititahminin %25 üzeritahminin %25 üzeri (değişmez)
Öncelik ücreti yüzdelik50.75.–95.
Yeniden deneme sayısı35–7
Yeniden deneme geri kakalması500ms1000ms
Jito bundle’larını kullanınİsteğe bağlıŞiddetle tavsiye edilir
Yeniden denemede blockhash yenilemesiEvetEvet, zorunlu
Tıkanıklık sinyallerini izlemek:
  • Öncelik ücreti 75. yüzdelik > 500k mikro-lamport: tıkanıklık.
  • Jito 50. yüzdelik bahşiş > 0.001 SOL: tıkanıklık.
  • RPC yanıt p99 > 2s: RPC’ye özgü sorun veya tıkanıklık.

Bot’lar için ücret bütçelemesi

Günde ~1000 işlem çalıştıran bir ticari bot’un ücret bütçesi gerekir. Zarfın arka:
İşlem başına ortalama CU:          ~250.000
50. yüzdelik ücreti:              ~20.000 mikro-lamport/CU
İşlem başına maliyet:             250_000 × 20_000 × 1e-6 = 5_000 lamport = 5e-6 SOL
Günlük maliyet (1000 işlem):       5e-3 SOL ≈ 200 SOL'da $1
Aylık maliyet:                     ~$30
Bu minimum. Tıkanıklık sırasında, 5–10× ile çarpın. Sabit akış botları için ~$150–300/ay öncelik ücret planlayın. Belirli slot’lar içinde inişlenmesi gereken bot’lar (tasfiyeler, arb) sürekli 95. yüzdelik öder ve ~10× daha fazla harcar. Bu ölçekte Jito bundle bahşişleri hakim olur — sık sık $1000+/ay — ancak alternatif (ön-run olmak veya süresi dolmak) daha kötüdür.

Tuzaklar

1. CU limitini unutmak

Varsayılan, 200k CU × (işlemdeki talimatlar). Tek talimatı swap varsayılan 200k; bu SPL Token’da CPMM için yeterlidir, ancak tick geçişleri ile CLMM veya herhangi bir Token-2022 için değil. Her zaman açıkça ayarlayın.

2. Yanlış hesap üzerinde öncelik ücreti

Token mint’e karşı öncelik ücreti tahmin ederseniz, ancak sıcak hesap pool durumuysa, tahminiz çok düşüktür. Pool durumu Raydium için hedef yazılabilir-hesaptır.

3. Ücretler CU limitiyle ölçeklenir

total_priority_fee = units × microLamports. units’i 200k’den 1M’ye, 50k mikro-lamport/CU’da yükselme, öncelik ücreti 5בini çarpar. CU’yu aşırı bütçelemeyin; ölçün.

4. Varsayılan işlem sürümü

Eski işlemlerin daha düşük hesap sınırları vardır; adres arama tablolarına sahip V0 işlemleri daha büyük rotaları açar. SDK varsayılan olarak V0’ı kullanır txVersion: TxVersion.V0. Cüzdan uyumluluğu gerekmediği sürece eski sürüme düşmeyin.

5. skipPreflight CU hatalarını gizler

skipPreflight: true işlemi yerel simülasyon olmadan gönderir. ~100ms’de tasarruf edersiniz, ancak CU tükenmesi üzerine erken geri bildirimi kaybedersiniz. Sadece yeniden denemelerde kullanın, ilk denemede değil.

İşaretçiler

Kaynaklar: