Програма Solana — це
акаунт, який містить
виконуваний байткод sBPF і має прапорець executable встановлений у true.
Програми є безстановими. Весь змінюваний стан зберігається в окремих акаунтах
даних, що передаються через інструкції.
Діаграма акаунта програми, його 4 компонентів та програми-завантажувача.
Виконання програм
Компіляція, написання програм (Anchor / нативний Rust), віртуальна машина sBPF, модель обчислювальних одиниць, системні виклики, кеш програм.
Розгортання програм
Розгортання, оновлення та верифікація програм. Довідник інструкцій Loader-v3 та програми-завантажувачі.
Основні програми
System Program (з довідником інструкцій), Vote, Stake, Config, Compute Budget, Address Lookup Table та ZK ElGamal Proof.
Прекомпіляти
Програми верифікації підписів Ed25519, Secp256k1, Secp256r1. Структури зміщень та правила валідації.
Довідник системних викликів
Повний довідник усіх ~30 системних викликів sBPF з вартістю обчислювальних одиниць.
Ключові факти
- Компіляція в sBPF: програми компілюються в Solana Bytecode Format (sBPF) через LLVM і зберігаються у виконуваних акаунтах.
- Безстановість: весь змінюваний стан зберігається в окремих акаунтах даних, а не в акаунті програми.
- Можливість оновлення: програми, розгорнуті з loader-v3 (BPF Loader Upgradeable), можуть бути оновлені, якщо встановлено повноваження на оновлення; відкликання цього повноваження робить програму незмінною.
Обмеження
| Обмеження | Значення | Джерело |
|---|---|---|
| Стандартний розмір купи | 32 КіБ | HEAP_LENGTH |
| Максимальний розмір купи (регульований) | 256 КіБ | MAX_HEAP_FRAME_BYTES |
| Розмір кадру стека | 4 096 байтів | 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?