getAccountInfo est un outil fondamental pour interroger la blockchain Solana. Elle vous permet de récupérer toutes les informations stockées associées à une clé publique de compte spécifique. Cela inclut le solde en lamports du compte, le programme qui le possède, s’il est exécutable et ses données stockées.
Cas d’utilisation courants
- Vérification du solde SOL : Déterminez le solde SOL natif de n’importe quel compte.
- Vérification de l’existence du compte : Vérifiez si un compte avec une clé publique donnée a été initialisé (c’est-à-dire, possède des lamports ou des données).
- Inspection des comptes de programme : Récupérez les données stockées dans un compte appartenant à un programme, ce qui est crucial pour comprendre l’état d’un programme.
- Identification du propriétaire du compte : Découvrez quel programme est le propriétaire d’un compte. Cela aide à déterminer comment les données du compte doivent être interprétées ou si c’est un compte possédé par le système.
- Vérification de l’exécutabilité d’un compte : Identifiez si un compte contient un programme déployé.
Paramètres
-
publicKey(string, requis) : La clé publique encodée en base-58 du compte à interroger. -
config(objet, optionnel) : Un objet de configuration avec les champs suivants :commitment(string, optionnel) : Spécifie le niveau d’engagement à utiliser pour la requête. Par défaut,finalized.finalized: Le nœud interrogera le bloc le plus récent confirmé par la supermajorité du cluster comme ayant atteint le verrouillage maximal.confirmed: Le nœud interrogera le bloc le plus récent ayant été voté par une supermajorité du cluster.processed: Le nœud interrogera son bloc le plus récent. Notez que le bloc peut ne pas être complet.
encoding(string, optionnel) : L’encodage pour les données du compte. Par défaut,base64.base58(lent)base64base64+zstd(si les données sont compressées)jsonParsed: Si les données du compte représentent un état de programme connu (par exemple, comptes de jetons, comptes de mise), le nœud tentera de les analyser dans une structure JSON. Pour les comptes de programme génériques, cela revient généralement à binaire (base64).
dataSlice(objet, optionnel) : Limite les données du compte renvoyées à une portion spécifique. Disponible uniquement pour les encodagesbase58,base64oubase64+zstd.offset(nombre) : Le nombre d’octets depuis le début des données du compte pour commencer la portion.length(nombre) : Le nombre d’octets à renvoyer.
minContextSlot(nombre, optionnel) : Le créneau minimum auquel la demande peut être évaluée.
Réponse
Si le compte est trouvé, le champresult contiendra un objet avec deux propriétés principales :
-
context(objet) : Contient les métadonnées concernant la demande.slot(nombre) : Le créneau auquel les informations ont été récupérées.apiVersion(string, optionnel) : La version de l’API RPC.
-
value(objet | null) : Si le compte n’existe pas, ce seranull. Sinon, c’est un objet contenant :lamports(nombre) : Le nombre de lamports (1 SOL = 1 000 000 000 lamports) détenus par le compte.owner(string) : La clé publique encodée en base-58 du programme qui possède ce compte.data(array | object | string) : Les données stockées dans le compte. Le format dépend du paramètreencodingutilisé dans la requête.- Pour
base64(par défaut),base58,base64+zstd: C’est typiquement un tableau[encoded_string, encoding_format], par exemple["string_data", "base64"]. - Pour
jsonParsed: Cela peut être un objet JSON si les données sont analysables par le nœud RPC (par exemple, pour les comptes SPL Token). Sinon, cela peut par défaut être["", "base64"]ou similaire si les données ne sont pas reconnues comme une disposition standard.
- Pour
executable(booléen) :truesi le compte contient un programme,falsesinon.rentEpoch(nombre) : La prochaine époque à laquelle ce compte devra payer un loyer.space(nombre, optionnel) : La longueur des données en octets. (Note : Les documents officiels de Solana listentspace, tandis que certains fournisseurs RPC pourraient l’inclure. Il représente l’espace total alloué pour les données du compte). Pour plus de détails sur les données de compte et la désérialisation, consultez notre guide détaillé.
value dans le résultat sera null.
Exemple : Récupération des informations du compte
Récupérons les informations pour l’ID du programme Serum V3 (9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin) sur mainnet.
Remarque : Remplacez YOUR_API_KEY par votre véritable clé API Helius dans les exemples ci-dessous.
Conseils pour les développeurs
- Performance : Pour les applications nécessitant des vérifications fréquentes de plusieurs comptes, envisagez d’utiliser
getMultipleAccountspour regrouper les requêtes et réduire les allers-retours. - Désérialisation des données : Le champ
datanécessite souvent une désérialisation basée sur les structures de données du programme propriétaire. Des outils et bibliothèques spécifiques au programme (par exemple, la bibliothèque SPL Token pour les comptes de jetons) sont généralement nécessaires. Notre article de blog sur la désérialisation des données de compte fournit des techniques et des exemples utiles. - Limites de taux : Soyez attentif aux limites de taux des nœuds RPC, surtout lors de la requête d’un grand nombre de comptes ou lors d’envois fréquents de requêtes.
- Gestion des coûts :
getAccountInfoest généralement une requête peu coûteuse, mais les sondages fréquents peuvent s’accumuler. Optimisez vos modèles de requête. - Utilisez
jsonParsedavec discernement : Bien quejsonParsedpuisse être pratique, il pourrait ne pas prendre en charge tous les types de comptes, et sa sortie peut changer si un programme met à jour ses structures de données. Pour des applications critiques, il est plus stable d’analyser les données binaires avec une mise en page connue. - Considérez
dataSlice: Si vous avez seulement besoin d’une petite portion des données d’un compte, utilisezdataSlicepour réduire la quantité de données transférées et potentiellement diminuer les coûts des requêtes.
Méthodes associées
getMultipleAccounts
Récupérez plusieurs comptes en une seule requête pour une meilleure performance
getBalance
Obtenez seulement le solde SOL sans les détails complets du compte