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.

AccountAccount

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:

  1. Generare un nuovo keypair (coppia di chiavi pubblica/privata).
  2. Richiedere un airdrop di SOL per finanziare il nuovo indirizzo.
  3. 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.

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

Recupera il Token Program

Questo esempio recupera il Token Program per dimostrare la differenza tra account wallet e account di programma.

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

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.

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

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.

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");
Click to execute the code.

Is this page helpful?

Indice

Modifica Pagina