Zum Hauptinhalt springen
LaserStream bietet genau dieselben Zustellungsgarantien wie Geyser nodes. Dieser Leitfaden beschreibt, welches Verhalten du bei der Nachrichtenzustellung deiner LaserStream streams erwarten kannst.
Diese Garantien gelten für Standardabonnements (Transaktionen, Konten, slots, Blöcke). Vorverarbeitete Transaktionen (Teil von Shred Delivery) verwenden separate Zustellungsgarantien nach dem Best-Effort-Prinzip.

Exactly-once-Zustellung

LaserStream garantiert eine Exactly-once-Zustellung. Jede Nachricht wird genau einmal an deinen stream zugestellt. Du erhältst niemals doppelte Nachrichten und keine Nachricht wird übersprungen. Dazu verbindet sich LaserStream gleichzeitig mit mehreren Solana nodes und entfernt Duplikate aus eingehenden Daten, bevor diese an deinen stream weitergeleitet werden. Diese multi-node Architektur beseitigt außerdem einzelne Ausfallpunkte und gewährleistet maximale Verfügbarkeit, ohne die korrekte Zustellung zu beeinträchtigen.

Nachrichtenreihenfolge nach commitment-Level

Die Zustellungsreihenfolge hängt vom commitment-Level der Nachrichten ab:

Confirmed und finalized

Alle Nachrichten mit dem Status confirmed und finalized werden der Reihe nach zugestellt. Mit diesen commitment-Levels erhältst du eine konsistente, sequenzielle Ansicht des Onchain-Zustands.

Processed

Alle Nachrichten mit dem Status processed werden in aufsteigender Reihenfolge der slots ausgegeben, sofern kein Fork vorliegt. Bei einem Fork kann die Reihenfolge der slots vorübergehend abweichen, während sich das Netzwerk um die kanonische Chain neu organisiert. Sobald der Fork aufgelöst ist, wird die aufsteigende Reihenfolge fortgesetzt.
Beim commitment-Level processed besteht eine geringe Wahrscheinlichkeit, dass ein verarbeiteter slot später übersprungen oder durch einen Fork verworfen wird. Geyser sendet keine expliziten Rollback-Benachrichtigungen für Aktualisierungen, die durch einen Fork verworfen wurden. Wenn deine Anwendung Daten auf dem processed-Level verarbeitet, musst du berücksichtigen, dass einige Aktualisierungen zu slots gehören können, die letztlich aufgegeben werden. Verwende für Anwendungen, die Gewissheit benötigen, das commitment-Level confirmed oder finalized.

Reihenfolge innerhalb eines slots

Innerhalb eines einzelnen slots stellt LaserStream Kontoaktualisierungen und Transaktionen mit den folgenden Garantien zu:

Kontoaktualisierungen vor Transaktionen

Für jede Transaktion werden die dadurch verursachten Kontoaktualisierungen vor der Transaktion selbst zugestellt:

Transaktionsübergreifende Reihenfolge

LaserStream behält dieselbe Reihenfolge wie das Geyser-Plugin von Agave bei. Ob Aktualisierungen aus verschiedenen Transaktionen in einer deterministischen Reihenfolge eintreffen, hängt von ihren Schreibsperren ab:
  • Dieselbe Schreibsperre (z. B. drei Trades im selben Raydium-Pool): immer deterministisch. Agave führt diese nacheinander aus, da sie in dasselbe Konto schreiben.
  • Unterschiedliche Schreibsperren (z. B. zwei voneinander unabhängige Transaktionen): nicht unbedingt deterministisch. Agave kann diese parallel ausführen, wodurch ihre Aktualisierungen im stream vermischt werden können.
Verwende den Block-/Transaktionsindex aus den Transaktionsdaten, um unabhängig von den Schreibsperren eine vollständig deterministische Reihenfolge zu rekonstruieren.

Normalisierung der Schreibversionen

LaserStream normalisiert Schreibversionen über seine multi-node Architektur hinweg. Im Gegensatz zu unverarbeitetem Geyser oder Yellowstone, wo Schreibversionen lokal für jeden node gelten und voneinander abweichen können, bietet LaserStream konsistente Schreibversionen, auf die du dich bei der Reihenfolge von Kontoaktualisierungen auf dem processed-Level verlassen kannst.
Vorübergehende Ausnahme: Konten mit mehr als 512 KB werden derzeit aus Leistungsgründen im Geyser-Plugin gepuffert. Dies kann die deterministische Reihenfolge für diese Konten beeinflussen. Diese Einschränkung wird bald entfernt.

Benachrichtigungen zu slots

Benachrichtigungen zu processed slots treffen ein, nachdem alle Nachrichten für den jeweiligen slot zugestellt wurden. Wenn du eine Benachrichtigung zu einem processed slot erhältst, kannst du also davon ausgehen, dass alle zugehörigen Transaktionsdaten und Kontoaktualisierungen bereits an deinen stream gesendet wurden. Du kannst Benachrichtigungen zu slots als Signal verwenden, um gepufferte Daten für den jeweiligen slot zu leeren oder freizugeben.

Datenkontinuität bei Verbindungsabbrüchen

LaserStream hält einen Puffer mit aktuellen slot-Daten vor. Damit kannst du per historischer Wiedergabe auf Daten aus den letzten 48 Stunden (~691.200 slots bei aktueller Netzwerkgeschwindigkeit) zugreifen. Wenn deine Anwendung die Verbindung verliert, kannst du sie wiederherstellen und beim zuletzt verarbeiteten slot fortfahren, ohne Daten zu verpassen. Bei Verwendung eines LaserStream SDK-Clients erfolgt diese Wiederherstellung automatisch. Der Client verfolgt deine Position im stream anhand der slot-Nummer und stellt die Verbindung nahtlos wieder her. Du musst keine eigene Logik für die Wiederverbindung implementieren.

Referenz der commitment-Levels