Визначення

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 під час виконання програм.