Аккаунт — это базовая единица данных Solana для хранения состояния. Сеть хранит всё состояние в key-value хранилище, где каждый ключ — это 32-байтовый адрес, а каждое значение — аккаунт.
Диаграмма 3 аккаунтов и их адресов. Включает определение структуры аккаунта.
Структура аккаунта
Адреса аккаунтов (публичный ключ, PDA), пять обязательных полей каждого аккаунта, state machine rent, с интерактивным разбором кода.
Типы аккаунтов
Программные аккаунты (исполняемый код), аккаунты данных (состояние программ), системные аккаунты и sysvars (кластерное состояние).
Правила изменения
Правила, обеспечиваемые во время исполнения, для lamport, данных, владельца, флага исполняемости и заимствований.
Выполнение аккаунта
Валидация загрузки аккаунта, формат сериализации BPF и десериализация.
Ключевые факты
- Структура: Каждый аккаунт содержит пять полей: lamports, данные, владелец, исполняемый, rent_epoch.
- Адрес: Каждый аккаунт идентифицируется уникальным 32-байтовым адресом (публичный ключ Ed25519 или PDA).
- Владение: Только программа-владелец аккаунта может изменять его данные или списывать lamports. Любая программа может зачислять lamports на любой доступный для записи аккаунт.
- Rent: Каждый аккаунт должен иметь минимальный баланс lamport, пропорциональный размеру данных, чтобы оставаться в сети.
Ограничения
| Ограничение | Значение | Источник |
|---|---|---|
| Максимальный размер данных аккаунта | 10 МиБ (10 485 760 байт) | MAX_ACCOUNT_DATA_LEN |
| Максимальный рост данных за инструкцию | 10 КиБ (10 240 байт) | MAX_PERMITTED_DATA_INCREASE |
| Максимальный рост данных за транзакцию | 20 МиБ (20 971 520 байт) | MAX_ACCOUNT_DATA_GROWTH_PER_TRANSACTION |
| Базовые накладные расходы хранения аккаунта | 64 байта на аккаунт | TRANSACTION_ACCOUNT_BASE_SIZE |
| Размер адреса | 32 байта (публичный ключ Ed25519) | -- |
| Минимум для rent-исключения (формула) | (account_size + 128) * 3 480 lamports/байт-год * 2 года | minimum_balance() |
Is this page helpful?