Развёртывание программ

Резюме

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

Развёртывание программ

Обновление программ

Чтобы обновить программу, аккаунт должен обладать полномочиями управляющего обновлением (обычно это аккаунт, который изначально развёрнул программу). Во время развёртывания или обновления новый байткод загружается во временный буферный аккаунт, затем записывается в аккаунт programdata. Назначение управляющего обновлением None делает программу неизменяемой и навсегда предотвращает дальнейшие обновления.

Механизм обновления

Когда UpgradeableLoaderInstruction::Upgrade обрабатывается, рантайм:

  1. Проверяет, что аккаунт Program доступен для записи и принадлежит loader-v3.
  2. Проверяет, что Buffer аккаунт содержит состояние Buffer с правильными полномочиями.
  3. Проверяет, что аккаунт ProgramData с upgrade_authority_address совпадает и не является None.
  4. Проверяет, что программа не была уже развёрнута в текущем слоте (clock.slot != slot).
  5. Загружает и проверяет новые ELF-байты из буфера.
  6. Копирует новый байткод из буфера в аккаунт ProgramData и обнуляет оставшиеся байты.
  7. Обеспечивает аккаунт ProgramData арендной неуязвимостью.
  8. Опустошает буферный аккаунт (устанавливает lamports в 0) и обрезает его данные.
  9. Новая версия вступает в силу в следующем слоте (deployment_slot + 1).

Сам аккаунт Program (его состояние и указатель programdata_address) не изменяется во время обновления. Обновляются только байткод аккаунта ProgramData и метаданные slot.

Справочник инструкций Loader-v3

Loader-v3 (BPF Loader Upgradeable) — это текущий загрузчик по умолчанию для деплоя программ в Solana.

ИнструкцияОписание
InitializeBufferУстанавливает состояние аккаунта буфера в Buffer с указанным авторитетом. Завершается неудачей, если уже инициализирован.
WriteЗаписывает байты по указанному смещению в аккаунте буфера. Авторитет должен подписать.
DeployWithMaxDataLenСоздает новую программу: выводит адрес ProgramData, создает аккаунт ProgramData через CPI к System Program, верифицирует и развертывает ELF из буфера, устанавливает состояние аккаунта программы и помечает его как исполняемый.
UpgradeЗаменяет байткод в аккаунте ProgramData существующей программы из буфера.
SetAuthorityИзменяет авторитет аккаунта Buffer или ProgramData. Установка в None для ProgramData делает программу неизменяемой. Авторитет буфера не может быть установлен в None.
SetAuthorityCheckedКак SetAuthority, но требует, чтобы новый авторитет также подписал транзакцию.
CloseЗакрывает аккаунт буфера, неинициализированный или ProgramData аккаунт, переводя его lamport получателю. Закрытие ProgramData также записывает надгробие Closed в кеш программы. Невозможно закрыть программу, развернутую в текущем слоте.
ExtendProgramCheckedРасширяет выделение аккаунта ProgramData на дополнительные байты, финансируя дополнительную ренту от плательщика.

Проверка программ

Solana поддерживает верифицируемые сборки, которые позволяют пользователям подтвердить, что ончейн-байткод программы соответствует ее публичному исходному коду. Фреймворк Anchor предоставляет встроенную поддержку верифицируемых сборок.

Чтобы проверить статус верификации развернутой программы, найдите её program ID в Solana Explorer или используйте Solana Verifiable Build CLI от Ellipsis Labs для независимой верификации onchain-программ.

Загрузчики программ

ЗагрузчикАдресОбновляемыйОписание
Native LoaderNativeLoader1111111111111111111111111111111Только через обновление ПО validatorВладеет встроенными программами (System, Vote, Stake) и другими загрузчиками
BPF Loader (v1)BPFLoader1111111111111111111111111111111111Нет (управление загрузчиком отключено)Устаревшие программы
BPF Loader (v2)BPFLoader2111111111111111111111111111111111Нет (управление загрузчиком отключено)Устаревшие программы
BPF Loader UpgradeableBPFLoaderUpgradeab1e11111111111111111111111Да, если установлен upgrade authorityВладеет всеми недавно развернутыми программами

Is this page helpful?

Содержание

Редактировать страницу

Управляется

© 2026 Solana Foundation.
Все права защищены.
Связаться с нами