getTokenAccountsByDelegate ruft alle SPL-Konten für Token ab, die einen bestimmten öffentlichen Schlüssel als Delegierten autorisiert haben. Ein Delegierter darf bestimmte Aktionen für das Konto ausführen, etwa Token übertragen oder vernichten. Dies gilt bis zum delegierten Betrag.
Diese Methode ist nützlich für Dienste, die delegierte Berechtigungen verwalten oder ermitteln müssen, für welche Konten für Token ein bestimmter Schlüssel Aktionen ausführen darf.
Häufige Anwendungsfälle
- Delegierte Assets auflisten: Zeige alle Konten für Token an, für die ein bestimmtes Wallet oder Programm als Delegierter autorisiert wurde.
- Automatisierte Verwaltung von Token: Dienste, die Aktionen im Namen von Benutzern ausführen, können damit Konten finden, mit denen sie interagieren dürfen. Dazu gehören beispielsweise automatisierte Market Maker oder Staking-Protokolle, die tokenisierte Belohnungen verwalten.
- Delegierungen prüfen: Prüfe, welche Konten Berechtigungen an eine bestimmte Adresse delegiert haben.
- Delegierungen widerrufen: Ermittle Konten für Token, bei denen die Berechtigung eines Delegierten widerrufen werden muss. Der eigentliche Widerruf erfolgt jedoch in einer separaten Transaktion.
Parameter des request
-
delegatePubkey(string, erforderlich): Der Base58-codierte öffentliche Schlüssel des Kontos des Delegierten, dessen zugehörige Konten für Token du finden möchtest. -
filter(object, erforderlich): Ein JSON-Objekt, das zum Filtern der Konten entwedermintoderprogramIdangeben muss:mint(string): Der Base58-codierte öffentliche Schlüssel eines bestimmten Mint für Token. Wenn du ihn angibst, gibt die Abfrage nur Konten dieses konkreten Typs von Token zurück, die andelegatePubkeydelegiert wurden.programId(string): Der Base58-codierte öffentliche Schlüssel des Programms für Token, dem die Konten gehören. Dies ist normalerweise das standardmäßige SPL Token Program (TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA) oder das Token-2022 Program (TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb).
-
options(object, optional): Ein optionales Konfigurationsobjekt mit den folgenden gängigen Feldern:commitment(string, optional): Gibt die Stufe des commitment an.encoding(string, optional): Die Codierung der Kontodaten."jsonParsed"wird ausdrücklich empfohlen, da es menschenlesbare Kontoinformationen zurückgibt. Weitere Optionen sind"base64"und"base64+zstd". Wenn du keinen Wert angibst, wird standardmäßig"base64"verwendet.dataSlice(object, optional): Damit kannst du nur einen bestimmten Ausschnitt der Kontodaten abrufen. Enthält die Felderoffset(usize) undlength(usize). Gilt nur für die Codierungenbase58,base64oderbase64+zstd.minContextSlot(u64, optional): Der minimale slot, bei dem der request ausgewertet werden kann.
Struktur der response
Das Feldresult.value in der JSON-RPC-response ist ein Array aus Objekten. Jedes Objekt repräsentiert ein Konto für Token, dessen Delegierter delegatePubkey ist und das die Kriterien von filter erfüllt. Jedes Objekt im Array besitzt zwei Felder:
pubkey(string): Der Base58-codierte öffentliche Schlüssel des Kontos für Token.account(object): Ein Objekt mit detaillierten Informationen zum Konto für Token:lamports(u64): Das Lamport-Guthaben des Kontos für Token zur Befreiung von der Miete.owner(string): Der öffentliche Schlüssel des Programms, dem dieses Konto gehört, beispielsweise des Token Program.data: Die Kontodaten. Wenn du die Codierung"jsonParsed"verwendest, ist dies ein Objekt mit einem Feldprogram(z. B."spl-token") und einem Feldparsed, das strukturierte Informationen enthält:parsed.info: Ein Objekt mit Details wie:mint(string): Die Mint-Adresse des Token.owner(string): Der Eigentümer des Kontos für Token, nicht der Delegierte.tokenAmount(object): Das gesamte Guthaben an Token in diesem Konto (amount,decimals,uiAmount,uiAmountString).delegate(string): Der öffentliche Schlüssel des Delegierten. Er sollte mitdelegatePubkeyaus dem request übereinstimmen.delegatedAmount(object): Die Menge an Token, die der Delegierte verwalten darf (amount,decimals,uiAmount,uiAmountString).isNative(boolean): Gibt an, ob das Konto Wrapped SOL enthält.state(string): Der Status des Kontos für Token, beispielsweise"initialized".
parsed.type(string): Der Kontotyp, beispielsweise"account".
executable(boolean): Gibt an, ob das Konto ausführbar ist.rentEpoch(u64): Die Epoche, in der für dieses Konto das nächste Mal Miete fällig wird.space(u64, wennjsonParsednicht verwendet wird): Die Länge der rohen Kontodaten in Byte.
jsonParsed):
Codebeispiele
Tipps für Entwickler
- Erforderlicher Filter: Du musst im Filterparameter entweder
mintoderprogramIdangeben. Ohne einen dieser Filter kannst du nicht alle delegierten Konten über sämtliche Typen von Token hinweg abfragen. - Codierung: Verwende für die Option
encodingmöglichst"jsonParsed". Das erleichtert die Datenverarbeitung, da die binären Kontodaten in ein strukturiertes JSON-Format decodiert werden. - Performance: Eine Abfrage mit
programIdkann mehr Ressourcen beanspruchen als eine Abfrage mitmint. Das gilt besonders, wenn der Delegierte Berechtigungen für viele verschiedene Typen von Token besitzt. Einige RPC-Anbieter wenden bei dieser Methode möglicherweise strengere rate limit an. - Delegierter Betrag:
delegatedAmountin der response gibt die maximale Anzahl an Token an, die der Delegierte derzeit verwenden darf. Dieser Wert kann kleiner als der gesamte Wert vontokenAmountim Konto sein. - Delegierung widerrufen: Diese Methode ruft nur Informationen ab. Um eine Delegierung zu widerrufen, muss der Eigentümer des Kontos für Token eine
Revoke-Anweisung an das SPL Token Program senden.
getTokenAccountsByDelegate SPL-Konten für Token anhand ihres autorisierten Delegierten findest.