Schnellstart
1
Zugang erhalten
Parsed Streams befindet sich in der offenen Beta und ist in kostenpflichtigen Plänen verfügbar. Holen Sie sich Ihren API-Schlüssel vom Helius-Dashboard und verbinden Sie sich mit dem Beta-Endpunkt unter
wss://fs-beta.helius-rpc.com.Authentifizieren Sie sich mit dem API- Schlüssel Ihres Projekts, der als api-key-Abfrageparameter (oder im x-api-key-Header) übergeben wird.2
Verbinden
wscat
3
Mit einem Filter abonnieren
Senden Sie Die Antwort
parsedTransactionSubscribe mit einem Filter und optionalen Optionen:result ist eine ganze Zahl Abonnement-ID:4
Eine Benachrichtigung lesen
Jede passende Transaktion wird als ein
parsedTransactionNotification empfangen, bereits dekodiert, wobei matchedIndexes auf die Anweisungen verweist, die Ihr Filter getroffen hat. Siehe Benachrichtigungen für die vollständige Form.5
Abmelden
Anleitungen
Jupiter Swaps verfolgen
Verwenden Sie
describeProgram, um einen vertrauenswürdigen Filter zu erstellen, bevor Sie abonnieren.Pump.fun Mints verfolgen
Ein wiederverbindungs-sicherer Listener, der jede neue Pump.fun Tokenbereitstellung protokolliert.
Reconnects handhaben
Überleben Sie Leerlauf-Timeouts und Deployments und füllen Sie dann genau das nach, was Sie verpasst haben.
Protokollreferenz
Parsed Streams verwendet JSON-RPC 2.0 über eine einzelne WebSocket-Verbindung. Jede Anfrage erhält eine Antwort mit demselbenid. Ein Abonnement sendet dann parsedTransactionNotification-Nachrichten, bis Sie sich abmelden oder die Verbindung trennen.
Abonnieren
Senden SieparsedTransactionSubscribe mit einem Filter und optionalen Optionen. Die Antwort result ist eine ganze Zahl Abonnement-ID.
Request
Response
Filterfelder
Mindestens eine vonprograms oder accounts.include ist erforderlich. Die von Ihnen festgelegten Felder werden mit UND kombiniert: Eine Anweisung muss alle erfüllen, um übereinzustimmen.
string[]
Programm-IDs zum Abgleichen (Base58-Adressen, keine Namen). Eine Anweisung stimmt überein, wenn ihr Programm in dieser Liste enthalten ist. ODER innerhalb der Liste.
string[]
Dekodierte Anweisungsnamen, wie etwa
route. Zuerst genau abgeglichen, dann mit einem Fall- und Trennzeichen- unsensitiven Fallback, sodass sharedAccountsRoute auch dem Drahtnamen shared_accounts_route entspricht. ODER innerhalb der Liste. Nur Anweisungen, deren Namen der Katalog identifizieren konnte, können übereinstimmen, also nehmen Sie Namen von describeProgram.string[]
Konto-Adressen. Eine Anweisung stimmt überein, wenn eines dieser Konten in ihrer Kontoliste erscheint. ODER innerhalb der Liste. Funktioniert für jede Anweisung, dekodiert oder nicht. Die Programm-ID selbst zählt hier nicht als Konto.
object
Eine Zuordnung von dekodierten Kontorollennamen zu Adressen, wie etwa
{ "user_transfer_authority": "<pubkey>" }. Jeder Eintrag muss gelten (UND über Einträge hinweg), und die Anweisung muss dekodiert sein, damit dies gilt. Rollennamen passen genau, ohne Berücksichtigung des Falls, also kopieren Sie diese von describeProgram, anstatt zu raten.boolean
Standard:"false"
Beinhaltet Anweisungen aus fehlgeschlagenen Transaktionen.
boolean
Standard:"true"
Innere (CPI) Anweisungen können übereinstimmen. Setzen Sie
false, um nur Top-Level-Anweisungen zu treffen.-32602 abgelehnt, anstatt stillschweigend ignoriert zu werden, sodass Tippfehler laut fehlschlagen, anstatt nichts zu treffen.
Optionen
Der zweite Parameter ist optional.string
Standard:"confirmed"
Nur
confirmed wird unterstützt.string
Standard:"full"
Was jede Benachrichtigung enthält.
full: die gesamte Transaktion, jede Anweisung, plus matchedIndexes, die auf die Filtertreffer zeigt. matched: nur die übereinstimmenden Anweisungen, keine Indexliste. raw: nur übereinstimmende Anweisungen, jede reduziert auf ihre Position, programId, und Base58 data Blob, ohne dekodierte Felder und ohne accountKeys Array. Verwenden Sie matched, wenn die Bandbreite wichtiger ist als der Kontext (vollständige Nutzlasten sind im Durchschnitt etwa dreimal so groß), und raw, wenn Sie Anweisungsdaten selbst dekodieren und nur die Bytes benötigen.Benachrichtigungen
Eine Benachrichtigung pro passender Transaktion pro Abonnement. Mit dem Standarddetails: "full":
transactionist der vollständige Kontext.feeist in Lamports.accountKeysist die vollständige Schlüsselliste, einschließlich der von Adresssuchtabellen geladenen Schlüssel, in der Reihenfolge, in der die Kette sie meldet.feePayerist immeraccountKeys[0].errorenthält den Transaktionsfehler als strukturiertes JSON, zum Beispiel{"InstructionError": [2, {"Custom": 6001}]}, wennstatus"error"ist.summaryhat überall die gleiche Form: eintype(wieswapodertransfer), ein lesbarerdescriptionund eine strukturierteparsedDataNutzlast, wenn der Parser die Aktion erkennt — für einen Swap: das Protokoll, Mengen und Mints.transaction.summarykennzeichnet die Hauptaktion der Transaktion; jede erkannte Anweisung enthält ihre eigenesummarymit der gleichen Form. Um jeden Swap in einer Transaktion zu sammeln, iterieren Sieinstructionsund lesen Siesummary.parsedData, wosummary.type"swap"ist.nativeTransfersundtokenTransferslisten die SOL- und Token-Bewegungen auf, die der Parser aus der gesamten Transaktion extrahiert hat, in derselben Form, die die Parsed Events API zurückgibt, damit Stream- und API-Konsumenten denselben Verarbeitungscode teilen können. Beide sind immer vorhanden, möglicherweise leer.instructionsist jede Anweisung der Transaktion in Ausführungsreihenfolge: jede oberste Anweisung, gefolgt von ihren inneren Anweisungen. Jeder Eintrag enthält seine eigene Position:topIndexgibt an, zu welcher obersten Anweisung er gehört (beginnend bei 0),innerIndexist seine Position unter den inneren Aufrufen dieser Anweisung (nullbedeutet, dass es die oberste Anweisung selbst ist) undstackHeightist die Aufruftiefe (1 für oberstes Niveau). Verwenden Sie diese, nicht die Array-Position.matchedIndexessind Indizes ininstructions, die Ihnen sagen, welche Ihre Filter tatsächlich getroffen haben. Der Rest ist für den Kontext da. Mitdetails: "matched"enthält das Array nur die Treffer undmatchedIndexesist abwesend.decodedNamen sind snake_case (in_amount,user_transfer_authority), wie sie im IDL des Programms veröffentlicht sind. Ganzzahl-Argumente sind häufig Zeichenfolgen ("1000000"), da u64-Werte nicht in JavaScript-Zahlen passen.blockTimeist derzeit immernull. Nicht darauf verlassen.- Erwarten Sie eine Mischung aus dekodierten und undekodierten Anweisungen innerhalb einer Transaktion: ein vollständig dekodierter Swap kann neben einem nicht erkannten Memo stehen. Verzweigen Sie nach
decoded: Wenn esnullist, trägt die AnweisungrawData(Base58-Bytes) undrawAccounts(einfache Pubkey-Liste) stattdessen, so dass Sie immer etwas zum Arbeiten haben.
details: "raw" schrumpft das value auf Transaktionsmeta und Blobs. accountKeys, nativeTransfers, tokenTransfers, matchedIndexes und alle dekodierten Felder sind weg (die Transaktion summary ist noch enthalten); jede übereinstimmende Anweisung entspricht ihrer Position, ihrem Programm und ihren data Bytes in Base58, genau so, wie sie auf der Kette erscheinen (auch für Anweisungen vorhanden, die der Katalog hätte dekodieren können):
Abmelden
true zurück, wenn das Abonnement existierte und Ihnen gehörte. Benachrichtigungen stoppen sofort. Das Schließen der Verbindung entfernt alle ihre Abonnements.
Entdeckung
Der häufigste Fehler bei dieser Art von API ist ein Filter, der gültig ist, aber nichts trifft, normalerweise ein geschätzter Anweisungs- oder Rollename.describeProgram verhindert dies, indem es die genauen Namen zurückgibt, mit denen der Matcher vergleicht:
Request
Response
jupiter, und eine Namenssuche kann zum älteren führen). Wenn Sie nach Namen nachschlagen, überprüfen Sie, ob result.id das Programm ist, das Sie abonnieren möchten.
Empfohlener Ablauf: describeProgram, um die genauen Anweisungs- und Rollennamen zu erhalten, den Filter mit diesen Namen erstellen und dann abonnieren. Der Leitfaden Jupiter Swaps verfolgen führt Sie von Anfang bis Ende durch diesen Prozess.
Grenzen
Fehler
Fehler folgen JSON-RPC 2.0:{ "error": { "code": <int>, "message": "<text>" }, "id": <id> }. Nachrichten geben genau an, was falsch war und wo.
Verbindungen können auch mit einem WebSocket-Schließcode geschlossen werden — siehe Reconnects handhaben für die Bedeutung jedes Codes und wie Sie sich erholen können.