Daten vom Netzwerk lesen

Lesen Sie Daten aus dem Solana-Netzwerk, indem Sie verschiedene Konten abrufen. Dieser Abschnitt hilft Ihnen, die Struktur von Solana Konten zu verstehen. Jedes Solana-Konto hat eine eindeutige Adresse, die verwendet wird, um die entsprechenden On-Chain-Daten zu lokalisieren. Konten enthalten entweder Zustandsdaten oder ein ausführbares Programm.

Ein Wallet-Konto abrufen

Ein Wallet ist ein Konto, das dem System Program gehört. Wallets werden hauptsächlich verwendet, um SOL zu halten und Transaktionen zu signieren. Wenn SOL zum ersten Mal an eine neue Adresse gesendet wird, wird automatisch ein System-Konto erstellt.

Das folgende Beispiel generiert ein neues keypair, fordert SOL an, um die neue öffentliche Schlüsseladresse zu finanzieren, und ruft die Kontodaten für das neu finanzierte Wallet ab.

Fetch account
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 account
const 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));
Console
Click to execute the code.

Wenn Sie ein Wallet-Konto abrufen, enthält die Antwort die Felder, die im Beispielausgabe auf der rechten Seite gezeigt werden.

Das Feld data enthält die Daten des Kontos, gespeichert als Bytes. Bei Wallet-Konten ist dieses Feld leer (0 Bytes).

Das Feld executable gibt an, ob das Feld data des Kontos ausführbaren Programmcode enthält. Bei Wallet-Konten ist dieses Feld false.

Das Feld lamports enthält das SOL-Guthaben des Kontos in Lamports.

Das Feld owner zeigt das Programm an, das das Konto besitzt. Bei Wallets ist der Besitzer immer das System Program mit der Adresse 11111111111111111111111111111111.

Das Feld rentEpoch ist ein veraltetes Feld aus einem nicht mehr verwendeten Rent-Mechanismus. (Dieses Feld ist aus Gründen der Abwärtskompatibilität enthalten.)

Das Feld space zeigt die Anzahl der Bytes an, die im Feld data enthalten sind. Dies ist kein Feld im Account-Typ selbst, sondern wird in der Antwort enthalten.

In diesem Beispiel ist das Feld space 0, da das Feld data 0 Bytes an Daten enthält.

Wenn Sie ein Wallet-Konto abrufen, enthält die Antwort die Felder, die im Beispielausgabe auf der rechten Seite gezeigt werden.

Das Feld data enthält die Daten des Kontos, gespeichert als Bytes. Bei Wallet-Konten ist dieses Feld leer (0 Bytes).

Das Feld executable gibt an, ob das Feld data des Kontos ausführbaren Programmcode enthält. Bei Wallet-Konten ist dieses Feld false.

Das Feld lamports enthält das SOL-Guthaben des Kontos in Lamports.

Das Feld owner zeigt das Programm an, das das Konto besitzt. Bei Wallets ist der Besitzer immer das System Program mit der Adresse 11111111111111111111111111111111.

Das Feld rentEpoch ist ein veraltetes Feld aus einem nicht mehr verwendeten Rent-Mechanismus. (Dieses Feld ist aus Gründen der Abwärtskompatibilität enthalten.)

Das Feld space zeigt die Anzahl der Bytes an, die im Feld data enthalten sind. Dies ist kein Feld im Account-Typ selbst, sondern wird in der Antwort enthalten.

In diesem Beispiel ist das Feld space 0, da das Feld data 0 Bytes an Daten enthält.

Example output
{
"data": {
"type": "Buffer",
"data": []
},
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0,
"space": 0
}

Token Program abrufen

Das folgende Beispiel ruft das Token Program ab, um den Unterschied zwischen Wallet- und program account zu demonstrieren. Der program account speichert den kompilierten Bytecode für den Quellcode des Token Programs. Du kannst diesen program account im Solana Explorer ansehen.

Fetch program account
import { Connection, PublicKey } from "@solana/web3.js";
const connection = new Connection(
"https://api.mainnet.solana.com",
"confirmed"
);
const address = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
const accountInfo = await connection.getAccountInfo(address);
Console
Click to execute the code.

Das Token Program ist ein ausführbarer program account. Programme haben die gleichen zugrunde liegenden Felder wie alle Konten, aber mit wesentlichen Unterschieden.

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

Das Feld executable ist auf true gesetzt, was anzeigt, dass das Feld data des Kontos ausführbaren Code enthält.

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

Das Feld data speichert den ausführbaren Code des Programms.

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

Jedes Programmkonto gehört seinem Loader-Programm. In diesem Beispiel ist owner das BPFLoader2-Programm.

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

Das Token Program ist ein ausführbarer program account. Programme haben die gleichen zugrunde liegenden Felder wie alle Konten, aber mit wesentlichen Unterschieden.

Das Feld executable ist auf true gesetzt, was anzeigt, dass das Feld data des Kontos ausführbaren Code enthält.

Das Feld data speichert den ausführbaren Code des Programms.

Jedes Programmkonto gehört seinem Loader-Programm. In diesem Beispiel ist owner das BPFLoader2-Programm.

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

Ein mint account abrufen

Ein mint account ist ein Konto, das dem Token Program gehört und globale Metadaten für einen bestimmten Token speichert. Dazu gehören die Gesamtversorgung, die Anzahl der Dezimalstellen und die Konten, die zum Prägen oder Einfrieren von Tokens berechtigt sind. Die Adresse des mint account identifiziert einen Token im Solana-Netzwerk eindeutig.

Das folgende Beispiel ruft das USD Coin Mint account ab, um zu zeigen, wie der Zustand eines Programms in einem separaten Konto gespeichert wird.

Fetch program account
import { Connection, PublicKey } from "@solana/web3.js";
const connection = new Connection(
"https://api.mainnet.solana.com",
"confirmed"
);
const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const accountInfo = await connection.getAccountInfo(address);
Console
Click to execute the code.

Mint accounts speichern Zustand, nicht ausführbaren Code. Sie gehören dem Token Program, das Anweisungen enthält, die definieren, wie mint accounts erstellt und aktualisiert werden.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Das data-Feld des Mint-Kontos speichert Zustandsdaten, keinen ausführbaren Code, daher ist das executable-Feld false.

Das Token-Programm definiert den Mint-Datentyp, der im data-Feld gespeichert wird.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Das data-Feld enthält den serialisierten Mint-Kontenzustand, wie z. B. die Mint-Berechtigung, Gesamtmenge und Anzahl der Dezimalstellen.

Um aus einem Mint-Konto zu lesen, müssen Sie das data-Feld in den Mint-Datentyp deserialisieren, wie im nächsten Beispiel gezeigt.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Das Mint-Konto gehört dem Token-Programm. Das bedeutet, dass sein data-Feld nur durch die Anweisungen des Token-Programms geändert werden kann.

Mint Account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Mint accounts speichern Zustand, nicht ausführbaren Code. Sie gehören dem Token Program, das Anweisungen enthält, die definieren, wie mint accounts erstellt und aktualisiert werden.

Das data-Feld des Mint-Kontos speichert Zustandsdaten, keinen ausführbaren Code, daher ist das executable-Feld false.

Das Token-Programm definiert den Mint-Datentyp, der im data-Feld gespeichert wird.

Das data-Feld enthält den serialisierten Mint-Kontenzustand, wie z. B. die Mint-Berechtigung, Gesamtmenge und Anzahl der Dezimalstellen.

Um aus einem Mint-Konto zu lesen, müssen Sie das data-Feld in den Mint-Datentyp deserialisieren, wie im nächsten Beispiel gezeigt.

Das Mint-Konto gehört dem Token-Programm. Das bedeutet, dass sein data-Feld nur durch die Anweisungen des Token-Programms geändert werden kann.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Mint account deserialisieren

Bevor die Rohdaten im data-Feld eines Kontos sinnvoll interpretiert werden können, müssen sie deserialisiert werden. Der entsprechende Datentyp wird vom Programm definiert, das das Konto besitzt. Die meisten Solana-Programme bieten Client-Bibliotheken mit Hilfsfunktionen an, die den Deserialisierungsprozess abstrahieren. Diese Funktionen konvertieren die Rohdaten des Kontos in strukturierte Datentypen und erleichtern so die Arbeit mit den Kontodaten.

Zum Beispiel enthält die @solana/spl-token Bibliothek die getMint()-Funktion, um das data-Feld eines Mint-Kontos in den Mint-Datentyp zu deserialisieren, der vom Token-Programm definiert wird.

Deserialize mint account data
import { PublicKey, Connection } from "@solana/web3.js";
import { getMint } from "@solana/spl-token";
const connection = new Connection(
"https://api.mainnet.solana.com",
"confirmed"
);
const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const mintData = await getMint(connection, address, "confirmed");
Console
Click to execute the code.
Mint account type
pub struct Mint {
/// Optional authority used to mint new tokens. The mint authority may only
/// be provided during mint creation. If no mint authority is present
/// then the mint has a fixed supply and no further tokens may be
/// minted.
pub mint_authority: COption<Pubkey>,
/// Total supply of tokens.
pub supply: u64,
/// Number of base 10 digits to the right of the decimal place.
pub decimals: u8,
/// Is `true` if this structure has been initialized
pub is_initialized: bool,
/// Optional authority to freeze token accounts.
pub freeze_authority: COption<Pubkey>,
}

Die getMint()-Funktion deserialisiert das data-Feld eines Mint-Kontos in den Mint-Kontotyp.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Sie können die vollständig deserialisierten mint account Daten im Solana Explorer ansehen.

Das Feld address enthält die Adresse des Mint-Konten.

Das Feld mintAuthority zeigt das einzige Konto, das neue Einheiten des Tokens erstellen kann.

Das Feld supply zeigt die Gesamtzahl der Token, die geminted wurden. Dieser Wert wird in der kleinsten Einheit des Tokens gemessen. Um das Gesamtangebot in Standardeinheiten zu erhalten, passen Sie den Wert des Feldes supply durch die decimals an.

Das Feld decimals zeigt die Anzahl der Dezimalstellen für den Token.

Das Feld isInitialized gibt an, ob das Mint-Konto initialisiert wurde. Dieses Feld ist eine Sicherheitsprüfung, die im Token Program verwendet wird.

Das Feld freezeAuthority zeigt das Konto mit der Berechtigung, Token-Konten einzufrieren. Ein eingefrorenes Token-Konto kann den darin enthaltenen Token weder übertragen noch verbrennen.

Das Feld tlvData enthält zusätzliche Daten für Token Extensions und erfordert eine weitere Deserialisierung. Dieses Feld ist nur für Konten relevant, die vom Token Extension Program (Token2022) erstellt wurden.

Die getMint()-Funktion deserialisiert das data-Feld eines Mint-Kontos in den Mint-Kontotyp.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Sie können die vollständig deserialisierten mint account Daten im Solana Explorer ansehen.

Das Feld address enthält die Adresse des Mint-Konten.

Das Feld mintAuthority zeigt das einzige Konto, das neue Einheiten des Tokens erstellen kann.

Das Feld supply zeigt die Gesamtzahl der Token, die geminted wurden. Dieser Wert wird in der kleinsten Einheit des Tokens gemessen. Um das Gesamtangebot in Standardeinheiten zu erhalten, passen Sie den Wert des Feldes supply durch die decimals an.

Das Feld decimals zeigt die Anzahl der Dezimalstellen für den Token.

Das Feld isInitialized gibt an, ob das Mint-Konto initialisiert wurde. Dieses Feld ist eine Sicherheitsprüfung, die im Token Program verwendet wird.

Das Feld freezeAuthority zeigt das Konto mit der Berechtigung, Token-Konten einzufrieren. Ein eingefrorenes Token-Konto kann den darin enthaltenen Token weder übertragen noch verbrennen.

Das Feld tlvData enthält zusätzliche Daten für Token Extensions und erfordert eine weitere Deserialisierung. Dieses Feld ist nur für Konten relevant, die vom Token Extension Program (Token2022) erstellt wurden.

Deserialized mint data
{
"address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"mintAuthority": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"supply": "8985397351591790",
"decimals": 6,
"isInitialized": true,
"freezeAuthority": "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar",
"tlvData": {
"type": "Buffer",
"data": []
}
}

Is this page helpful?

Inhaltsverzeichnis

Seite bearbeiten

Verwaltet von

© 2026 Solana Foundation.
Alle Rechte vorbehalten.
Verbinden Sie sich