Підсумок
Програми, розгорнуті через loader-v3, можна оновлювати, якщо встановлено повноваження на оновлення. Відкликання повноважень робить програму незмінною. Охоплює механізм оновлення, інструкції розгортання та оновлення loader-v3, верифікацію збірки та доступні програми завантажувачів.
Розгортання програм
Нативний Rust
Розгорніть за допомогою Solana CLI з solana program deploy.
Anchor
Розгорніть за допомогою фреймворку Anchor з anchor deploy.
Оновлення програм
Щоб оновити програму, обліковий запис повинен мати повноваження на оновлення
(зазвичай це обліковий запис, який спочатку
розгорнув програму). Під час розгортання або
оновлення новий байткод завантажується в тимчасовий буферний обліковий запис, а
потім записується в programdata account. Встановлення повноважень на оновлення
як None робить програму незмінною та назавжди запобігає подальшим
оновленням.
Механізм оновлення
Коли обробляється
UpgradeableLoaderInstruction::Upgrade,
середовище виконання:
- Перевіряє, що program account доступний для запису та належить loader-v3.
- Перевіряє, що буферний обліковий запис містить стан
Bufferз правильними повноваженнями. - Перевіряє, що
upgrade_authority_addressprogramdata account збігається і не єNone. - Перевіряє, що програма ще не була розгорнута в поточному слоті
(
clock.slot != slot). - Завантажує та перевіряє нові байти ELF з буфера.
- Копіює новий байткод з буфера в programdata account і обнуляє решту байтів.
- Поповнює programdata account до звільнення від орендної плати.
- Спорожнює буферний обліковий запис (встановлює lamports на 0) і обрізає його дані.
- Нова версія набуває чинності в наступному слоті (
deployment_slot + 1).
Сам обліковий запис Program (його стан та вказівник programdata_address) не
змінюється під час оновлення. Оновлюється лише байт-код та метадані slot
облікового запису ProgramData.
Довідник інструкцій Loader-v3
Loader-v3 (BPF Loader Upgradeable) є поточним стандартним завантажувачем для розгортання програм у Solana.
| Інструкція | Опис |
|---|---|
InitializeBuffer | Встановлює стан акаунта буфера на Buffer із вказаними повноваженнями. Завершується помилкою, якщо вже ініціалізовано. |
Write | Записує байти за вказаним зміщенням в акаунті буфера. Повноваження повинні підписати. |
DeployWithMaxDataLen | Створює нову програму: виводить адресу ProgramData, створює акаунт ProgramData через CPI до System Program, верифікує та розгортає ELF з буфера, встановлює стан акаунта Program і позначає його виконуваним. |
Upgrade | Замінює байт-код в акаунті ProgramData існуючої програми з буфера. |
SetAuthority | Змінює повноваження акаунта Buffer або ProgramData. Встановлення на None для ProgramData робить програму незмінною. Повноваження Buffer не можна встановити на None. |
SetAuthorityChecked | Як SetAuthority, але вимагає, щоб нові повноваження також підписали транзакцію. |
Close | Закриває акаунт буфера, неініціалізований або ProgramData, передаючи його lamport отримувачу. Закриття ProgramData також записує надгробок Closed в кеш програми. Не можна закрити програму, що була розгорнута в поточному slot. |
ExtendProgramChecked | Розширює виділення акаунта ProgramData на додаткові байти, фінансуючи додаткову орендну плату від платника. |
Верифікація програм
Solana підтримує верифіковані збірки, які дозволяють користувачам підтвердити, що ончейн байт-код програми відповідає її публічному вихідному коду. Фреймворк Anchor надає вбудовану підтримку для верифікованих збірок.
Щоб перевірити статус верифікації розгорнутої програми, знайдіть її ідентифікатор програми на Solana Explorer, або скористайтеся Solana Verifiable Build CLI від Ellipsis Labs для незалежної верифікації ончейн-програм.
Програми-завантажувачі
| Завантажувач | Адреса | Можливість оновлення | Опис |
|---|---|---|---|
| Native Loader | NativeLoader1111111111111111111111111111111 | Тільки через оновлення ПЗ validator | Володіє вбудованими модулями (System, Vote, Stake) та іншими завантажувачами |
| BPF Loader (v1) | BPFLoader1111111111111111111111111111111111 | Ні (керування завантажувачем вимкнено) | Застарілі програми |
| BPF Loader (v2) | BPFLoader2111111111111111111111111111111111 | Ні (керування завантажувачем вимкнено) | Застарілі програми |
| BPF Loader Upgradeable | BPFLoaderUpgradeab1e11111111111111111111111 | Так, якщо встановлено права оновлення | Володіє всіма новими розгорнутими програмами |
Is this page helpful?