Структура акаунта

Підсумок

Акаунти мають 5 полів: lamports, data, owner, executable та rent_epoch. Кожен акаунт ідентифікується унікальною 32-байтовою адресою. Акаунти повинні утримувати мінімальний баланс lamport пропорційно до розміру їхніх даних, щоб залишатися в блокчейні.

Адреса акаунта

Кожна адреса акаунта — це 32-байтове значення, яке відображається як рядок у кодуванні base58. Адреса може бути одного з двох типів:

  1. Публічний ключ: відповідає Ed25519 keypair (має приватний ключ)
  2. Program Derived Address (PDA): детерміновано виведена з ідентифікатора програми та seeds (без приватного ключа)

Акаунт з його адресою публічного ключа в кодуванні base58Акаунт з його адресою публічного ключа в кодуванні base58

Публічний ключ

Keypair складається з публічного ключа (використовується як адреса акаунта) та приватного ключа (використовується для підпису транзакцій). Наступний приклад генерує keypair за допомогою 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) детерміновано виводиться з ідентифікатора програми та одного або кількох опціональних 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}`);
Console
Click to execute the code.

Поля облікового запису

Кожен Account має максимальний розмір MAX_ACCOUNT_DATA_LEN (10 МіБ, що еквівалентно MAX_PERMITTED_DATA_LENGTH) і містить п'ять полів:

ПолеТипОпис
lamportsu64Баланс у lamports. Власник може списувати; будь-яка програма може зараховувати.
dataVec<u8>Стан облікового запису або байткод програми. Макс. 10 МіБ. Лише для запису власником.
ownerPubkeyПрограма з правом запису. Можна переназначити лише коли дані обнулені.
executableboolTrue = обліковий запис програми.
rent_epochEpochЗастаріле. Встановлено на u64::MAX для облікових записів, звільнених від rent.
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,
}

Lamports

Поле lamports містить баланс облікового запису в lamports (1 SOL = 1 000 000 000 lamports).

Кожен обліковий запис повинен підтримувати мінімальний баланс у lamports, відомий як баланс, звільнений від rent, щоб зберігати свої дані в блокчейні. Цей баланс пропорційний розміру даних облікового запису.

Хоча часто називається "rent", баланс, звільнений від rent, функціонує як депозит, що повертається, повний баланс відновлюється при закритті облікового запису.

Див. minimum_balance() та rent константи.

Дані

Поле data зберігає довільний масив байтів. Його вміст залежить від типу облікового запису:

  • Облікові записи програм: містять виконуваний байткод або адресу облікового запису даних програми, що зберігає байткод.
  • Облікові записи даних: містять визначені програмою дані стану. Програма-власник визначає формат серіалізації.

Читання даних облікового запису вимагає двох кроків:

  1. Отримати обліковий запис за його адресою.
  2. Десеріалізувати поле data з необроблених байтів у визначену програмою структуру даних.

Власник

Поле owner містить ідентифікатор програми (публічний ключ) програми, яка володіє цим обліковим записом.

Програма-власник є єдиною програмою, яка може:

  • Змінювати поле data облікового запису
  • Списувати лампорти з поля lamports облікового запису

Будь-яка програма може додавати лампорти до іншого облікового запису, але лише власник може списувати лампорти з нього.

Для облікових записів програм власником є програма-завантажувач облікового запису.

Виконуваний

Поле executable є булевим значенням, яке визначає, чи є обліковий запис обліковим записом програми, чи обліковим записом даних:

  • true = обліковий запис програми (містить виконуваний код)
  • false = обліковий запис даних (зберігає стан)

Епоха оренди

Поле rent_epoch є застарілим.

Раніше відстежувало, коли з облікового запису автоматично списувалися лампорти для оплати підтримки його даних в ланцюзі. Оскільки стягнення орендної плати застаріло, rent_epoch встановлюється на u64::MAX для всіх нових облікових записів, звільнених від орендної плати.

Lamports

Поле lamports містить баланс облікового запису в lamports (1 SOL = 1 000 000 000 lamports).

Кожен обліковий запис повинен підтримувати мінімальний баланс у lamports, відомий як баланс, звільнений від rent, щоб зберігати свої дані в блокчейні. Цей баланс пропорційний розміру даних облікового запису.

Хоча часто називається "rent", баланс, звільнений від rent, функціонує як депозит, що повертається, повний баланс відновлюється при закритті облікового запису.

Див. minimum_balance() та rent константи.

Дані

Поле data зберігає довільний масив байтів. Його вміст залежить від типу облікового запису:

  • Облікові записи програм: містять виконуваний байткод або адресу облікового запису даних програми, що зберігає байткод.
  • Облікові записи даних: містять визначені програмою дані стану. Програма-власник визначає формат серіалізації.

Читання даних облікового запису вимагає двох кроків:

  1. Отримати обліковий запис за його адресою.
  2. Десеріалізувати поле data з необроблених байтів у визначену програмою структуру даних.

Власник

Поле owner містить ідентифікатор програми (публічний ключ) програми, яка володіє цим обліковим записом.

Програма-власник є єдиною програмою, яка може:

  • Змінювати поле data облікового запису
  • Списувати лампорти з поля lamports облікового запису

Будь-яка програма може додавати лампорти до іншого облікового запису, але лише власник може списувати лампорти з нього.

Для облікових записів програм власником є програма-завантажувач облікового запису.

Виконуваний

Поле executable є булевим значенням, яке визначає, чи є обліковий запис обліковим записом програми, чи обліковим записом даних:

  • true = обліковий запис програми (містить виконуваний код)
  • false = обліковий запис даних (зберігає стан)

Епоха оренди

Поле rent_epoch є застарілим.

Раніше відстежувало, коли з облікового запису автоматично списувалися лампорти для оплати підтримки його даних в ланцюзі. Оскільки стягнення орендної плати застаріло, rent_epoch встановлюється на u64::MAX для всіх нових облікових записів, звільнених від орендної плати.

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?

Зміст

Редагувати сторінку

Керується

© 2026 Фонд Solana.
Всі права захищені.
Залишайтеся на зв'язку