Skip to main content
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Die Aufgabe eines Aggregators besteht darin, einem Benutzer den besten möglichen Preis über viele Pools hinweg zu bieten, möglicherweise einen einzelnen Input über mehrere Pool-Routen aufzuteilen und dies atomar auszuführen. Diese Seite dokumentiert die Raydium-spezifischen Teile dieser Aufgabe: Entdeckung, Kursabfrage und Transaktionszusammensetzung.

Entdeckung

Pool-Bestand

Sie benötigen die vollständige Liste der aktiven Raydium-Pools für jedes Produkt. Drei Optionen:
  1. REST API (am einfachsten): GET https://api-v3.raydium.io/pools/info/list?poolType=all&pageSize=1000&page=1 gibt Pools in Batches von 1000 zurück. Paginieren Sie, bis Sie alle haben. Cachen Sie für 1–5 Minuten.
  2. On-Chain-Scan: getProgramAccounts auf CPMM-, CLMM- und AMM-v4-Programm-IDs, gefiltert nach dem State-Account-Discriminator. Liefert ~jeden aktiven Pool mit ~10s RPC-Zeit. Nützlich, wenn die API ausfällt oder rate-limited ist.
  3. Hybrid: Verwenden Sie die API als primäre Quelle; führen Sie täglich einen On-Chain-Scan als Plausibilitätsprüfung durch. Das Team verpflichtet sich, die API umfassend zu halten, aber Pools, die durch direkte CPI erstellt werden (kein Frontend), können gelegentlich verzögert sein.

Mint-Pair-Lookup

Für ein spezifisches (mintA, mintB)-Paar verwenden Sie GET /pools/info/mint?mint1=...&mint2=...&poolType=all&sort=liquidity. Gibt jeden Pool bei jedem Gebührentarif und Produkttyp zurück. Bis zu ~10 Ergebnisse pro Pair sind bei häufig gehandelten Mints üblich; sortieren Sie nach TVL und nehmen Sie die Top-Ergebnisse zum Routen.

Kursabfrage

Die Kursberechnung unterscheidet sich je nach Produkt. Verwenden Sie die reinen Mathematik-Funktionen des SDK, damit Sie nicht neu implementieren müssen:
Die drei Produkte teilen nicht eine Signatur. computeAmountOut existiert nur auf raydium.liquidity (AMM v4) und als PoolUtils.computeAmountOut(Format) für CLMM; das Äquivalent von CPMM heißt computeSwapAmount und nimmt unterschiedliche Parameter. Schreiben Sie die drei Aufrufe explizit auf, anstatt sie über das Produkt zu parametrisieren.
Verwenden Sie für den Aggregator-Vergleich amountOut (vor Slippage) von jedem.

Cache-Aktualität

Der Pool-Status wird schnell veraltet. Empfohlene Aktualisierungsziele: Für einen Aggregator, der Kurse mit interaktiver Latenz abfragt, abonnieren Sie WebSocket-Account-Updates (accountSubscribe) auf jedem relevanten Pool-Status. Das dreht das Modell von Polling zu Push um.

Token-2022-Anpassungen

Wenn ein Mint in der Route eine Token-2022-Transfergebühr hat, muss die Kursberechnung Eingaben und Ausgaben pro algorithms/token-2022-transfer-fees anpassen. Das SDK handhabt dies, wenn poolInfo.mintA.extensions.transferFeeConfig gefüllt ist. Bestätigen Sie, indem Sie das .extensions-Feld überprüfen, bevor Sie dem Kurs vertrauen.

Routing

Single-Pool-Routen

Die meisten Routen sind Single-Pool. Wählen Sie den Pool mit dem höchsten amountOut. Wenn mehrere ähnlich sind, entscheiden Sie nach Gebührentarif (niedriger ist besser), dann nach TVL (höher ist sicherer).

Split-Routing

Für große Trades, bei denen ein einzelner Pool >5% Preisauswirkung hat, teilen Sie auf mehrere Pools auf. Ein einfacher Greedy-Algorithmus:
Dies erzeugt einen Routing-Vektor [(pool_A, 0.6), (pool_B, 0.3), (pool_C, 0.1)], der die Gesamtauswirkung minimiert. Eine ordnungsgemäße konvex-optimierte Lösung (z. B. Ausgleich der Grenzpreise über Pools) liegt in der Praxis innerhalb von ~1% des Greedy-Ergebnisses.

Multi-Hop-Routen

USDC → RAY → SOL über zwei separate Pools ist üblich, wenn kein direkter USDC-SOL-Pool einen guten Kurs bietet (selten). Wenden Sie Pro-Hop-Slippage-Grenzen an; jeder Hop erzwingt sein eigenes minAmountOut. Siehe algorithms/slippage-and-price-impact. Multi-Hop über denselben Pool (z. B. zwei CLMM-Hops auf SOL-USDC) ist immer suboptimal gegenüber einem einzelnen Hop — generieren Sie solche Routen nicht.

Transaktionszusammensetzung

Single-Hop, Single-Pool

Für einen einzelnen Pool rufen Sie den Swap-Builder des Pool-Typs auf — raydium.liquidity.swap, raydium.cpmm.swap oder raydium.clmm.swap. raydium.tradeV2.swap ist der Multi-Hop-Route-Executor und hat eine völlig andere Form ({ swapInfo, swapPoolKeys, routeProgram, ownerInfo, txVersion }); es gibt kein raydium.trade.

Split und Multi-Hop

Stellen Sie ATAs + Anweisungen manuell zusammen. Muster:
Alle in einer Transaktion für Atomarität. Für einen 3-Pool-Split auf V0 mit Address-Lookup-Tabellen passt dies typischerweise in ~1100 Bytes. Für 4+ Pools zwingt die Transaktionsgrößenbeschränkung entweder Multi-Tx oder Konsolidierung bei einem Hub-Mint.

Atomarität

Aggregatoren müssen Atomarität garantieren: Entweder landet die vollständige Route oder keine. Raydium’s Swap-Anweisungen revertieren bei ExceededSlippage, daher verursacht eine Multi-Pool-Route, bei der ein Hop fehlschlägt, dass die gesamte Transaktion revertiert. Kostenlos. Die einzige Ausnahme: Wenn Ihre Route durch Raydium + einen Drittanbieter-DEX geht, stellen Sie sicher, dass dieser DEX auch ein Revert-on-Slippage-Modell hat. Einige Programme ignorieren Slippage-Grenzen (selten).

Fallstricke

1. Veraltete Kurse

Zwischen dem Zeitpunkt, an dem der Benutzer „Sie erhalten 125,43 RAY” sieht, und dem Zeitpunkt, an dem die Transaktion landet, können sich Reserven verschieben. Rufen Sie den Pool-Status unmittelbar vor der Einreichung ab; fragen Sie erneut ab; wenn der neue Kurs >1% schlechter ist, pausieren Sie und bestätigen Sie erneut mit dem Benutzer.

2. Pool-Blacklists

Einige Raydium-Pools sind Scam-Token mit Transfergebühren von 99% oder mit nicht übertragbaren Erweiterungen. Die REST API kennzeichnet diese (siehe das tags-Feld); überspringen Sie jeden Pool mit dem Tag scam oder honeypot. Das Durchführen eigener Sicherheitsprüfungen zusätzlich zu Raydiums Tags ist ratsam.

3. Observation-State-Anforderung auf CLMM

CLMM SwapV2 benötigt ein observation_state-Konto. Das SDK füllt es für Sie; handgebaute Anweisungen vergessen es oft, was dazu führt, dass das Programm mit AccountNotFound revertiert. Beziehen Sie es immer ein.

4. Address-Lookup-Tabellen

Raydium verwaltet öffentliche Lookup-Tabellen für seine am häufigsten verwendeten Konten (Haupt-Mints, Programm-IDs, AmmConfigs). Aggregatoren sollten diese nutzen — es spart ~100 Bytes pro Transaktion und ermöglicht größeren Routen, in V0 zu passen. Abrufen der LUT-Adressen:

5. Umgang mit Überlastung

Während Hochlast-Fenster können Transaktionen mehrere Blöcke lang im Mempool sitzen. Aggressives Retry bei TX-Ablauf (nicht bei Revert — Reverts sind deterministisch) wird empfohlen. Die sendAndConfirm-Option des SDK führt grundlegende Wiederholungen durch; Production-Aggregatoren lagern ihre eigene Logik (Jito-Bundles, Multi-RPC-Broadcast) darauf aus.

Checkliste

Vor dem Live-Gehen überprüfen Sie:
  • Pool-Entdeckung deckt CPMM + CLMM + AMM v4 umfassend ab.
  • Kurse stimmen mit Raydiums eigenem UI-Kurs innerhalb von 1 Basispunkt bei einer Handvoll Test-Trades überein.
  • Split-Routing aktiviert sich für Trades >5% Auswirkung auf einen einzelnen Pool.
  • Prioritätsgebühren sind gegen aktuelle Pool-Programm-Gebühren dimensioniert (siehe integration-guides/priority-fee-tuning).
  • Token-2022-Transfergebühren werden berechnet und dem Benutzer angezeigt.
  • Transaktionen revertieren sauber, wenn Slippage überschritten wird.
  • Retry-Logik unterscheidet TX-Ablauf (Retry) von Revert (kein Retry).

Verweise

Quellen: