Lezen van het netwerk

Lees gegevens van het Solana-netwerk door verschillende accounts op te halen. Dit gedeelte helpt je de structuur van Solana accounts te begrijpen. Elk Solana-account heeft een uniek adres dat wordt gebruikt om de bijbehorende on-chain gegevens te lokaliseren. Accounts bevatten ofwel statusgegevens of een uitvoerbaar programma.

Een wallet-account ophalen

Een wallet is een account dat eigendom is van het System Program. Wallets worden voornamelijk gebruikt om SOL te bewaren en transacties te ondertekenen. Wanneer SOL voor het eerst naar een nieuw adres wordt verzonden, wordt automatisch een systeemaccount aangemaakt.

Het onderstaande voorbeeld genereert een nieuw keypair, vraagt SOL aan om het nieuwe openbare sleuteladres te financieren, en haalt de accountgegevens op voor de nieuw gefinancierde wallet.

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.

Wanneer je een wallet-account ophaalt, bevat het antwoord de velden die in het voorbeeldresultaat aan de rechterkant worden getoond.

Het data veld bevat de gegevens van het account opgeslagen als bytes. Voor wallet- accounts is dit veld leeg (0 bytes).

Het executable veld geeft aan of het data veld van het account uitvoerbare programmacode bevat. Voor wallet-accounts is dit veld false.

Het lamports veld bevat het SOL-saldo van het account, in lamports.

Het veld owner toont het programma dat eigenaar is van het account. Voor wallets is de eigenaar altijd het System Program, met het adres 11111111111111111111111111111111.

Het veld rentEpoch is een verouderd veld van een afgeschaft rent-mechanisme. (Dit veld is opgenomen voor achterwaartse compatibiliteit.)

Het veld space toont het aantal bytes in het veld data. Dit is geen veld in het Account type zelf, maar is opgenomen in de respons.

In dit voorbeeld is het veld space 0 omdat het veld data 0 bytes aan gegevens bevat.

Wanneer je een wallet-account ophaalt, bevat het antwoord de velden die in het voorbeeldresultaat aan de rechterkant worden getoond.

Het data veld bevat de gegevens van het account opgeslagen als bytes. Voor wallet- accounts is dit veld leeg (0 bytes).

Het executable veld geeft aan of het data veld van het account uitvoerbare programmacode bevat. Voor wallet-accounts is dit veld false.

Het lamports veld bevat het SOL-saldo van het account, in lamports.

Het veld owner toont het programma dat eigenaar is van het account. Voor wallets is de eigenaar altijd het System Program, met het adres 11111111111111111111111111111111.

Het veld rentEpoch is een verouderd veld van een afgeschaft rent-mechanisme. (Dit veld is opgenomen voor achterwaartse compatibiliteit.)

Het veld space toont het aantal bytes in het veld data. Dit is geen veld in het Account type zelf, maar is opgenomen in de respons.

In dit voorbeeld is het veld space 0 omdat het veld data 0 bytes aan gegevens bevat.

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

Het Token Program ophalen

Het onderstaande voorbeeld haalt het Token Program op om het verschil tussen wallet- en program accounts te demonstreren. Het program account slaat de gecompileerde bytecode op voor de broncode van het Token Program. Je kunt dit program account bekijken op de Solana Explorer.

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

Het Token Program is een uitvoerbaar program account. Programma's hebben dezelfde onderliggende velden als alle accounts, maar met belangrijke verschillen.

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

Het executable veld is ingesteld op true, wat aangeeft dat het data veld van het account uitvoerbare code bevat.

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

Het data veld bevat de uitvoerbare code van het programma.

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

Elk program account is eigendom van zijn loader programma. In dit voorbeeld is de owner het BPFLoader2 programma.

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

Het Token Program is een uitvoerbaar program account. Programma's hebben dezelfde onderliggende velden als alle accounts, maar met belangrijke verschillen.

Het executable veld is ingesteld op true, wat aangeeft dat het data veld van het account uitvoerbare code bevat.

Het data veld bevat de uitvoerbare code van het programma.

Elk program account is eigendom van zijn loader programma. In dit voorbeeld is de owner het BPFLoader2 programma.

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

Een mint account ophalen

Een mint account is een account dat eigendom is van het Token Program en dat globale metadata opslaat voor een specifieke token. Dit omvat de totale voorraad, het aantal decimalen en de accounts die geautoriseerd zijn om tokens te minten of te bevriezen. Het adres van het mint account identificeert een token uniek op het Solana-netwerk.

Het onderstaande voorbeeld haalt het USD Coin Mint account op om te demonstreren hoe de status van een programma wordt opgeslagen in een apart account.

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

Mint accounts slaan status op, geen uitvoerbare code. Ze zijn eigendom van het Token Program, dat instructies bevat die definiëren hoe mint accounts gemaakt en bijgewerkt kunnen worden.

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

Het data veld van het mint account slaat status op, geen uitvoerbare code, dus het executable veld is false.

Het Token Program definieert het Mint datatype, dat wordt opgeslagen in het data veld.

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

Het data veld bevat de geserialiseerde Mint accountstatus, zoals de mint authority, totale voorraad, aantal decimalen.

Om uit een Mint account te lezen, moet je het data veld deserialiseren naar het Mint datatype, wat wordt getoond in het volgende voorbeeld.

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

Het mint account is eigendom van het Token Program. Dit betekent dat het data veld alleen kan worden gewijzigd door de instructies van het Token Program.

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

Mint accounts slaan status op, geen uitvoerbare code. Ze zijn eigendom van het Token Program, dat instructies bevat die definiëren hoe mint accounts gemaakt en bijgewerkt kunnen worden.

Het data veld van het mint account slaat status op, geen uitvoerbare code, dus het executable veld is false.

Het Token Program definieert het Mint datatype, dat wordt opgeslagen in het data veld.

Het data veld bevat de geserialiseerde Mint accountstatus, zoals de mint authority, totale voorraad, aantal decimalen.

Om uit een Mint account te lezen, moet je het data veld deserialiseren naar het Mint datatype, wat wordt getoond in het volgende voorbeeld.

Het mint account is eigendom van het Token Program. Dit betekent dat het data veld alleen kan worden gewijzigd door de instructies van het Token Program.

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

Deserialiseer mint account

Voordat de ruwe bytes in het data veld van een account zinvol kunnen worden geïnterpreteerd, moeten ze worden gedeserialiseerd. Het juiste datatype wordt bepaald door het programma dat eigenaar is van het account. De meeste Solana-programma's bieden clientbibliotheken met hulpfuncties die het deserialisatieproces abstraheren. Deze functies zetten de ruwe accountbytes om in gestructureerde datatypes, waardoor het makkelijker wordt om met de accountgegevens te werken.

Bijvoorbeeld, de @solana/spl-token bibliotheek bevat de getMint() functie om te helpen bij het deserialiseren van het data veld van een mint account naar het Mint datatype dat door het Token Program is gedefinieerd.

Deserialize mint account data
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");
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>,
}

De functie getMint() deserialiseert het data veld van een mint account naar het Mint account type.

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

Je kunt de volledig gedeserialiseerde mint account data bekijken in de Solana Explorer.

Het veld address bevat het adres van het mint account.

Het veld mintAuthority toont het enige account dat nieuwe eenheden van de token kan aanmaken.

Het veld supply toont het totale aantal tokens dat is gemint. Deze waarde wordt gemeten in de kleinste eenheid van de token. Om het totale aanbod in standaard eenheden te krijgen, pas je de waarde van het veld supply aan met de decimals.

Het veld decimals toont het aantal decimale plaatsen voor de token.

Het veld isInitialized geeft aan of het mint account is geïnitialiseerd. Dit veld is een veiligheidscontrole die wordt gebruikt in het Token Program.

Het freezeAuthority veld toont de account met de bevoegdheid om token accounts te bevriezen. Een bevroren token account kan de tokens die het bevat niet overdragen of verbranden.

Het tlvData veld bevat extra gegevens voor Token Extensions en vereist verdere deserialisatie. Dit veld is alleen relevant voor accounts die zijn aangemaakt door het Token Extension Program (Token2022).

De functie getMint() deserialiseert het data veld van een mint account naar het Mint account type.

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

Je kunt de volledig gedeserialiseerde mint account data bekijken in de Solana Explorer.

Het veld address bevat het adres van het mint account.

Het veld mintAuthority toont het enige account dat nieuwe eenheden van de token kan aanmaken.

Het veld supply toont het totale aantal tokens dat is gemint. Deze waarde wordt gemeten in de kleinste eenheid van de token. Om het totale aanbod in standaard eenheden te krijgen, pas je de waarde van het veld supply aan met de decimals.

Het veld decimals toont het aantal decimale plaatsen voor de token.

Het veld isInitialized geeft aan of het mint account is geïnitialiseerd. Dit veld is een veiligheidscontrole die wordt gebruikt in het Token Program.

Het freezeAuthority veld toont de account met de bevoegdheid om token accounts te bevriezen. Een bevroren token account kan de tokens die het bevat niet overdragen of verbranden.

Het tlvData veld bevat extra gegevens voor Token Extensions en vereist verdere deserialisatie. Dit veld is alleen relevant voor accounts die zijn aangemaakt door het Token Extension Program (Token2022).

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

Is this page helpful?

Inhoudsopgave

Pagina Bewerken

Beheerd door

© 2025 Solana Foundation.
Alle rechten voorbehouden.
Blijf Verbonden