Skip to main content

Ü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

Erfahren Sie, wie wir Rust Core mit Zero-Copy NAPI-Bindungen verwendet haben, um die Leistung des JavaScript SDK zu maximieren.
Leistungshinweis: Wenn Sie Verzögerungen oder Leistungsprobleme mit Ihrer LaserStream-Verbindung feststellen, beziehen Sie sich bitte auf den Fehlerbehebungsabschnitt für häufige Ursachen und Lösungen.

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

Netzwerk- & Regionenauswahl:
  • 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

Beginnen Sie mit LaserStream von Ihrem Helius Dashboard. Mainnet erfordert einen Business- oder Professional-Tarif; Devnet ist auf dem Entwickler- und höher verfügbar. Siehe Tarife & Preise für Details.
1

Neues Projekt erstellen

2

Abhängigkeiten installieren

Wir verwenden 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.
3

Erhalten Sie Ihren API-Schlüssel

Generieren Sie einen Schlüssel im Helius Dashboard.Dieser Schlüssel dient als Ihr Authentifizierungstoken für LaserStream.
Tarifanforderungen: LaserStream Devnet ist in allen Tarifen verfügbar. LaserStream Mainnet erfordert einen Business- oder Professional-Tarif.
4

Abonnement-Skript erstellen

Erstellen Sie index.ts mit folgendem Inhalt:
5

Ersetzen Sie Ihren API-Schlüssel und wählen Sie Ihre Region

Aktualisieren Sie in index.ts das config Objekt mit:
  1. Ihrem tatsächlichen API-Schlüssel aus dem Helius Dashboard
  2. Dem LaserStream-Endpunkt, der Ihrem Serverstandort am nächsten liegt
Netzwerk- & Regionenauswahl-Beispiele:
  • Für Produktion (Mainnet):
    • Europa: Verwenden Sie fra (Frankfurt), ams (Amsterdam) oder lon (London)
    • US Ost: Verwenden Sie ewr (New York)
    • US West: Verwenden Sie slc (Salt Lake City) oder lax (Los Angeles)
    • Asien: Verwenden Sie tyo (Tokio) oder sgp (Singapur)
  • Für Entwicklung (Devnet):
    • Verwenden Sie https://laserstream-devnet-ewr.helius-rpc.com
6

Ausführen und Ergebnisse anzeigen

Jedes Mal, wenn eine 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 das helius-laserstream SDK mit eingebautem Auto-Reconnect und historischer Wiedergabe.

Konto-Abonnements

Überwachen Sie Änderungen am Saldo, an Daten und am Eigentum von spezifischen Konten mit Filtern.

Transaktionsüberwachung

Streamen Sie Transaktionen, die Zielkonten betreffen, filtern Sie nach Programm, Abstimmung oder Fehlerstatus.

Slot- & Blocküberwachung

Verfolgen Sie Netzwerk-Consensus, Blockproduktion und Übergänge des Verpflichtungsniveaus.

Transaktionsdaten dekodieren

Analysieren Sie die binären transactionUpdate Nutzlasten in lesbare Solana-Transaktionen.

Stream Pump AMM-Daten

Praxisbeispiel: Überwachen Sie Pump AMM-Trades mit reconnect-sicheren Filtern.
Der @triton-one/yellowstone-grpc Client funktioniert gegen dieselben Endpunkte, wenn Sie das rohe Yellowstone-Protokoll bevorzugen. Siehe die Yellowstone gRPC Referenz für Protokollebene-Details.

Subscribe-Request

Im Subscribe-Request müssen Sie die folgenden allgemeinen Parameter einbeziehen:
Historische Wiedergabe: Sie können optional ein 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.
Als Nächstes müssen Sie die Filter für die Daten angeben, zu denen Sie sich anmelden möchten, z.B. Konten, Blöcke, Slots oder Transaktionen.
Definieren Sie Filter für Slot-Updates. Der von Ihnen verwendete Schlüssel (z.B. 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).
Definieren Sie Filter für Konto-Updates. Der von Ihnen verwendete Schlüssel (z.B. tokenAccounts) ist ein benutzerdefiniertes Label für diese spezifische Filterkonfiguration.
array
Passt zu jedem öffentlichen Schlüssel aus dem bereitgestellten Array.
array
Der öffentliche Schlüssel des Kontoinhabers. Passt zu jedem öffentlichen Schlüssel aus dem bereitgestellten Array.
array
Ähnlich den Filtern in getProgramAccounts. Dies ist ein Array von datasize und/oder memcmp Filtern. Für memcmp geht das Vergleichsobjekt auf einen der bytes, base58 oder base64 direkt auf dem memcmp Objekt.
enum
veraltet
Veraltet — hat keine Wirkung ab Agave 4.2. Das Setzen von notifyOn hat keine Wirkung. Das Feld wird zu einem späteren Zeitpunkt entfernt.
Wenn alle Felder leer sind, werden alle Konten gesendet. Andernfalls:
  • Felder arbeiten als logisches UND.
  • Werte innerhalb von Arrays wirken als logisches ODER (außer innerhalb von filters, die als logisches UND funktionieren).
Verfolgen Sie mehr als ~10.000 Konten? Anstelle einer expliziten Pubkey-Liste (32 Byte pro Konto) verwenden Sie einen komprimierten Cuckoo-Filter (~3–4 Byte pro Konto), um in einem einzigen Stream zu Hunderttausenden von Konten zu abonnieren. Verfügbar in den Rust- und JavaScript-SDKs.
Definieren Sie Filter für Transaktionsupdates. Der Schlüssel, den Sie verwenden (z.B. 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).
Definieren Sie Filter für Block-Updates. Der von Ihnen verwendete Schlüssel (z.B. myBlockLabel) ist ein benutzerdefiniertes Label für diese spezifische Filterkonfiguration.
Dies funktioniert ähnlich wie Blöcke, schließt jedoch Transaktionen, Konten und Einträge aus. Der von Ihnen verwendete Schlüssel (z.B. 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.
Abonnieren Sie Ledger-Einträge. Der von Ihnen verwendete Schlüssel (z.B. 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)

SDK-Optionen

Wir bieten offizielle SDKs für mehrere Programmiersprachen an: Für andere Sprachen oder benutzerdefinierte Implementierungen können Sie die Yellowstone gRPC Proto-Dateien direkt verwenden, um gRPC-Clients für Ihre bevorzugte Sprache zu generieren.

Fehlerbehebung / FAQ

A: Leistungsprobleme mit LaserStream-Verbindungen werden typischerweise durch Folgendes verursacht:
  • 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.conf hinzu:
    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.
Debugging von Client-Verzögerungen: Um Ihnen beim Debuggen des Clients zu helfen, haben wir ein Tool entwickelt, um die maximale Bandbreite von Ihrem Knoten zu einem LaserStream gRPC-Server zu testen. Um es zu verwenden, führen Sie aus:
Die Ausgabe gibt die maximale Netzwerkkapazität zwischen Ihrem Server und dem LaserStream-Server zurück. Mindestens benötigen Sie 10MB/s, um alle Transaktionsdaten zu abonnieren und 80MB/s, um alle Kontodaten zu abonnieren. Wir empfehlen, mindestens 2x der erforderlichen Kapazität für optimale Leistung zu haben.
A: Überprüfen Sie, ob Ihr API-Schlüssel und Endpunkt korrekt sind und dass Ihr Netzwerk ausgehende gRPC-Verbindungen zum angegebenen Endpunkt zulässt. Prüfen Sie die Helius-Statusseite auf etwaige anstehende Vorfälle.
A: Überprüfen Sie die logischen Operatoren (AND/OR) in den Filterabschnitten. Stellen Sie sicher, dass die öffentlichen Schlüssel korrekt sind. Überprüfen Sie das in Ihrer Anfrage spezifizierte Verpflichtungsniveau.
A: Ja, Sie können Filterkonfigurationen unter mehreren Schlüsseln definieren (z.B. accounts, transactions) innerhalb desselben SubscribeRequest Objekts.
A: Wir implementieren keine Konsumentengruppen. Stattdessen liefert LaserStream die gleichen Ergebnisse, die Teams wünschen: Fortsetzung, Wiedergabe und Multi-Node-Zuverlässigkeit ohne Koordinationsschicht (und die Latenz/den Overhead, die damit einhergehen). Wir glauben, dass für die meisten Arbeitslasten Konsumentengruppen nicht benötigt werden und sie Latenz und betrieblichen Overhead hinzufügen. Ein Beispiel: Eine einzelne LaserStream gRPC-Verbindung kann bis zu 10× Solanas Transaktions- + Kontodaten senden, und die meisten Clients abonnieren einen kleinen, gefilterten Ausschnitt. Die Verwendung von Konsumentengruppen in diesem Fall verbrennt Leistungsreserven und stellt einen weiteren Ausfallpunkt dar.
A: LaserStream kürzt Transaktionslog-Nachrichten standardmäßig auf 10 KB für bessere Geschwindigkeit und Leistung. Wenn Sie vollständige Logs benötigen, verbinden Sie sich mit einem dedizierten, ungekürzten Endpunkt — siehe Log-Kürzung für die Liste.
A: Wenn Sie in Ihrem ursprünglichen 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.