Визначення

BPF Loader — це вбудована програма Solana, яка завантажує, перевіряє та запускає на виконання скомпільований код смарт-контрактів у форматі BPF (Berkeley Packet Filter). Кожна розгорнута програма в мережі Solana зберігається як обліковий запис, а BPF Loader є тим механізмом, який перетворює цей байтовий код на виконувані інструкції.

Як працює

Робота BPF Loader охоплює кілька етапів:

  1. Компіляція. Розробник компілює програму мовою Rust у бінарний файл формату BPF (розширення .so).
  2. Запис. За допомогою CLI або RPC-запиту бінарний файл записується в спеціальний обліковий запис програми.
  3. Перевірка. BPF Loader аналізує байтовий код: перевіряє цілісність, допустимість інструкцій та відповідність вимогам безпеки.
  4. Виконання. Коли транзакція посилається на адресу програми, BPF Loader завантажує байтовий код із облікового записа та передає керування віртуальній машині Solana Runtime.

BPF Loader не інтерпретує код і не керує обчислювальним бюджетом — його завдання обмежується завантаженням та валідацією. Усе решта: ізоляція пам'яті, ліміти на кількість інструкцій, доступ до системних викликів — лежить на боці Runtime.

У мережі існує кілька версій BPF Loader, кожна з яких розширює можливості попередньої: підтримка оновлюваних програм, додаткові перевірки безпеки, сумісність із новими інструкціями. Вибір версії визначається під час розгортання і фіксується в обліковому записі програми.

Приклад

Ви розробили програму і виконали команду solana program deploy ./target/deploy/my_program.so. Під капотом CLI читає скомпільований BPF-файл, створює обліковий запис достатнього розміру та відправляє транзакцію, яка викликає BPF Loader. Той записує байтовий код у обліковий запис і позначає його як виконуваний. Після цього будь-яка транзакція, що містить адресу цієї програми, автоматично проходить через BPF Loader перед тим, як код потрапить у Runtime.

Типова помилка

Плутанина між BPF Loader та Solana Runtime. BPF Loader відповідає лише за завантаження та початкову перевірку байтового коду, тоді як Runtime — це повне середовище виконання, яке керує пам'яттю, обчислювальним бюджетом, системними викликами та ізоляцією між програмами. Інша поширена помилка — ігнорування версії BPF Loader під час розгортання: використання застарілої версії може обмежити функціональність програми або зробити неможливим її оновлення.

Пов'язані матеріали

Внутрішні переходи

  • Account data — структура облікового записа, у якій BPF Loader зберігає байтовий код програми
  • Syscall — системні виклики, через які завантажена програма взаємодіє з Runtime

Додаткові ресурси

  • Офіційна документація Solana щодо архітектури програм та життєвого циклу розгортання — для розуміння відмінностей між версіями BPF Loader та їхніх обмежень