Passer au contenu principal
Le filtre 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 avec accountInclude: [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

Ajoutez tokenAccounts à 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+).
Consultez le guide de surveillance des transactions pour obtenir un exemple plus complet qui compare les soldes avant et après la transaction, ainsi que la référence des requêtes d’abonnement pour découvrir tous les champs de filtre de transaction.

Interprétation des correspondances

Lorsqu’une transaction correspond au filtre grâce à l’extension ATA, les mouvements de jetons du portefeuille figurent dans les champs meta.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.