Zum Hauptinhalt springen

Was ist transactionSubscribe?

Die WebSocket-Methode transactionSubscribe, eine Helius-Erweiterung der standardmäßigen Solana WebSocket API, ermöglicht Transaktionsereignisse in Echtzeit. Gib zur Verwendung ein TransactionSubscribeFilter an. Optional kannst du zur weiteren Anpassung TransactionSubscribeOptions hinzufügen. transactionSubscribe ist über dieselben einheitlichen wss://mainnet.helius-rpc.com- und wss://devnet.helius-rpc.com-endpoints wie die standardmäßigen Solana-Abonnementmethoden verfügbar.

TransactionSubscribeFilter

  • vote: boolesches Flag zum Ein- oder Ausschließen von Abstimmungstransaktionen
  • failed: boolesches Flag zum Ein- oder Ausschließen fehlgeschlagener Transaktionen
  • signature: filtert Updates anhand ihrer Signatur nach einer bestimmten Transaktion
  • accountInclude: Liste der Konten, für die du Transaktionsupdates erhalten möchtest. Nur eines der Konten muss in den Transaktionsupdates enthalten sein, z. B. Konto 1 ODER 2.
  • accountExclude: Liste der Konten, die du von Transaktionsupdates ausschließen möchtest
  • accountRequired: Transaktionen müssen alle angegebenen Konten enthalten, damit sie in Updates aufgenommen werden, z. B. Konto 1 UND 2
  • tokenAccounts: optionale Erweiterung für Associated Token Accounts (ATA) (balanceChanged, all oder none). Weitere Informationen findest du unten unter Wallet einschließlich token-Übertragungen überwachen.
Du kannst in den Arrays accountInclude, accountExclude und accountRequired bis zu 50.000 Adressen angeben.

TransactionSubscribeOptions (optional)

  • commitment: commitment für den Datenabruf (processed, confirmed oder finalized)
  • encoding: Kodierungsformat der zurückgegebenen Daten (base58, base64 oder jsonParsed)
  • transactionDetails: Detailgrad der zurückgegebenen Daten (full, signatures, accounts und none)
  • showRewards: boolesches Flag, das angibt, ob die Updates Belohnungsdaten enthalten sollen
  • maxSupportedTransactionVersion: gibt die höchste Transaktionsversion an, für die du Updates erhalten möchtest. Setze den Wert auf 1, um Legacy-, v0- und v1-Transaktionen zu empfangen. Siehe Unterstützung für Transaction v1.
maxSupportedTransactionVersion ist erforderlich, um die Konten und vollständigen Details einer bestimmten Transaktion zurückzugeben, also transactionDetails: "accounts" | "full".

Beispiel für Transaction Subscribe

In diesem Beispiel abonnieren wir Transaktionen, die das Raydium-Konto 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 enthalten. Wenn eine Transaktion stattfindet, die das Konto 675k...1Mp8 im accountKeys der Transaktion enthält, erhalten wir eine WSS-Benachrichtigung. Entsprechend den Abonnementoptionen wird die Transaktionsbenachrichtigung mit dem commitment processed, der Kodierung jsonParsed und den Transaktionsdetails full gesendet. Sie zeigt außerdem Belohnungen an.

Beispielbenachrichtigung

Wallet einschließlich token-Übertragungen überwachen

Wenn du eine Wallet mit accountInclude überwachst, werden nur Transaktionen gefunden, bei denen der öffentliche Schlüssel der Wallet direkt in den Kontoschlüsseln erscheint. Ein häufiger Fall wird dabei übersehen: Sendet jemand einen SPL token wie USDC an die Wallet, betrifft die Übertragung den Associated Token Account (ATA) der Wallet und nicht ihren öffentlichen Schlüssel. Ein einfaches accountInclude: [wallet]-Abonnement erkennt sie deshalb nicht. Setze das Feld tokenAccounts, um die Übereinstimmung zu erweitern. Das überwachte Konto stimmt dann auch mit Transaktionen überein, bei denen es ein token-Guthaben besitzt:
  • balanceChanged: Übereinstimmung, wenn die Wallet ein token-Guthaben besitzt, dessen Betrag sich in der Transaktion geändert hat oder dessen token account geschlossen wurde. Verwende diese Option für „Benachrichtige mich, wenn tatsächlich Geld bewegt wurde“. Dies ist die präzisere Option mit geringerem Volumen und die häufigste Wahl.
  • all: Übereinstimmung mit jeder Transaktion, die auf ein token-Guthaben im Besitz der Wallet verweist, auch wenn es unverändert bleibt. Höheres Volumen.
  • none: keine Erweiterung. Entspricht dem Weglassen des Felds und ist die Standardeinstellung.
Die Übereinstimmung basiert auf dem Besitzer. Sie erfasst jeden token account im Besitz der Wallet, einschließlich nicht kanonischer Konten, und nicht nur die abgeleitete ATA-Adresse. Ein ungültiger Wert gibt den JSON-RPC-Fehler -32602 zurück. Abonnements ohne tokenAccounts verhalten sich genauso wie zuvor. Eine vollständige Übersicht über die Funktionsweise der ATA-Erweiterung findest du unter token account (ATA) über WebSocket filtern.

Neue Jupiter-DCAs überwachen

Jupiter DCA, auch Dollar Cost Averaging genannt, ermöglicht wiederkehrende Trades auf Solana. Da diese geplanten Kauf- und Verkaufsaufträge on-chain aufgezeichnet werden, können Trader mit der Methode transactionSubscribe und getAsset auf neue Aufträge warten.

Beispielbenachrichtigung

Terminal tables of new Jupiter DCA orders showing the user wallet, token pair, open time, total input, amount per cycle, and interval

Neue pump.fun-token überwachen

Beispielbenachrichtigung

Terminal tables of newly created pump.fun tokens showing the transaction signature, creator wallet, and token mint address

Abonnements verwalten

Abonnement-IDs

Wenn transactionSubscribe erfolgreich ist, gibt der Server im Feld result eine Abonnement-ID zurück. Dieselbe Nummer erscheint in params.subscription bei jeder Benachrichtigung dieses Abonnements:
Speichere die Abonnement-ID aus der response. Du benötigst sie, um das Abonnement zu beenden.

Abonnement beenden

Um keine Benachrichtigungen mehr zu erhalten, rufe transactionUnsubscribe mit der Abonnement-ID auf. Jeder Aufruf von transactionSubscribe über dieselbe Verbindung erstellt ein separates Abonnement mit eigener ID. Beende daher das vorhandene Abonnement, bevor du es erneut erstellst, damit du keine doppelten Benachrichtigungen erhältst.
In diesem Beispiel abonnieren wir Raydium-Transaktionen, lesen die Abonnement-ID aus der response des Servers aus und beenden das Abonnement anschließend mit dieser ID. Kurz nach dem Aufruf von transactionUnsubscribe können noch einige bereits übertragene Nachrichten eintreffen. Das ist erwartetes Verhalten.