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

> Erfassen Sie eingehende SPL-Token-Transfers eines Wallets in LaserStream gRPC-Streams mit tokenAccounts (ATA) Erweiterung — eigentümerbasierte Übereinstimmung AccountInclude verpasst.

Der `tokenAccounts`-Filter von LaserStream ermöglicht es einem gRPC-Transaktionsabonnement, Aktivitäten auf den **zugehörigen Tokenkonten (ATAs), die ein Wallet besitzt**, zu matchen, nicht nur Transaktionen, bei denen der Pubkey des Wallets direkt erscheint. Der gleiche Filter ist über WebSocket verfügbar — siehe [Tokenkonto (ATA) Filterung über WebSocket](/docs/de/rpc/websocket/token-account-filtering).

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

Wenn Sie ein Wallet mit `accountInclude: [wallet]` überwachen, matchen Sie nur Transaktionen, bei denen dieser Wallet-Pubkey in den Account-Keys der Transaktion erscheint. Ein häufiger Fall bleibt unbemerkt: Wenn jemand dem Wallet ein SPL-Token (z. B. USDC) sendet, berührt der Transfer das **zugehörige Tokenkonto (ATA)** des Wallets — eine separate programmgenerierte Adresse — nicht den Pubkey des Wallets selbst.

So sieht ein einfaches `accountInclude: [wallet]`-Abonnement niemals eingehende Token-Transfers. Sie müssten jedes ATA, das das Wallet im Voraus besitzt, aufzählen und jedes in den Filter aufnehmen — aber ATAs werden bei Bedarf erstellt (eines pro Mint), sodass Sie die vollständige Menge im Voraus nicht kennen können.

## Wie die `tokenAccounts`-Erweiterung funktioniert

Stellen Sie `tokenAccounts` auf einen Transaktionsfilter ein, um das Matching so zu erweitern, dass ein `accountInclude`-Wallet **auch** Transaktionen matcht, die ein Tokenkonto berühren, das es besitzt. Das Matching ist **eigentümerbasiert**: LaserStream löst die Tokenkonten auf, die sich im Besitz Ihrer `accountInclude`-Adressen befinden, zum Matching-Zeitpunkt, sodass es jedes Tokenkonto erfasst, das das Wallet besitzt — einschließlich nicht-kanonischer — nicht nur die abgeleitete ATA-Adresse. Sie müssen die ATAs niemals selbst auflisten.

Abonnements, die `tokenAccounts` auslassen, verhalten sich genau wie zuvor, daher ist es sicher, sie zu einem vorhandenen Filter hinzuzufügen.

## Erweiterungsmodi

`tokenAccounts` nimmt einen von drei String-Werten an:

| Wert               | Übereinstimmungen                                                                                                         | Volumen                             | Verwende es für                                                                                                  |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `"balanceChanged"` | Transaktionen, bei denen sich ein Token-Guthaben tatsächlich geändert hat (oder sein Tokenkonto geschlossen wurde)        | Niedriger — der empfohlene Standard | "Sag mir, wann tatsächlich Geld bewegt wurde" — Einzahlungen, Auszahlungen, Swaps, die sich zum Wallet abwickeln |
| `"all"`            | Jede Transaktion, die ein Tokenkonto referenziert, das das Wallet besitzt, auch wenn sich das Guthaben nicht geändert hat | Höher                               | Volle Sichtbarkeit in alles, was so viel wie das Tokenkonto des Wallets berührt                                  |
| `"none"`           | Keine Erweiterung — identisch mit Weglassen des Feldes                                                                    | —                                   | Der Standard                                                                                                     |

Beginnen Sie mit `"balanceChanged"`. Es erfasst reale Mittelbewegungen bei einem Bruchteil des Volumens von `"all"`.

## Verwenden Sie es in LaserStream gRPC

Fügen Sie `tokenAccounts` zu einem Transaktionsfilter in Ihrem `SubscribeRequest` hinzu. Das [Helius LaserStream SDK](/docs/de/laserstream/clients) konvertiert den String für Sie in das wire-level `TokenAccountExpansionControlFlag`-Enum (Teil von `yellowstone-grpc-proto` 12.5.0+).

```typescript theme={"system"}
import { subscribe, CommitmentLevel, LaserstreamConfig, SubscribeRequest } from 'helius-laserstream';
import bs58 from 'bs58';

const wallet = '<WALLET_PUBKEY>';

const subscriptionRequest: SubscribeRequest = {
  transactions: {
    "wallet-activity": {
      accountInclude: [wallet],
      accountExclude: [],
      accountRequired: [],
      vote: false,
      failed: false,
      tokenAccounts: "balanceChanged" // also match the wallet's ATAs
    }
  },
  commitment: CommitmentLevel.CONFIRMED,
  accounts: {}, slots: {}, transactionsStatus: {},
  blocks: {}, blocksMeta: {}, entry: {}, accountsDataSlice: [],
};

const config: LaserstreamConfig = {
  apiKey: 'YOUR_API_KEY',
  endpoint: 'https://laserstream-mainnet-ewr.helius-rpc.com',
};

await subscribe(config, subscriptionRequest, async (data) => {
  if (!data.transaction?.transaction) return;
  const tx = data.transaction.transaction;
  // Token balances this wallet owns that changed in the tx
  const owned = (tx.meta?.postTokenBalances || []).filter((b: any) => b.owner === wallet);
  console.log(bs58.encode(tx.signature), owned);
}, async (error) => {
  console.error('Stream error:', error);
});
```

Sehen Sie sich den [Transaktionsüberwachungsleitfaden](/docs/de/laserstream/guides/transaction-monitoring) für ein ausführlicheres Beispiel an, das Vor- und Nachbilanzen vergleicht, und den [Abonnementanfrage-Referenz](/docs/de/laserstream/grpc) für jedes Transaktionsfilterfeld.

## Lesen, was übereinstimmte

Sobald eine Transaktion über ATA-Erweiterung übereinstimmt, lebt die Tokenbewegung des Wallets im `meta.postTokenBalances` und `meta.preTokenBalances` der Transaktion. Filtern Sie diese Einträge nach `owner`, um die Salden zu isolieren, die Ihr Wallet tatsächlich besitzt, und vergleichen Sie dann `preTokenBalances` mit `postTokenBalances` auf demselben `accountIndex`, um zu sehen, wie viel sich bei jedem Mint bewegt hat. Das obige Beispiel zeigt den Filterungsschritt; der [Transaktionsüberwachungsleitfaden](/docs/de/laserstream/guides/transaction-monitoring#beispiel-4-überwachen-eines-wallets-einschl-token-transfers) zeigt den vollständigen Unterschied.

## Verwandt

<CardGroup cols={2}>
  <Card title="Transaktionsüberwachung" icon="receipt" href="/docs/de/laserstream/guides/transaction-monitoring">
    Vollständige Filterstrategien und ein ausführbares Wallet-Watch-Beispiel über gRPC.
  </Card>

  <Card title="Tokenkonto-Filterung (WebSocket)" icon="bolt" href="/docs/de/rpc/websocket/token-account-filtering">
    Dasselbe `tokenAccounts`-Feld auf der WebSocket `transactionSubscribe`-Methode.
  </Card>

  <Card title="Abonnementanfrage-Referenz" icon="filter" href="/docs/de/laserstream/grpc">
    Jedes Transaktionsfilterfeld, einschließlich `tokenAccounts`.
  </Card>

  <Card title="Komprimierte Filter" icon="layer-group" href="/docs/de/laserstream/cuckoo-filters">
    Verfolgen Sie Hunderttausende von Konten in einem Stream.
  </Card>
</CardGroup>
