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

Загальна інформація

Акаунти мають 5 полів: lamport, дані, власник, виконуваний та 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).

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

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

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

Дані

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

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

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

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

Власник

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

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

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

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

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

Виконуваний

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

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

Епоха оренди

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

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

Lamports

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

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

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

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

Дані

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

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

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

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

Власник

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

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

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

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

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

Виконуваний

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

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

Епоха оренди

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

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

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.
Всі права захищені.
Залишайтеся на зв'язку