> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Filtrage des comptes de jetons (ATA) via WebSocket

> Capturez les transferts entrants de jetons SPL d'un portefeuille dans les flux LaserStream WebSocket avec le filtre tokenAccounts sur transactionSubscribe — correspondance basée sur le propriétaire.

Le filtre `tokenAccounts` sur la méthode WebSocket [`transactionSubscribe`](/docs/fr/rpc/websocket/transaction-subscribe) permet à une souscription de faire correspondre l'activité sur les **comptes de jetons associés (ATA) qu'un portefeuille possède**, et pas seulement les transactions où la clé publique du portefeuille apparaît directement. Le même filtre est disponible sur gRPC — voir [Filtrage des comptes de jetons (ATA)](/docs/fr/laserstream/token-account-filtering) pour la version gRPC.

## Le problème : les filtres de comptes simples manquent les transferts de jetons entrants

Lorsque vous surveillez un portefeuille avec `accountInclude: [wallet]`, vous ne faites correspondre que les transactions où cette clé publique du portefeuille apparaît dans les clés de compte de la transaction. Un cas courant échappe : quand quelqu'un envoie un jeton SPL (par exemple USDC) au portefeuille, le transfert touche le **compte de jetons associé (ATA)** du portefeuille — une adresse dérivée par programme distincte — pas la clé publique du portefeuille elle-même.

Ainsi, une souscription simple `accountInclude: [wallet]` ne voit jamais les transferts de jetons entrants. Vous devriez énumérer chaque ATA que le portefeuille possède à l'avance et les ajouter tous au filtre — mais les ATA sont créés à la demande (un par frappe), donc vous ne pouvez pas connaître l'ensemble complet à l'avance.

## Comment fonctionne l'expansion `tokenAccounts`

Configurez `tokenAccounts` sur la souscription pour élargir la correspondance de sorte qu'un portefeuille `accountInclude` **corresponde également** aux transactions qui touchent un compte de jeton qu'il possède. La correspondance est **basée sur le propriétaire** : LaserStream résout les comptes de jetons détenus par vos adresses `accountInclude` au moment de la correspondance, donc il capte tout compte de jeton que le portefeuille possède — y compris les comptes non canoniques — et pas seulement l'adresse ATA dérivée. Vous n'avez jamais besoin de lister les ATA vous-même.

Les souscriptions qui omettent `tokenAccounts` se comportent exactement comme avant, donc c'est sûr à ajouter à un filtre existant.

## Modes d'expansion

`tokenAccounts` prend l'une des trois valeurs de chaîne :

| Valeur             | Correspondances                                                                                                  | Volume                             | Utilisez-le pour                                                                                              |
| ------------------ | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| `"balanceChanged"` | Transactions où un solde de jetons détenu a réellement changé (ou son compte de jetons a été fermé)              | Plus faible — le défaut recommandé | "Dites-moi quand l'argent a réellement bougé" — dépôts, retraits, échanges qui se règlent sur le portefeuille |
| `"all"`            | Toute transaction qui référence un compte de jetons que le portefeuille possède, même si le solde n'a pas changé | Plus élevé                         | Visibilité complète de tout ce qui touche les comptes de jetons du portefeuille                               |
| `"none"`           | Pas d'expansion — identique à l'omission du champ                                                                | —                                  | Le défaut                                                                                                     |

Commencez avec `"balanceChanged"`. Il capture le vrai mouvement de fonds à une fraction du volume de `"all"`.

## Utilisez-le dans `transactionSubscribe`

`tokenAccounts` est une extension Helius à l'API WebSocket standard de Solana. Une valeur invalide renvoie une erreur JSON-RPC `-32602` : `Invalid tokenAccounts value '<x>', expected one of: none, balanceChanged, all`.

```javascript theme={"system"}
const ws = new WebSocket('wss://mainnet.helius-rpc.com/?api-key=<API_KEY>');

ws.on('open', () => {
  ws.send(JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'transactionSubscribe',
    params: [
      {
        accountInclude: ['<WALLET_PUBKEY>'],
        tokenAccounts: 'balanceChanged' // also match the wallet's ATAs
      },
      { commitment: 'confirmed', encoding: 'jsonParsed', maxSupportedTransactionVersion: 1 }
    ]
  }));
  setInterval(() => ws.ping(), 30_000);
});

ws.on('message', (data) => {
  const msg = JSON.parse(data.toString());
  const result = msg.params?.result;
  if (!result) return;
  // Token balances this wallet owns that changed in the tx
  const owned = (result.transaction.meta.postTokenBalances || [])
    .filter((b) => b.owner === '<WALLET_PUBKEY>');
  console.log(result.signature, owned);
});
```

## Lecture de ce qui a fait correspondance

Une fois qu'une transaction correspond via l'expansion ATA, le mouvement des jetons du portefeuille se trouve dans le `meta.postTokenBalances` et `meta.preTokenBalances` de la transaction. Filtrez ces entrées par `owner` pour isoler les soldes que votre portefeuille possède réellement, puis comparez `preTokenBalances` à `postTokenBalances` sur le même `accountIndex` pour voir combien chaque frappe a bougé. L'exemple ci-dessus montre l'étape de filtrage.

## Connexe

<CardGroup cols={2}>
  <Card title="transactionSubscribe" icon="bolt" href="/docs/fr/rpc/websocket/transaction-subscribe">
    Chaque filtre et option `transactionSubscribe`, y compris `tokenAccounts`.
  </Card>

  <Card title="Filtrage des comptes de jetons (gRPC)" icon="coins" href="/docs/fr/laserstream/token-account-filtering">
    La même expansion `tokenAccounts` sur les filtres de transaction LaserStream gRPC.
  </Card>

  <Card title="Démarrage rapide WebSocket" icon="rocket" href="/docs/fr/rpc/websocket/quickstart">
    Connectez-vous à LaserStream WebSocket et diffusez vos premiers événements.
  </Card>
</CardGroup>
