Документація SolanaРозробка програм

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

Цей посібник передбачає знання наступних тем:

ЗавданняКоманда
Зібрати програму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.so
solana balance

Крім того, кожна програма має обліковий запис програми та ідентифікатор програми, який є адресою цього облікового запису програми. Наступна команда генерує keypair для облікового запису програми:

solana-keygen new -o ./target/deploy/your_program-keypair.json
Terminal
$
solana-keygen new

Це створює keypair за адресою ~/.config/solana/id.json за замовчуванням.

cargo-build-sbf

Початкове розгортання

Тепер виконуваний файл можна завантажити в обліковий запис програми:

Виберіть, на який кластер Solana розгортати. Використовуйте команду solana config get, щоб перевірити вашу поточну конфігурацію:

Terminal
$
solana config get
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
Terminal
$
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

Повторне розгортання

Завантаження іншого виконуваного файлу до того самого program account знову перезапише / замінить його. Однак для повторних розгортань потрібен лише ідентифікатор програми (pubkey програмної keypair), а не вся keypair, оскільки підписантом є keypair органу оновлення.

Loader-v3

Для devnet або localhost поповніть свій гаманець за допомогою команди solana airdrop:

Terminal
$
solana airdrop 2

Якщо старий виконуваний файл був коротшим за новий, може знадобитися спочатку збільшити розмір programdata account:

Terminal
$
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:

Terminal
$
cargo build-sbf

Відновлення завантаження

Можливо, що завантаження застрягне або буде перервано.

Loader-v3

Якщо розгортання програми не вдається, залишиться проміжний буферний акаунт із ненульовим балансом. Щоб повернути цей баланс, ви можете відновити невдале розгортання, надавши той самий проміжний буфер для нового виклику deploy.

Щоб відновити keypair:

Зберіть вашу програму за допомогою команди cargo build-sbf:

Terminal
$
cargo build-sbf

Це створює два важливі файли в target/deploy/:

  1. hello_world-keypair.json: файл keypair, публічний ключ якого буде використовуватися як ваш ідентифікатор програми
  2. hello_world.so: скомпільований виконуваний файл програми
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json --start-offset <BYTES_UPLOADED_SO_FAR>

Фіналізація

Це незворотна дія.

Програму можна зробити незмінною, видаливши її повноваження на оновлення.

Terminal
$
wc -c < ./target/deploy/hello_world.so
solana program set-upgrade-authority ./target/deploy/your_program-keypair.json --final
Terminal
$
solana rent 18504
solana program finalize --program-id ./target/deploy/your_program-keypair.json

Замість перезапису програм також можна надати користувачам вибір, яку версію програми вони хочуть використовувати, створивши зв'язаний список фіналізованих програм:

Використовуйте команду solana program deploy, щоб розгорнути вашу програму:

Terminal
$
solana program deploy ./target/deploy/hello_world.so

Для програм, розгорнутих під loader-v3, можна повернути лише їхній programdata account, буферні акаунти та кошти, заблоковані в них. Program account разом з ідентифікатором програми та коштами, заблокованими конкретно в program account, залишаються недоступними.

Програми, розгорнуті під loader-v4, можуть бути закриті разом з їхнім програмним обліковим записом, їхнім ідентифікатором програми та заблокованими коштами, які знову стають доступними для інших використань.

Loader-v3

Terminal
$
solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json

Ви можете генерувати нові keypair за допомогою команди solana-keygen:

Terminal
$
solana-keygen new -o ./custom-keypair.json
solana program close ./target/deploy/your_program-keypair.json

Щоб закрити всі буферні облікові записи, пов'язані з поточним повноваженням:

Оновіть вашу програму, використовуючи ту саму команду solana program deploy:

  1. Внесіть зміни до коду вашої програми
  2. Перезберіть вашу програму: cargo build-sbf
  3. Розгорніть оновлення:
Terminal
$
solana program deploy ./target/deploy/hello_world.so

Перегляд метаданих

Підкоманда show виводить метадані програми.

Приклад виводу виглядає так:

Terminal
$
solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000
  • Program Id — це адреса, на яку можна посилатися в полі program_id інструкції під час виклику програми.
  • Owner: завантажувач, за допомогою якого була розгорнута ця програма.
  • ProgramData Address — це programdata account, пов'язаний з обліковим записом програми, який містить виконуваний файл програми (тільки для loader-v3).
  • Status: retracted, deployed або finalized (тільки для loader-v4).
  • Authority — це повноваження на оновлення програми.
  • Last Deployed In Slot — це slot, у якому програма була востаннє розгорнута.
  • Data Length — це розмір простору, зарезервованого для розгортань. Фактичний простір, який використовується поточно розгорнутою програмою, може бути меншим.

Loader-v3

Щоб переглянути конкретну програму:

solana program show ./target/deploy/your_program-keypair.json

Щоб перевірити метадані вашої програми, використовуйте команду solana program show:

Terminal
$
solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE

Щоб показати всі буферні облікові записи незалежно від повноваження:

solana program show --buffers --all
$ solana program show 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7
Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7
Owner: BPFLoaderUpgradeab1e11111111111111111111111
ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7c
Authority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1
Last Deployed In Slot: 6573
Data Length: 18504 (0x4848) bytes
Balance: 0.12999192 SOL
solana program show --programs --buffer-authority ~/.config/solana/authority-keypair.json
solana program show --buffers --buffer-authority ~/.config/solana/authority-keypair.json

Loader-v4

Щоб переглянути конкретну програму:

solana program-v4 show --program-id ./target/deploy/your_program-keypair.json

Щоб переглянути список програм, розгорнутих з authority за замовчуванням:

solana program-v4 show --all

Щоб переглянути список програм, розгорнутих з конкретним authority:

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

Розширені можливості: передача прав власності

Право змінювати певну програму належить її authority. Цей authority можна передати іншій keypair без зміни keypair програми, щоб ідентифікатор програми залишався незмінним. Крім того, один authority може контролювати кілька program account.

Щоб передати повноваження програми іншому акаунту, використовуйте команду solana program set-upgrade-authority:

Terminal
$
solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --new-upgrade-authority ./new-authority-keypair.json

Спочатку потрібно згенерувати keypair для authority:

solana-keygen new -o ~/.config/solana/authority-keypair.json

Щоб зробити вашу програму незмінною, використовуйте команду solana program set-upgrade-authority з прапорцем --final, щоб видалити повноваження програми:

Terminal
$
solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --final
solana program deploy ./target/deploy/your_program.so --upgrade-authority ~/.config/solana/authority-keypair.json

Або після розгортання та використання keypair за замовчуванням як поточного authority:

Щоб закрити вашу програму та повернути SOL, виділений для program account, використовуйте команду solana program close:

Terminal
$
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
Terminal
$
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.12999192
3KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 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:

Terminal
$
solana program dump 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE ./downloaded_program.so

Майте на увазі, що використання буферних акаунтів приблизно подвоює кошти, необхідні під час процесу завантаження, оскільки два акаунти одночасно містять по одному виконуваному файлу.

Спочатку потрібно створити keypair для буферного акаунта:

solana-keygen new -o ~/.config/solana/buffer-keypair.json

Буферний акаунт можна повторно використовувати для різних завантажень, і він не прив'язаний до жодного конкретного program account.

Terminal
$
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.json
solana 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: кількість спроб повтору з новим блокхешем, якщо транзакції застаріють. (За замовчуванням: 5)
  • --use-rpc: надсилає транзакції до налаштованого RPC. Цей прапорець вимагає stake-weighted RPC-з'єднання від провайдерів, таких як Triton або Helius.

Is this page helpful?

Керується

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