Odczyt z sieci
Odczytuj dane z sieci Solana, pobierając różne konta. Ta sekcja pomoże Ci zrozumieć strukturę kont Solana accounts. Każde konto Solana ma unikalny adres, który służy do lokalizowania odpowiadających mu danych on-chain. Konta zawierają stan danych lub wykonywalny program.
Pobierz konto portfela
Portfel to konto należące do System Program. Portfele są głównie używane do przechowywania SOL i podpisywania transakcji. Gdy SOL jest wysyłany na nowy adres po raz pierwszy, konto systemowe jest automatycznie tworzone.
Poniższy przykład generuje nowy keypair, żąda SOL w celu zasilenia nowego adresu publicznego i pobiera dane konta dla nowo zasilonego portfela.
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));
Gdy pobierasz konto portfela, odpowiedź zawiera pola pokazane w przykładzie wyniku po prawej stronie.
Pole data zawiera dane konta przechowywane jako bajty. W przypadku kont
portfela to pole jest puste (0 bajtów).
Pole executable wskazuje, czy pole data konta zawiera wykonywalny kod
programu. W przypadku kont portfela to pole ma wartość false.
Pole lamports zawiera saldo SOL konta, wyrażone w
lamportach.
Pole owner pokazuje program, który jest właścicielem konta. W przypadku
portfeli właścicielem jest zawsze System Program, z adresem
11111111111111111111111111111111.
Pole rentEpoch to pole dziedzictwa z przestarzałego mechanizmu rent. (To pole
jest uwzględnione dla zgodności wstecznej.)
Pole space pokazuje liczbę bajtów zawartych w polu data. Nie jest to pole w
typie konta samym w sobie, ale jest
uwzględnione w odpowiedzi.
W tym przykładzie pole space wynosi 0, ponieważ pole data zawiera 0 bajtów
danych.
Pobierz Token Program
Poniższy przykład pobiera Token Program, aby zademonstrować różnicę między kontami portfela a kontami programu. Konto programu przechowuje skompilowany kod bajtowy dla kodu źródłowego Token Program. Możesz zobaczyć to konto programu na Solana Explorer.
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);
Token Program to wykonywalne konto programu. Programy mają te same podstawowe pola co wszystkie konta, ale z kluczowymi różnicami.
Pole executable jest ustawione na true, co wskazuje, że pole data konta
zawiera kod wykonywalny.
Pole data przechowuje wykonywalny kod programu.
Każde konto programu jest własnością swojego
loader programu. W tym przykładzie
owner to program BPFLoader2.
Pobierz konto mint
Konto mint to konto należące do Token Program, które przechowuje globalne metadane dla konkretnego tokena. Obejmuje to całkowitą podaż, liczbę miejsc dziesiętnych oraz konta uprawnione do tworzenia lub zamrażania tokenów. Adres konta mint jednoznacznie identyfikuje token w sieci Solana.
Poniższy przykład pobiera konto Mint USD Coin, aby pokazać, jak stan programu jest przechowywany w osobnym koncie.
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);
Konta mint przechowują stan, a nie wykonywalny kod. Są one własnością Token Program, który zawiera instrukcje definiujące, jak tworzyć i aktualizować konta mint.
Pole data konta mint przechowuje stan, a nie wykonywalny kod, więc pole
executable ma wartość false.
Token Program definiuje typ danych Mint, który jest przechowywany w polu
data.
Pole data zawiera zserializowany stan konta Mint, taki jak autorytet mint,
całkowita podaż, liczba miejsc dziesiętnych.
Aby odczytać dane z konta mint, należy zdeserializować pole data do typu
danych Mint, co pokazano w następnym przykładzie.
Konto mint jest własnością
Token Program. Oznacza to, że jego
pole data może być modyfikowane tylko przez instrukcje Token Program.
Deserializacja konta mint
Zanim surowe bajty w polu data konta mogą być interpretowane w sposób
znaczący, muszą zostać zdeserializowane. Odpowiedni typ danych jest definiowany
przez program, który jest właścicielem konta. Większość programów Solana
dostarcza biblioteki klienckie z funkcjami pomocniczymi, które upraszczają
proces deserializacji. Te funkcje konwertują surowe bajty konta na
ustrukturyzowane typy danych, co ułatwia pracę z danymi konta.
Na przykład biblioteka @solana/spl-token zawiera funkcję
getMint(), która pomaga zdeserializować pole data konta
mint do typu danych
Mint
zdefiniowanego przez Token Program.
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");
pub struct Mint {/// Optional authority used to mint new tokens. The mint authority may only/// be provided during mint creation. If no mint authority is present/// then the mint has a fixed supply and no further tokens may be/// minted.pub mint_authority: COption<Pubkey>,/// Total supply of tokens.pub supply: u64,/// Number of base 10 digits to the right of the decimal place.pub decimals: u8,/// Is `true` if this structure has been initializedpub is_initialized: bool,/// Optional authority to freeze token accounts.pub freeze_authority: COption<Pubkey>,}
Funkcja getMint() deserializuje pole data konta mint do typu danych
konta Mint.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
Możesz zobaczyć w pełni zdeserializowane dane konta mint w Solana Explorer.
Pole address zawiera adres konta mint.
Pole mintAuthority pokazuje jedyne konto, które może tworzyć nowe jednostki
tokena.
Pole supply pokazuje całkowitą liczbę tokenów, które zostały wyemitowane. Ta
wartość jest mierzona w najmniejszej jednostce tokena. Aby uzyskać całkowitą
podaż w standardowych jednostkach, dostosuj wartość pola supply według pola
decimals.
Pole decimals pokazuje liczbę miejsc dziesiętnych dla tokena.
Pole isInitialized wskazuje, czy konto mint zostało zainicjalizowane. To pole
jest używane jako kontrola bezpieczeństwa w Token Program.
Pole freezeAuthority pokazuje konto z uprawnieniami do zamrażania kont
tokenów. Zamrożone konto tokena nie może przenosić ani spalać tokenów, które
zawiera.
Pole tlvData zawiera dodatkowe dane dla Token Extensions i wymaga kolejnej
deserializacji. To pole dotyczy tylko kont utworzonych przez
Token Extension Program (Token2022).
Is this page helpful?