getAccountInfo ist ein grundlegendes Werkzeug für Abfragen an die Solana-Blockchain. Mit ihr kannst du alle gespeicherten Informationen abrufen, die mit dem öffentlichen Schlüssel eines bestimmten Kontos verknüpft sind. Dazu gehören das Lamport-Guthaben des Kontos, das Programm, dem es gehört, sein Ausführbarkeitsstatus und seine gespeicherten Daten.
Häufige Anwendungsfälle
- SOL-Guthaben prüfen: Ermittle das native SOL-Guthaben eines beliebigen Kontos.
- Existenz eines Kontos prüfen: Prüfe, ob ein Konto mit einem bestimmten öffentlichen Schlüssel initialisiert wurde, also Lamports oder Daten enthält.
- Programmkonten untersuchen: Rufe die Daten ab, die in einem programmgesteuerten Konto gespeichert sind. Das ist entscheidend, um den Zustand eines Programms zu verstehen.
- Eigentümer eines Kontos identifizieren: Ermittle, welchem Programm ein Konto gehört. So kannst du feststellen, wie die Daten des Kontos interpretiert werden müssen oder ob es sich um ein systemgesteuertes Konto handelt.
- Ausführbarkeit eines Kontos prüfen: Ermittle, ob ein Konto ein bereitgestelltes Programm enthält.
Parameter
-
publicKey(string, erforderlich): Der Base58-codierte öffentliche Schlüssel des abzufragenden Kontos. -
config(object, optional): Ein Konfigurationsobjekt mit den folgenden Feldern:commitment(string, optional): Gibt den commitment-Level für die Abfrage an. Der Standardwert istfinalized.finalized: Der node fragt den neuesten Block ab, den die Supermehrheit des cluster mit maximaler Sperrfrist bestätigt hat.confirmed: Der node fragt den neuesten Block ab, über den eine Supermehrheit des cluster abgestimmt hat.processed: Der node fragt seinen neuesten Block ab. Beachte, dass der Block möglicherweise noch nicht vollständig ist.
encoding(string, optional): Die Codierung der Kontodaten. Der Standardwert istbase64.base58(langsam)base64base64+zstd(wenn die Daten komprimiert sind)jsonParsed: Wenn die Kontodaten einem bekannten Programmzustand entsprechen, etwa bei Token- oder Stake-Konten, versucht der node, sie in eine JSON-Struktur zu parsen. Bei generischen Programmkonten wird in der Regel stattdessen das Binärformat (Base64) verwendet.
dataSlice(object, optional): Beschränkt die zurückgegebenen Kontodaten auf einen bestimmten Ausschnitt. Nur für die Codierungenbase58,base64oderbase64+zstdverfügbar.offset(number): Die Anzahl der Bytes ab dem Anfang der Kontodaten, bei der der Ausschnitt beginnt.length(number): Die Anzahl der zurückzugebenden Bytes.
minContextSlot(number, optional): Der früheste slot, an dem der request ausgewertet werden kann.
Response
Wenn das Konto gefunden wurde, enthält das Feldresult ein Objekt mit zwei Haupteigenschaften:
-
context(object): Enthält Metadaten zum request.slot(number): Der slot, an dem die Informationen abgerufen wurden.apiVersion(string, optional): Die Version der RPC API.
-
value(object | null): Wenn das Konto nicht existiert, ist der Wertnull. Andernfalls enthält das Objekt Folgendes:lamports(number): Die Anzahl der Lamports (1 SOL = 1.000.000.000 Lamports), die dem Konto gehören.owner(string): Der Base58-codierte öffentliche Schlüssel des Programms, dem dieses Konto gehört.data(array | object | string): Die im Konto gespeicherten Daten. Das Format hängt vom Parameterencodingim request ab.- Für
base64(Standard),base58undbase64+zstd: In der Regel ist dies ein Array[encoded_string, encoding_format], zum Beispiel["string_data", "base64"]. - Für
jsonParsed: Dies kann ein JSON-Objekt sein, wenn der RPC-node die Daten parsen kann, etwa bei SPL-Token-Konten. Andernfalls wird möglicherweise standardmäßig["", "base64"]oder ein ähnlicher Wert verwendet, wenn die Daten keinem Standardlayout entsprechen.
- Für
executable(boolean):true, wenn das Konto ein Programm enthält, andernfallsfalse.rentEpoch(number): Die nächste Epoche, in der für dieses Konto Miete fällig wird.space(number, optional): Die Länge der Daten in Bytes. (Hinweis: Die offizielle Solana-Dokumentation führtspaceauf. Einige RPC-Anbieter schließen diesen Wert möglicherweise ebenfalls ein. Er gibt den gesamten für die Kontodaten reservierten Speicherplatz an.) Weitere Informationen zu Kontodaten und Deserialisierung findest du in unserem ausführlichen Leitfaden.
value im Ergebnis den Wert null.
Beispiel: Kontoinformationen abrufen
Rufen wir Informationen zur Serum Program V3 ID (9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin) im Mainnet ab.
Hinweis: Ersetze YOUR_API_KEY in den folgenden Beispielen durch deinen tatsächlichen Helius API key.
Tipps für Entwickler
- Performance: Wenn deine Anwendung mehrere Konten häufig prüfen muss, kannst du requests mit
getMultipleAccountsbündeln und so die Anzahl der Hin- und Rückübertragungen reduzieren. - Datendeserialisierung: Das Feld
datamuss häufig anhand der Datenstrukturen des besitzenden Programms deserialisiert werden. In der Regel benötigst du dafür programmspezifische Werkzeuge und Bibliotheken, etwa die SPL-Token-Bibliothek für Token-Konten. Unser Blogbeitrag zur Deserialisierung von Kontodaten enthält hilfreiche Techniken und Beispiele. - Rate limits: Beachte die rate limits des RPC-node, insbesondere wenn du viele Konten abfragst oder häufig requests sendest.
- Kostenmanagement:
getAccountInfoist im Allgemeinen eine kostengünstige Abfrage. Häufiges Polling kann die Kosten jedoch erhöhen. Optimiere deine Abfragemuster. - Verwende
jsonParsedmit Bedacht:jsonParsedist zwar praktisch, unterstützt aber möglicherweise nicht alle Kontotypen. Die Ausgabe kann sich außerdem ändern, wenn ein Programm seine Datenstrukturen aktualisiert. Bei kritischen Anwendungen bietet das Parsen von Binärdaten mit einem bekannten Layout mehr Stabilität. - Ziehe
dataSlicein Betracht: Wenn du nur einen kleinen Teil der Kontodaten benötigst, kannst du mitdataSlicedie übertragene Datenmenge reduzieren und möglicherweise die Abfragekosten senken.
Verwandte Methoden
getMultipleAccounts
Rufe mehrere Konten für eine bessere Performance gebündelt in einem einzigen request ab
getBalance
Rufe nur das SOL-Guthaben ohne vollständige Kontodetails ab