tokenAccounts der WebSocket-Methode transactionSubscribe kann eine Subscription Aktivitäten auf den zugehörigen Token Accounts (ATAs) einer Wallet erfassen, nicht nur Transaktionen, in denen der pubkey der Wallet direkt vorkommt. Derselbe Filter ist über gRPC verfügbar. Die gRPC-Version findest du unter Token-Account-Filterung (ATA).
Das Problem: Einfache Account-Filter verpassen eingehende Token-Übertragungen
Wenn du eine Wallet mitaccountInclude: [wallet] überwachst, erfasst du nur Transaktionen, bei denen der pubkey dieser Wallet in den Account-Schlüsseln der Transaktion vorkommt. Ein häufiger Fall wird nicht erfasst: Wenn jemand ein SPL-Token an die Wallet sendet, zum Beispiel USDC, betrifft die Übertragung das zugehörige Token Account (ATA) der Wallet — eine separate, vom Programm abgeleitete Adresse — und nicht den pubkey der Wallet selbst.
Eine einfache Subscription mit accountInclude: [wallet] erkennt daher keine eingehenden Token-Übertragungen. Du müsstest vorab jedes ATA der Wallet auflisten und einzeln zum Filter hinzufügen. ATAs werden jedoch bei Bedarf erstellt — eines pro Mint. Daher kannst du nicht im Voraus alle ATAs kennen.
So funktioniert die Erweiterung mit tokenAccounts
Setze tokenAccounts in der Subscription, um den Abgleich zu erweitern. Eine Wallet unter accountInclude erfasst dann auch Transaktionen, die ein Token Account in ihrem Besitz betreffen. Der Abgleich erfolgt nach Eigentümer: LaserStream ermittelt zum Zeitpunkt des Abgleichs die Token Accounts, die deinen Adressen unter accountInclude gehören. Dadurch werden alle Token Accounts der Wallet erfasst, einschließlich nicht kanonischer Accounts, und nicht nur die abgeleitete ATA-Adresse. Du musst die ATAs nie selbst auflisten.
Subscriptions ohne tokenAccounts verhalten sich genau wie bisher. Du kannst das Feld daher problemlos zu einem vorhandenen Filter hinzufügen.
Erweiterungsmodi
tokenAccounts akzeptiert einen von drei String-Werten:
Beginne mit
"balanceChanged". Dieser Modus erfasst tatsächliche Geldbewegungen mit nur einem Bruchteil des Volumens von "all".
Verwendung in transactionSubscribe
tokenAccounts ist eine Helius-Erweiterung der standardmäßigen Solana WebSocket API. Ein ungültiger Wert gibt den JSON-RPC-Fehler -32602 zurück: Invalid tokenAccounts value '<x>', expected one of: none, balanceChanged, all.
Ermitteln, was erfasst wurde
Nachdem eine Transaktion durch die ATA-Erweiterung erfasst wurde, findest du die Token-Bewegungen der Wallet inmeta.postTokenBalances und meta.preTokenBalances der Transaktion. Filtere diese Einträge nach owner, um die Guthaben zu isolieren, die tatsächlich deiner Wallet gehören. Vergleiche dann preTokenBalances mit postTokenBalances für denselben accountIndex, um zu sehen, wie stark sich jeder Mint verändert hat. Das obige Beispiel zeigt diesen Filterschritt.
Weitere Informationen
transactionSubscribe
Alle Filter und Optionen für
transactionSubscribe, einschließlich tokenAccounts.Token Account Filtering (gRPC)
Dieselbe Erweiterung mit
tokenAccounts für LaserStream gRPC-Transaktionsfilter.WebSocket Quickstart
Stelle eine Verbindung zu LaserStream WebSocket her und streame deine ersten Ereignisse.