Підсумок
Акаунти мають 5 полів: lamports, data, owner, executable та 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).
Кожен обліковий запис повинен підтримувати мінімальний баланс у lamports, відомий як баланс, звільнений від rent, щоб зберігати свої дані в блокчейні. Цей баланс пропорційний розміру даних облікового запису.
Хоча часто називається "rent", баланс, звільнений від rent, функціонує як депозит, що повертається, повний баланс відновлюється при закритті облікового запису.
Див.
minimum_balance()
та rent
константи.
Дані
Поле data зберігає довільний масив байтів. Його вміст залежить від типу
облікового запису:
- Облікові записи програм: містять виконуваний байткод або адресу облікового запису даних програми, що зберігає байткод.
- Облікові записи даних: містять визначені програмою дані стану. Програма-власник визначає формат серіалізації.
Читання даних облікового запису вимагає двох кроків:
- Отримати обліковий запис за його адресою.
- Десеріалізувати поле
dataз необроблених байтів у визначену програмою структуру даних.
Власник
Поле owner містить ідентифікатор програми (публічний ключ) програми, яка
володіє цим обліковим записом.
Програма-власник є єдиною програмою, яка може:
- Змінювати поле
dataоблікового запису - Списувати лампорти з поля
lamportsоблікового запису
Будь-яка програма може додавати лампорти до іншого облікового запису, але лише власник може списувати лампорти з нього.
Для облікових записів програм власником є програма-завантажувач облікового запису.
Виконуваний
Поле executable є булевим значенням, яке визначає, чи є обліковий запис
обліковим записом програми,
чи обліковим записом даних:
true= обліковий запис програми (містить виконуваний код)false= обліковий запис даних (зберігає стан)
Епоха оренди
Поле rent_epoch є застарілим.
Раніше відстежувало, коли з облікового запису автоматично списувалися лампорти
для оплати підтримки його даних в ланцюзі. Оскільки стягнення орендної плати
застаріло, rent_epoch встановлюється на u64::MAX для всіх нових облікових
записів, звільнених від орендної плати.
Is this page helpful?