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.
Accounts
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:
- Een nieuw keypair (publieke/private sleutelpaar) genereert.
- Een airdrop van SOL aanvraagt om het nieuwe adres te financieren.
- 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.
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));
Token Program ophalen
Dit voorbeeld haalt het Token Program op om het verschil tussen wallet- en programma-accounts te demonstreren.
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);
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.
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);
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.
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?