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

Кратко

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

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

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

Чтобы обновить программу, аккаунт должен обладать полномочиями управляющего обновлением (обычно это аккаунт, который изначально развёрнул программу). Во время развёртывания или обновления новый байткод загружается во временный буферный аккаунт, затем записывается в аккаунт 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-аккаунта в Buffer с указанным владельцем. Не сработает, если уже инициализирован.
WriteЗаписывает байты по заданному смещению в buffer-аккаунте. Необходима подпись владельца.
DeployWithMaxDataLenСоздаёт новую программу: вычисляет адрес ProgramData, создаёт аккаунт ProgramData через CPI к System Program, проверяет и деплоит ELF из буфера, устанавливает состояние Program-аккаунта и помечает его как исполняемый.
UpgradeЗаменяет байткод в существующем аккаунте ProgramData программы из буфера.
SetAuthorityМеняет владельца Buffer- или ProgramData-аккаунта. Установка None для ProgramData делает программу неизменяемой. Для Buffer нельзя установить владельца None.
SetAuthorityCheckedАналогично SetAuthority, но требует, чтобы новый владелец также подписал транзакцию.
CloseЗакрывает buffer-, неинициализированный или ProgramData-аккаунт, переводя его лампорты получателю. При закрытии ProgramData также записывает tombstone Closed в кэш программы. Нельзя закрыть программу, развернутую в текущем slot.
ExtendProgramCheckedУвеличивает выделение памяти для аккаунта ProgramData на дополнительные байты, оплачивая дополнительную rent с плательщика.
MigrateМигрирует программу loader-v3 на loader-v4, передавая владение аккаунтом программы и копируя байткод. Требует подпись миграционного или upgrade-владельца программы. Loader-v4 ещё не выпущен в mainnet.

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

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

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

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

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

Is this page helpful?

Содержание

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

Управляется

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