Цей посібник передбачає знання наступних тем:
| Завдання | Команда |
|---|---|
| Зібрати програму | 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
Крім того, кожна програма має обліковий запис програми та ідентифікатор програми, який є адресою цього облікового запису програми. Наступна команда генерує 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
Повторне розгортання
Завантаження іншого виконуваного файлу до того самого program account знову перезапише / замінить його. Однак для повторних розгортань потрібен лише ідентифікатор програми (pubkey програмної keypair), а не вся keypair, оскільки підписантом є keypair органу оновлення.
Loader-v3
Для devnet або localhost поповніть свій гаманець за допомогою команди
solana airdrop:
$solana airdrop 2
Якщо старий виконуваний файл був коротшим за новий, може знадобитися спочатку збільшити розмір programdata account:
$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, публічний ключ якого буде використовуватися як ваш ідентифікатор програми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>
Фіналізація
Це незворотна дія.
Програму можна зробити незмінною, видаливши її повноваження на оновлення.
$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 account, буферні акаунти та кошти, заблоковані в них. Program account разом з ідентифікатором програми та коштами, заблокованими конкретно в program account, залишаються недоступними.
Програми, розгорнуті під loader-v4, можуть бути закриті разом з їхнім програмним обліковим записом, їхнім ідентифікатором програми та заблокованими коштами, які знову стають доступними для інших використань.
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 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:
$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
Щоб переглянути список програм, розгорнутих з 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:
$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, щоб видалити
повноваження програми:
$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:
$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
Буферний акаунт можна повторно використовувати для різних завантажень, і він не прив'язаний до жодного конкретного program account.
$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: кількість спроб повтору з новим блокхешем, якщо транзакції застаріють. (За замовчуванням: 5)--use-rpc: надсилає транзакції до налаштованого RPC. Цей прапорець вимагає stake-weighted RPC-з'єднання від провайдерів, таких як Triton або Helius.
Is this page helpful?