Zum Hauptinhalt springen
Mit dem tokenAccounts-Filter von LaserStream kann eine gRPC-Transaktions-Subscription Aktivitäten auf den zugehörigen Token Accounts (ATAs) einer Wallet erkennen, nicht nur Transaktionen, in denen der Pubkey der Wallet direkt vorkommt. Derselbe Filter ist über WebSocket verfügbar – siehe Filtern nach Token Accounts (ATA) über WebSocket.

Das Problem: Einfache Account-Filter übersehen eingehende token-Übertragungen

Wenn du eine Wallet mit accountInclude: [wallet] überwachst, werden nur Transaktionen erkannt, bei denen der Pubkey dieser Wallet in den Account-Keys der Transaktion vorkommt. Ein häufiger Fall wird übersehen: Wenn jemand ein SPL-token wie USDC an die Wallet sendet, betrifft die Übertragung den zugehörigen Token Account (ATA) der Wallet – eine separate, vom Programm abgeleitete Adresse – und nicht den Pubkey der Wallet selbst. Eine einfache accountInclude: [wallet]-Subscription erkennt daher keine eingehenden token-Übertragungen. Du müsstest vorab jeden ATA der Wallet ermitteln und einzeln zum Filter hinzufügen. ATAs werden jedoch bei Bedarf erstellt – einer pro Mint –, sodass du nicht alle im Voraus kennen kannst.

So funktioniert die tokenAccounts-Erweiterung

Setze tokenAccounts in einem Transaktionsfilter, damit eine accountInclude-Wallet auch mit Transaktionen übereinstimmt, die einen Token Account in ihrem Besitz betreffen. Das Matching ist owner-basiert: LaserStream ermittelt beim Matching die Token Accounts, die deinen accountInclude-Adressen gehören. Dadurch erkennt es jeden Token Account der Wallet – 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. Wenn du nach token statt nach Wallet filtern möchtest, sieh dir Token-Mint-Filterung an. Die beiden Flags lassen sich kombinieren. So kann ein Filter die Aktivität einer einzelnen Wallet für einen einzelnen token überwachen.

Erweiterungsmodi

tokenAccounts akzeptiert einen von drei String-Werten: Beginne mit "balanceChanged". Damit erfasst du tatsächliche Geldbewegungen bei nur einem Bruchteil des Volumens von "all".

In LaserStream gRPC verwenden

Füge tokenAccounts einem Transaktionsfilter in deinem SubscribeRequest hinzu. Das Helius LaserStream SDK konvertiert den String für dich in das TokenAccountExpansionControlFlag-Enum auf Wire-Ebene (Teil von yellowstone-grpc-proto ab Version 12.5.0).
Ein ausführlicheres Beispiel, das Guthaben vor und nach der Transaktion vergleicht, findest du im Leitfaden zur Transaktionsüberwachung. Alle Felder für Transaktionsfilter findest du in der Referenz zum Subscribe Request.

Treffer auslesen

Sobald eine Transaktion über die ATA-Erweiterung übereinstimmt, findest du die token-Bewegungen der Wallet in meta.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 bewegt hat. Das obige Beispiel zeigt den Filterschritt. Der Leitfaden zur Transaktionsüberwachung zeigt den vollständigen Vergleich.

Verwandte Themen

Transaction Monitoring

Umfassende Filterstrategien und ein ausführbares Beispiel zur Wallet-Überwachung über gRPC.

Token Account Filtering (WebSocket)

Dasselbe Feld tokenAccounts für die WebSocket-Methode transactionSubscribe.

Subscribe Request Reference

Alle Felder für Transaktionsfilter, einschließlich tokenAccounts.

Compressed Filters

Verfolge Hunderttausende Konten in einem einzigen stream.

Token Mint Filtering

Abonniere mit matchMints jede Transaktion für einen token Mint.