Lesen Sie Daten aus dem Solana-Netzwerk, indem Sie verschiedene Konten abrufen. Dieser Leitfaden erläutert die Struktur von Solana-Konten. Jedes Solana- Konten hat eine eindeutige Adresse, die verwendet wird, um die Onchain-Daten des Kontos zu lokalisieren. Solana-Konten enthalten entweder Zustandsdaten oder ein ausführbares Programm.
Ein Wallet-Konto abrufen
Ein Wallet-Konten ist ein Konten, das dem System Program gehört. Wallet-Konten 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-Konten erstellt.
Das folgende Beispiel erstellt einen Kit-Client, generiert einen neuen Signer, fordert SOL an, um die neue Adresse zu finanzieren, und ruft die Kontendaten ab über die RPC-API des Clients.
import { createClient, generateKeyPairSigner, lamports } from "@solana/kit";import { solanaRpc, rpcAirdrop } from "@solana/kit-plugin-rpc";import { generatedPayer } from "@solana/kit-plugin-signer";const client = await createClient().use(generatedPayer()).use(solanaRpc({rpcUrl: "http://localhost:8899",rpcSubscriptionsUrl: "ws://localhost:8900"})).use(rpcAirdrop());const signer = await generateKeyPairSigner();console.log(`Address: ${signer.address}`);// Funding an address with SOL automatically creates an accountawait client.airdrop(signer.address, lamports(1_000_000_000n));const accountInfo = await client.rpc.getAccountInfo(signer.address).send();console.log(accountInfo);
Wenn Sie ein Wallet-Konten mit getAccountInfo() abrufen, gibt Kit die RPC-
Antwort zurück, die im Beispiel-Output auf der rechten Seite gezeigt wird.
Die Antwort hat zwei Felder auf oberster Ebene: context beschreibt, wann der
Lesevorgang stattgefunden hat, und value enthält die Kontenfelder, die von der
RPC-Methode zurückgegeben werden.
Das Feld context zeigt den slot, der zum Lesen des Kontos verwendet wurde,
sowie die RPC-API- Version, die die Antwort bereitgestellt hat. Ein späterer
Lesevorgang kann einen anderen slot oder eine andere API-Version zurückgeben.
Das Feld value enthält den Kontenstatus, der von der RPC-Methode zurückgegeben
wird. Die folgenden Schritte erläutern die Felder innerhalb von value in der
Reihenfolge, in der die Felder erscheinen.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
Das Feld lamports enthält das SOL-Guthaben des Konten, gemessen in
lamports, der kleinsten Einheit von SOL.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
Das Feld data enthält die im Konten gespeicherten Daten in Form von Bytes. RPC
gibt Kontendaten als Tupel zurück: den codierten Datenstring, gefolgt von der
Kodierung. Bei Wallet-Konten ist der codierte Datenstring leer, da das Konten 0
Bytes an Daten speichert.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
Das Feld owner zeigt das Programm, dem das Konten gehört. Bei Wallets ist der
Eigentümer immer das System Program, mit der Adresse
11111111111111111111111111111111.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
Das Feld executable gibt an, ob die Adresse des Konten aufrufbar ist. true
bedeutet, dass die Adresse ein Programm repräsentiert, das Anweisungen
verarbeiten kann. false bedeutet, dass das Konten einen Zustand speichert, wie
z. B. ein Wallet-Guthaben oder Kontendaten, und nicht als Programm aufgerufen
wird. Wallet-Konten verwenden false.
Das Feld rentEpoch ist ein Legacy-Feld aus einem veralteten rent-Mechanismus.
Das Feld wird aus Gründen der Abwärtskompatibilität weiterhin zurückgegeben.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
Das Feld space zeigt die Anzahl der Bytes im Feld data. Das Feld space
wird mit der Antwort beim Abrufen des Konten zurückgegeben, ist jedoch nicht
Teil des Datentyps des Konten.
Für das Wallet-Konten-Beispiel ist das Feld space 0, da das Feld data 0
Bytes an Daten enthält.
{context: {slot: 420602714n,apiVersion: "3.1.6"},value: {lamports: 1000000000n,data: ["", "base64"],owner: "11111111111111111111111111111111",executable: false,rentEpoch: 0n,space: 0n}}
Token Program abrufen
Das folgende Beispiel ruft das Token Program ab, um den Unterschied zwischen Wallet- und Programm-Konten zu veranschaulichen. Das Token Program definiert Anweisungen für die Arbeit mit Token, wie das Erstellen und Übertragen von Token. Programme werden aufgerufen, um Anweisungen zu verarbeiten. Der Programmzustand, wie Token-Daten und Guthaben, wird in separaten Konten gespeichert, die dem Programm gehören.
Die Adresse des Token Programs ist das onchain program account. Der Einfachheit halber kann man die Programmadresse als das Programm selbst betrachten, da dies die Adresse ist, die zum Aufrufen verwendet wird. Bei upgradefähigen Programmen speichert das program account Metadaten und verweist auf ein separates programdata account, das den bereitgestellten ausführbaren Code enthält. Sie können den Token Program Quellcode und das program account im Solana Explorer einsehen.
import { address, createClient, fetchJsonParsedAccount } from "@solana/kit";import { solanaRpc } from "@solana/kit-plugin-rpc";import { generatedPayer } from "@solana/kit-plugin-signer";const client = await createClient().use(generatedPayer()).use(solanaRpc({rpcUrl: "https://api.mainnet.solana.com"}));const tokenProgramAddress = address("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");const accountInfo = await client.rpc.getAccountInfo(tokenProgramAddress, {encoding: "base64"}).send();console.log(accountInfo);const parsedAccount = await fetchJsonParsedAccount(client.rpc,tokenProgramAddress);console.log(parsedAccount);
Das Token Program ist ein ausführbares program account. Programme besitzen dieselben grundlegenden Felder wie alle Konten, weisen jedoch wesentliche Unterschiede auf.
Das Token Program-Beispiel verwendet die base64-Kodierung, um die Rohdaten des
program accounts zurückzugeben.
Die folgenden Schritte führen durch die Felder in value in der Reihenfolge, in
der die Felder erscheinen.
{context: {apiVersion: "3.1.14",slot: 420601581n},value: {data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],executable: true,lamports: 2191440n,owner: "BPFLoaderUpgradeab1e11111111111111111111111",rentEpoch: 18446744073709551615n,space: 36n}}
Das Feld data speichert den Zustand des program accounts des BPF Upgradeable
Loaders. Das erste Tupel-Element enthält die vollständigen Kontodaten, kodiert
als Base64. Das zweite Tupel-Element gibt die Kodierung an. Hier umfassen die 36
Bytes Metadaten und die Adresse des programdata accounts.
Bei upgradefähigen Programmen verweist der Zustand des program accounts auf das separate programdata account, das den ausführbaren Code des Programms enthält.
{context: {apiVersion: "3.1.14",slot: 420601581n},value: {data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],executable: true,lamports: 2191440n,owner: "BPFLoaderUpgradeab1e11111111111111111111111",rentEpoch: 18446744073709551615n,space: 36n}}
Das Feld executable ist auf true gesetzt, was bedeutet, dass die Adresse des
Konten als Programm aufgerufen werden kann.
{context: {apiVersion: "3.1.14",slot: 420601581n},value: {data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],executable: true,lamports: 2191440n,owner: "BPFLoaderUpgradeab1e11111111111111111111111",rentEpoch: 18446744073709551615n,space: 36n}}
Das Feld lamports enthält den SOL-Guthaben des program account. Program
accounts benötigen ausreichend lamports, um rent-exempt zu bleiben.
{context: {apiVersion: "3.1.14",slot: 420601581n},value: {data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],executable: true,lamports: 2191440n,owner: "BPFLoaderUpgradeab1e11111111111111111111111",rentEpoch: 18446744073709551615n,space: 36n}}
Jedes program account gehört einem
Loader-Programm. Für
das Token Program account ist der owner der BPF Upgradeable Loader.
{context: {apiVersion: "3.1.14",slot: 420601581n},value: {data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],executable: true,lamports: 2191440n,owner: "BPFLoaderUpgradeab1e11111111111111111111111",rentEpoch: 18446744073709551615n,space: 36n}}
Das Feld rentEpoch ist ein veraltetes Feld aus einem abgeschafften
rent-Mechanismus. Das Feld wird aus Gründen der Abwärtskompatibilität weiterhin
zurückgegeben.
{context: {apiVersion: "3.1.14",slot: 420601581n},value: {data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],executable: true,lamports: 2191440n,owner: "BPFLoaderUpgradeab1e11111111111111111111111",rentEpoch: 18446744073709551615n,space: 36n}}
Das Feld space zeigt die Gesamtgröße der Daten des program account in Bytes.
Der Wert space beträgt nur 36 Bytes, da das program account Loader-Metadaten
und die Adresse des ProgramData-Konten speichert, nicht den vollständig
kompilierten Programmcode.
{context: {apiVersion: "3.1.14",slot: 420601581n},value: {data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],executable: true,lamports: 2191440n,owner: "BPFLoaderUpgradeab1e11111111111111111111111",rentEpoch: 18446744073709551615n,space: 36n}}
Die vorherige Antwort hat das Feld data des program account als Base64- Tupel
zurückgegeben. Die geparste Antwort deserialisiert diese Bytes in benannte
Felder des data-Objekts. Das Feld programData enthält die Adresse des
ProgramData- Konten, das den ausführbaren Programmcode speichert.
{executable: true,lamports: 43712780n,programAddress: "BPFLoaderUpgradeab1e11111111111111111111111",space: 36n,address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",data: {programData: "3gvYRKWyXRR9xKWe1ZjPhLY5ZJRN7KDB4rFZFGoJfFk2",parsedAccountMeta: { program: "bpf-upgradeable-loader", type: "program" }},exists: true}
Abrufen eines mint account
Ein mint account ist ein Konten, das dem Token Program gehört und globale Metadaten für einen bestimmten Token speichert. Der mint account speichert das Gesamtangebot des Tokens, die Anzahl der Dezimalstellen, die Mint-Autorität und die Einfrierautorität. Die Adresse des mint account identifiziert einen Token im Solana-Netzwerk eindeutig.
Das folgende Beispiel ruft den USD Coin Mint account ab, um zu zeigen, wie der Zustand eines Programms in einem separaten Konten gespeichert wird. Die genauen Salden und Angebotswerte können je nach dem slot variieren, von dem Ihr RPC-Knoten liest.
import { address, createClient } from "@solana/kit";import { solanaRpc } from "@solana/kit-plugin-rpc";import { generatedPayer } from "@solana/kit-plugin-signer";const client = await createClient().use(generatedPayer()).use(solanaRpc({rpcUrl: "https://api.mainnet.solana.com"}));const mintAddress = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const accountInfo = await client.rpc.getAccountInfo(mintAddress, {encoding: "base64"}).send();console.log(accountInfo);
Mint accounts speichern Zustand, keinen ausführbaren Code. Mint accounts gehören dem Token Program, das Anweisungen enthält, die definieren, wie mint accounts erstellt und aktualisiert werden.
Die folgenden Schritte erläutern die Felder innerhalb von value in der
Reihenfolge, in der die Felder erscheinen.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
Das Feld data enthält den serialisierten Mint-Konten-Zustand. Das erste
Tupel-Element enthält die vollständigen 82-Byte-Kontendaten, kodiert als Base64.
Das zweite Tupel-Element gibt die Kodierung an.
Um aus einem Mint account zu lesen, müssen Sie das Feld data in den Datentyp
Mint deserialisieren, wie im nächsten Beispiel
gezeigt.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
Das Feld executable gibt an, ob das Konten als Programm aufgerufen werden
kann. Mint accounts speichern Zustand, daher ist das Feld executable false.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
Das Feld lamports enthält das SOL-Guthaben des mint account. Der lamport-Wert
ist das mietbefreite Guthaben des mint account, nicht das Token-Angebot.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
Das mint account wird vom
Token Program verwaltet. Das Feld
data des mint account kann nur durch die Anweisungen des Token Program
geändert werden.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
Das Feld rentEpoch ist ein veraltetes Feld aus einem abgelösten
rent-Mechanismus. Das Feld wird weiterhin aus Gründen der Abwärtskompatibilität
zurückgegeben.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
Das Feld space zeigt an, dass das mint account 82 Bytes an Daten enthält.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
Mint account deserialisieren
Kontendaten werden im Feld data in einem serialisierten Format gespeichert. Um
diese Daten als Felder wie supply oder decimals zu lesen, muss das Feld
data in den Kontotyp deserialisiert werden, der vom besitzenden Programm
definiert wird. Die meisten Solana-Programme stellen Client-Bibliotheken mit
Hilfsfunktionen für diesen Schritt bereit. Diese Hilfsfunktionen geben
strukturierte Kontendaten zurück und erleichtern so die weitere Verarbeitung.
Die Bibliothek @solana-program/token enthält beispielsweise die
Funktion fetchMint(), um ein mint account abzurufen und das
Feld data des mint account in den
Mint-Datentyp
zu deserialisieren, der vom Token Program definiert wird.
import { address, createClient } from "@solana/kit";import { solanaRpc } from "@solana/kit-plugin-rpc";import { generatedPayer } from "@solana/kit-plugin-signer";import { fetchMint } from "@solana-program/token";const client = await createClient().use(generatedPayer()).use(solanaRpc({rpcUrl: "https://api.mainnet.solana.com"}));const mintAddress = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const mint = await fetchMint(client.rpc, mintAddress);console.log(mint);
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 initializedpub is_initialized: bool,/// Optional authority to freeze token accounts.pub freeze_authority: COption<Pubkey>,}
Die Funktion fetchMint() ruft ein mint account ab und deserialisiert das
Feld data des mint account in den Mint-Kontotyp.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
Sie können die vollständig deserialisierten Daten des mint account im Solana Explorer einsehen.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
Das Feld address enthält die Adresse des mint account.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
Das Feld data enthält den deserialisierten Zustand der Mint-Konten. Die
verschachtelten Felder in data stammen aus dem Mint-Kontotyp des Token
Program.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
Das Feld data.mintAuthority zeigt das einzige Konto an, das neue Einheiten des
Tokens erstellen kann.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
Das Feld supply zeigt die Gesamtanzahl der geprägten Token an. Der
Versorgungswert wird in der kleinsten Einheit des Tokens gemessen. Um das
Gesamtangebot in Standardeinheiten zu erhalten, passen Sie den Wert des Felds
supply durch den decimals an.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
Das Feld decimals gibt die Anzahl der Dezimalstellen für den Token an.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
Das Feld isInitialized gibt an, ob das mint account initialisiert wurde. Das
Feld isInitialized ist eine Sicherheitsprüfung, die im Token Program verwendet
wird.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
Das Feld data.freezeAuthority zeigt das Konten mit der Berechtigung, token
accounts einzufrieren. Ein
token account ist ein separates
Konten, das Token-Einheiten für einen Eigentümer speichert. Wenn eingefroren,
kann ein token account sein Token-Guthaben weder übertragen noch verbrennen.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
Das Feld executable ist false. Das USDC mint account speichert den
Token-Zustand, daher kann das USDC mint account nicht als Programm aufgerufen
werden.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
Das Feld lamports enthält das SOL-Guthaben des mint account. Der lamport-Wert
ist das mietbefreite Guthaben des mint account, nicht das Token-Angebot.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
Das Feld programAddress zeigt das Programm, dem das mint account gehört. Bei
USDC ist das besitzende Programm das Token Program. Nur das Programm, dem ein
Konten gehört, kann dessen Feld data über die bereitgestellten Anweisungen des
Programms ändern.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
Das Feld space zeigt die Größe der ursprünglichen mint account-Daten in Bytes.
Das Basis-Mint-Konten des Token Program umfasst 82 Bytes.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
Serialisierte vs. deserialisierte Ausgabe
Beide Beispiele lesen dasselbe USDC mint account. Die erste Antwort lässt das
Feld data serialisiert. Um den Inhalt des mint account zu lesen, dekodieren
Sie diese Daten als den Kontotyp, der durch das besitzende Programm definiert
ist. Für ein mint account definiert das Token Program den auf der rechten Seite
gezeigten Typ Mint.
Vor der Dekodierung enthält das Feld data
serialisierte Konten-Daten.
{context: {slot: 325000000n,apiVersion: "3.1.14"},value: {data: ["AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==","base64"],executable: false,lamports: 407438077149n,owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",rentEpoch: 18446744073709551615n,space: 82n}}
Nach der Dekodierung der Daten als Mint enthält das Feld
data benannte Konten-Felder.
{address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",data: {mintAuthority: {__option: "Some",value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"},supply: 8985397351591790n,decimals: 6,isInitialized: true,freezeAuthority: {__option: "Some",value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"}},executable: false,lamports: 407438077149n,programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",space: 82n}
Is this page helpful?