В этом руководстве предполагается знание следующих тем:
| Задача | Команда |
|---|---|
| Сборка программы | cargo build-sbf |
| Развернуть новую программу | solana program deploy <path_to_program.so> |
| Обновить существующую программу | solana program deploy <path_to_program.so> (то же, что и развертывание) |
| Показать информацию о программе | solana program show <program-id> |
| Передать права на программу | solana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair> |
| Сделать программу неизменяемой | solana program set-upgrade-authority <program-id> --final |
| Закрыть программу | solana program close <program-id> --bypass-warning |
| Проверить баланс кошелька | solana balance |
| Запросить airdrop (devnet/localhost) | solana airdrop 2 |
В настоящее время происходит переход от loader-v3 (подкоманда program) к loader-v4 (подкоманда program -v4), так как loader-v3 устаревает.
Для новых развёртываний используйте solana program-v4 deploy вместо
solana program deploy.
Чтобы перенести существующую программу (по сути, повторно развернуть её):
solana program migrate ./target/deploy/your_program-keypair.json
Подготовка
Сначала программу необходимо собрать (скомпилировать, связать, оптимизировать).
cargo +solana build --target sbpf-solana-solana --release
Этот шаг необходимо выполнять перед каждым повторным/новым развёртыванием.
Убедитесь, что на аккаунте плательщика по умолчанию достаточно средств, пропорционально размеру исполняемого файла:
du -h ./target/deploy/your_program.sosolana balance
Кроме того, каждая программа имеет аккаунт программы и ID программы, который является адресом этого аккаунта программы. Следующая команда создаёт keypair для аккаунта программы:
solana-keygen new -o ./target/deploy/your_program-keypair.json
$solana-keygen new
По умолчанию создаётся keypair по адресу ~/.config/solana/id.json.
cargo-build-sbf
Первоначальное развёртывание
Теперь исполняемый файл можно загрузить в аккаунт программы:
Выберите, в каком кластере Solana развернуть программу. Используйте команду
solana config get, чтобы проверить текущую конфигурацию:
$solana config get
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
$solana config set --url mainnet-beta$solana config set --url devnet$solana config set --url localhost$solana config set --url testnet$solana config set --url "https://your-rpc-url.com"
solana program-v4 deploy ./target/deploy/your_program.so --program-keypair ./target/deploy/your_program-keypair.json
Повторное развертывание
Загрузка другого исполняемого файла в тот же аккаунт программы снова перезапишет / заменит его. Однако для повторного развертывания требуется только идентификатор программы (pubkey аккаунта ключей программы), а не весь keypair, так как подписывающим является keypair полномочий на обновление.
Loader-v3
Для devnet или localhost пополните кошелёк с помощью команды solana airdrop:
$solana airdrop 2
Если старый исполняемый файл был короче нового, может потребоваться сначала увеличить аккаунт programdata:
$solana balance
Loader-v4
Обратите внимание, что при первоначальном развертывании использовался
program-keypair, а при повторном развертывании используется program-id:
solana program-v4 deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
Приоритет загрузки
Для сборки программы используйте команду cargo build-sbf:
$cargo build-sbf
Возобновление загрузки
Загрузка может быть прервана или остановлена.
Loader-v3
Если развертывание программы завершилось неудачей, останется зависший
промежуточный буферный аккаунт с ненулевым балансом. Чтобы вернуть этот баланс,
вы можете возобновить неудачное развертывание, предоставив тот же промежуточный
буфер для нового вызова deploy.
Чтобы восстановить keypair:
Соберите свою программу с помощью команды cargo build-sbf:
$cargo build-sbf
В результате будут созданы два важных файла в target/deploy/:
hello_world-keypair.json: Файл keypair, публичный ключ которого будет использоваться как Program IDhello_world.so: Скомпилированный исполняемый файл программы
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json --start-offset <BYTES_UPLOADED_SO_FAR>
Завершение
Это действие необратимо.
Программа может быть сделана неизменяемой путем удаления полномочий на её обновление.
$wc -c < ./target/deploy/hello_world.so
solana program set-upgrade-authority ./target/deploy/your_program-keypair.json --final
$solana rent 18504
solana program finalize --program-id ./target/deploy/your_program-keypair.json
Вместо перезаписи программ также можно предоставить пользователям возможность выбора версии программы, которую они хотят использовать, создав связанный список финализированных программ:
Для развертывания программы используйте команду solana program deploy:
$solana program deploy ./target/deploy/hello_world.so
Для программ, развернутых с использованием loader-v3, можно вернуть только их programdata аккаунт, буферные аккаунты и средства, заблокированные в них. Program аккаунт вместе с ID программы и средствами, заблокированными в program аккаунте, остаются недоступными.
Программы, развернутые с использованием loader-v4, могут быть закрыты вместе с их программным аккаунтом, их программным ID и заблокированными средствами, которые снова становятся доступными для других целей.
Loader-v3
$solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json
Вы можете сгенерировать новые keypair с помощью команды solana-keygen:
$solana-keygen new -o ./custom-keypair.json
solana program close ./target/deploy/your_program-keypair.json
Чтобы закрыть все буферные аккаунты, связанные с текущим владельцем:
Обновите свою программу с помощью той же команды solana program deploy:
- Внесите изменения в код вашей программы
- Пересоберите программу:
cargo build-sbf - Разверните обновление:
$solana program deploy ./target/deploy/hello_world.so
Просмотр метаданных
Подкоманда show отображает метаданные программы.
Пример вывода выглядит следующим образом:
$solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000
Program Id— это адрес, который можно указать в полеprogram_idинструкции при вызове программы.Owner: Загрузчик, с которым была развернута эта программа.ProgramData Address— это аккаунт programdata, связанный с программным аккаунтом, который содержит исполняемый файл программы (только для loader-v3).Status:retracted,deployedилиfinalized(только для loader-v4).Authority— это полномочие на обновление программы.Last Deployed In Slot— это слот, в котором программа была развернута в последний раз.Data Length— это размер пространства, зарезервированного для развертываний. Фактическое пространство, используемое текущей развернутой программой, может быть меньше.
Loader-v3
Чтобы просмотреть конкретную программу:
solana program show ./target/deploy/your_program-keypair.json
Чтобы проверить метаданные вашей программы, используйте команду
solana program show:
$solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE
Чтобы показать все буферные аккаунты независимо от владельца:
solana program show --buffers --all
$ solana program show 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Owner: BPFLoaderUpgradeab1e11111111111111111111111ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7cAuthority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1Last Deployed In Slot: 6573Data Length: 18504 (0x4848) bytesBalance: 0.12999192 SOL
solana program show --programs --buffer-authority ~/.config/solana/authority-keypair.jsonsolana program show --buffers --buffer-authority ~/.config/solana/authority-keypair.json
Loader-v4
Для просмотра определенной программы:
solana program-v4 show --program-id ./target/deploy/your_program-keypair.json
Для просмотра списка программ, развернутых с правами доступа по умолчанию:
solana program-v4 show --all
Для просмотра списка программ, развернутых с определенными правами доступа:
solana program-v4 show --authority ~/.config/solana/authority-keypair.json
Загрузка исполняемого файла
Иногда полезно загрузить и сравнить программу, чтобы убедиться, что она содержит известный исполняемый файл. Загруженный файл можно обрезать, хешировать и сравнить с хешем оригинального файла программы.
Loader-v3
solana program dump ./target/deploy/your_program-keypair.json ./target/deploy/your_program.so
Loader-v4
solana program download ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
Продвинуто: передача прав доступа
Право изменять данную программу принадлежит её владельцу. Эти права могут быть переданы другому keypair без изменения keypair программы, чтобы идентификатор программы оставался прежним. Более того, один владелец может управлять несколькими аккаунтами программ.
Чтобы передать полномочия программы другому аккаунту, используйте команду
solana program set-upgrade-authority:
$solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --new-upgrade-authority ./new-authority-keypair.json
Сначала необходимо сгенерировать keypair для владельца:
solana-keygen new -o ~/.config/solana/authority-keypair.json
Чтобы сделать вашу программу неизменяемой, используйте команду
solana program set-upgrade-authority с флагом --final для удаления
полномочий программы:
$solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --final
solana program deploy ./target/deploy/your_program.so --upgrade-authority ~/.config/solana/authority-keypair.json
Или после развертывания, используя keypair по умолчанию в качестве текущего владельца:
Чтобы закрыть программу и вернуть SOL, выделенные на аккаунт программы,
используйте команду solana program close:
$solana program close 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --bypass-warning
solana program set-upgrade-authority ./target/deploy/your_program-keypair.json --upgrade-authority ~/.config/solana/authority-keypair.json --new-upgrade-authority ~/.config/solana/new_authority-keypair.json
Loader-v4
Владелец может быть указан во время развертывания:
solana program-v4 deploy ./target/deploy/your_program.so --program-keypair ./target/deploy/your_program-keypair.json --authority ~/.config/solana/authority-keypair.json
$solana program show --programs
solana program-v4 transfer-authority --program-id ./target/deploy/your_program-keypair.json --new-authority ~/.config/solana/authority-keypair.json
Program Id | Slot | Authority | Balance-------------------------------------------------|------------|------------------------------------------------|-------------7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE | 249885434 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.129991923KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 249883212 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.28654328
solana program-v4 transfer-authority --program-id ./target/deploy/your_program-keypair.json --authority ~/.config/solana/authority-keypair.json --new-authority ~/.config/solana/new_authority-keypair.json
Чтобы скачать развернутую программу, используйте команду solana program dump:
$solana program dump 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE ./downloaded_program.so
Имейте в виду, что использование буферных аккаунтов примерно удваивает средства, необходимые в процессе загрузки, так как два аккаунта одновременно хранят один исполняемый файл.
Сначала необходимо создать keypair для буферного аккаунта:
solana-keygen new -o ~/.config/solana/buffer-keypair.json
Буферный аккаунт может быть повторно использован для различных загрузок и не привязан к какому-либо конкретному аккаунту программы.
$solana program deploy ./target/deploy/hello_world.so \--with-compute-unit-price 10000 \--max-sign-attempts 10 \--use-rpc
solana program write-buffer ./target/deploy/your_program.so --buffer ~/.config/solana/buffer-keypair.jsonsolana program deploy --program-id ./target/deploy/your_program-keypair.json --buffer ~/.config/solana/buffer-keypair.json
--with-compute-unit-price: Установить приоритетную комиссию в микролампортах (0,000001 SOL) за вычислительную единицу. Актуальные значения смотрите в Helius Priority Fee API. Приоритетная комиссия — это дополнительная плата, выплачиваемая текущему лидеру для ускорения вашей транзакции.--max-sign-attempts: Количество попыток повторить с новым blockhash, если транзакции истекают. (По умолчанию: 5)--use-rpc: Отправлять транзакции на настроенный RPC. Этот флаг требует stake-weighted RPC-соединения от таких провайдеров, как Triton или Helius.
Is this page helpful?