Визначення
BPF Loader — це вбудована програма Solana, яка завантажує, перевіряє та запускає на виконання скомпільований код смарт-контрактів у форматі BPF (Berkeley Packet Filter). Кожна розгорнута програма в мережі Solana зберігається як обліковий запис, а BPF Loader є тим механізмом, який перетворює цей байтовий код на виконувані інструкції.
Як працює
Робота BPF Loader охоплює кілька етапів:
- Компіляція. Розробник компілює програму мовою Rust у бінарний файл формату BPF (розширення .so).
- Запис. За допомогою CLI або RPC-запиту бінарний файл записується в спеціальний обліковий запис програми.
- Перевірка. BPF Loader аналізує байтовий код: перевіряє цілісність, допустимість інструкцій та відповідність вимогам безпеки.
- Виконання. Коли транзакція посилається на адресу програми, 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 та їхніх обмежень