Überblick
LaserStream ist ein verwalteter Solana gRPC-Streaming-Dienst. Es ist mit dem offenen Yellowstone gRPC-Protokoll leitungs-kompatibel — so funktioniert jeder Yellowstone-Client sofort — und bietet Produktionsfunktionen wie historische Wiedergabe, Multi-Node-Failover und eine vollständig verwaltete Umgebung. LaserStream nutzt das Open-Source gRPC-Protokoll, um sicherzustellen, dass kein Anbieter-Lock-In entsteht und maximale Kompatibilität mit bestehenden gRPC-Implementierungen gewährleistet ist. Sie können sich entweder mit dem standardmäßigen@triton-one/yellowstone-grpc Client verbinden oder das leistungsoptimierte Helius LaserStream SDK für zusätzlichen Nutzen wie höhere Durchsatzrate, automatische Wiederverbindungen, Abonnementverwaltung, Fehlerbehandlung und mehr verwenden.
LaserStream SDK ist 40x schneller im Vergleich zu JavaScript Yellowstone Clients
Endpunkte & Regionen
LaserStream ist in mehreren Regionen weltweit verfügbar. Wählen Sie den Endpunkt, der Ihrer Anwendung am nächsten liegt, für optimale Leistung:Mainnet-Endpunkte
Devnet-Endpunkt
- Für Produktionsanwendungen wählen Sie den Mainnet-Endpunkt, der Ihrem Server am nächsten liegt, für die beste Leistung (z.B. bei Bereitstellung in Europa: Amsterdam (
ams) oder Frankfurt (fra)) - Für Tests nutzen Sie:
https://laserstream-devnet-ewr.helius-rpc.com.
zstd Kompression
Alle LaserStream gRPC-Endpunkte unterstützen zstd Kompression. Die Kompression ist opt-in: Antworten bleiben unkomprimiert, es sei denn, Ihr Client kündigt die zstd Unterstützung an.
Aktivieren Sie zstd im Helius LaserStream TypeScript SDK:
zstd reduziert die Netzwerkbandbreite, fügt jedoch Kompressionsarbeit hinzu. Benchmarken Sie es mit Ihrer Abonnement-Arbeitslast, bevor Sie es für latenzempfindliche Streams aktivieren.
Log-Kürzung
Standardmäßig kürzt LaserStream Transaktionslog-Nachrichten auf 10 KB für bessere Geschwindigkeit und Leistung. Wenn Sie vollständige Logs benötigen, stehen dedizierte unkürzte Endpunkte zur Verfügung — siehe Log-Kürzung.Schnellstart
Neues Projekt erstellen
Abhängigkeiten installieren
tsx, da der Standard npx tsc --init in TypeScript 5.x verbatimModuleSyntax, module: "nodenext" und types: [] setzt, die alle ein schnelles ts-node index.ts ausführen brechen. tsx führt .ts Dateien ohne tsconfig aus.Erhalten Sie Ihren API-Schlüssel
Abonnement-Skript erstellen
index.ts mit folgendem Inhalt:Ersetzen Sie Ihren API-Schlüssel und wählen Sie Ihre Region
index.ts das config Objekt mit:- Ihrem tatsächlichen API-Schlüssel aus dem Helius Dashboard
- Dem LaserStream-Endpunkt, der Ihrem Serverstandort am nächsten liegt
- Für Produktion (Mainnet):
- Europa: Verwenden Sie
fra(Frankfurt),ams(Amsterdam) oderlon(London) - US Ost: Verwenden Sie
ewr(New York) - US West: Verwenden Sie
slc(Salt Lake City) oderlax(Los Angeles) - Asien: Verwenden Sie
tyo(Tokio) odersgp(Singapur)
- Europa: Verwenden Sie
- Für Entwicklung (Devnet):
- Verwenden Sie
https://laserstream-devnet-ewr.helius-rpc.com
- Verwenden Sie
Ausführen und Ergebnisse anzeigen
confirmed Token-Transaktion TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA beinhaltet, sehen Sie die Daten in Ihrer Konsole.Häufige Workflows
Schritt-für-Schritt-Anleitungen für die am häufigsten beobachteten Workflows. Jede Anleitung verwendet dashelius-laserstream SDK mit eingebautem Auto-Reconnect und historischer Wiedergabe.
Konto-Abonnements
Transaktionsüberwachung
Slot- & Blocküberwachung
Transaktionsdaten dekodieren
transactionUpdate Nutzlasten in lesbare Solana-Transaktionen.Stream Pump AMM-Daten
Subscribe-Request
Im Subscribe-Request müssen Sie die folgenden allgemeinen Parameter einbeziehen:fromSlot Feld (eine u64 Zahl) im Haupt- SubscribeRequest Objekt einschließen, um Daten ab einem bestimmten Slot zurückzuspielen. Die Wiedergabe ist derzeit auf die letzten 216.000 Slots (≈24 Stunden) beschränkt; beachten Sie, dass Wiedergaben, die älter als ~20 Minuten sind, nur endgültige Daten zurückgeben.Slots
Slots
mySlotLabel) ist ein benutzerdefiniertes Label für diese spezifische Filterkonfiguration, das es Ihnen ermöglicht, möglicherweise mehrere benannte Konfigurationen zu definieren, falls erforderlich (obwohl normalerweise eine ausreicht).Konten
Konten
tokenAccounts) ist ein benutzerdefiniertes Label für diese spezifische Filterkonfiguration.datasize und/oder memcmp Filtern. Für memcmp geht das Vergleichsobjekt auf einen der bytes, base58 oder base64 direkt auf dem memcmp Objekt.notifyOn hat keine Wirkung. Das Feld wird zu einem späteren Zeitpunkt entfernt.- Felder arbeiten als logisches UND.
- Werte innerhalb von Arrays wirken als logisches ODER (außer innerhalb von
filters, die als logisches UND funktionieren).
Transaktion
Transaktion
myTxSubscription), ist ein benutzerdefiniertes Label für diese spezifische Filterkonfiguration.Wenn alle Felder leer gelassen werden, werden alle Transaktionen gesendet. Andernfalls:- Felder arbeiten als logisches UND.
- Werte innerhalb von Arrays werden als logisches ODER behandelt (außer bei
accountRequired, bei denen alle übereinstimmen müssen).
Block
Block
myBlockLabel) ist ein benutzerdefiniertes Label für diese spezifische Filterkonfiguration.Blocks Meta
Blocks Meta
blockmetadata) ist ein benutzerdefiniertes Label für dieses Abonnement. Derzeit sind keine Filter für Block-Metadaten verfügbar — alle Nachrichten werden standardmäßig gesendet.Einträge
Einträge
entrySubscribe) ist ein benutzerdefiniertes Label für dieses Abonnement. Derzeit sind keine Filter für Einträge verfügbar; alle Einträge werden gesendet.Codebeispiele (LaserStream SDK)
- Slot-Updates
- Konto-Updates
- Transaktions-Updates
- Blöcke
- Block-Metadaten
- Einträge
SDK-Optionen
Wir bieten offizielle SDKs für mehrere Programmiersprachen an:- TypeScript: LaserStream TypeScript SDK
- Rust: LaserStream Rust SDK
- Go: LaserStream Go SDK
Fehlerbehebung / FAQ
Q: Ich erlebe Verzögerungen oder langsame Leistung mit meiner LaserStream-Verbindung. Was könnte dies verursachen?
Q: Ich erlebe Verzögerungen oder langsame Leistung mit meiner LaserStream-Verbindung. Was könnte dies verursachen?
- JavaScript Client Langsamkeit: Der JavaScript-Client kann zurückbleiben, wenn zu viele Nachrichten verarbeitet oder zu viel Bandbreite verbraucht wird. Ziehen Sie in Betracht, Ihre Abonnements enger zu filtern, wechseln Sie zum LaserStream JavaScript SDK oder versuchen Sie, eine andere Sprache zu verwenden.
- Begrenzte lokale Bandbreite: Schwere Abonnements können Clients mit begrenzter Netzwerkbandbreite überwältigen. Überwachen Sie Ihre Netzwerknutzung und ziehen Sie in Betracht, Ihre Verbindung zu verbessern oder den Abonnementumfang zu reduzieren.
-
Geografische Entfernung: Lange Netzwerkpfade erhöhen die Latenz und den Paketverlust. Verwenden Sie den Endpunkt, der Ihrem Server am nächsten liegt. Für Hochlatenz-Verbindungen erhöhen Sie Ihre Netzwerk-Lesepuffergrößen (kann die Bandbreite um 5x+ verbessern):
Um es über Neustarts hinweg zu behalten, fügen Sie zu
/etc/sysctl.confhinzu:Erhöhen Sie die HTTP/2 Stream und Verbindung Fenstergrößen auf 64MB, um Durchflusskontrollengpässe zu vermeiden. Beide sind erforderlich — das Erhöhen nur des Streamfensters lässt das verbindungsseitige Fenster als bindende Einschränkung zurück: - Engpässe bei der Client-seitigen Verarbeitung: Stellen Sie sicher, dass Ihre Nachrichtenverarbeitungslogik optimiert ist und den Hauptthread nicht für längere Zeit blockiert.
Q: Ich bekomme Verbindungsfehler. Was sollte ich überprüfen?
Q: Ich bekomme Verbindungsfehler. Was sollte ich überprüfen?
Q: Warum funktionieren meine Filter nicht wie erwartet?
Q: Warum funktionieren meine Filter nicht wie erwartet?
Q: Kann ich in einer Anfrage mehrere Datentypen (z.B. Konten und Transaktionen) abonnieren?
Q: Kann ich in einer Anfrage mehrere Datentypen (z.B. Konten und Transaktionen) abonnieren?
accounts, transactions) innerhalb desselben SubscribeRequest Objekts.Q: Unterstützt LaserStream Konsumentengruppen?
Q: Unterstützt LaserStream Konsumentengruppen?
Q: Warum werden meine Transaktionslog-Nachrichten abgeschnitten?
Q: Warum werden meine Transaktionslog-Nachrichten abgeschnitten?
Q: Warum erhalte ich nur Pong-Antworten ohne Konto- oder Slot-Daten?
Q: Warum erhalte ich nur Pong-Antworten ohne Konto- oder Slot-Daten?
SubscribeRequest Feld ein ping Feld einfügen, ignoriert LaserStream alle Abonnementfilter stillschweigend — es wird nur ein Pong mit null Konto-, Transaktions- oder Slot-Daten zurückgegeben. Um dies zu beheben, entfernen Sie ping aus der ursprünglichen Subscribe-Anfrage und senden Sie stattdessen Pings separat über den Sink des Streams, nachdem das Abonnement etabliert wurde. Dies hält die Verbindung am Leben, ohne Ihre Filter zu beeinträchtigen.