Odczyt z sieci

Odczytuj dane z sieci Solana, pobierając różne konta. Ta sekcja pomoże Ci zrozumieć strukturę kont Solana kont. Każde konto Solana ma unikalny adres, który służy do lokalizowania odpowiadających mu danych w łańcuchu. Konta zawierają dane stanowe lub program wykonywalny.

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 oraz pobiera dane konta dla nowo zasilonego portfela.

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.

Gdy pobierasz konto portfela, odpowiedź zawiera pola pokazane w przykładzie wyniku po prawej stronie.

Pole data zawiera dane konta zapisane jako bajty. Dla kont portfeli to pole jest puste (0 bajtów).

Pole executable wskazuje, czy pole data konta zawiera wykonywalny kod programu. Dla kont portfeli to pole ma wartość false.

Pole lamports zawiera saldo SOL konta, wyrażone w lamportach.

Pole owner wskazuje program, który jest właścicielem konta. W przypadku portfeli właścicielem jest zawsze System Program, o adresie 11111111111111111111111111111111.

Pole rentEpoch to pole historyczne pochodzące ze zdeprecjonowanego mechanizmu rent. (To pole jest uwzględnione dla zachowania kompatybilności wstecznej.)

Pole space pokazuje liczbę bajtów zawartych w polu data. Nie jest to pole w typie Account jako takim, ale jest uwzględnione w odpowiedzi.

W tym przykładzie pole space ma wartość 0, ponieważ pole data zawiera 0 bajtów danych.

Gdy pobierasz konto portfela, odpowiedź zawiera pola pokazane w przykładzie wyniku po prawej stronie.

Pole data zawiera dane konta zapisane jako bajty. Dla kont portfeli to pole jest puste (0 bajtów).

Pole executable wskazuje, czy pole data konta zawiera wykonywalny kod programu. Dla kont portfeli to pole ma wartość false.

Pole lamports zawiera saldo SOL konta, wyrażone w lamportach.

Pole owner wskazuje program, który jest właścicielem konta. W przypadku portfeli właścicielem jest zawsze System Program, o adresie 11111111111111111111111111111111.

Pole rentEpoch to pole historyczne pochodzące ze zdeprecjonowanego mechanizmu rent. (To pole jest uwzględnione dla zachowania kompatybilności wstecznej.)

Pole space pokazuje liczbę bajtów zawartych w polu data. Nie jest to pole w typie Account jako takim, ale jest uwzględnione w odpowiedzi.

W tym przykładzie pole space ma wartość 0, ponieważ pole data zawiera 0 bajtów danych.

Example output
{
"data": {
"type": "Buffer",
"data": []
},
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0,
"space": 0
}

Pobierz Token Program

Poniższy przykład pobiera Token Program, aby pokazać 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.

Fetch program account
import { Connection, PublicKey } from "@solana/web3.js";
const connection = new Connection(
"https://api.mainnet.solana.com",
"confirmed"
);
const address = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
const accountInfo = await connection.getAccountInfo(address);
Console
Click to execute the code.

Token Program jest wykonywalnym kontem programu. Programy mają te same podstawowe pola co wszystkie konta, ale z kluczowymi różnicami.

Pole executable jest ustawione na true, co oznacza, że pole data konta zawiera wykonywalny kod.

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.

Token Program jest wykonywalnym kontem programu. Programy mają te same podstawowe pola co wszystkie konta, ale z kluczowymi różnicami.

Pole executable jest ustawione na true, co oznacza, że pole data konta zawiera wykonywalny kod.

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.

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

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 mintowania 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.

Fetch program account
import { Connection, PublicKey } from "@solana/web3.js";
const connection = new Connection(
"https://api.mainnet.solana.com",
"confirmed"
);
const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const accountInfo = await connection.getAccountInfo(address);
Console
Click to execute the code.

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 mint accountu przechowuje stan, a nie kod wykonywalny, więc pole executable jest false.

Token Program definiuje typ danych Mint, który jest przechowywany w polu data.

Pole data zawiera zserializowany stan konta Mint, taki jak authority mintu, całkowita podaż, liczba miejsc po przecinku.

Aby odczytać dane z mint accountu, należy zdeserializować pole data do typu danych Mint, co pokazano w następnym przykładzie.

Mint account jest własnością Token Program. Oznacza to, że jego pole data może być modyfikowane tylko przez instrukcje Token Programu.

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 mint accountu przechowuje stan, a nie kod wykonywalny, więc pole executable jest false.

Token Program definiuje typ danych Mint, który jest przechowywany w polu data.

Pole data zawiera zserializowany stan konta Mint, taki jak authority mintu, całkowita podaż, liczba miejsc po przecinku.

Aby odczytać dane z mint accountu, należy zdeserializować pole data do typu danych Mint, co pokazano w następnym przykładzie.

Mint account jest własnością Token Program. Oznacza to, że jego pole data może być modyfikowane tylko przez instrukcje Token Programu.

Mint account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

Deserializacja konta mint

Zanim surowe bajty w polu data konta będą mogły być interpretowane w sensowny sposób, muszą zostać zdeserializowane. Odpowiedni typ danych jest definiowany przez program będący właścicielem konta. Większość programów Solana udostępnia 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 biblioteka @solana/spl-token zawiera funkcję getMint(), która pomaga zdeserializować pole data mint accountu do typu danych Mint zdefiniowanego przez Token Program.

Deserialize mint account data
import { PublicKey, Connection } from "@solana/web3.js";
import { getMint } from "@solana/spl-token";
const connection = new Connection(
"https://api.mainnet.solana.com",
"confirmed"
);
const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const mintData = await getMint(connection, address, "confirmed");
Console
Click to execute the code.
Mint account type
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 initialized
pub is_initialized: bool,
/// Optional authority to freeze token accounts.
pub freeze_authority: COption<Pubkey>,
}

Funkcja getMint() deserializuje pole data mint accountu do typu konta Mint.

Mint account
{
"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 mint account.

Pole mintAuthority wskazuje jedyne konto, które może tworzyć nowe jednostki tokenu.

Pole supply pokazuje całkowitą liczbę tokenów, które zostały wyemitowane. Ta wartość jest podana w najmniejszej jednostce tokena. Aby uzyskać całkowitą podaż w standardowych jednostkach, przelicz wartość pola supply przez decimals.

Pole decimals pokazuje liczbę miejsc po przecinku dla tokena.

Pole isInitialized wskazuje, czy mint account został zainicjalizowany. To pole jest wykorzystywane jako kontrola bezpieczeństwa w Token Program.

Pole freezeAuthority pokazuje konto z uprawnieniami do zamrażania token account. Zamrożony token account nie może transferować ani spalać przechowywanego tokena.

Pole tlvData zawiera dodatkowe dane dla Token Extensions i wymaga dalszej deserializacji. To pole dotyczy tylko kont utworzonych przez Token Extension Program (Token2022).

Funkcja getMint() deserializuje pole data mint accountu do typu konta Mint.

Mint account
{
"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 mint account.

Pole mintAuthority wskazuje jedyne konto, które może tworzyć nowe jednostki tokenu.

Pole supply pokazuje całkowitą liczbę tokenów, które zostały wyemitowane. Ta wartość jest podana w najmniejszej jednostce tokena. Aby uzyskać całkowitą podaż w standardowych jednostkach, przelicz wartość pola supply przez decimals.

Pole decimals pokazuje liczbę miejsc po przecinku dla tokena.

Pole isInitialized wskazuje, czy mint account został zainicjalizowany. To pole jest wykorzystywane jako kontrola bezpieczeństwa w Token Program.

Pole freezeAuthority pokazuje konto z uprawnieniami do zamrażania token account. Zamrożony token account nie może transferować ani spalać przechowywanego tokena.

Pole tlvData zawiera dodatkowe dane dla Token Extensions i wymaga dalszej deserializacji. To pole dotyczy tylko kont utworzonych przez Token Extension Program (Token2022).

Deserialized mint data
{
"address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"mintAuthority": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"supply": "8985397351591790",
"decimals": 6,
"isInitialized": true,
"freezeAuthority": "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar",
"tlvData": {
"type": "Buffer",
"data": []
}
}

Is this page helpful?

Spis treści

Edytuj stronę

Zarządzane przez

© 2026 Solana Foundation.
Wszelkie prawa zastrzeżone.
Bądź na bieżąco