Lecture depuis le réseau
Cette section explore comment lire des données depuis le réseau Solana en récupérant différents comptes pour comprendre la structure d'un compte Solana.
Sur Solana, toutes les données existent dans des "comptes". Vous pouvez considérer les données sur Solana comme une base de données publique avec une seule table "Comptes", où chaque entrée est un compte avec le même type de Compte de base.
Comptes
Les comptes sur Solana peuvent stocker des "états" ou des programmes "exécutables". Chaque compte possède une "adresse" (clé publique) qui sert d'identifiant unique utilisé pour localiser ses données correspondantes sur la chaîne.
Les comptes Solana contiennent soit :
- État : Données destinées à être lues et persistées. Par exemple, des informations sur les jetons, les données utilisateur, ou d'autres données définies dans un programme.
- Programmes exécutables : Comptes contenant le code réel des programmes Solana. Ces comptes stockent des instructions que les utilisateurs peuvent invoquer.
Cette séparation entre le code du programme et l'état du programme est une caractéristique clé du Modèle de Compte Solana. Pour plus de détails, consultez la page Modèle de Compte Solana.
Récupérer un compte de portefeuille
Cet exemple démontre comment :
- Générer une nouvelle paire de clés (paire de clés publique/privée).
- Demander un airdrop de SOL pour financer la nouvelle adresse.
- Récupérer les données du compte pour l'adresse financée.
Sur Solana, financer une nouvelle adresse avec du SOL crée automatiquement un compte détenu par le Programme Système. Tous les comptes de "portefeuille" sont simplement des comptes détenus par le Programme Système qui contiennent du SOL et peuvent signer des transactions.
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 accountconst 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));
Récupérer le Programme Token
Cet exemple récupère le Programme Token pour démontrer la différence entre les comptes de portefeuille et les comptes de programme.
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);
Récupérer le compte Mint
Cet exemple récupère le compte Mint de USD Coin (USDC) pour montrer comment les programmes sur Solana stockent l'état dans des comptes séparés.
Un compte Mint est un compte détenu par le Token Program. Il stocke les métadonnées globales pour un jeton spécifique, y compris l'offre totale, le nombre de décimales et les comptes autorisés à émettre ou geler des jetons. L'adresse du compte Mint identifie de manière unique un jeton sur le réseau Solana.
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);
Désérialiser le compte Mint
Le champ data
d'un compte Solana contient des octets bruts. Pour interpréter
ces données de manière significative, vous devez les désérialiser dans le type
de données approprié défini par le programme qui possède le compte.
La plupart des programmes Solana fournissent des bibliothèques client avec des fonctions auxiliaires qui abstraient le processus de désérialisation. Ces fonctions convertissent les octets bruts du compte en types de données structurées, facilitant ainsi le travail avec les données du compte.
Par exemple, @solana/spl-token
inclut la fonction
getMint()
pour aider à désérialiser le champ data
d'un
compte Mint dans le type de données
Mint.
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");
Is this page helpful?