> ## 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.

# Tokenkonto (ATA) Filterung über WebSocket

> Fange eingehende SPL-Token-Transfers eines Wallets in LaserStream WebSocket-Streams mit dem Tokenkontenfilter auf transactionSubscribe — Besitzerbasierte Zuordnung ab.

Der `tokenAccounts` Filter bei der [`transactionSubscribe`](/docs/de/rpc/websocket/transaction-subscribe) 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](/docs/de/laserstream/token-account-filtering) für die gRPC-Version.

## Das Problem: einfache Kontofilter verpassen eingehende Token-Transfers

Wenn du ein Wallet mit `accountInclude: [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:

| Wert               | Übereinstimmungen                                                                                                           | Volumen                                       | Verwendung                                                                                                   |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `"balanceChanged"` | Transaktionen, bei denen sich ein besessener Tokenbestand tatsächlich geändert hat (oder sein Tokenkonto geschlossen wurde) | Geringer — die empfohlene Standardeinstellung | "Sag mir, wann tatsächlich Geld bewegt wurde" — Einzahlungen, Abhebungen, Swaps, die auf das Wallet abzielen |
| `"all"`            | Jede Transaktion, die ein Tokenkonto des Wallets referenziert, selbst wenn sich der Bestand nicht geändert hat              | Höher                                         | Volle Sichtbarkeit in alles, was nur die Tokenkonten des Wallets berührt                                     |
| `"none"`           | Keine Erweiterung — identisch mit dem Weglassen des Feldes                                                                  | —                                             | Der Standard                                                                                                 |

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`.

```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);
});
```

## Lesen, was übereinstimmte

Sobald eine Transaktion über die ATA-Erweiterung übereinstimmt, befindet sich die Tokenbewegung des Wallets in `meta.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

<CardGroup cols={2}>
  <Card title="transactionSubscribe" icon="bolt" href="/docs/de/rpc/websocket/transaction-subscribe">
    Jeder `transactionSubscribe` Filter und jede Option, einschließlich `tokenAccounts`.
  </Card>

  <Card title="Tokenkonto-Filterung (gRPC)" icon="coins" href="/docs/de/laserstream/token-account-filtering">
    Dieselbe `tokenAccounts` Erweiterung bei LaserStream gRPC Transaktionsfiltern.
  </Card>

  <Card title="WebSocket Quickstart" icon="rocket" href="/docs/de/rpc/websocket/quickstart">
    Verbinde dich mit LaserStream WebSocket und streame deine ersten Ereignisse.
  </Card>
</CardGroup>
