初めてのソラナプログラムをデプロイする
Anchorフレームワークを使用して、最初のプログラムをソラナブロックチェーンに構築、デプロイ、テストしましょう。このガイドは、ソラナプレイグラウンドに慣れるのに役立ち、Program Derived Address(PDA)やCross Program Invocation(CPI)を使用する準備をするのに役立ちます。
Anchorプロジェクトを作成する
- ウェブブラウザでソラナプレイグラウンドを開きます
- 左側のパネルで**+ Create a new project**をクリックします
- Project nameを入力します
- フレームワークとして**Anchor (Rust)**を選択します
- Createをクリックします
新規プロジェクト
src/lib.rs
ソースファイルが開きます。これにはInitialize
という構造体が含まれており、以下の処理を行います:
- *rs
data: u64
*という必須パラメータを受け取ります - 新しいアカウントを作成します
- *rs
data: u64
*の値を新しいアカウントに保存します - トランザクションのプログラムログにメッセージを追加します
use anchor_lang::prelude::*;// This is your program's public key and it will update// automatically when you build the project.declare_id!("11111111111111111111111111111111");#[program]mod hello_anchor {use super::*;pub fn initialize(ctx: Context<Initialize>, data: u64) -> Result<()> {ctx.accounts.new_account.data = data;msg!("Changed data to: {}!", data); // Message will show up in the tx logsOk(())}}#[derive(Accounts)]pub struct Initialize<'info> {// We must specify the space in order to initialize an account.// First 8 bytes are default account discriminator,// next 8 bytes come from NewAccount.data being type u64.// (u64 = 64 bits unsigned integer = 8 bytes)#[account(init,payer = signer,space = 8 + 8)]pub new_account: Account<'info, NewAccount>,#[account(mut)]pub signer: Signer<'info>,pub system_program: Program<'info, System>,}#[account]pub struct NewAccount {data: u64}
プログラムのビルドとデプロイ
- プログラムコードをコンパイルする
$build
declare_id!()
で定義されたプログラムIDが更新されます。
- ウォレットにSOLを追加する(任意)
プログラムをデプロイするには、プログラムのオンチェーンアカウントにSOLが必要です。必要に応じて、ステップ3に進む前にウォレットにSOLを追加してください。
- プログラムをネットワークにデプロイする
$deploy
デプロイされると、プログラムのバイトコードは実行可能なprogram accountに保存されます。
注意: 必要に応じて、以下のスクリーンショットに示すように、左側のパネルにあるビルドとデプロイボタンを使用することもできます。
ビルドとデプロイ
プログラムをテストする
tests/anchor.test.ts
というテストファイルを開きます。このファイルは、クライアントからプログラムのinitialize
構造体を呼び出す方法を示しています。
// No imports needed: web3, anchor, pg and more are globally availabledescribe("Test", () => {it("initialize", async () => {// Generate keypair for the new accountconst newAccountKp = new web3.Keypair();// Send transactionconst data = new BN(42);const txHash = await pg.program.methods.initialize(data).accounts({newAccount: newAccountKp.publicKey,signer: pg.wallet.publicKey,systemProgram: web3.SystemProgram.programId}).signers([newAccountKp]).rpc();console.log(`Use 'solana confirm -v ${txHash}' to see the logs`);// Confirm transactionawait pg.connection.confirmTransaction(txHash);// Fetch the created accountconst newAccount = await pg.program.account.newAccount.fetch(newAccountKp.publicKey);console.log("On-chain data is:", newAccount.data.toString());// Check whether the data on-chain is equal to local 'data'assert(data.eq(newAccount.data));});});
- テストファイルを実行します
$test
- 出力に含まれるトランザクションハッシュ(
TxHash
)を保存します
(上記の例では、トランザクションハッシュは3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
です。)
注意: 必要に応じて、左側パネルのTest
ボタンを使用することもできます。
テストを実行
solana confirm -v [TxHash]
を実行してトランザクションログを表示します
$solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
- トランザクションの詳細を表示します
SolanaFMまたはSolana Explorerを開き、トランザクションハッシュを検索します。
Solana Explorer: ネットワーククラスターをSolana
Playgroundと一致させるためにdevnet
に設定してください。
プログラムを閉じる
オンチェーンプログラムに割り当てられたSOLを回収するためにプログラムを閉じます。そのためには、*rsdeclare_id!()
*マクロに保存されているプログラムアドレスを使用してsolana program close [ProgramID]
を実行します。
$solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r
プログラムは、アップグレード権限を持つアカウントによってのみ閉じたり更新したりすることができます。Playgroundウォレットは、プログラムがデプロイされるとき、自動的に各プログラムのアップグレード権限を持ちます。アップグレード権限が取り消されると、プログラムは不変になります。
おめでとうございます!Anchorを使用して最初のSolanaプログラムをビルドしてデプロイしました。
次のステップ
最初のプログラムをデプロイしたので、次は プログラム派生アドレスと クロスプログラム呼び出しについて探索する準備ができました。
Is this page helpful?