Lezen van het netwerk

Lees gegevens van het Solana-netwerk door verschillende accounts op te halen. Deze handleiding legt de structuur van Solana accounts uit. Elk Solana- account heeft een uniek adres dat wordt gebruikt om de onchain-gegevens van het account te vinden. Solana-accounts bevatten ofwel statusgegevens of een uitvoerbaar programma.

Een wallet-account ophalen

Een wallet-account is een account dat eigendom is van het System Program. Wallet-accounts worden voornamelijk gebruikt om SOL te bewaren en transacties te ondertekenen. Wanneer SOL voor de eerste keer naar een nieuw adres wordt gestuurd, wordt er automatisch een systeemaccount aangemaakt.

Het onderstaande voorbeeld maakt een Kit-client aan, genereert een nieuwe ondertekenaar, vraagt SOL op om het nieuwe adres te financieren, en haalt de accountgegevens op via de RPC- API van de client.

Fetch account
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 account
await client.airdrop(signer.address, lamports(1_000_000_000n));
const accountInfo = await client.rpc.getAccountInfo(signer.address).send();
console.log(accountInfo);
Console
Click to execute the code.

Wanneer je een wallet-account ophaalt met getAccountInfo(), geeft Kit het RPC- antwoord terug zoals weergegeven in de voorbeelduitvoer aan de rechterkant.

Het antwoord heeft twee velden op het hoogste niveau: context beschrijft wanneer het lezen plaatsvond, en value bevat de accountvelden die door de RPC-methode worden geretourneerd.

Het veld context toont de slot die is gebruikt om het account te lezen en de RPC API- versie die het antwoord heeft geleverd. Een latere leesactie kan een andere slot of API-versie retourneren.

Het veld value bevat de accountstatus die door de RPC-methode wordt geretourneerd. De volgende stappen doorlopen de velden binnen value in de volgorde waarin de velden verschijnen.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Het veld lamports bevat het SOL-saldo van het account, gemeten in lamports, de kleinste eenheid van SOL.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Het veld data bevat de gegevens van het account opgeslagen als bytes. De RPC geeftaccountgegevens terug als een tuple: de gecodeerde gegevensstring, gevolgd door de codering. Voor walletaccounts is de gecodeerde gegevensstring leeg, omdat het account 0 bytes aan gegevens opslaat.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

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.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Het veld executable geeft aan of het adres van het account aanroepbaar is. true betekent dat het adres een programma vertegenwoordigt dat instructies kan verwerken. false betekent dat het account een toestand opslaat, zoals een walletsaldo of accountgegevens, en niet als een programma wordt aangeroepen. Walletaccounts gebruiken false.

Het veld rentEpoch is een verouderd veld afkomstig van een verouderd rent-mechanisme. Het veld wordt nog steeds teruggegeven voor achterwaartse compatibiliteit.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Het veld space toont het aantal bytes in het veld data. Het veld space wordt teruggegeven met de accountopvraagrespons, maar maakt geen deel uit van het gegevenstype van het account.

Voor het walletaccount-voorbeeld is het veld space 0 omdat het veld data 0 bytes aan gegevens bevat.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Wanneer je een wallet-account ophaalt met getAccountInfo(), geeft Kit het RPC- antwoord terug zoals weergegeven in de voorbeelduitvoer aan de rechterkant.

Het antwoord heeft twee velden op het hoogste niveau: context beschrijft wanneer het lezen plaatsvond, en value bevat de accountvelden die door de RPC-methode worden geretourneerd.

Het veld context toont de slot die is gebruikt om het account te lezen en de RPC API- versie die het antwoord heeft geleverd. Een latere leesactie kan een andere slot of API-versie retourneren.

Het veld value bevat de accountstatus die door de RPC-methode wordt geretourneerd. De volgende stappen doorlopen de velden binnen value in de volgorde waarin de velden verschijnen.

Het veld lamports bevat het SOL-saldo van het account, gemeten in lamports, de kleinste eenheid van SOL.

Het veld data bevat de gegevens van het account opgeslagen als bytes. De RPC geeftaccountgegevens terug als een tuple: de gecodeerde gegevensstring, gevolgd door de codering. Voor walletaccounts is de gecodeerde gegevensstring leeg, omdat het account 0 bytes aan gegevens opslaat.

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 executable geeft aan of het adres van het account aanroepbaar is. true betekent dat het adres een programma vertegenwoordigt dat instructies kan verwerken. false betekent dat het account een toestand opslaat, zoals een walletsaldo of accountgegevens, en niet als een programma wordt aangeroepen. Walletaccounts gebruiken false.

Het veld rentEpoch is een verouderd veld afkomstig van een verouderd rent-mechanisme. Het veld wordt nog steeds teruggegeven voor achterwaartse compatibiliteit.

Het veld space toont het aantal bytes in het veld data. Het veld space wordt teruggegeven met de accountopvraagrespons, maar maakt geen deel uit van het gegevenstype van het account.

Voor het walletaccount-voorbeeld is het veld space 0 omdat het veld data 0 bytes aan gegevens bevat.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Haal het Token Program op

Het onderstaande voorbeeld haalt het Token Program op om het verschil te demonstreren tussen wallet- en programma-accounts. Het Token Program definieert instructies voor het werken met tokens, zoals het aanmaken en overdragen van tokens. Programma's worden aangeroepen om instructies te verwerken. De programmastate, zoals tokengegevens en saldi, worden opgeslagen in afzonderlijke accounts die eigendom zijn van het programma.

Het adres van het Token Program is het onchain program account. Voor de eenvoud kun je het programmaadres beschouwen als het programma zelf, omdat dat het adres is dat wordt gebruikt om het aan te roepen. Voor upgradeable programma's slaat het program account metadata op en verwijst het naar een afzonderlijk programdata account dat de geïmplementeerde uitvoerbare code opslaat. Je kunt de Token Program broncode bekijken en het program account op de Solana Explorer.

Fetch program account
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);
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.

Het Token Program-voorbeeld gebruikt base64-codering om de ruwe data van het program account te retourneren.

De volgende stappen behandelen de velden in value in de volgorde waarin de velden verschijnen.

Token program account
{
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
}
}

Het veld data slaat de programma-accountstatus van de BPF Upgradeable Loader op. Heteerste tuple-item bevat de volledige accountdata gecodeerd als base64. Het tweede tuple-item identificeert de codering. Hier bevatten de 36 bytes metadata en het adres van het programdata account.

Voor upgradeable programma's verwijst de programma-accountstatus naar het afzonderlijke programdata account dat de uitvoerbare code van het programma opslaat.

Token program account
{
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
}
}

Het veld executable is ingesteld op true, wat aangeeft dat het adres van het account aanroepbaar is als een programma.

Token program account
{
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
}
}

Het veld lamports bevat het SOL-saldo van het program account. Program accounts hebben voldoende lamports nodig om rent-exempt te blijven.

Token program account
{
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
}
}

Elk program account is eigendom van een loader-programma. Voor het Token Program account is de owner de BPF Upgradeable Loader.

Token program account
{
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
}
}

Het veld rentEpoch is een verouderd veld afkomstig van een afgeschaft rent-mechanisme. Het veld wordt nog steeds teruggegeven voor achterwaartse compatibiliteit.

Token program account
{
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
}
}

Het veld space toont de volledige omvang van de gegevens van het program account in bytes. De waarde van space is slechts 36 bytes, omdat het program account loader-metadata en het adres van het ProgramData account opslaat, niet de volledige gecompileerde programmacode.

Token program account
{
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
}
}

Het vorige antwoord gaf het veld data van het program account terug als een base64-tuple. Het geparseerde antwoord deserialiseert die bytes in benoemde velden van het data-object. Het veld programData bevat het adres van het ProgramData account dat de uitvoerbare programmacode opslaat.

Parsed Token program account
{
executable: true,
lamports: 43712780n,
programAddress: "BPFLoaderUpgradeab1e11111111111111111111111",
space: 36n,
address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
data: {
programData: "3gvYRKWyXRR9xKWe1ZjPhLY5ZJRN7KDB4rFZFGoJfFk2",
parsedAccountMeta: { program: "bpf-upgradeable-loader", type: "program" }
},
exists: true
}

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

Het Token Program-voorbeeld gebruikt base64-codering om de ruwe data van het program account te retourneren.

De volgende stappen behandelen de velden in value in de volgorde waarin de velden verschijnen.

Het veld data slaat de programma-accountstatus van de BPF Upgradeable Loader op. Heteerste tuple-item bevat de volledige accountdata gecodeerd als base64. Het tweede tuple-item identificeert de codering. Hier bevatten de 36 bytes metadata en het adres van het programdata account.

Voor upgradeable programma's verwijst de programma-accountstatus naar het afzonderlijke programdata account dat de uitvoerbare code van het programma opslaat.

Het veld executable is ingesteld op true, wat aangeeft dat het adres van het account aanroepbaar is als een programma.

Het veld lamports bevat het SOL-saldo van het program account. Program accounts hebben voldoende lamports nodig om rent-exempt te blijven.

Elk program account is eigendom van een loader-programma. Voor het Token Program account is de owner de BPF Upgradeable Loader.

Het veld rentEpoch is een verouderd veld afkomstig van een afgeschaft rent-mechanisme. Het veld wordt nog steeds teruggegeven voor achterwaartse compatibiliteit.

Het veld space toont de volledige omvang van de gegevens van het program account in bytes. De waarde van space is slechts 36 bytes, omdat het program account loader-metadata en het adres van het ProgramData account opslaat, niet de volledige gecompileerde programmacode.

Het vorige antwoord gaf het veld data van het program account terug als een base64-tuple. Het geparseerde antwoord deserialiseert die bytes in benoemde velden van het data-object. Het veld programData bevat het adres van het ProgramData account dat de uitvoerbare programmacode opslaat.

Token program account
{
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
}
}

Een mint account ophalen

Een mint account is een account dat eigendom is van het Token Program en globale metadata opslaat voor een specifiek token. Het mint account slaat de totale voorraad van het token op, het aantal decimalen, de mint authority en de freeze authority. 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 laten zien hoe de status van een programma wordt opgeslagen in een afzonderlijk account. Exacte saldi en voorraadwaarden kunnen verschillen afhankelijk van de slot waaruit uw RPC-node leest.

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

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

De volgende stappen beschrijven de velden in value in de volgorde waarin de velden verschijnen.

Mint account
{
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
}
}

Het veld data bevat de geserialiseerde Mint accountstatus. Het eerste tuple-item bevat de volledige 82-byte accountdata gecodeerd als base64. Het tweede tuple-item identificeert de codering.

Om uit een mint account te lezen, moet u het veld data deserialiseren naar het gegevenstype Mint, zoals getoond in het volgende voorbeeld.

Mint account
{
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
}
}

Het veld executable geeft aan of het account als programma kan worden aangeroepen. Mint accounts slaan status op, dus het veld executable is false.

Mint account
{
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
}
}

Het veld lamports bevat het SOL-saldo van het mint account. De lamports-waarde is het rent-vrijgestelde saldo van het mint account, niet de tokenvoorraad.

Mint account
{
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
}
}

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

Mint account
{
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
}
}

Het veld rentEpoch is een verouderd veld afkomstig uit een afgeschreven rent-mechanisme. Het veld wordt nog steeds teruggegeven voor achterwaartse compatibiliteit.

Mint account
{
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
}
}

Het veld space laat zien dat het mint account 82 bytes aan gegevens bevat.

Mint account
{
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 accounts slaan status op, geen uitvoerbare code. Mint accounts zijn eigendom van het Token Program, dat instructies bevat die definiëren hoe mint accounts worden aangemaakt en bijgewerkt.

De volgende stappen beschrijven de velden in value in de volgorde waarin de velden verschijnen.

Het veld data bevat de geserialiseerde Mint accountstatus. Het eerste tuple-item bevat de volledige 82-byte accountdata gecodeerd als base64. Het tweede tuple-item identificeert de codering.

Om uit een mint account te lezen, moet u het veld data deserialiseren naar het gegevenstype Mint, zoals getoond in het volgende voorbeeld.

Het veld executable geeft aan of het account als programma kan worden aangeroepen. Mint accounts slaan status op, dus het veld executable is false.

Het veld lamports bevat het SOL-saldo van het mint account. De lamports-waarde is het rent-vrijgestelde saldo van het mint account, niet de tokenvoorraad.

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

Het veld rentEpoch is een verouderd veld afkomstig uit een afgeschreven rent-mechanisme. Het veld wordt nog steeds teruggegeven voor achterwaartse compatibiliteit.

Het veld space laat zien dat het mint account 82 bytes aan gegevens bevat.

Mint account
{
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 deserialiseren

Accountgegevens worden opgeslagen in het veld data in een geserialiseerd formaat. Om die gegevens te lezen als velden zoals supply of decimals, moet je het veld data deserialiseren naar het accounttype dat is gedefinieerd door het eigendomsprogramma. De meeste Solana-programma's bieden clientbibliotheken met hulpfuncties voor deze stap. Deze hulpfuncties retourneren gestructureerde accountgegevens, waardoor het resultaat eenvoudiger te verwerken is.

De bibliotheek @solana-program/token bevat bijvoorbeeld de functie fetchMint() om een mint account op te halen en het veld data van het mint account te deserialiseren naar het gegevenstype Mint dat is gedefinieerd door het Token Program.

Deserialize mint account data
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);
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 fetchMint() haalt een mint account op en deserialiseert het veld data van het mint account naar het Mint-accounttype.

Mint account
{
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
}
}

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

Decoded 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
}

Het veld address bevat het adres van de mint account.

Decoded 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
}

Het veld data bevat de gedeserialiseerde Mint accountstatus. De geneste velden in data zijn afkomstig van het accounttype Mint van het Token Program.

Decoded 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
}

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

Decoded 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
}

Het veld supply toont het totale aantal tokens dat is aangemaakt. De aanbodwaarde wordt gemeten in de kleinste eenheid van het token. Om het totale aanbod in standaardeenheden te verkrijgen, past u de waarde van het veld supply aan met de decimals.

Decoded 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
}

Het veld decimals toont het aantal decimalen voor het token.

Decoded 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
}

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

Decoded 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
}

Het veld data.freezeAuthority toont het account met de bevoegdheid om token accounts te bevriezen. Een token account is een afzonderlijk account dat eenheden van een token opslaat voor een eigenaar. Wanneer bevroren, kan een token account zijn tokensaldo niet overdragen of vernietigen.

Decoded 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
}

Het veld executable is false. Het USDC mint account slaat de tokenstatus op, dus het USDC mint account kan niet worden aangeroepen als een programma.

Decoded 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
}

Het veld lamports bevat het SOL-saldo van het mint account. De lamports-waarde is het huurvrijgestelde saldo van het mint account, niet de tokenvoorraad.

Decoded 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
}

Het veld programAddress toont het programma dat eigenaar is van het mint account. Voor USDC is het eigenaarsprogramma het Token Program. Alleen het programma dat eigenaar is van een account kan het veld data wijzigen via de geïmplementeerde instructies van het programma.

Decoded 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
}

Het veld space toont de grootte van de oorspronkelijke mint account-gegevens in bytes. Het basis Mint-account van het Token Program is 82 bytes.

Decoded 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
}

De functie fetchMint() haalt een mint account op en deserialiseert het veld data van het mint account naar het Mint-accounttype.

Mint account
{
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
}
}

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

Het veld address bevat het adres van de mint account.

Het veld data bevat de gedeserialiseerde Mint accountstatus. De geneste velden in data zijn afkomstig van het accounttype Mint van het Token Program.

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

Het veld supply toont het totale aantal tokens dat is aangemaakt. De aanbodwaarde wordt gemeten in de kleinste eenheid van het token. Om het totale aanbod in standaardeenheden te verkrijgen, past u de waarde van het veld supply aan met de decimals.

Het veld decimals toont het aantal decimalen voor het token.

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

Het veld data.freezeAuthority toont het account met de bevoegdheid om token accounts te bevriezen. Een token account is een afzonderlijk account dat eenheden van een token opslaat voor een eigenaar. Wanneer bevroren, kan een token account zijn tokensaldo niet overdragen of vernietigen.

Het veld executable is false. Het USDC mint account slaat de tokenstatus op, dus het USDC mint account kan niet worden aangeroepen als een programma.

Het veld lamports bevat het SOL-saldo van het mint account. De lamports-waarde is het huurvrijgestelde saldo van het mint account, niet de tokenvoorraad.

Het veld programAddress toont het programma dat eigenaar is van het mint account. Voor USDC is het eigenaarsprogramma het Token Program. Alleen het programma dat eigenaar is van een account kan het veld data wijzigen via de geïmplementeerde instructies van het programma.

Het veld space toont de grootte van de oorspronkelijke mint account-gegevens in bytes. Het basis Mint-account van het Token Program is 82 bytes.

Decoded 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
}

Geserialiseerde vs gedeserialiseerde uitvoer

Beide voorbeelden lezen hetzelfde USDC mint account. De eerste respons laat het veld data geserialiseerd. Om de inhoud van het mint account te lezen, decodeer die gegevens als het accounttype dat is gedefinieerd door het eigenaarsprogramma. Voor een mint account definieert het Token Program het type Mint dat rechts wordt weergegeven.

Vóór het decoderen bevat het veld data geserialiseerde accountgegevens.

Serialized mint account
{
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
}
}

Na het decoderen van de gegevens als een Mint bevat het veld data benoemde accountvelden.

Deserialized 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
}

Is this page helpful?

Inhoudsopgave

Pagina Bewerken
© 2026 Solana Foundation. Alle rechten voorbehouden.