Визначення
Runtime — це середовище виконання Solana, яке приймає перевірену транзакцію, завантажує потрібні програми та облікові записи, виконує інструкції та фіксує зміни стану блокчейна. Іншими словами, runtime — це шар між підписаною транзакцією користувача і фактичним виконанням коду програми.
Як працює
Коли валідатор отримує транзакцію, яка пройшла первинну перевірку, runtime виконує такі кроки:
- Завантажує байт-код програми (скомпільований у формат BPF) з облікового запису програми.
- Відображає облікові записи, передані в транзакції, у пам'ять виконання.
- Перевіряє права доступу: чи має підписувач право запису в обліковий запис, чи збігається власник, чи не порушено правила оренди (rent).
- Виконує інструкції послідовно в межах виділеного обчислювального бюджету (compute budget).
- Якщо всі інструкції виконано без помилок — фіксує зміни стану. Якщо хоча б одна інструкція завершилася невдало — відкочує всі зміни цієї транзакції.
Runtime також забезпечує ізоляцію між програмами: одна програма не може безпосередньо модифікувати пам'ять іншої. Взаємодія між програмами відбувається виключно через механізм CPI (Cross-Program Invocation) із чітко визначеними правилами передання прав.
Приклад
Ви викликаєте програму на Solana, яка переказує токени. Runtime завантажує код цієї програми, перевіряє, що ви підписали транзакцію і що обліковий запис із токенами дозволяє запис. Програма через CPI звертається до стандартної програми Token. Runtime знову перевіряє права вже для цього виклику, виконує логіку переказу і лише після успішного завершення обох інструкцій оновлює баланси в стані блокчейна.
Типова помилка
Часто плутають runtime із Sealevel. Sealevel — це паралельний рушій виконання, який є компонентом усередині runtime. Runtime ширший: він включає завантаження програм, перевірку прав доступу, управління обчислювальним бюджетом, обробку CPI та фіксацію стану. Інша поширена помилка — вважати, що runtime і валідатор — це одне й те саме. Валідатор — це вузол мережі, а runtime — це програмний шар усередині валідатора, який безпосередньо виконує транзакції.
Пов'язані матеріали
Внутрішні переходи
- Sealevel — паралельний рушій виконання транзакцій у складі runtime.
- Account data — структура даних, з якою працює runtime під час виконання програм.