Daten vom Netzwerk lesen
Dieser Abschnitt erklärt, wie man Daten aus dem Solana-Netzwerk liest, indem verschiedene Konten abgerufen werden, um die Struktur eines Solana-Kontos zu verstehen.
Auf Solana existieren alle Daten in "Konten". Sie können sich die Daten auf Solana als eine öffentliche Datenbank mit einer einzigen "Konten"-Tabelle vorstellen, wobei jeder Eintrag ein Konto mit demselben Basis- Kontotyp ist.
Konten
Konten auf Solana können "Zustand" oder "ausführbare" Programme speichern. Jedes Konto hat eine "Adresse" (öffentlicher Schlüssel), die als eindeutige ID dient und verwendet wird, um die entsprechenden On-Chain-Daten zu lokalisieren.
Solana-Konten enthalten entweder:
- Zustand: Daten, die gelesen und gespeichert werden sollen. Zum Beispiel Informationen über Tokens, Benutzerdaten oder andere Daten, die innerhalb eines Programms definiert sind.
- Ausführbare Programme: Konten, die den tatsächlichen Code von Solana-Programmen enthalten. Diese Konten speichern Anweisungen, die Benutzer aufrufen können.
Diese Trennung von Programmcode und Programmzustand ist ein Schlüsselmerkmal des Solana-Kontenmodells. Weitere Details finden Sie auf der Seite Solana-Kontenmodell.
Wallet-Konto abrufen
Dieses Beispiel zeigt, wie man:
- Ein neues Keypair (öffentliches/privates Schlüsselpaar) generiert.
- Einen Airdrop von SOL anfordert, um die neue Adresse zu finanzieren.
- Die Kontodaten für die finanzierte Adresse abruft.
Auf Solana erstellt die Finanzierung einer neuen Adresse mit SOL automatisch ein Konto, das dem System-Programm gehört. Alle "Wallet"-Konten sind einfach Konten im Besitz des System-Programms, die SOL halten und Transaktionen signieren können.
import { Keypair, Connection, LAMPORTS_PER_SOL } from "@solana/web3.js";const keypair = Keypair.generate();console.log(`Public Key: ${keypair.publicKey}`);const connection = new Connection("http://localhost:8899", "confirmed");// Funding an address with SOL automatically creates an accountconst signature = await connection.requestAirdrop(keypair.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");const accountInfo = await connection.getAccountInfo(keypair.publicKey);console.log(JSON.stringify(accountInfo, null, 2));
Token Program abrufen
Dieses Beispiel ruft das Token Program ab, um den Unterschied zwischen Wallet- und program account zu demonstrieren.
import { Connection, PublicKey } from "@solana/web3.js";const connection = new Connection("https://api.mainnet-beta.solana.com","confirmed");const address = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");const accountInfo = await connection.getAccountInfo(address);
Mint Account abrufen
Dieses Beispiel ruft das USD Coin (USDC) Mint account ab, um zu zeigen, wie Programme auf Solana den Status in separaten Konten speichern.
Ein Mint account ist ein Konto, das dem Token Program gehört. Es speichert globale Metadaten für einen bestimmten Token, einschließlich der Gesamtversorgung, Anzahl der Dezimalstellen und der Konten, die zum Prägen oder Einfrieren von Tokens berechtigt sind. Die Adresse des Mint accounts identifiziert einen Token im Solana-Netzwerk eindeutig.
import { Connection, PublicKey } from "@solana/web3.js";const connection = new Connection("https://api.mainnet-beta.solana.com","confirmed");const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const accountInfo = await connection.getAccountInfo(address);
Mint Account deserialisieren
Das Feld data
eines Solana-Kontos enthält Rohdaten in Bytes. Um diese Daten
sinnvoll zu interpretieren, müssen Sie sie in den entsprechenden Datentyp
deserialisieren, der vom Programm definiert wurde, dem das Konto gehört.
Die meisten Solana-Programme bieten Client-Bibliotheken mit Hilfsfunktionen, die den Deserialisierungsprozess abstrahieren. Diese Funktionen konvertieren die rohen Konto-Bytes in strukturierte Datentypen und erleichtern so die Arbeit mit den Kontodaten.
Zum Beispiel enthält @solana/spl-token
die
getMint()
Funktion, die hilft, das data
Feld eines Mint
account in den
Mint
Datentyp zu deserialisieren.
import { PublicKey, Connection } from "@solana/web3.js";import { getMint } from "@solana/spl-token";const connection = new Connection("https://api.mainnet-beta.solana.com","confirmed");const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const mintData = await getMint(connection, address, "confirmed");
Is this page helpful?