Підсумок
Програми, розгорнуті через loader-v3, можна оновлювати, якщо встановлено повноваження на оновлення. Відкликання повноважень робить програму незмінною. Охоплює 9-етапний механізм оновлення, усі 9 інструкцій loader-v3, верифікацію збірки та 5 типів завантажувачів.
Розгортання програм
Нативний 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 account та позначає його виконуваним. |
Upgrade | Замінює байт-код в programdata account існуючої програми з буфера. |
SetAuthority | Змінює повноваження облікового запису Buffer або ProgramData. Встановлення на None для ProgramData робить програму незмінною. Повноваження Buffer не можна встановити на None. |
SetAuthorityChecked | Як SetAuthority, але вимагає, щоб нове повноваження також підписало транзакцію. |
Close | Закриває обліковий запис buffer, uninitialized або ProgramData, переказуючи його lamports отримувачу. Закриття ProgramData також записує надгробок Closed до кешу програм. Не можна закрити програму, яка була розгорнута в поточному slot. |
ExtendProgramChecked | Розширює виділення programdata account на додаткові байти, фінансуючи додаткову rent від платника. |
Migrate | Мігрує програму loader-v3 до loader-v4, передаючи право власності program account та копіюючи байт-код. Вимагає підпису повноваження міграції або повноваження оновлення програми. Loader-v4 ще не випущено в mainnet. |
Верифікація програм
Solana підтримує верифіковані збірки, які дозволяють користувачам підтвердити, що он-чейн байткод програми відповідає її публічному вихідному коду. Фреймворк Anchor надає вбудовану підтримку для верифікованих збірок.
Щоб перевірити статус верифікації для розгорнутої програми, знайдіть її ідентифікатор програми в Solana Explorer, або використайте Solana Verifiable Build CLI від Ellipsis Labs для незалежної верифікації он-чейн програм.
Програми-завантажувачі
| Завантажувач | Адреса | Можливість оновлення | Опис |
|---|---|---|---|
| Native Loader | NativeLoader1111111111111111111111111111111 | Тільки через оновлення ПЗ валідатора | Володіє вбудованими модулями (System, Vote, Stake) та іншими завантажувачами |
| BPF Loader (v1) | BPFLoader1111111111111111111111111111111111 | Ні (керування завантажувачем вимкнено) | Застарілі програми |
| BPF Loader (v2) | BPFLoader2111111111111111111111111111111111 | Ні (керування завантажувачем вимкнено) | Застарілі програми |
| BPF Loader Upgradeable | BPFLoaderUpgradeab1e11111111111111111111111 | Так, якщо встановлено права оновлення | Володіє всіма новими розгорнутими програмами |
| Loader-v4 | LoaderV411111111111111111111111111111111111 | Так, якщо встановлено права доступу | Ще не випущено в мейннеті |
Is this page helpful?