Lecture depuis le réseau

Lisez des données depuis le réseau Solana en récupérant différents comptes. Ce guide explique la structure des comptes Solana. Chaque compte Solana possède une adresse unique utilisée pour localiser les données onchain du compte. Les comptes Solana contiennent soit des données d'état, soit un programme exécutable.

Récupérer un compte de portefeuille

Un compte de portefeuille est un compte appartenant au System Program. Les comptes de portefeuille sont principalement utilisés pour détenir des SOL et signer des transactions. Lorsque des SOL sont envoyés pour la première fois à une nouvelle adresse, un compte système est automatiquement créé.

L'exemple ci-dessous crée un client Kit, génère un nouveau signataire, demande des SOL pour alimenter la nouvelle adresse, et récupère les données du compte depuis l'API RPC du 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.

Lorsque vous récupérez un compte de portefeuille avec getAccountInfo(), Kit renvoie la réponse RPC affichée dans l'exemple de sortie à droite.

La réponse comporte deux champs de premier niveau : context décrit le moment où la lecture a eu lieu, et value contient les champs du compte renvoyés par la méthode RPC.

Le champ context indique le slot utilisé pour lire le compte ainsi que la version de l'API RPC qui a servi la réponse. Une lecture ultérieure peut renvoyer un slot ou une version d'API différent.

Le champ value contient l'état du compte renvoyé par la méthode RPC. Les étapes suivantes détaillent les champs contenus dans value dans l'ordre où ils apparaissent.

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

Le champ lamports contient le solde SOL du compte, mesuré en lamports, la plus petite unité de SOL.

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

Le champ data contient les données du compte stockées sous forme d'octets. Le RPC retourne les données du compte sous forme de tuple : la chaîne de données encodée, suivie de l'encodage. Pour les comptes portefeuille, la chaîne de données encodée est vide car le compte stocke 0 octet de données.

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

Le champ owner indique le programme propriétaire du compte. Pour les portefeuilles, le propriétaire est toujours le System Program, avec l'adresse 11111111111111111111111111111111.

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

Le champ executable indique si l'adresse du compte est appelable. true signifie que l'adresse représente un programme pouvant traiter des instructions. false signifie que le compte stocke un état, tel qu'un solde de portefeuille ou des données de compte, et n'est pas appelé en tant que programme. Les comptes portefeuille utilisent false.

Le champ rentEpoch est un champ hérité d'un mécanisme de rent obsolète. Ce champ est toujours retourné pour des raisons de compatibilité ascendante.

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

Le champ space indique le nombre d'octets contenus dans le champ data. Le champ space est retourné avec la réponse de récupération du compte, mais il ne fait pas partie du type de données du compte.

Pour l'exemple du compte portefeuille, le champ space est 0 car le champ data contient 0 octet de données.

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

Lorsque vous récupérez un compte de portefeuille avec getAccountInfo(), Kit renvoie la réponse RPC affichée dans l'exemple de sortie à droite.

La réponse comporte deux champs de premier niveau : context décrit le moment où la lecture a eu lieu, et value contient les champs du compte renvoyés par la méthode RPC.

Le champ context indique le slot utilisé pour lire le compte ainsi que la version de l'API RPC qui a servi la réponse. Une lecture ultérieure peut renvoyer un slot ou une version d'API différent.

Le champ value contient l'état du compte renvoyé par la méthode RPC. Les étapes suivantes détaillent les champs contenus dans value dans l'ordre où ils apparaissent.

Le champ lamports contient le solde SOL du compte, mesuré en lamports, la plus petite unité de SOL.

Le champ data contient les données du compte stockées sous forme d'octets. Le RPC retourne les données du compte sous forme de tuple : la chaîne de données encodée, suivie de l'encodage. Pour les comptes portefeuille, la chaîne de données encodée est vide car le compte stocke 0 octet de données.

Le champ owner indique le programme propriétaire du compte. Pour les portefeuilles, le propriétaire est toujours le System Program, avec l'adresse 11111111111111111111111111111111.

Le champ executable indique si l'adresse du compte est appelable. true signifie que l'adresse représente un programme pouvant traiter des instructions. false signifie que le compte stocke un état, tel qu'un solde de portefeuille ou des données de compte, et n'est pas appelé en tant que programme. Les comptes portefeuille utilisent false.

Le champ rentEpoch est un champ hérité d'un mécanisme de rent obsolète. Ce champ est toujours retourné pour des raisons de compatibilité ascendante.

Le champ space indique le nombre d'octets contenus dans le champ data. Le champ space est retourné avec la réponse de récupération du compte, mais il ne fait pas partie du type de données du compte.

Pour l'exemple du compte portefeuille, le champ space est 0 car le champ data contient 0 octet de données.

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

Récupérer le Token Program

L'exemple ci-dessous récupère le Token Program pour illustrer la différence entre les comptes de portefeuille et les comptes de programme. Le Token Program définit des instructions pour travailler avec des tokens, comme la création et le transfert de tokens. Les programmes sont invoqués pour traiter les instructions. L'état du programme, tel que les données de tokens et les soldes, est stocké dans des comptes séparés appartenant au programme.

L'adresse du Token Program est le program account onchain. Pour simplifier, vous pouvez considérer l'adresse du programme comme le programme lui-même, car c'est cette adresse qui est utilisée pour l'invoquer. Pour les programmes évolutifs, le program account stocke des métadonnées et pointe vers un programdata account distinct qui contient le code exécutable déployé. Vous pouvez consulter le code source du Token Program source code ainsi que le program account sur le 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.

Le Token Program est un program account exécutable. Les programmes partagent les mêmes champs de base que tous les comptes, mais présentent des différences clés.

L'exemple du Token Program utilise l'encodage base64 pour retourner les données brutes du program account.

Les étapes suivantes parcourent les champs contenus dans value dans l'ordre où ils apparaissent.

Le champ data stocke l'état du program account du BPF Upgradeable Loader. Le premier élément du tuple contient les données complètes du compte encodées en base64. Le second élément du tuple identifie l'encodage. Ici, les 36 octets comprennent les métadonnées et l'adresse du programdata account.

Pour les programmes évolutifs, l'état du program account pointe vers le programdata account distinct qui contient le code exécutable du programme.

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

Le champ executable est défini sur true, ce qui indique que l'adresse du compte peut être invoquée en tant que programme.

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

Le champ lamports contient le solde en SOL détenu par le program account. Les program accounts doivent disposer de suffisamment de lamports pour rester exempts de rent.

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

Chaque program account est détenu par un programme chargeur. Pour le Token Program account, le owner est le 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
}
}

Le champ rentEpoch est un champ hérité d'un mécanisme de rent obsolète. Ce champ est toujours retourné pour des raisons de compatibilité ascendante.

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

Le champ space indique la taille totale des données du program account en octets. La valeur space est seulement de 36 octets, car le program account stocke les métadonnées du chargeur et l'adresse du programdata account, et non le programme compilé complet.

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

La réponse précédente a retourné le champ data du program account sous forme de tuple base64. La réponse désérialisée décode ces octets en champs nommés sur l'objet data. Le champ programData contient l'adresse du programdata account qui stocke le code du programme exécutable.

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
}

Le Token Program est un program account exécutable. Les programmes partagent les mêmes champs de base que tous les comptes, mais présentent des différences clés.

L'exemple du Token Program utilise l'encodage base64 pour retourner les données brutes du program account.

Les étapes suivantes parcourent les champs contenus dans value dans l'ordre où ils apparaissent.

Le champ data stocke l'état du program account du BPF Upgradeable Loader. Le premier élément du tuple contient les données complètes du compte encodées en base64. Le second élément du tuple identifie l'encodage. Ici, les 36 octets comprennent les métadonnées et l'adresse du programdata account.

Pour les programmes évolutifs, l'état du program account pointe vers le programdata account distinct qui contient le code exécutable du programme.

Le champ executable est défini sur true, ce qui indique que l'adresse du compte peut être invoquée en tant que programme.

Le champ lamports contient le solde en SOL détenu par le program account. Les program accounts doivent disposer de suffisamment de lamports pour rester exempts de rent.

Chaque program account est détenu par un programme chargeur. Pour le Token Program account, le owner est le BPF Upgradeable Loader.

Le champ rentEpoch est un champ hérité d'un mécanisme de rent obsolète. Ce champ est toujours retourné pour des raisons de compatibilité ascendante.

Le champ space indique la taille totale des données du program account en octets. La valeur space est seulement de 36 octets, car le program account stocke les métadonnées du chargeur et l'adresse du programdata account, et non le programme compilé complet.

La réponse précédente a retourné le champ data du program account sous forme de tuple base64. La réponse désérialisée décode ces octets en champs nommés sur l'objet data. Le champ programData contient l'adresse du programdata account qui stocke le code du programme exécutable.

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

Récupérer un mint account

Un mint account est un compte appartenant au Token Program qui stocke les métadonnées globales d'un token spécifique. Le mint account stocke l'offre totale du token, le nombre de décimales, l'autorité de frappe et l'autorité de gel. L'adresse du mint account identifie de manière unique un token sur le réseau Solana.

L'exemple ci-dessous récupère le mint account USD Coin pour illustrer comment l'état d'un programme est stocké dans un compte séparé. Les soldes exacts et les valeurs d'offre peuvent varier selon le slot lu par votre nœud RPC.

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.

Les mint accounts stockent l'état, et non du code exécutable. Les mint accounts appartiennent au Token Program, qui contient les instructions définissant comment créer et mettre à jour les mint accounts.

Les étapes suivantes décrivent les champs de value dans l'ordre où ils apparaissent.

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

Le champ data contient l'état sérialisé du compte Mint. Le premier élément du tuple contient les 82 octets complets des données du compte encodées en base64. Le second élément du tuple identifie l'encodage.

Pour lire depuis un mint account, vous devez désérialiser le champ data dans le type de données Mint, comme illustré dans l'exemple suivant.

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

Le champ executable indique si le compte peut être invoqué en tant que programme. Les mint accounts stockent l'état, donc le champ executable vaut 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
}
}

Le champ lamports contient le solde en SOL détenu par le mint account. La valeur en lamports correspond au solde d'exemption de loyer du mint account, et non à l'offre de tokens.

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

Le mint account est détenu par le Token Program. Le champ data du mint account ne peut être modifié que par les instructions du 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
}
}

Le champ rentEpoch est un champ hérité d'un mécanisme de rent obsolète. Ce champ est toujours retourné pour des raisons de compatibilité ascendante.

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

Le champ space indique que le mint account contient 82 octets de données.

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

Les mint accounts stockent l'état, et non du code exécutable. Les mint accounts appartiennent au Token Program, qui contient les instructions définissant comment créer et mettre à jour les mint accounts.

Les étapes suivantes décrivent les champs de value dans l'ordre où ils apparaissent.

Le champ data contient l'état sérialisé du compte Mint. Le premier élément du tuple contient les 82 octets complets des données du compte encodées en base64. Le second élément du tuple identifie l'encodage.

Pour lire depuis un mint account, vous devez désérialiser le champ data dans le type de données Mint, comme illustré dans l'exemple suivant.

Le champ executable indique si le compte peut être invoqué en tant que programme. Les mint accounts stockent l'état, donc le champ executable vaut false.

Le champ lamports contient le solde en SOL détenu par le mint account. La valeur en lamports correspond au solde d'exemption de loyer du mint account, et non à l'offre de tokens.

Le mint account est détenu par le Token Program. Le champ data du mint account ne peut être modifié que par les instructions du Token Program.

Le champ rentEpoch est un champ hérité d'un mécanisme de rent obsolète. Ce champ est toujours retourné pour des raisons de compatibilité ascendante.

Le champ space indique que le mint account contient 82 octets de données.

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

Désérialiser un mint account

Les données du compte sont stockées dans le champ data sous un format sérialisé. Pour lire ces données sous forme de champs tels que supply ou decimals, désérialisez le champ data dans le type de compte défini par le programme propriétaire. La plupart des programmes Solana fournissent des bibliothèques client avec des fonctions utilitaires pour cette étape. Ces utilitaires retournent des données de compte structurées, rendant le résultat plus facile à manipuler.

Par exemple, la bibliothèque @solana-program/token inclut la fonction fetchMint() pour récupérer un mint account et désérialiser le champ data du mint account dans le type de données Mint défini par le 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>,
}

La fonction fetchMint() récupère un mint account et désérialise le champ data du mint account dans le type de compte Mint.

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

Vous pouvez consulter les données entièrement désérialisées du mint account sur le 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
}

Le champ address contient l'adresse du 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
}

Le champ data contient l'état désérialisé du compte Mint. Les champs imbriqués dans data proviennent du type de compte Mint du 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
}

Le champ data.mintAuthority indique le seul compte autorisé à créer de nouvelles unités du 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
}

Le champ supply indique le nombre total de tokens qui ont été émis. La valeur de l'offre est exprimée dans la plus petite unité du token. Pour obtenir l'offre totale en unités standard, ajustez la valeur du champ supply par le 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
}

Le champ decimals indique le nombre de décimales du 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
}

Le champ isInitialized indique si le mint account a été initialisé. Le champ isInitialized est une vérification de sécurité utilisée dans le 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
}

Le champ data.freezeAuthority indique le compte ayant l'autorité pour geler les token accounts. Un token account est un compte distinct qui stocke des unités d'un token pour un propriétaire. Lorsqu'il est gelé, un token account ne peut pas transférer ni brûler son solde de tokens.

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
}

Le champ executable est false. Le mint account USDC stocke l'état du token, donc le mint account USDC ne peut pas être invoqué en tant que programme.

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
}

Le champ lamports contient le solde en SOL détenu par le mint account. La valeur en lamports correspond au solde exempt de loyer du mint account, et non à l'offre de tokens.

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
}

Le champ programAddress indique le programme qui possède le mint account. Pour l'USDC, le programme propriétaire est le Token Program. Seul le programme qui possède un compte peut modifier son champ data via les instructions déployées du programme.

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
}

Le champ space indique la taille des données originales du mint account en octets. Le compte Mint de base du Token Program occupe 82 octets.

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
}

La fonction fetchMint() récupère un mint account et désérialise le champ data du mint account dans le type de compte Mint.

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

Vous pouvez consulter les données entièrement désérialisées du mint account sur le Solana Explorer.

Le champ address contient l'adresse du mint account.

Le champ data contient l'état désérialisé du compte Mint. Les champs imbriqués dans data proviennent du type de compte Mint du Token Program.

Le champ data.mintAuthority indique le seul compte autorisé à créer de nouvelles unités du token.

Le champ supply indique le nombre total de tokens qui ont été émis. La valeur de l'offre est exprimée dans la plus petite unité du token. Pour obtenir l'offre totale en unités standard, ajustez la valeur du champ supply par le decimals.

Le champ decimals indique le nombre de décimales du token.

Le champ isInitialized indique si le mint account a été initialisé. Le champ isInitialized est une vérification de sécurité utilisée dans le Token Program.

Le champ data.freezeAuthority indique le compte ayant l'autorité pour geler les token accounts. Un token account est un compte distinct qui stocke des unités d'un token pour un propriétaire. Lorsqu'il est gelé, un token account ne peut pas transférer ni brûler son solde de tokens.

Le champ executable est false. Le mint account USDC stocke l'état du token, donc le mint account USDC ne peut pas être invoqué en tant que programme.

Le champ lamports contient le solde en SOL détenu par le mint account. La valeur en lamports correspond au solde exempt de loyer du mint account, et non à l'offre de tokens.

Le champ programAddress indique le programme qui possède le mint account. Pour l'USDC, le programme propriétaire est le Token Program. Seul le programme qui possède un compte peut modifier son champ data via les instructions déployées du programme.

Le champ space indique la taille des données originales du mint account en octets. Le compte Mint de base du Token Program occupe 82 octets.

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
}

Sortie sérialisée vs désérialisée

Les deux exemples lisent le même mint account USDC. La première réponse laisse le champ data sérialisé. Pour lire le contenu du mint account, décodez ces données selon le type de compte défini par le programme propriétaire. Pour un mint account, le Token Program définit le type Mint illustré à droite.

Avant le décodage, le champ data contient les données de compte sérialisées.

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

Après le décodage des données en tant que Mint, le champ data contient les champs de compte nommés.

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?

Table des matières

Modifier la page
© 2026 Fondation Solana. Tous droits réservés.