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.

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

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.

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

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.

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.

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.

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

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.

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.

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.

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

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.
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 konta mint do typu danych 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 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).

Funkcja getMint() deserializuje pole data konta mint do typu danych 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 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).

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

© 2025 Solana Foundation.
Wszelkie prawa zastrzeżone.
Bądź na bieżąco
Odczyt z sieci | Solana