Розгортання програм

Підсумок

Програми, розгорнуті через loader-v3, можна оновлювати, якщо встановлено повноваження на оновлення. Відкликання повноважень робить програму незмінною. Охоплює 9-етапний механізм оновлення, усі 9 інструкцій loader-v3, верифікацію збірки та 5 типів завантажувачів.

Розгортання програм

Оновлення програм

Щоб оновити програму, обліковий запис повинен мати повноваження на оновлення (зазвичай це обліковий запис, який спочатку розгорнув програму). Під час розгортання або оновлення новий байткод завантажується в тимчасовий буферний обліковий запис, а потім записується в programdata account. Встановлення повноважень на оновлення як None робить програму незмінною та назавжди запобігає подальшим оновленням.

Механізм оновлення

Коли обробляється UpgradeableLoaderInstruction::Upgrade, середовище виконання:

  1. Перевіряє, що program account доступний для запису та належить loader-v3.
  2. Перевіряє, що буферний обліковий запис містить стан Buffer з правильними повноваженнями.
  3. Перевіряє, що upgrade_authority_address programdata account збігається і не є None.
  4. Перевіряє, що програма ще не була розгорнута в поточному слоті (clock.slot != slot).
  5. Завантажує та перевіряє нові байти ELF з буфера.
  6. Копіює новий байткод з буфера в programdata account і обнуляє решту байтів.
  7. Поповнює programdata account до звільнення від орендної плати.
  8. Спорожнює буферний обліковий запис (встановлює lamports на 0) і обрізає його дані.
  9. Нова версія набуває чинності в наступному слоті (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 LoaderNativeLoader1111111111111111111111111111111Тільки через оновлення ПЗ валідатораВолодіє вбудованими модулями (System, Vote, Stake) та іншими завантажувачами
BPF Loader (v1)BPFLoader1111111111111111111111111111111111Ні (керування завантажувачем вимкнено)Застарілі програми
BPF Loader (v2)BPFLoader2111111111111111111111111111111111Ні (керування завантажувачем вимкнено)Застарілі програми
BPF Loader UpgradeableBPFLoaderUpgradeab1e11111111111111111111111Так, якщо встановлено права оновленняВолодіє всіма новими розгорнутими програмами
Loader-v4LoaderV411111111111111111111111111111111111Так, якщо встановлено права доступуЩе не випущено в мейннеті

Is this page helpful?

Зміст

Редагувати сторінку

Керується

© 2026 Фонд Solana.
Всі права захищені.
Залишайтеся на зв'язку