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:
- Klucz publiczny: odpowiada Ed25519 keypair (posiada klucz prywatny)
- Program Derived Address (PDA): deterministycznie wyprowadzony z ID programu i seedów (bez klucza prywatnego)
Konto 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 keysconst keypairSigner = await generateKeyPairSigner();console.log(keypairSigner);
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}`);
Pola konta
Każdy
Account
ma maksymalny rozmiar
MAX_ACCOUNT_DATA_LEN
(10 MiB, czyli MAX_PERMITTED_DATA_LENGTH) i zawiera pięć pól:
| Pole | Typ | Opis |
|---|---|---|
lamports | u64 | Saldo w lamportach. Właściciel może obciążać; każdy program może zasilać. |
data | Vec<u8> | Stan konta lub bajtkod programu. Maks. 10 MiB. Tylko właściciel może zapisywać. |
owner | Pubkey | Program z dostępem do zapisu. Możliwa zmiana tylko, gdy dane są wyzerowane. |
executable | bool | True = program account. |
rent_epoch | Epoch | Przestarzałe. Ustawione na u64::MAX dla kont zwolnionych z opłaty rentowej. |
pub struct Account {/// lamports in the accountpub 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,/// deprecatedpub 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:
- Pobierz konto po jego adresie.
- Zdeserializuj pole
dataz 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
datakonta - Odjąć lamporty z pola
lamportskonta
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.
Is this page helpful?