Übersicht
LaserStream ist ein verwalteter Solana-gRPC-Streamingdienst. Er ist auf Protokollebene mit dem offenen Yellowstone-gRPC-Protokoll kompatibel. Dadurch funktioniert jeder Yellowstone-Client sofort. Zusätzlich bietet er Funktionen für den Produktivbetrieb wie historische Wiedergabe, Failover über mehrere node und eine vollständig verwaltete Umgebung. LaserStream verwendet das quelloffene gRPC-Protokoll. So vermeidest du die Bindung an einen Anbieter und erhältst maximale Kompatibilität mit bestehenden gRPC-Implementierungen. Du kannst entweder den standardmäßigen@triton-one/yellowstone-grpc-Client oder das leistungsoptimierte Helius LaserStream SDK verwenden. Das SDK bietet unter anderem einen höheren Durchsatz, automatische Neuverbindungen, Subscription-Verwaltung und Fehlerbehandlung.
LaserStream SDK is 40x Faster vs. JavaScript Yellowstone Clients
Endpoints und Regionen
LaserStream ist weltweit in mehreren Regionen verfügbar. Wähle für optimale Leistung den endpoint aus, der deiner Anwendung am nächsten ist:Mainnet-endpoints
Devnet-endpoint
- Wähle für Produktionsanwendungen den Mainnet-endpoint aus, der deinem Server am nächsten ist. So erhältst du die beste Leistung. Verwende bei einem deployment in Europa beispielsweise Amsterdam (
ams) oder Frankfurt (fra) - Verwende für Tests:
https://laserstream-devnet-ewr.helius-rpc.com.
zstd-Komprimierung
Alle LaserStream-gRPC-endpoints unterstützen die zstd-Komprimierung. Die Komprimierung ist optional: responses bleiben unkomprimiert, sofern dein Client keine Unterstützung für zstd signalisiert.
Aktiviere zstd im Helius LaserStream TypeScript SDK:
zstd reduziert die Netzwerkbandbreite, verursacht aber zusätzlichen Rechenaufwand für die Komprimierung. Führe Benchmarks mit deiner Subscription-Arbeitslast durch, bevor du es für latenzempfindliche stream aktivierst.
Kürzung von Protokollen
Standardmäßig kürzt LaserStream Transaktionsprotokollmeldungen auf 10 KB, um Geschwindigkeit und Leistung zu verbessern. Wenn du vollständige Protokolle benötigst, stehen spezielle ungekürzte endpoints zur Verfügung. Weitere Informationen findest du unter Kürzung von Protokollen.Schnellstart
Create a New Project
Install Dependencies
tsx, weil das standardmäßige npx tsc --init in TypeScript 5.x verbatimModuleSyntax, module: "nodenext" und types: [] setzt. Diese verhindern alle eine schnelle Ausführung mit ts-node index.ts. tsx führt .ts-Dateien ohne tsconfig aus.Obtain Your API Key
Create a Subscription Script
index.ts mit folgendem Inhalt:Replace Your API Key and Choose Your Region
index.ts das config-Objekt mit:- Deinem tatsächlichen API key aus dem Helius Dashboard
- Dem LaserStream-endpoint, der deinem Serverstandort am nächsten ist
- Für die Produktion (Mainnet):
- Europa: Verwende
fra(Frankfurt),ams(Amsterdam) oderlon(London) - Osten der USA: Verwende
ewr(New York) - Westen der USA: Verwende
slc(Salt Lake City) oderlax(Los Angeles) - Asien: Verwende
tyo(Tokio) odersgp(Singapur)
- Europa: Verwende
- Für die Entwicklung (Devnet):
- Verwende
https://laserstream-devnet-ewr.helius-rpc.com
- Verwende
Run and View Results
confirmed-token TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA betrifft, siehst du die Daten in deiner Konsole.Häufige Workflows
Schritt-für-Schritt-Anleitungen für die häufigsten Workflows. Jede Anleitung verwendet dashelius-laserstream SDK mit integrierter automatischer Neuverbindung und historischer Wiedergabe.
Account Subscriptions
Transaction Monitoring
Slot & Block Monitoring
Decoding Transaction Data
transactionUpdate-payloads in lesbare Solana-Transaktionen um.Stream Pump AMM Data
Subscribe-request
Der Subscribe-request muss die folgenden allgemeinen Parameter enthalten:fromSlot-Feld (eine u64-Zahl) in das zentrale SubscribeRequest-Objekt aufnehmen, um Daten ab einem bestimmten slot erneut abzuspielen. Die Wiedergabe ist derzeit auf die letzten ~48 Stunden begrenzt (~691.200 slots bei aktueller Netzwerkgeschwindigkeit). Beachte, dass Wiedergaben, die mehr als ~20 Minuten zurückliegen, nur finalisierte Daten zurückgeben.{ offset: uint64, length: uint64 }, mit dem du nur die benötigten Datenausschnitte von Accounts empfangen kannst.Slots
Slots
mySlotLabel, ist eine benutzerdefinierte Bezeichnung für diese spezifische Filterkonfiguration. So kannst du bei Bedarf mehrere benannte Konfigurationen definieren, auch wenn normalerweise eine ausreicht.Accounts
Accounts
tokenAccounts, ist eine benutzerdefinierte Bezeichnung für diese spezifische Filterkonfiguration.datasize- und/oder memcmp-Filtern. Bei memcmp wird der Vergleichswert in bytes, base58 oder base64 direkt im memcmp-Objekt angegeben.notifyOn hat keine Wirkung. Das Feld wird zu einem späteren Zeitpunkt entfernt.- Felder werden mit einem logischen UND verknüpft.
- Werte innerhalb von Arrays werden mit einem logischen ODER verknüpft. Eine Ausnahme bilden Werte innerhalb von
filters, die mit einem logischen UND verknüpft werden.
Transaction
Transaction
myTxSubscription, ist eine benutzerdefinierte Bezeichnung für diese spezifische Filterkonfiguration.accountInclude).tokenAccounts (Associated Token Account). Wenn diese Option gesetzt ist, stimmt eine accountInclude-Wallet auch mit Transaktionen überein, bei denen sie ein SPL-token-Guthaben besitzt – zum Beispiel eingehende token-Übertragungen, die den token-Account der Wallet statt ihres pubkey betreffen. Akzeptiert "balanceChanged" (Übereinstimmungen bei Guthabenänderungen), "all" (jede Referenz, höheres Volumen) oder "none" (keine Erweiterung, Standardeinstellung). Das SDK konvertiert den String in das Wire-Level-Enum TokenAccountExpansionControlFlag (Teil von yellowstone-grpc-proto 12.5.0+). Unter Filterung nach Token-Accounts (ATA) erfährst du, was die Option bewirkt und wie sie funktioniert.matchMints (Standardwert false). Wenn true festgelegt ist, werden die Listen accountInclude, accountExclude und accountRequired nicht nur mit den Account-Keys der Transaktion, sondern auch mit den Mints in ihren token-Guthaben vor und nach der Transaktion abgeglichen. Füge einen Mint zu accountInclude hinzu, um jede Transaktion zu empfangen, die dieses token betrifft. Dazu gehören auch einfache SPL-Übertragungen, die den Mint nie in ihren Account-Keys referenzieren. Diese Option muss explizit aktiviert werden und hat keine Auswirkungen auf bestehende Filter. Erfordert helius-laserstream 0.8.5+ (JS), 0.6.4+ (Rust) oder go/v0.3.0+ (Go). Unter Filterung nach Token-Mints findest du die Semantik und Beispiele.- Felder werden mit einem logischen UND verknüpft.
- Werte innerhalb von Arrays werden als logisches ODER behandelt. Eine Ausnahme ist
accountRequired, wo alle übereinstimmen müssen.
Block
Block
myBlockLabel, ist eine benutzerdefinierte Bezeichnung für diese spezifische Filterkonfiguration.Blocks Meta
Blocks Meta
blockmetadata, ist eine benutzerdefinierte Bezeichnung für diese Subscription. Derzeit stehen keine Filter für Blockmetadaten zur Verfügung. Standardmäßig werden alle Nachrichten übertragen.Entries
Entries
entrySubscribe, ist eine benutzerdefinierte Bezeichnung für diese Subscription. Derzeit stehen keine Filter für Einträge zur Verfügung. Alle Einträge werden übertragen.Codebeispiele (LaserStream SDK)
- Slot Updates
- Account Updates
- Transaction Updates
- Blocks
- Block Metadata
- Entries
- Unary Methods
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: I'm experiencing lag or slow performance with my LaserStream connection. What could be causing this?
Q: I'm experiencing lag or slow performance with my LaserStream connection. What could be causing this?
- Langsamer JavaScript-Client: Der JavaScript-Client kann ins Hintertreffen geraten, wenn er zu viele Nachrichten verarbeitet oder zu viel Bandbreite verbraucht. Grenze die Filter deiner Abonnements stärker ein, um das Nachrichtenvolumen zu reduzieren. Wechsle zum LaserStream JavaScript SDK oder verwende eine andere Sprache.
- Begrenzte lokale Bandbreite: Umfangreiche Abonnements können Clients mit begrenzter Netzwerkbandbreite überlasten. Überwache deine Netzwerkauslastung und erwäge, deine Verbindung aufzurüsten oder den Umfang des Abonnements zu reduzieren.
-
Geografische Entfernung: Lange Netzwerkrouten erhöhen die Latenz und den Paketverlust. Verwende den endpoint, der deinem Server am nächsten ist. Erhöhe bei Verbindungen mit hoher Latenz die Größe deiner Netzwerk-Lesepuffer. Das kann die Bandbreite um das Fünffache oder mehr verbessern:
Füge Folgendes zu
/etc/sysctl.confhinzu, damit die Einstellungen auch nach Neustarts erhalten bleiben:Erhöhe die Fenstergrößen für den HTTP/2-stream und die Verbindung auf 64 MB, um Engpässe bei der Flusssteuerung zu vermeiden. Beides ist erforderlich — wenn du nur das stream-Fenster vergrößerst, bleibt das Fenster auf Verbindungsebene der begrenzende Faktor: - Engpässe bei der clientseitigen Verarbeitung: Stelle sicher, dass deine Logik zur Nachrichtenverarbeitung optimiert ist und den Haupt-Thread nicht über längere Zeit blockiert.
Q: I'm getting connection errors. What should I check?
Q: I'm getting connection errors. What should I check?
Q: Why aren't my filters working as expected?
Q: Why aren't my filters working as expected?
Q: Can I subscribe to multiple types of data (e.g., accounts and transactions) in one request?
Q: Can I subscribe to multiple types of data (e.g., accounts and transactions) in one request?
SubscribeRequest-Objekts Filterkonfigurationen unter mehreren Schlüsseln definieren, zum Beispiel accounts und transactions.Q: Does LaserStream support consumer groups?
Q: Does LaserStream support consumer groups?
Q: Why are my transaction log messages cut off?
Q: Why are my transaction log messages cut off?
Q: Why am I only receiving Pong responses with no account or slot data?
Q: Why am I only receiving Pong responses with no account or slot data?
ping-Feld in deinen ersten SubscribeRequest aufnimmst, ignoriert LaserStream stillschweigend alle Abonnementfilter. Es wird nur ein Pong ohne Konto-, Transaktions- oder slot-Daten zurückgegeben. Entferne zur Behebung ping aus dem ersten request zum Abonnieren. Sende Pings stattdessen separat über die Senke des stream, nachdem das Abonnement eingerichtet wurde. So bleibt die Verbindung aktiv, ohne deine Filter zu beeinträchtigen.