tokenAccounts de LaserStream permet à un abonnement aux transactions gRPC de correspondre aux activités sur les comptes de tokens associés (ATAs) qu’un portefeuille possède, et pas seulement aux transactions où la clé publique du portefeuille apparaît directement. Le même filtre est disponible via WebSocket — voir Filtrage des comptes de tokens (ATA) via WebSocket.
Le problème : les filtres de compte simples manquent les transferts de tokens entrants
Quand vous surveillez un portefeuille avecaccountInclude: [wallet], vous ne faites correspondre que les transactions où la clé publique du portefeuille apparaît dans les clés de compte de la transaction. Un cas courant échappe à cette surveillance : lorsque quelqu’un envoie un token SPL au portefeuille (USDC, par exemple), le transfert touche le compte de token associé (ATA) du portefeuille — une adresse dérivée par programme distincte — pas la clé publique du portefeuille elle-même.
Ainsi, un abonnement simple accountInclude: [wallet] ne voit jamais les transferts de tokens entrants. Vous devriez énumérer chaque ATA que le portefeuille possède à l’avance et ajouter chacun au filtre — mais les ATAs sont créés à la demande (un par frappe), vous ne pouvez donc pas connaître l’ensemble complet à l’avance.
Comment fonctionne l’expansion tokenAccounts
Définissez tokenAccounts sur un filtre de transaction pour élargir la correspondance afin qu’un portefeuille accountInclude corresponde également aux transactions qui touchent un compte de token qu’il possède. La correspondance est basée sur le propriétaire : LaserStream résout les comptes de tokens détenus par vos adresses accountInclude au moment de la correspondance, permettant de capturer tout compte de token que le portefeuille possède — y compris les non canoniques — pas seulement l’adresse ATA dérivée. Vous n’avez jamais à lister les ATAs vous-même.
Les abonnements qui omettent tokenAccounts se comportent exactement comme avant, donc il est sûr de l’ajouter à un filtre existant.
Pour filtrer par jeton plutôt que par portefeuille, consultez Filtrage par mint de jeton. Les deux options sont combinables : un même filtre peut donc surveiller l’activité d’un seul portefeuille pour un seul jeton.
Modes d’extension
tokenAccounts accepte l’une des trois valeurs de chaîne suivantes :
Commencez par
"balanceChanged". Cette valeur capture les mouvements réels de fonds avec une fraction du volume de "all".
Utilisation dans LaserStream gRPC
AjouteztokenAccounts à un filtre de transaction dans votre SubscribeRequest. Le SDK Helius LaserStream convertit pour vous la chaîne en énumération TokenAccountExpansionControlFlag du protocole (incluse dans yellowstone-grpc-proto 12.5.0+).
Interprétation des correspondances
Lorsqu’une transaction correspond au filtre grâce à l’extension ATA, les mouvements de jetons du portefeuille figurent dans les champsmeta.postTokenBalances et meta.preTokenBalances de la transaction. Filtrez ces entrées selon owner pour isoler les soldes qui appartiennent réellement à votre portefeuille, puis comparez preTokenBalances à postTokenBalances pour un même accountIndex afin de déterminer la variation de chaque mint. L’exemple ci-dessus présente l’étape de filtrage ; le guide de surveillance des transactions présente la comparaison complète.
Ressources connexes
Transaction Monitoring
Stratégies de filtrage complètes et exemple exécutable de surveillance d’un portefeuille via gRPC.
Token Account Filtering (WebSocket)
Le même champ
tokenAccounts dans la méthode WebSocket transactionSubscribe.Subscribe Request Reference
Tous les champs de filtre de transaction, y compris
tokenAccounts.Compressed Filters
Suivez des centaines de milliers de comptes dans un seul flux.
Token Mint Filtering
Abonnez-vous à toutes les transactions d’un mint de jeton avec
matchMints.