Struktura konta

Podsumowanie

Konta mają 5 pól: lamports, data, owner, executable i rent_epoch. Każde konto jest identyfikowane przez unikalny 32-bajtowy adres. Konta muszą utrzymywać minimalny balans lamport proporcjonalny do rozmiaru ich danych, aby pozostać w sieci.

Adres konta

Każdy adres konta to 32-bajtowa wartość, wyświetlana jako ciąg zakodowany w base58. Adres może być jednym z dwóch typów:

  1. Klucz publiczny: odpowiada Ed25519 keypair (posiada klucz prywatny)
  2. Program Derived Address (PDA): deterministycznie wyprowadzony z ID programu i seedów (bez klucza prywatnego)

Konto z adresem publicznego klucza zakodowanym w base58Konto z adresem publicznego klucza zakodowanym w base58

Klucz publiczny

Keypair składa się z klucza publicznego (używanego jako adres konta) oraz klucza prywatnego (używanego do podpisywania transakcji). Poniższy przykład generuje keypair przy użyciu Solana SDK.

import { generateKeyPairSigner } from "@solana/kit";
// Kit does not enable extractable private keys
const keypairSigner = await generateKeyPairSigner();
console.log(keypairSigner);
Console
Click to execute the code.

Program Derived Address

Program Derived Address (PDA) jest deterministycznie wyprowadzany z ID programu oraz jednego lub więcej opcjonalnych seedów. PDAs nie mają odpowiadającego im klucza prywatnego. Poniższy przykład pokazuje, jak wyprowadzić PDA przy użyciu Solana SDK.

import { Address, getProgramDerivedAddress } from "@solana/kit";
const programAddress = "11111111111111111111111111111111" as Address;
const seeds = ["helloWorld"];
const [pda, bump] = await getProgramDerivedAddress({
programAddress,
seeds
});
console.log(`PDA: ${pda}`);
console.log(`Bump: ${bump}`);
Console
Click to execute the code.

Pola konta

Każdy Account ma maksymalny rozmiar MAX_ACCOUNT_DATA_LEN (10 MiB, czyli MAX_PERMITTED_DATA_LENGTH) i zawiera pięć pól:

PoleTypOpis
lamportsu64Saldo w lamportach. Właściciel może obciążać; każdy program może zasilać.
dataVec<u8>Stan konta lub bajtkod programu. Maks. 10 MiB. Tylko właściciel może zapisywać.
ownerPubkeyProgram z dostępem do zapisu. Możliwa zmiana tylko, gdy dane są wyzerowane.
executableboolTrue = program account.
rent_epochEpochPrzestarzałe. Ustawione na u64::MAX dla kont zwolnionych z opłaty rentowej.
Account
pub struct Account {
/// lamports in the account
pub lamports: u64,
/// data held in this account
#[cfg_attr(feature = "serde", serde(with = "serde_bytes"))]
pub data: Vec<u8>,
/// the program that owns this account. If executable, the program that loads this account.
pub owner: Pubkey,
/// if true, this account's data contains a program (and is now read-only)
pub executable: bool,
/// deprecated
pub rent_epoch: Epoch,
}

Lamporty

Pole lamports przechowuje saldo konta w lamportach (1 SOL = 1 000 000 000 lamportów).

Każde konto musi utrzymywać minimalny balans lamport, znany jako saldo zwolnione z czynszu, aby jego dane były przechowywane w sieci. Ten balans jest proporcjonalny do rozmiaru danych konta.

Chociaż często nazywane "rentą", saldo zwalniające z opłaty rentowej działa jak zwrotny depozyt — całość jest odzyskiwana po zamknięciu konta.

Zobacz minimum_balance() oraz stałe dotyczące opłaty rentowej constants.

Dane

Pole data przechowuje dowolną tablicę bajtów. Zawartość zależy od typu konta:

  • Program accounts: Zawiera wykonywalny bajtkod lub adres program data account, który przechowuje bajtkod.
  • Data accounts: Zawiera dane stanu zdefiniowane przez program. Format serializacji określa program-właściciel.

Odczytanie danych konta wymaga dwóch kroków:

  1. Pobierz konto po jego adresie.
  2. Zdeserializuj pole data z surowych bajtów do struktury danych zdefiniowanej przez program.

Właściciel

Pole owner zawiera program ID (klucz publiczny) programu, który jest właścicielem tego konta.

Tylko program właściciela może:

  • Modyfikować pole data konta
  • Odjąć lamporty z pola lamports konta

Każdy program może dodać lamporty do innego konta, ale tylko właściciel może odjąć z niego lamporty.

Dla program accounts właścicielem jest loader program.

Wykonywalność

Pole executable to wartość logiczna, która określa, czy konto jest program account, czy data account:

  • true = program account (zawiera kod wykonywalny)
  • false = data account (przechowuje stan)

Rent epoch

Pole rent_epoch jest przestarzałe.

Wcześniej śledził moment, gdy konto automatycznie miało odliczane lamports, aby płacić za utrzymywanie jego danych w sieci. Ponieważ pobieranie czynszu jest przestarzałe, rent_epoch jest ustawione na u64::MAX dla wszystkich nowych kont zwolnionych z czynszu.

Lamporty

Pole lamports przechowuje saldo konta w lamportach (1 SOL = 1 000 000 000 lamportów).

Każde konto musi utrzymywać minimalny balans lamport, znany jako saldo zwolnione z czynszu, aby jego dane były przechowywane w sieci. Ten balans jest proporcjonalny do rozmiaru danych konta.

Chociaż często nazywane "rentą", saldo zwalniające z opłaty rentowej działa jak zwrotny depozyt — całość jest odzyskiwana po zamknięciu konta.

Zobacz minimum_balance() oraz stałe dotyczące opłaty rentowej constants.

Dane

Pole data przechowuje dowolną tablicę bajtów. Zawartość zależy od typu konta:

  • Program accounts: Zawiera wykonywalny bajtkod lub adres program data account, który przechowuje bajtkod.
  • Data accounts: Zawiera dane stanu zdefiniowane przez program. Format serializacji określa program-właściciel.

Odczytanie danych konta wymaga dwóch kroków:

  1. Pobierz konto po jego adresie.
  2. Zdeserializuj pole data z surowych bajtów do struktury danych zdefiniowanej przez program.

Właściciel

Pole owner zawiera program ID (klucz publiczny) programu, który jest właścicielem tego konta.

Tylko program właściciela może:

  • Modyfikować pole data konta
  • Odjąć lamporty z pola lamports konta

Każdy program może dodać lamporty do innego konta, ale tylko właściciel może odjąć z niego lamporty.

Dla program accounts właścicielem jest loader program.

Wykonywalność

Pole executable to wartość logiczna, która określa, czy konto jest program account, czy data account:

  • true = program account (zawiera kod wykonywalny)
  • false = data account (przechowuje stan)

Rent epoch

Pole rent_epoch jest przestarzałe.

Wcześniej śledził moment, gdy konto automatycznie miało odliczane lamports, aby płacić za utrzymywanie jego danych w sieci. Ponieważ pobieranie czynszu jest przestarzałe, rent_epoch jest ustawione na u64::MAX dla wszystkich nowych kont zwolnionych z czynszu.

Account Examples
// Example Token Mint Account
Account {
lamports: 1461600,
data.len: 82,
owner: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb,
executable: false,
rent_epoch: 0,
data: 010000001e213c90625a7e643d9555bb01b6c3fe6416d7afd523ce8c7ddd9b923ceafb9d00000000000000000901010000001e213c90625a7e643d9555bb01b6,
}
// Example Token Program Account
Account {
lamports: 4513200894,
data.len: 134080,
owner: BPFLoader2111111111111111111111111111111111,
executable: true,
rent_epoch: 18446744073709551615,
data: 7f454c460201010000000000000000000300f70001000000d8f90000000000004000000000000000800902000000000000000000400038000400400009000800,
}

Is this page helpful?

Spis treści

Edytuj stronę

Zarządzane przez

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