getTokenAccountsByDelegate récupère tous les comptes de Jetons SPL ayant approuvé une clé publique spécifique en tant que délégué. Un délégué a l’autorité pour effectuer certaines actions sur le compte de jetons, telles que le transfert ou la destruction de jetons, jusqu’à concurrence du montant délégué.
Cette méthode est utile pour les services qui gèrent l’autorité déléguée ou qui ont besoin de découvrir sur quels comptes de jetons une clé particulière peut agir au nom de.
Cas d’utilisation courants
- Liste des actifs délégués : Affichage de tous les comptes de jetons pour lesquels un portefeuille ou un programme spécifique a reçu l’autorité de délégué.
- Gestion automatisée des jetons : Les services qui effectuent des actions pour le compte des utilisateurs (par exemple, les teneurs de marché automatisés, les protocoles de staking qui gèrent les récompenses tokenisées) peuvent utiliser ceci pour trouver les comptes avec lesquels ils sont autorisés à interagir.
- Audit des délégations : Revue des comptes ayant délégué leur autorité à une adresse particulière.
- Révocation des délégations : Identification des comptes de jetons dont l’autorité délégataire doit être révoquée (bien que la révocation elle-même soit une transaction distincte).
Paramètres de requête
-
delegatePubkey(chaîne, requis) : La clé publique encodée en base-58 du compte délégué dont vous souhaitez trouver les comptes de jetons associés. -
filter(objet, requis) : Un objet JSON qui doit spécifier soitmintsoitprogramIdpour filtrer les comptes :mint(chaîne) : La clé publique encodée en base-58 d’une émission de jetons spécifique. Si fourni, la requête ne retournera que les comptes de jetons de ce type particulier délégués àdelegatePubkey.programId(chaîne) : La clé publique encodée en base-58 du Programme de Jetons qui possède les comptes. Cela sera généralement le Programme de Jetons SPL standard (TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA) ou le Programme Token-2022 (TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb).
-
options(objet, optionnel) : Un objet de configuration optionnel avec les champs communs suivants :commitment(chaîne, optionnel) : Spécifie le niveau d’engagement.encoding(chaîne, optionnel) : L’encodage pour les données de compte."jsonParsed"est fortement recommandé car il renvoie des informations de compte lisibles par l’homme. Les autres options incluent"base64","base64+zstd". Par défaut,"base64"si non spécifié.dataSlice(objet, optionnel) : Vous permet de récupérer seulement une tranche spécifique des données de compte. Contient les champsoffset(usize) etlength(usize). Applicable uniquement pour les encodagesbase58,base64, oubase64+zstd.minContextSlot(u64, optionnel) : Le slot minimum auquel la requête peut être évaluée.
Structure de la réponse
Le champresult.value dans la réponse JSON-RPC est un tableau d’objets. Chaque objet représente un compte de jetons ayant delegatePubkey comme délégué et correspondant aux critères filter. Chaque objet dans le tableau a deux champs :
pubkey(chaîne) : La clé publique encodée en base-58 du compte de jetons lui-même.account(objet) : Un objet contenant des informations détaillées sur le compte de jetons :lamports(u64) : Le solde de lamports du compte de jetons (pour l’exemption de loyer).owner(chaîne) : La clé publique du programme qui possède ce compte (par exemple, le Programme de Jetons).data: Les données du compte. Si l’encodage"jsonParsed"est utilisé, ceci sera un objet avec un champprogram(par exemple,"spl-token") et un champparsedcontenant des informations structurées :parsed.info: Un objet avec des détails tels que :mint(chaîne) : L’adresse de l’émission du jeton.owner(chaîne) : Le propriétaire du compte de jetons (pas le délégué).tokenAmount(objet) : Le solde total de jetons dans ce compte (amount,decimals,uiAmount,uiAmountString).delegate(chaîne) : La clé publique du délégué (devrait correspondre àdelegatePubkeyde la requête).delegatedAmount(objet) : Le montant de jetons que le délégué est autorisé à gérer (amount,decimals,uiAmount,uiAmountString).isNative(boolean) : Indique si le compte détient du SOL encapsulé.state(chaîne) : L’état du compte de jetons (par exemple,"initialized").
parsed.type(chaîne) : Le type de compte (par exemple,"account").
executable(boolean) : Indique si le compte est exécutable.rentEpoch(u64) : L’époque à laquelle ce compte devra à nouveau un loyer.space(u64, sijsonParsedn’est pas utilisé) : La longueur des données de compte brutes en octets.
jsonParsed) :
Exemples de code
Conseils pour les développeurs
- Exigence de filtre : Vous devez fournir soit
mintsoitprogramIddans le paramètre de filtre. Vous ne pouvez pas interroger tous les comptes délégués sur tous les types de jetons sans l’un de ces filtres. - Encodage : Utiliser
"jsonParsed"pour l’optionencodingest fortement recommandé pour une manipulation plus facile des données, car cela décode les données binaires du compte dans un format JSON structuré. - Performance : La requête avec
programIdpeut être plus gourmande en ressources que la requête avecmint, surtout si le délégué a autorité sur de nombreux types de jetons différents. Certains fournisseurs de RPC peuvent avoir des limites de taux plus strictes pour cette méthode. - Montant délégué : Le
delegatedAmountdans la réponse indique le nombre maximum de jetons que le délégué est actuellement autorisé à utiliser. Cela peut être inférieur au totaltokenAmountdans le compte. - Révocation de la délégation : Cette méthode ne fait que récupérer des informations. Pour révoquer une délégation, le propriétaire du compte de jetons doit envoyer une instruction
Revokeau Programme de Jetons SPL.
getTokenAccountsByDelegate pour trouver les comptes de Jetons SPL en fonction de leur délégué approuvé.