Lezen van het netwerk

Dit gedeelte verkent hoe je gegevens kunt lezen van het Solana-netwerk door verschillende accounts op te halen om de structuur van een Solana-account te begrijpen.

Op Solana bestaan alle gegevens in "accounts". Je kunt gegevens op Solana zien als een openbare database met een enkele "Accounts"-tabel, waarbij elke invoer een account is met hetzelfde basis Account-type.

AccountsAccounts

Accounts op Solana kunnen "state" of "executable" programma's opslaan. Elk account heeft een "adres" (publieke sleutel) dat dient als unieke ID om de bijbehorende on-chain gegevens te lokaliseren.

Solana-accounts bevatten ofwel:

  • State: Gegevens die bedoeld zijn om uit te lezen en te bewaren. Bijvoorbeeld, informatie over tokens, gebruikersgegevens, of andere gegevens die binnen een programma zijn gedefinieerd.
  • Executable programma's: Accounts die de daadwerkelijke code van Solana- programma's bevatten. Deze accounts slaan instructies op die gebruikers kunnen aanroepen.

Deze scheiding van programmacode en programmastatus is een belangrijk kenmerk van Solana's Account Model. Voor meer details, raadpleeg de Solana Account Model pagina.

Wallet-account ophalen

Dit voorbeeld laat zien hoe je:

  1. Een nieuw keypair (publieke/private sleutelpaar) genereert.
  2. Een airdrop van SOL aanvraagt om het nieuwe adres te financieren.
  3. De accountgegevens voor het gefinancierde adres ophaalt.

Op Solana wordt bij het financieren van een nieuw adres met SOL automatisch een account aangemaakt dat eigendom is van het System Program. Alle "wallet"-accounts zijn simpelweg accounts in eigendom van het System Program die SOL bevatten en transacties kunnen ondertekenen.

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.

Token Program ophalen

Dit voorbeeld haalt het Token Program op om het verschil tussen wallet- en programma-accounts te demonstreren.

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.

Mint-account ophalen

Dit voorbeeld haalt de USD Coin (USDC) Mint-account op om te laten zien hoe programma's op Solana de status opslaan in afzonderlijke accounts.

Een Mint account is een account die eigendom is van het Token Program. Het slaat globale metadata op voor een specifieke token, inclusief de totale voorraad, aantal decimalen en de accounts die geautoriseerd zijn om tokens te minten of te bevriezen. Het adres van de mint account identificeert op unieke wijze een token op het Solana-netwerk.

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.

Mint-account deserialiseren

Het veld data van een Solana-account bevat ruwe bytes. Om deze gegevens zinvol te interpreteren, moet je ze deserialiseren naar het juiste datatype dat is gedefinieerd door het programma dat eigenaar is van het account.

De meeste Solana-programma's bieden clientbibliotheken met hulpfuncties die het deserialisatieproces abstraheren. Deze functies zetten de ruwe accountbytes om in gestructureerde datatypes, waardoor het gemakkelijker wordt om met de accountgegevens te werken.

Bijvoorbeeld, @solana/spl-token bevat de getMint() functie om te helpen bij het deserialiseren van het data veld van een Mint account naar het Mint gegevenstype.

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?

Inhoudsopgave

Pagina Bewerken