Skip to main content
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Jede Solana-Transaktion setzt zwei Parameter: ein Compute Unit Limit (maximale CUs, die die Transaktion verbrauchen darf; standardmäßig 200.000 × Anzahl der Instructions bis zu einer Obergrenze pro Transaktion) und eine Priority Fee in Mikro-Lamports pro CU. Unzureichende Werte für beide Parameter führen zum Scheitern — zu niedrige CU-Limits verursachen ProgramFailedToComplete; zu niedrige Priority Fees führen dazu, dass die Transaktion bis zum Ablauf unbestätigt bleibt.

Die zwei Einstellungen

  • setComputeUnitLimit(units) — beschränkt die Berechnung; die Transaktion bezahlt für höchstens units CUs.
  • setComputeUnitPrice(microLamports) — Priority-Fee-Gebot in Mikro-Lamports pro CU. Gesamte Priority Fee = units × microLamports × 1e-6 Lamports.
Kostenberechnung: Ein 250k-CU-Limit mit 50k Mikro-Lamports/CU bietet 250_000 × 50_000 / 1e6 = 12.500 Lamports ≈ 0,0000125 SOL ≈ 0,003 USD bei 200 USD SOL. Priority Fees in dieser Größenordnung sind für die meisten Benutzer-Swaps unbedeutend, aber erheblich für Bots, die täglich 1000 Transaktionen durchführen.

CU-Benchmarks pro Instruction

Benchmarks aus Mainnet-Ausführungsprotokollen, gemittelt über neuere Durchläufe. Die Zahlen sind ungefähr (±15%); nehmen Sie für Ihre spezifischen Abläufe eine Neubewertung vor. Die Zeile „Tick-Überquerungen” für CLMM ist die größte CU-Variable. Wenn Sie nicht wissen, wie viele Ticks der Swap überqueren wird, planen Sie für den schlimmsten Fall ein — 8 Überquerungen ist die Hard-Obergrenze (das Programm lädt höchstens 8 Tick-Arrays).

Zusammengesetzte Transaktionen

Summieren Sie die einzelnen Budgets und addieren Sie:
  • +1.500 CU pro CPI-Frame — der feste Overhead der Runtime für jeden Cross-Program-Aufruf.
  • +20.000 CU pro ATA-Erstellungcreate_associated_token_account ist nicht kostenlos.
  • +5.000 CU für setComputeUnitLimit / setComputeUnitPrice jeweils.
Beispiel: Ein Benutzer-Swap, der das Ausgabe-ATA erstellt und natives SOL umwandelt:
Pufferung: Setzen Sie das CU-Limit etwa 25% über der erwarteten Nutzung. Unterschätzung kostet die gesamte Transaktion; Überschätzung erhöht nur die Priority-Fee-Kosten proportional (Priority Fee ist units × microLamports, daher kostet ~25% über-Budget 25% zusätzliche Priority Fee).

Priority-Fee-Schätzung

Solanas lokaler Gebührenmarkt bedeutet, dass Priority Fees pro beschreibbarem Account berechnet werden. Eine Transaktion, die in einen heißen Account (beliebter Pool-Status) schreibt, zahlt mehr als eine Transaktion, die in einen kalten Account schreibt. Das globale Gebührenniveau ist nicht die richtige Metrik für Raydium-Swaps; Sie wollen Gebühren auf die spezifischen Pools, die Sie berühren.

Strategie 1: RPC-Provider-Schätzer

Jeder große RPC-Provider veröffentlicht einen Priority-Fee-Schätzer, der aktuelle Gebühren auf spezifischen Accounts abfragt:
Priority-Level über die meisten Provider hinweg: Min / Low / Medium / High / VeryHigh / UnsafeMax. Ordnen Sie sie den Perzentilen zu: Provider: Helius (getPriorityFeeEstimate), Triton (getRecentPrioritizationFees mit Account-Liste), QuickNode (ähnlich).

Strategie 2: Direkte RPC-Abfrage

Verwenden Sie die Standard-getRecentPrioritizationFees RPC:
Dies ist die Vanilla-Solana-RPC-Methode; funktioniert bei jedem Provider. Nachteil: Das Sample ist klein (150 Slots ≈ 60 Sekunden) und verrauscht. Für glattere Schätzungen verwenden Sie die Aggregation eines Providers.

Strategie 3: Historische Selbstoptimierung

Für Bots mit ständigem Durchsatz verfolgen Sie Ihre eigenen Landungs- gegenüber Ablauf-Raten:
Dies korrigiert sich schneller als öffentliche Schätzer und erfasst pro-Pool-Struktur, die öffentliche Schätzer nicht immer sehen.

Umgang mit CU-Erschöpfungsfehlern

Symptom: Transaktion schlägt fehl mit exceeded maximum number of instructions allowed (200000) oder ProgramFailedToComplete. Diagnose:
Fixes:
  1. Erhöhen Sie das CU-Limit. Wenn Ihre Transaktion 195k von einem 200k-Budget verwendete, erhöhen Sie auf 300k.
  2. Teilen Sie die Transaktion. Wenn Sie die 1,4M-Obergrenze pro Transaktion erreichen, brechen Sie in zwei Transaktionen auf. Farm harvest then stake ist eine klassische Transaktion zum Aufteilen, wenn Rewards zahlreich sind.
  3. Trimmen Sie Accounts. Jeder zusätzliche beschreibbare Account addiert ~2.000 CU. Das Prunen ungenutzter Accounts hilft bei Grenzfällen.
  4. Verwenden Sie Lookup-Tabellen. LUT-Lookups sind ~50 CU pro aufgelöstem Address, sparen 5.000 CU einer vollständigen Account-Referenz pro Eintrag.

Umgang mit steckengebliebenen Transaktionen

Symptom: Transaktion eingereicht, bestätigt sich nie, läuft schließlich ab mit BlockhashNotFound. Diagnose:
  • getSignatureStatuses([sig]) gibt null zurück → Leader hat es nie gesehen.
  • Gibt { confirmationStatus: null } zurück → Leader sah es, aber nahm es nicht auf.
Fixes:
  1. Erhöhen Sie die Priority Fee. Reichen Sie mit der 2-fachen aktuellen Gebühr erneut ein.
  2. Bauen Sie mit neuem Blockhash auf. Blockhash-Lebensdauer liegt bei ~60 Sekunden; danach ist die Transaktion ungültig, unabhängig von Gebühren.
  3. Multi-RPC-Broadcast. Einige RPCs haben bessere Leader-Verbindungen als andere. Reichen Sie parallel zu 3–5 ein.
  4. Wechseln Sie zu Jito Bundles. Siehe integration-guides/routing-and-mev. Bundles umgehen öffentliche Paket-Warteschlangen.
Retry-Logik-Skelett:

Bei Netzwerküberlastung

Wenn das Netzwerk überlastet ist (Jupiter / Jito Bundle Dashboards zeigen Rückstau, RPC-Latenz spitzt zu, Transaktionsablauf-Raten klettern), passen Sie an: Überwachung von Überlastungssignalen:
  • Priority-Fee 75. Perzentil > 500k Mikro-Lamports: Überlastung.
  • Jito 50. Perzentil Tip > 0,001 SOL: Überlastung.
  • RPC-Antwort p99 > 2s: RPC-spezifisches Problem oder Überlastung.

Gebührenbudgetierung für Bots

Ein Trading-Bot, der täglich ~1000 Transaktionen durchführt, benötigt ein Priority-Fee-Budget. Schätzung:
Das ist das Minimum. Bei Überlastung mit 5–10× multiplizieren. Planen Sie für ~150–300 USD/Monat an Priority Fees für einen Bot mit gleichmäßigem Durchsatz ein. Bots, die in spezifische Slots landen müssen (Liquidationen, Arbitrage), zahlen kontinuierlich das 95. Perzentil und geben ~10× mehr aus. Jito-Bundle-Tips dominieren in dieser Größenordnung — oft 1000+ USD/Monat — aber die Alternative (Front-Run oder Ablauf) ist schlechter.

Fallstricke

1. CU-Limit vergessen

Der Standard ist 200k CUs × (Instructions in Transaktion). Ein Single-Instruction-Swap standardisiert auf 200k; das ist für CPMM auf SPL Token ausreichend, aber nicht für CLMM mit Tick-Überquerungen oder alles Token-2022. Setzen Sie es immer explizit.

2. Priority Fee auf dem falschen Account

Wenn Sie die Priority Fee gegen die Token-Mint schätzen, aber der heiße Account der Pool-Status ist, ist Ihre Schätzung zu niedrig. Der Pool-Status ist der richtige beschreibbare Account zum Ziel für Raydium.

3. Gebühren skalieren mit CU-Limit

total_priority_fee = units × microLamports. Die Erhöhung von units von 200k auf 1M bei 50k Mikro-Lamports/CU multipliziert Priority Fee um das 5-fache. Über-budgetieren Sie nicht einfach für den Fall; messen Sie.

4. Standard-Transaktionsversion

Legacy-Transaktionen haben niedrigere Account-Limits; V0-Transaktionen mit Address-Lookup-Tabellen ermöglichen größere Routen. Das SDK verwendet standardmäßig V0 in txVersion: TxVersion.V0. Wechseln Sie nicht zu Legacy, es sei denn, Sie benötigen Wallet-Kompatibilität.

5. skipPreflight verbirgt CU-Fehler

skipPreflight: true sendet die Transaktion ohne lokale Simulation. Sie sparen ~100ms, verlieren aber das frühe Feedback zur CU-Erschöpfung. Verwenden Sie es nur bei Retries, nicht beim ersten Versuch.

Verweise

Quellen: