Zum Hauptinhalt springen
Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Raydium veröffentlicht kein offizielles Python SDK. Die Muster hier verbinden drei gepflegte Community-Bibliotheken: solders (Rust-gebundene Solana-Primitive), solana-py (RPC-Client) und anchorpy (Anchor-style Instruction-Builder aus IDLs). Die Kombination deckt alles ab, was das TS SDK leistet; nur ist die Verarbeitung weniger poliert.

Umgebung

Versionen, die zusammen funktionieren (Stand jetzt):
anchorpy hinkt anchor-lang’s Version manchmal nach; verifizieren Sie vor dem Einchecken, dass die IDL eines vor kurzem bereitgestellten Raydium-Programms unter Ihrer gepinnten anchorpy-Version kompiliert.

Verbindung und Keypair

AsyncClient ist die async-Variante; der synchrone Client ist für schnelle Skripte verfügbar, aber async wird für alles bevorzugt, das mehrere Anfragen sendet.

Poolzustand auslesen

Die meisten Produktionsumgebungen lesen dekodierten Poolzustand von Raydiums REST-API (siehe sdk-api/rest-api) statt On-Chain-Daten manuell zu dekodieren — es ist einfacher und die Latenz ist für die meisten Anwendungsfälle akzeptabel.
Für Bots mit absolut minimaler Latenz dekodieren Sie On-Chain-Bytes direkt:
Das vollständige Layout befindet sich in src/raydium/cpmm/layout.ts (TS-Quellcode); portieren Sie es nach Bedarf zu construct. anchorpy kann dies automatisch anhand der IDL durchführen — siehe unten.

Swap erstellen und senden

Verwenden Sie der Einfachheit halber Raydiums server-built-transaction-Endpunkt. Der Server gibt eine signaturreife Transaktion zurück; Sie müssen nur Ihre Signatur hinzufügen:
Dies ist der schnellste Weg zu einem funktionsfähigen Bot. Das Server-Angebot verfällt schnell (≈30s); cachieren Sie es nicht.

Swap Client-seitig erstellen (via anchorpy)

Für geringere Latenz oder wenn Sie Raydiums API nicht erreichen können (sanktionierte Regionen, Offline-Setups):
PDA-Ableitungen (Observation State, Pool Authority) folgen denselben Formeln wie im CPMM-Kapitel. anchorpy leitet sie nicht automatisch ab.

Typische Bot-Architektur

Eine häufige Python-Raydium-Bot-Struktur:
Wesentliche Entscheidungen für die Produktion:
  • RPC-Anbieter. Public Mainnet RPCs drosseln aggressiv. Verwenden Sie einen dedizierten Anbieter (Helius, QuickNode, Triton) für hohen Datenverkehr.
  • WebSocket für Poolzustand. client.account_subscribe(pool_id) pusht Updates bei jeder Zustandsänderung. Viel enger als Polling.
  • Priority-Fee-Anbieter. Helius hat einen getPriorityFeeEstimate-Endpunkt; Triton hat ihren eigenen. Bemessen Sie Ihre Gebühr anhand des 75. Perzentils der jüngsten Gebühren auf dem Zielprogramm.
  • Bundles für MEV-sensitive Trades. Routen Sie durch Jitos Block Engine, wenn Sie Sandwich-Risiko nicht tolerieren können. Python-Libs: jito-sdk-python (Third-Party, Qualität variiert).

Farm-Zustand auslesen

.account["X"].decode(bytes) von anchorpy gibt ein natives Python-Objekt zurück, das der IDL-Struktur entspricht.

Fallstricke

1. Dezimalbehandlung

Pythons natives float ist IEEE-754 Double; Beträge in 9-Dezimal-Mints (1 SOL = 1e9 Einheiten) bleiben genau, aber Verhältnisse und Produkte verlieren Präzision. Verwenden Sie int (solders gibt int für alle Mengenfelder zurück) und leiten durch decimal.Decimal für jede Preisarithmetik.

2. Slot-basiertes vs. zeitstempelbasiertes Denken

Einige Farm-Versionen verwenden Slot-Zähler; LaunchLab verwendet Zeitstempel. solana-py gibt slot in RPC-Antworten zurück, aber die Konvertierung Slot → Zeitstempel ist verlustbehaftet (variiert je nach Leader-Zeitplan). Wenn Sie Wanduhrzeit benötigen, rufen Sie get_block_time(slot) explizit auf.

3. Connection-Pool-Erschöpfung

AsyncClient öffnet standardmäßig pro Anfrage eine HTTP-Verbindung. Unter hoher Last wiederverwendet httpx.AsyncClient-Sitzungen und setzen Sie ein angemessenes limits=httpx.Limits(max_connections=100).

4. Transaktionsgrößenlimits

Python-erstellte Transaktionen sind nicht kleiner als TS-erstellte — das 1232-Byte-Limit gilt gleichermaßen. Verwenden Sie V0-Transaktionen (Address Lookup Tables) für alles, das über mehr als ~2 Pools routed.

Verweise

Quellen: