Skip to main content
Die getTokenAccountsByOwner RPC-Methode wird verwendet, um alle SPL Tokenkonten zu erhalten, die von einem bestimmten öffentlichen Schlüssel besessen werden. Dies ist eine grundlegende Methode für Wallets und Anwendungen, die das Token-Portfolio eines Benutzers anzeigen oder mit ihren verschiedenen Tokenkonten interagieren müssen. Sie müssen die Abfrage entweder nach einem bestimmten Token mint oder einem programId (z. B. dem SPL Token-Programm oder Token-2022-Programm) filtern. Für Wallets mit umfangreichen Token-Portfolios ziehen Sie in Betracht, getTokenAccountsByOwnerV2 zu verwenden, das Cursor-basierte Pagination mit konfigurierbaren Seitengrößen von bis zu 10.000 Konten pro Anfrage bietet.

Häufige Anwendungsfälle

  • Benutzerportfolio anzeigen: Abrufen aller Tokenkonten (und damit Salden) für eine bestimmte Wallet-Adresse eines Benutzers, um sein vollständiges Token-Portfolio zu zeigen.
  • Anwendungslogik: Identifizieren eines bestimmten Tokenkontos eines Benutzers für ein bestimmtes Mint, bevor ein Transfer oder eine andere Interaktion eingeleitet wird.
  • Verifizierung: Überprüfen, welche Tokenkonten ein Besitzer für einen bestimmten Token-Typ besitzt.
  • Indexierung von Token-Inhabern: Obwohl weniger effizient für die globale Indexierung als andere Methoden, kann es verwendet werden, um Konten für einen bekannten Satz von Besitzern zu finden.

Anfrageparameter

  1. ownerPubkey (string, erforderlich): Der Base-58-kodierte öffentliche Schlüssel des Kontobesitzers, dessen Tokenkonten Sie abrufen möchten.
  2. filter (Objekt, erforderlich): Ein JSON-Objekt, das muss entweder mint oder programId spezifizieren:
    • mint (string): Der Base-58-kodierte öffentliche Schlüssel eines bestimmten Token-Mints. Wenn angegeben, werden nur Tokenkonten für dieses Mint zurückgegeben, die von ownerPubkey besitzen werden.
    • programId (string): Der Base-58-kodierte öffentliche Schlüssel des Token-Programms, das die Konten verwaltet. Gängige Werte sind:
      • SPL Token-Programm: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
      • Token-2022-Programm: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
  3. options (Objekt, optional): Ein optionales Konfigurationsobjekt, das Folgendes enthalten kann:
    • commitment (string, optional): Gibt das Commitment-Level an.
    • encoding (string, optional): Die Codierung für Kontodaten. "jsonParsed" wird sehr empfohlen. Weitere Optionen: "base64", "base64+zstd". Standardmäßig "base64".
    • dataSlice (Objekt, optional): Um einen bestimmten Ausschnitt der Kontodaten abzurufen (offset: usize, length: usize). Nur für base58, base64 oder base64+zstd Codierungen.
    • minContextSlot (u64, optional): Das Mindest-Slot für die Abfrage.

Antwortstruktur

Das result.value Feld in der JSON-RPC-Antwort ist ein Array von Objekten. Jedes Objekt entspricht einem SPL Tokenkonto, das von ownerPubkey besessen wird und mit filter übereinstimmt. Jedes Objekt im value Array enthält:
  • pubkey (string): Der Base-58-kodierte öffentliche Schlüssel des Tokenkontos selbst.
  • account (Objekt): Detaillierte Informationen über das Tokenkonto:
    • lamports (u64): Lamport-Saldo für Freistellung von der Miete.
    • owner (string): Das besitzende Programm (z. B. der Token-Programm-öffentliche Schlüssel).
    • data: Kontodaten. Wenn die "jsonParsed"-Codierung verwendet wird, enthält dies:
      • program (string): z. B. "spl-token".
      • parsed: Ein Objekt mit strukturierten Informationen:
        • info: Details wie:
          • mint (string): Die Mint-Adresse des Tokens.
          • owner (string): Der Besitzer des Tokenkontos (dies sollte mit ownerPubkey aus der Anfrage übereinstimmen).
          • tokenAmount (Objekt): Der Saldo der Tokens (amount, decimals, uiAmount, uiAmountString).
          • state (string): Zustand des Tokenkontos (z. B. "initialized").
          • isNative (boolean): Ob das Konto gewickelte SOL hält.
          • delegate (string, optional): Die Delegiertenadresse, falls eine gesetzt ist.
          • delegatedAmount (Objekt, optional): Der delegierte Betrag, wenn ein Delegat gesetzt ist.
        • type (string): z. B. "account".
    • executable (boolean): Ob das Konto ausführbar ist.
    • rentEpoch (u64): Nächste Epoche, in der die Miete fällig ist.
    • space (u64, wenn nicht jsonParsed): Länge der rohen Kontodaten in Bytes.
Beispielantwort (mit jsonParsed-Codierung, gefiltert nach programId):

Code-Beispiele

Entwickler-Tipps

  • Filteranforderung: Sie müssen entweder einen mint oder einen programId im Filter angeben. Es ist nicht möglich, alle Tokenkonten für einen Besitzer über alle Tokentypen hinweg ohne einen dieser primären Filter abzufragen.
  • Assoziierte Tokenkonten: Diese Methode gibt alle Tokenkonten zurück, die vom öffentlichen Schlüssel besessen werden, einschließlich standardmäßiger Assoziierter Tokenkonten (ATAs) und aller anderen SPL-Tokenkonten, die sie möglicherweise besitzen (z. B. von älteren Wallet-Implementierungen oder benutzerdefinierten Setups).
  • Codierung: Die Verwendung von "jsonParsed" für die encoding-Option wird sehr empfohlen. Es dekodiert die binären Kontodaten in eine besser nutzbare JSON-Struktur.
  • Performance: Wenn ein Besitzer eine sehr große Anzahl von Tokenkonten hat (insbesondere wenn nur nach programId gefiltert wird), kann die Antwort groß sein. Verwenden Sie in solchen Fällen getTokenAccountsByOwnerV2, das eingebaute Unterstützung für die Paginierung bietet.
  • Token-2022 (Token-Erweiterungen): Wenn Sie mit Tokens arbeiten, die mit dem Token-2022-Programm erstellt wurden (das Erweiterungen wie Transfergebühren, Zinsen usw. unterstützt), stellen Sie sicher, dass Sie den richtigen programId verwenden: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb.
Dieses Handbuch bietet ein umfassendes Verständnis der getTokenAccountsByOwner RPC-Methode, die es Ihnen ermöglicht, Tokenkonto-Informationen effizient für jede Solana-Adresse abzurufen.

Paginierung für große Token-Portfolios

Für Wallets mit umfangreichen Tokenbeständen verwenden Sie getTokenAccountsByOwnerV2, das folgende Vorteile bietet:
  • Cursor-basierte Paginierung: Setzen Sie limit (1-10.000) und verwenden Sie paginationKey, um durch die Ergebnisse zu navigieren
  • Inkrementelle Updates: Verwenden Sie changedSinceSlot, um nur die Tokenkonten abzurufen, die seit einem bestimmten Slot geändert wurden
  • Bessere Performance: Verhindert Zeitüberschreitungen und ermöglicht das Echtzeit-Tracking von Portfolios
  • Paginierungsverhalten: Das Ende der Paginierung wird nur angezeigt, wenn keine Tokenkonten zurückgegeben werden. Aufgrund von Filterung können weniger Konten als das Limit zurückgegeben werden - setzen Sie die Paginierung fort, bis paginationKey null ist.

Verwandte Methoden

getTokenAccountsByOwnerV2

Paginierte Version mit Cursor-basierter Navigation für große Portfolios

getTokenAccountBalance

Den Saldo eines bestimmten Tokenkontos abrufen