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

Підсумок

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

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

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

Щоб оновити програму, обліковий запис повинен мати повноваження на оновлення (зазвичай це обліковий запис, який спочатку розгорнув програму). Під час розгортання або оновлення новий байткод завантажується в тимчасовий буферний обліковий запис, а потім записується в 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 і позначає його виконуваним.
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 LoaderNativeLoader1111111111111111111111111111111Тільки через оновлення ПЗ validatorВолодіє вбудованими модулями (System, Vote, Stake) та іншими завантажувачами
BPF Loader (v1)BPFLoader1111111111111111111111111111111111Ні (керування завантажувачем вимкнено)Застарілі програми
BPF Loader (v2)BPFLoader2111111111111111111111111111111111Ні (керування завантажувачем вимкнено)Застарілі програми
BPF Loader UpgradeableBPFLoaderUpgradeab1e11111111111111111111111Так, якщо встановлено права оновленняВолодіє всіма новими розгорнутими програмами

Is this page helpful?

Зміст

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

Керується

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