tokenAccounts Filter bei der transactionSubscribe WebSocket-Methode ermöglicht es einem Abonnement, Aktivitäten auf den zugehörigen Tokenkonten (ATAs) eines Wallets zuzuordnen, nicht nur Transaktionen, bei denen der Pubkey des Wallets direkt erscheint. Der gleiche Filter ist über gRPC verfügbar — siehe Tokenkonto (ATA) Filterung für die gRPC-Version.
Das Problem: einfache Kontofilter verpassen eingehende Token-Transfers
Wenn du ein Wallet mitaccountInclude: [wallet] beobachtest, werden nur Transaktionen erfasst, bei denen der Wallet-Pubkey in den Kontoschlüsseln der Transaktion erscheint. Ein häufiger Fall wird übersehen: Wenn jemand dem Wallet ein SPL-Token (zum Beispiel USDC) sendet, berührt der Transfer das zugehörige Tokenkonto (ATA) des Wallets — eine separate, programmdefinierte Adresse — nicht den Wallet-Pubkey selbst.
Ein einfaches accountInclude: [wallet] Abonnement sieht also niemals eingehende Token-Transfers. Du müsstest im Voraus jede ATA, die das Wallet besitzt, aufzählen und jede zur Filterung hinzufügen — aber ATAs werden bei Bedarf erstellt (eins pro Mint), sodass du das vollständige Set nicht im Voraus kennen kannst.
Wie die tokenAccounts Erweiterung funktioniert
Setze tokenAccounts auf das Abonnement, um die Zuordnung so zu erweitern, dass ein accountInclude Wallet auch Transaktionen zuordnet, die ein Tokenkonto berühren, das es besitzt. Die Zuordnung basiert auf dem Besitzer: LaserStream löst zum Zeitpunkt der Zuordnung die Tokenkonten auf, die von deinen accountInclude Adressen besessen werden, sodass es jedes Tokenkonto erfasst, das das Wallet besitzt — einschließlich nicht-kanonischer — nicht nur die abgeleitete ATA-Adresse. Du musst die ATAs selbst niemals auflisten.
Abonnements, die tokenAccounts auslassen, verhalten sich genau wie zuvor, sodass es sicher ist, sie zu einem bestehenden Filter hinzuzufügen.
Erweiterungsmodi
tokenAccounts nimmt einen von drei String-Werten an:
Starte mit
"balanceChanged". Es erfasst tatsächliche Geldbewegungen bei einem Bruchteil des Volumens von "all".
Verwenden in transactionSubscribe
tokenAccounts ist eine Helius-Erweiterung zur 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.
Lesen, was übereinstimmte
Sobald eine Transaktion über die ATA-Erweiterung übereinstimmt, befindet sich die Tokenbewegung des Wallets inmeta.postTokenBalances und meta.preTokenBalances der Transaktion. Filter diese Einträge nach owner, um die Salden zu isolieren, die dein Wallet tatsächlich besitzt, und vergleiche preTokenBalances mit postTokenBalances auf demselben accountIndex, um zu sehen, wie viel jede Mint bewegt wurde. Das obige Beispiel zeigt den Filterungsschritt.
Verwandtes
transactionSubscribe
Jeder
transactionSubscribe Filter und jede Option, einschließlich tokenAccounts.Tokenkonto-Filterung (gRPC)
Dieselbe
tokenAccounts Erweiterung bei LaserStream gRPC Transaktionsfiltern.WebSocket Quickstart
Verbinde dich mit LaserStream WebSocket und streame deine ersten Ereignisse.