Odczyt z sieci

Ta sekcja omawia, jak odczytywać dane z sieci Solana poprzez pobieranie różnych kont, aby zrozumieć strukturę konta Solana.

W Solanie wszystkie dane istnieją w "kontach". Możesz myśleć o danych w Solanie jako o publicznej bazie danych z jedną tabelą "Konta", gdzie każdy wpis to konto z tym samym podstawowym typem konta.

KontaKonta

Konta w Solanie mogą przechowywać "stan" lub "wykonywalne" programy. Każde konto ma "adres" (klucz publiczny), który służy jako jego unikalny identyfikator używany do lokalizowania odpowiednich danych on-chain.

Konta Solana zawierają albo:

  • Stan: Dane przeznaczone do odczytu i przechowywania. Na przykład, informacje o tokenach, dane użytkownika lub inne dane zdefiniowane w programie.
  • Wykonywalne programy: Konta zawierające rzeczywisty kod programów Solana. Te konta przechowują instrukcje, które użytkownicy mogą wywoływać.

To rozdzielenie kodu programu i stanu programu jest kluczową cechą modelu kont Solana. Więcej szczegółów znajdziesz na stronie Model kont Solana.

Pobieranie konta portfela

Ten przykład pokazuje, jak:

  1. Wygenerować nowy keypair (parę kluczy publiczny/prywatny).
  2. Poprosić o airdrop SOL, aby zasilić nowy adres.
  3. Pobierać dane konta dla zasilonego adresu.

W Solanie zasilenie nowego adresu SOL automatycznie tworzy konto należące do System Program. Wszystkie konta "portfela" to po prostu konta należące do System Program, które przechowują SOL i mogą podpisywać transakcje.

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

Pobierz Token Program

Ten przykład pobiera Token Program, aby pokazać różnicę między kontami portfeli a kontami programów.

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

Pobierz konto mint

Ten przykład pobiera konto mint USD Coin (USDC), aby pokazać, jak programy na Solanie przechowują stan w oddzielnych kontach.

Konto mint to konto należące do Token Program. Przechowuje globalne metadane dla konkretnego tokena, w tym całkowitą podaż, liczbę miejsc dziesiętnych oraz konta uprawnione do mintowania lub zamrażania tokenów. Adres konta mint jednoznacznie identyfikuje token w sieci 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);
Console
Click to execute the code.

Deserializacja konta mint

Pole data konta Solana zawiera surowe bajty. Aby zinterpretować te dane w sposób znaczący, musisz je zdeserializować do odpowiedniego typu danych zdefiniowanego przez program będący właścicielem konta.

Większość programów Solana dostarcza biblioteki klienckie z funkcjami pomocniczymi, które upraszczają proces deserializacji. Funkcje te konwertują surowe bajty konta na ustrukturyzowane typy danych, co ułatwia pracę z danymi konta.

Na przykład @solana/spl-token zawiera funkcję getMint(), która pomaga deserializować pole konta Mint data do typu danych 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");
Console
Click to execute the code.

Is this page helpful?

Spis treści

Edytuj stronę