Lettura dalla rete
Questa sezione esplora come leggere dati dalla rete Solana recuperando diversi account per comprendere la struttura di un account Solana.
Su Solana, tutti i dati esistono negli "account". Puoi pensare ai dati su Solana come a un database pubblico con una singola tabella "Account", dove ogni voce è un account con lo stesso tipo base di Account.
Account
Gli account su Solana possono memorizzare "stato" o programmi "eseguibili". Ogni account ha un "indirizzo" (chiave pubblica) che funge da ID univoco utilizzato per localizzare i dati corrispondenti on-chain.
Gli account Solana contengono:
- Stato: Dati che devono essere letti e persistenti. Ad esempio, informazioni sui token, dati utente o altri dati definiti all'interno di un programma.
- Programmi eseguibili: Account contenenti il codice effettivo dei programmi Solana. Questi account memorizzano istruzioni che gli utenti possono invocare.
Questa separazione tra codice del programma e stato del programma è una caratteristica chiave del Modello di Account di Solana. Per maggiori dettagli, consulta la pagina Modello di Account Solana.
Recuperare un account wallet
Questo esempio dimostra come:
- Generare un nuovo keypair (coppia di chiavi pubblica/privata).
- Richiedere un airdrop di SOL per finanziare il nuovo indirizzo.
- Recuperare i dati dell'account per l'indirizzo finanziato.
Su Solana, finanziare un nuovo indirizzo con SOL crea automaticamente un account posseduto dal System Program. Tutti gli account "wallet" sono semplicemente account posseduti dal System Program che contengono SOL e possono firmare transazioni.
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));
Recupera il Token Program
Questo esempio recupera il Token Program per dimostrare la differenza tra account wallet e account di programma.
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);
Recupera l'account Mint
Questo esempio recupera l'account Mint di USD Coin (USDC) per mostrare come i programmi su Solana memorizzano lo stato in account separati.
Un account Mint è un account posseduto dal Token Program. Memorizza i metadati globali per un token specifico, inclusa la fornitura totale, il numero di decimali e gli account autorizzati a coniare o congelare token. L'indirizzo dell'account Mint identifica in modo univoco un token sulla rete 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);
Deserializza l'account Mint
Il campo data
di un account Solana contiene byte grezzi. Per interpretare
questi dati in modo significativo, devi deserializzarli nel tipo di dati
appropriato definito dal programma che possiede l'account.
La maggior parte dei programmi Solana fornisce librerie client con funzioni helper che astraggono il processo di deserializzazione. Queste funzioni convertono i byte grezzi dell'account in tipi di dati strutturati, rendendo più facile lavorare con i dati dell'account.
Per esempio, @solana/spl-token
include la funzione
getMint()
per aiutare a deserializzare il campo data
di
un mint account nel tipo di dati
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?