getTokenAccountsByOwner rufst du alle SPL-Token-Accounts ab, die einem bestimmten öffentlichen Schlüssel gehören. Diese grundlegende Methode eignet sich für Wallets und Anwendungen, die den Token-Bestand eines Benutzers anzeigen oder mit seinen verschiedenen Token-Accounts interagieren müssen.
Du musst die Abfrage entweder nach einem bestimmten Token-mint oder einer programId filtern, zum Beispiel dem SPL Token Program oder Token-2022 Program.
Für Wallets mit umfangreichen Token-Portfolios solltest du getTokenAccountsByOwnerV2 verwenden. Diese Methode unterstützt Cursor-basierte Seitennummerierung mit konfigurierbaren Seitengrößen von bis zu 10.000 Accounts pro request.
Häufige Anwendungsfälle
- Benutzerportfolio anzeigen: Rufe alle Token-Accounts und damit ihre Guthaben für die Wallet-Adresse eines Benutzers ab, um sein vollständiges Token-Portfolio anzuzeigen.
- Anwendungslogik: Ermittle den spezifischen Token-Account eines Benutzers für einen bestimmten Mint, bevor du eine Übertragung oder eine andere Interaktion startest.
- Überprüfung: Prüfe, welche Token-Accounts ein Besitzer für einen bestimmten Token-Typ besitzt.
- Token-Inhaber indexieren: Diese Methode ist für die globale Indexierung weniger effizient als andere Methoden. Du kannst sie jedoch verwenden, um Accounts für eine bekannte Gruppe von Besitzern zu finden.
Request-Parameter
-
ownerPubkey(string, erforderlich): Der Base58-codierte öffentliche Schlüssel des Account-Besitzers, dessen Token-Accounts du abrufen möchtest. -
filter(object, erforderlich): Ein JSON-Objekt, das entwedermintoderprogramIdangeben muss:mint(string): Der Base58-codierte öffentliche Schlüssel eines bestimmten Token-Mints. Wenn du ihn angibst, werden nur Token-Accounts für diesen Mint zurückgegeben, dieownerPubkeygehören.programId(string): Der Base58-codierte öffentliche Schlüssel des Token Program, das die Accounts verwaltet. Häufige Werte sind:- SPL Token Program:
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA - Token-2022 Program:
TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
- SPL Token Program:
-
options(object, optional): Ein optionales Konfigurationsobjekt, das Folgendes enthalten kann:commitment(string, optional): Gibt das commitment-Level an.encoding(string, optional): Die Codierung der Account-Daten."jsonParsed"wird dringend empfohlen. Weitere Optionen:"base64","base64+zstd". Der Standardwert ist"base64".dataSlice(object, optional): Ruft einen bestimmten Ausschnitt der Account-Daten ab (offset: usize,length: usize). Nur für die Codierungenbase58,base64oderbase64+zstd.minContextSlot(u64, optional): Der minimale slot für die Abfrage.
Response-Struktur
Das Feldresult.value in der JSON-RPC-response ist ein Array aus Objekten. Jedes Objekt entspricht einem SPL Token-Account, der ownerPubkey gehört und mit filter übereinstimmt.
Jedes Objekt im Array value enthält:
pubkey(string): Den Base58-codierten öffentlichen Schlüssel des Token-Accounts selbst.account(object): Detaillierte Informationen zum Token-Account:lamports(u64): Lamport-Guthaben für die Mietbefreiung.owner(string): Das besitzende Programm, zum Beispiel der öffentliche Schlüssel des Token Program.data: Account-Daten. Wenn die Codierung"jsonParsed"verwendet wird, enthält dieses Feld: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 Token-Accounts. Dieser Wert sollte mitownerPubkeyaus dem request übereinstimmen.tokenAmount(object): Das Token-Guthaben (amount,decimals,uiAmount,uiAmountString).state(string): Status des Token-Accounts, zum Beispiel"initialized".isNative(boolean): Gibt an, ob der Account Wrapped SOL enthält.delegate(string, optional): Die Delegiertenadresse, sofern festgelegt.delegatedAmount(object, optional): Der delegierte Betrag, sofern ein Delegierter festgelegt ist.
type(string): z. B."account".
executable(boolean): Gibt an, ob der Account ausführbar ist.rentEpoch(u64): Die nächste Epoche, in der Miete fällig wird.space(u64, wenn nichtjsonParsed): Länge der Account-Rohdaten in Byte.
jsonParsed, gefiltert nach programId):
Codebeispiele
Tipps für Entwickler
- Erforderlicher Filter: Du musst im Filter entweder
mintoderprogramIdangeben. Ohne einen dieser primären Filter kannst du nicht alle Token-Accounts eines Besitzers über alle Token-Typen hinweg abfragen. - Associated Token Accounts: Diese Methode gibt alle Token-Accounts zurück, die dem öffentlichen Schlüssel gehören. Dazu gehören standardmäßige Associated Token Accounts (ATAs) und alle anderen SPL Token-Accounts, die der Schlüssel möglicherweise besitzt, etwa aus älteren Wallet-Implementierungen oder benutzerdefinierten Konfigurationen.
- Codierung: Für die Option
encodingwird"jsonParsed"dringend empfohlen. Dadurch werden die binären Account-Daten in eine besser nutzbare JSON-Struktur decodiert. - Leistung: Wenn ein Besitzer sehr viele Token-Accounts hat, kann die response groß werden. Das gilt besonders, wenn du nur nach
programIdfilterst. Verwende in solchen FällengetTokenAccountsByOwnerV2mit integrierter Unterstützung für Seitennummerierung. - Token-2022 (Token-Erweiterungen): Wenn du mit Tokens arbeitest, die mit dem Token-2022 Program erstellt wurden und Erweiterungen wie Übertragungsgebühren oder Zinsen unterstützen, musst du die richtige
programIdverwenden:TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb.
getTokenAccountsByOwner. Damit kannst du Informationen zu Token-Accounts für jede Solana-Adresse effizient abrufen.
Seitennummerierung für große Token-Portfolios
Verwende für Wallets mit umfangreichen Token-BeständengetTokenAccountsByOwnerV2. Diese Methode bietet:
- Cursor-basierte Seitennummerierung: Lege
limit(1–10.000) fest und navigiere mitpaginationKeydurch die Ergebnisse - Inkrementelle Aktualisierungen: Verwende
changedSinceSlot, um nur Token-Accounts abzurufen, die seit einem bestimmten slot geändert wurden - Bessere Leistung: Verhindert timeouts und ermöglicht die Portfolio-Verfolgung in Echtzeit
- Verhalten der Seitennummerierung: Das Ende wird erst signalisiert, wenn keine Token-Accounts zurückgegeben werden. Aufgrund der Filterung können weniger Accounts als durch das Limit festgelegt zurückgegeben werden. Setze die Seitennummerierung fort, bis
paginationKeynull ist
Verwandte Methoden
getTokenAccountsByOwnerV2
Version mit Seitennummerierung und Cursor-basierter Navigation für große Portfolios
getTokenAccountBalance
Rufe das Guthaben eines bestimmten Token-Accounts ab