getTokenAccountsByOwner est utilisée pour récupérer tous les comptes Token SPL appartenant à une clé publique spécifique. C’est une méthode fondamentale pour les portefeuilles et applications qui ont besoin d’afficher les avoirs de tokens d’un utilisateur ou d’interagir avec leurs divers comptes de tokens.
Vous devez filtrer la requête par un token spécifique mint ou un programId (par exemple, le SPL Token Program ou Token-2022 Program).
Pour les portefeuilles avec des portefeuilles de tokens étendus, envisagez d’utiliser getTokenAccountsByOwnerV2 qui fournit un support de pagination basé sur des curseurs avec des tailles de page configurables allant jusqu’à 10 000 comptes par requête.
Cas d’utilisation courants
- Affichage du portefeuille utilisateur : Récupérer tous les comptes de tokens (et donc les soldes) pour l’adresse de portefeuille d’un utilisateur donné afin d’afficher leur portefeuille complet de tokens.
- Logique applicative : Identifier un compte de token spécifique d’un utilisateur pour une frappe particulière avant d’initier un transfert ou une autre interaction.
- Vérification : Vérifier quels comptes de tokens un propriétaire possède pour un certain type de token.
- Indexation des détenteurs de tokens : Bien que moins efficace pour l’indexation globale que d’autres méthodes, elle peut être utilisée pour trouver des comptes pour un ensemble connu de propriétaires.
Paramètres de requête
-
ownerPubkey(chaîne, requis) : La clé publique encodée en base-58 du propriétaire du compte dont vous souhaitez récupérer les comptes de tokens. -
filter(objet, requis) : Un objet JSON qui doit spécifier soitmintsoitprogramId:mint(chaîne) : La clé publique encodée en base-58 d’une frappe de token spécifique. Si fourni, seuls les comptes de tokens pour cette frappe détenus parownerPubkeyseront retournés.programId(chaîne) : La clé publique encodée en base-58 du programme de token qui gouverne les comptes. Valeurs communes :- SPL Token Program :
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA - Token-2022 Program :
TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
- SPL Token Program :
-
options(objet, facultatif) : Un objet de configuration optionnel qui peut inclure :commitment(chaîne, facultatif) : Spécifie le niveau d’engagement.encoding(chaîne, facultatif) : L’encodage des données du compte."jsonParsed"est fortement recommandé. Autres options :"base64","base64+zstd". Par défaut à"base64".dataSlice(objet, facultatif) : Pour récupérer une tranche spécifique des données du compte (offset: usize,length: usize). Uniquement pour les encodagesbase58,base64, oubase64+zstd.minContextSlot(u64, facultatif) : Le slot minimum pour la requête.
Structure de la réponse
Le champresult.value dans la réponse JSON-RPC est un tableau d’objets. Chaque objet correspond à un compte Token SPL détenu par ownerPubkey et correspondant à filter.
Chaque objet dans le tableau value contient :
pubkey(chaîne) : La clé publique encodée en base-58 du compte de tokens lui-même.account(objet) : Informations détaillées sur le compte de tokens :lamports(u64) : Solde en Lamports pour l’exemption de loyer.owner(chaîne) : Le programme propriétaire (par exemple, la clé publique du Token Program).data: Données du compte. Si l’encodage"jsonParsed"est utilisé, cela contient :program(chaîne) : par exemple,"spl-token".parsed: Un objet avec des informations structurées :info: Détails tels que :mint(chaîne) : L’adresse de frappe du token.owner(chaîne) : Le propriétaire du compte de tokens (cela devrait correspondre àownerPubkeyde la requête).tokenAmount(objet) : Le solde des tokens (amount,decimals,uiAmount,uiAmountString).state(chaîne) : État du compte de tokens (par exemple,"initialized").isNative(booléen) : Si le compte possède des SOL enveloppés.delegate(chaîne, facultatif) : L’adresse de délégation si elle est définie.delegatedAmount(objet, facultatif) : La quantité déléguée si un délégué est défini.
type(chaîne) : par exemple,"account".
executable(booléen) : Si le compte est exécutable.rentEpoch(u64) : Prochain loyer dû à l’époque suivante.space(u64, si ce n’est pasjsonParsed) : Longueur des données brutes du compte en octets.
jsonParsed, filtré par programId) :
Exemples de code
Astuces pour les développeurs
- Exigence de filtre : Vous devez fournir soit un
mintsoit unprogramIddans le filtre. Il n’est pas possible de requêter tous les comptes de tokens pour un propriétaire à travers tous les types de tokens sans l’un de ces filtres principaux. - Comptes de tokens associés : Cette méthode retournera tous les comptes de tokens détenus par la clé publique, y compris les comptes de tokens associés standard (ATAs) et tous les autres comptes de tokens SPL qu’ils pourraient posséder (par exemple, à partir d’anciennes implémentations de portefeuilles ou de configurations personnalisées).
- Encodage : Utiliser
"jsonParsed"pour l’optionencodingest fortement recommandé. Cela décode les données binaires du compte en une structure JSON plus utilisable. - Performance : Si un propriétaire a un très grand nombre de comptes de tokens (surtout lors du filtrage uniquement par
programId), la réponse peut être volumineuse. Pour de tels cas, utilisezgetTokenAccountsByOwnerV2qui fournit un support de pagination intégré. - Token-2022 (Extensions de Token) : Si vous travaillez avec des tokens créés en utilisant le programme Token-2022 (qui prend en charge les extensions comme les frais de transfert, les intérêts, etc.), assurez-vous d’utiliser le bon
programId:TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb.
getTokenAccountsByOwner, vous permettant de récupérer efficacement les informations de compte de tokens pour toute adresse Solana.
Pagination pour les grands portefeuilles de tokens
Pour les portefeuilles avec des avoirs en tokens étendus, utilisezgetTokenAccountsByOwnerV2 qui fournit :
- Pagination basée sur des curseurs : Définissez
limit(1-10 000) et utilisezpaginationKeypour naviguer dans les résultats - Mises à jour incrémentielles : Utilisez
changedSinceSlotpour récupérer uniquement les comptes de tokens modifiés depuis un slot spécifique - Meilleure performance : Évite les dépassements de délais et permet un suivi en temps réel du portefeuille
- Comportement de la pagination : La fin de la pagination n’est indiquée que lorsqu’aucun compte de tokens n’est retourné. Moins de comptes que la limite peuvent être retournés en raison du filtrage - continuez la pagination jusqu’à ce que
paginationKeysoit nul
Méthodes associées
getTokenAccountsByOwnerV2
Version paginée avec navigation par curseur pour les grands portefeuilles
getTokenAccountBalance
Obtenez le solde d’un compte de token spécifique