プログラムのデプロイ
このセクションでは、Solana CLIを使用してSolanaプログラムをデプロイする基本的なプロセスについて説明します。
CLIコマンドリファレンス
タスク | コマンド |
---|---|
プログラムのビルド | 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 |
エアドロップのリクエスト (devnet/localhost) | solana airdrop 2 |
主要な概念
詳細に入る前に、いくつかの用語を明確にしておきましょう:
- プログラムID:プログラムのオンチェーンアドレス。ユーザーはプログラムIDを参照することでプログラムと対話します。
- program account:プログラムのメタデータを格納するオンチェーンアカウント。program accountのアドレスがプログラムIDとなります。program accountはprogramdata accountのアドレスも保存します。
- programdata account:デプロイされたプログラムの実行可能コードを格納するオンチェーンアカウント。
- プログラム権限:プログラムを更新または閉じる権限を持つアカウント。デフォルトでは、これはCLIウォレットです。
前提条件
ウォレットの設定
インストール後、ローカルのkeypairウォレットを作成します。このウォレットのアドレスは、プログラムをデプロイする際のデフォルトのプログラム権限として設定されます:
$solana-keygen new
これによりデフォルトで ~/.config/solana/id.json
にkeypairが作成されます。
クラスターの設定
デプロイ先のSolanaクラスターを選択します。solana config get
コマンドを使用して現在の設定を確認してください:
$solana config get
必要に応じてクラスターを切り替えます:
$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"
ウォレットへの資金提供
プログラムのデプロイには SOL が必要です。必要な量はプログラムのサイズによって異なります。
devnetまたはlocalhostの場合、solana airdrop
コマンドを使用してウォレットに資金を提供します:
$solana airdrop 2
ウォレットの残高を確認します:
$solana balance
基本操作
プログラムのビルド
プログラムをビルドするには、cargo build-sbf
コマンドを使用します:
$cargo build-sbf
サンプルプログラム
これは「Hello, Solana!」をプログラムログに出力する最小限のSolanaプログラムです。
use solana_program::{account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey,};entrypoint!(process_instruction);pub fn process_instruction(_program_id: &Pubkey,_accounts: &[AccountInfo],_instruction_data: &[u8],) -> ProgramResult {msg!("Hello, Solana!");Ok(())}
ビルド出力
cargo build-sbf
コマンドを使用してプログラムをビルドします:
$cargo build-sbf
これによりtarget/deploy/
に2つの重要なファイルが作成されます:
hello_world-keypair.json
:公開鍵がプログラムIDとして使用されるkeypairファイルhello_world.so
:コンパイルされたプログラム実行ファイル
プログラムサイズとコストの確認
プログラムをデプロイするには、プログラムのサイズに基づいてプログラムアカウントにSOLを割り当てる必要があります。プログラムが大きいほど、デプロイに必要なSOLも多くなります。
プログラムのサイズを確認します:
$wc -c < ./target/deploy/hello_world.so
このサイズ(バイト)に必要なSOLを計算します:
$solana rent 18504
デプロイトランザクション手数料をカバーするために、表示されている金額よりも少し多めのSOLが必要です。
プログラムのデプロイ
solana program deploy
コマンドを使用してプログラムをデプロイします:
$solana program deploy ./target/deploy/hello_world.so
表示されるプログラムIDは、ネットワーク上のプログラムの永続的なアドレスです。
(自動生成されたものではなく)特定のプログラムIDでデプロイするには、次のようにします:
$solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json
solana-keygen
コマンドを使用して新しいkeypairを生成できます:
$solana-keygen new -o ./custom-keypair.json
プログラムの更新
同じ solana program deploy
コマンドを使用してプログラムを更新します:
- プログラムコードに変更を加える
- プログラムを再ビルドする:
cargo build-sbf
- 更新をデプロイする:
$solana program deploy ./target/deploy/hello_world.so
更新したプログラムが現在割り当てられているよりも多くのスペース(バイト)を必要とする場合、デプロイメントは自動的にプログラムアカウントを拡張します。これは新しいプログラムが前のバージョンより大きい場合に発生します。プログラムアカウントは新しいプログラムを格納するために追加のバイトが必要です。CLIは必要なSOLを計算し、自動的にあなたのウォレットから差し引きます。
手動でプログラムを拡張してより多くのバイトを割り当てることもできます:
$solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000
プログラム管理
プログラムがデプロイされると、プログラムアカウントを管理するためのいくつかの一般的なコマンドがあります。
プログラムメタデータの表示
プログラムメタデータを確認するには、solana program show
コマンドを使用します:
$solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE
出力例:
$ solana program show 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Owner: BPFLoaderUpgradeab1e11111111111111111111111ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7cAuthority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1Last Deployed In Slot: 6573Data Length: 18504 (0x4848) bytesBalance: 0.12999192 SOL
プログラム権限の移譲
プログラム権限を別のアカウントに移譲するには、solana program set-upgrade-authority
コマンドを使用します:
$solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --new-upgrade-authority ./new-authority-keypair.json
プログラム権限を移譲した後は、新しい権限のキーペアにアクセスできない限り、プログラムを更新することはできなくなります。
プログラムを不変にする
プログラムを不変にするには、solana program set-upgrade-authority
コマンドに--final
フラグを付けてプログラム権限を削除します:
$solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --final
プログラムが不変になると、二度と更新やクローズができなくなります。
プログラムをクローズする
プログラムをクローズしてプログラムアカウントに割り当てられたSOLを回収するには、solana program close
コマンドを使用します:
$solana program close 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --bypass-warning
クローズすると、Program IDは再利用できなくなります。同じアドレスに新しいプログラムをデプロイすることはできません。
ユーティリティコマンド
すべてのプログラムを一覧表示
現在のウォレットが権限を持つすべてのプログラムを表示します:
$solana program show --programs
出力例:
Program Id | Slot | Authority | Balance-------------------------------------------------|------------|------------------------------------------------|-------------7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE | 249885434 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.129991923KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 249883212 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.28654328
デプロイされたプログラムをダウンロードする
デプロイされたプログラムをダウンロードするには、solana program dump
コマンドを使用します:
$solana program dump 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE ./downloaded_program.so
高度なオプション
デプロイメントフラグ
Solanaネットワークが混雑している場合、これらのフラグを使用してプログラムのデプロイをサポートします。
使用例:
$solana program deploy ./target/deploy/hello_world.so \--with-compute-unit-price 10000 \--max-sign-attempts 10 \--use-rpc
オプションの説明:
--with-compute-unit-price
: コンピュートユニットあたりのマイクロラムポート(0.000001 SOL)で優先手数料を設定します。現在のレートについてはHelius優先手数料APIを確認してください。優先手数料は、トランザクションを優先するために現在のリーダーに支払われる追加手数料です。--max-sign-attempts
: トランザクションが期限切れになった場合に新しいブロックハッシュで再試行する回数。(デフォルト: 5)--use-rpc
: 設定されたRPCにトランザクションを送信します。このフラグにはTritonやHeliusなどのプロバイダーからのステーク加重 RPC接続が必要です。
Is this page helpful?