Загальна інформація
Акаунти мають 5 полів: lamport, дані, власник, виконуваний та rent_epoch. Кожен акаунт ідентифікується унікальною 32-байтовою адресою. Акаунти повинні підтримувати мінімальний баланс lamport пропорційно до розміру їхніх даних, щоб залишатися ончейн.
Адреса акаунта
Кожна адреса акаунта — це 32-байтове значення, яке відображається як рядок у кодуванні base58. Адреса може бути одного з двох типів:
- Публічний ключ: відповідає Ed25519 keypair (має приватний ключ)
- Program Derived Address (PDA): детерміновано виведена з ідентифікатора програми та seeds (без приватного ключа)
Акаунт з його адресою публічного ключа в кодуванні base58
Публічний ключ
Keypair складається з публічного ключа (використовується як адреса
акаунта) та приватного ключа (використовується для підпису транзакцій).
Наступний приклад генерує keypair за допомогою 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) детерміновано виводиться з ідентифікатора програми та одного або кількох опціональних seeds. PDA не мають відповідного приватного ключа. Наступний приклад виводить PDA за допомогою 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}`);
Поля облікового запису
Кожен
Account
має максимальний розмір
MAX_ACCOUNT_DATA_LEN
(10 МіБ, що еквівалентно MAX_PERMITTED_DATA_LENGTH) і містить п'ять полів:
| Поле | Тип | Опис |
|---|---|---|
lamports | u64 | Баланс у lamports. Власник може списувати; будь-яка програма може зараховувати. |
data | Vec<u8> | Стан облікового запису або байткод програми. Макс. 10 МіБ. Лише для запису власником. |
owner | Pubkey | Програма з правом запису. Можна переназначити лише коли дані обнулені. |
executable | bool | True = обліковий запис програми. |
rent_epoch | Epoch | Застаріле. Встановлено на u64::MAX для облікових записів, звільнених від rent. |
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,}
Lamports
Поле lamports містить баланс облікового запису в
lamports (1 SOL = 1 000 000 000
lamports).
Кожен акаунт повинен підтримувати мінімальний баланс lamport, відомий як баланс, звільнений від rent, щоб зберігати свої дані ончейн. Цей баланс пропорційний до розміру даних акаунта.
Хоча часто називається "rent", баланс, звільнений від rent, функціонує як депозит, що повертається, повний баланс відновлюється при закритті облікового запису.
Див.
minimum_balance()
та rent
константи.
Дані
Поле data зберігає довільний масив байтів. Його вміст залежить від типу
облікового запису:
- Облікові записи програм: містять виконуваний байткод або адресу облікового запису даних програми, що зберігає байткод.
- Облікові записи даних: містять визначені програмою дані стану. Програма-власник визначає формат серіалізації.
Читання даних облікового запису вимагає двох кроків:
- Отримати обліковий запис за його адресою.
- Десеріалізувати поле
dataз необроблених байтів у визначену програмою структуру даних.
Власник
Поле owner містить ідентифікатор програми (публічний ключ) програми, яка
володіє цим обліковим записом.
Програма-власник є єдиною програмою, яка може:
- Змінювати поле
dataоблікового запису - Списувати лампорти з поля
lamportsоблікового запису
Будь-яка програма може додавати лампорти до іншого облікового запису, але лише власник може списувати лампорти з нього.
Для облікових записів програм власником є програма-завантажувач облікового запису.
Виконуваний
Поле executable є булевим значенням, яке визначає, чи є обліковий запис
обліковим записом програми,
чи обліковим записом даних:
true= обліковий запис програми (містить виконуваний код)false= обліковий запис даних (зберігає стан)
Епоха оренди
Поле rent_epoch є застарілим.
Раніше відстежувалося, коли з акаунта автоматично вираховувалися lamport для
оплати підтримки його даних ончейн. Оскільки стягнення rent застаріло,
rent_epoch встановлюється на u64::MAX для всіх нових акаунтів, звільнених
від rent.
Is this page helpful?