Программа Solana — это
аккаунт, который содержит
исполняемый sBPF-байткод и имеет установленный флаг executable в значение
true. Программы не хранят состояние. Все изменяемые данные размещаются в
отдельных аккаунтах данных, которые передаются через
инструкции.
Схема аккаунта программы, его 4 компонентов и загрузчика.
Выполнение программ
Компиляция, написание программ (Anchor / нативный Rust), sBPF VM, модель вычислительных единиц, системные вызовы, кэш программ.
Деплой программ
Деплой, обновление и верификация программ. Инструкции Loader-v3 и загрузочные программы.
Базовые программы
System Program (с описанием инструкций), Vote, Stake, Config, Compute Budget, Address Lookup Table и ZK ElGamal Proof.
Precompiles
Программы проверки подписей Ed25519, Secp256k1, Secp256r1. Структуры смещений и правила валидации.
Справочник системных вызовов
Полный справочник всех ~30 системных вызовов sBPF с указанием стоимости вычислительных единиц.
Основные факты
- Компилируются в sBPF: Программы компилируются в Solana Bytecode Format (sBPF) через LLVM и хранятся в исполняемых аккаунтах.
- Без состояния: Все изменяемые данные хранятся в отдельных аккаунтах данных, а не в аккаунте программы.
- Обновляемые: Программы, развернутые с помощью loader-v3 (BPF Loader Upgradeable), могут быть обновлены при наличии полномочий на обновление; если эти полномочия отозваны, программа становится неизменяемой.
Ограничения
| Ограничение | Значение | Источник |
|---|---|---|
| Размер кучи по умолчанию | 32 КиБ | HEAP_LENGTH |
| Максимальный размер кучи (настраиваемый) | 256 КиБ | MAX_HEAP_FRAME_BYTES |
| Размер стека | 4096 байт | STACK_FRAME_SIZE |
| Максимальная глубина вызова sBPF | 64 | MAX_CALL_DEPTH |
| Максимальная глубина стека инструкций (всего + CPI) | 5 (9 с SIMD-0268) | MAX_INSTRUCTION_STACK_DEPTH, MAX_INSTRUCTION_STACK_DEPTH_SIMD_0268 |
| Стоимость кучи | 8 CU за страницу 32 КиБ | DEFAULT_HEAP_COST |
| Максимум кэшированных программ | 512 | MAX_LOADED_ENTRY_COUNT |
| Задержка видимости после деплоя | 1 слот | DELAY_VISIBILITY_SLOT_OFFSET |
Is this page helpful?