初めてのSolanaプログラムをデプロイする
このセクションでは、Anchorフレームワークを使用して、シンプルなSolanaプログラム(スマートコントラクト)を構築、デプロイ、テストします。最終的には、あなたの最初のプログラムをSolanaブロックチェーンにデプロイすることになります。
このセクションの目的は、Solana Playgroundに慣れることに焦点を当てています。このガイドでは、Program Derived Address (PDA)とCross-Program Invocation (CPI)のセクションでより詳細な例を説明しています。詳細については、Solana上のプログラムページを参照してください。
Anchorプロジェクトの作成
まず、新しいブラウザタブでhttps://beta.solpg.ioを開きます。
-
左側のパネルにある「Create a new project」ボタンをクリックします。
-
プロジェクト名を入力し、フレームワークとしてAnchorを選択してから、「Create」ボタンをクリックします。
新規プロジェクト
src/lib.rs
ファイルにプログラムコードが含まれた新しいプロジェクトが表示されます。
この基本的なSolanaプログラムは、新しいアカウントを作成し、その中に数値を保存します。このプログラムには1つの命令(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
を実行します。build
コマンドはプログラムをコンパイルします。プログラムのバイトコードはデプロイ時に実行可能なプログラムアカウントに格納されます。
$build
Solana Playgroundは declare_id!()
のアドレスを更新します。このアドレスはプログラムのオンチェーンアドレス(プログラムID)を表します。
プログラムをビルドした後、ターミナルで deploy
を実行して、プログラムをネットワーク(デフォルトではdevnet)にデプロイします。プログラムのデプロイには、プログラムを格納するオンチェーンアカウントにSOLを割り当てる必要があります。
デプロイ前に、十分なSOLがあることを確認してください。PlaygroundのターミナルでSOLを取得するには
solana airdrop 5
を実行するか、Webフォーセットを使用します。
$deploy
左側のパネルにある Build
ボタンと Deploy
ボタンを使用することもできます。
ビルドとデプロイ
プログラムをデプロイした後、そのプログラムの命令を呼び出すことができます。
プログラムのテスト
スターターコードには 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
を実行します。
$test
テストが正常に合格したことを確認する出力を探してください。
左側のパネルにある Test
ボタンを使用することもできます。
テストの実行
テスト出力からトランザクションハッシュ(署名)を指定して solana confirm -v
コマンドを実行することで、トランザクションログを表示できます:
$solana confirm -v [TxHash]
例えば:
$solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
トランザクション署名(ハッシュ)を検索することで、SolanaFMやSolana Explorerでトランザクションの詳細を確認することもできます。
使用するExplorerのクラスター(ネットワーク)接続をSolana Playgroundに合わせて更新することを忘れないでください。Solana Playgroundはデフォルトでdevnetクラスターを使用します。
プログラムを閉じる
最後に、プログラムを閉じることで、オンチェーンプログラムに割り当てられたSOLを完全に回収することができます。
以下のコマンドを実行し、*rsdeclare_id!()
*で見つかるプログラムアドレスを指定することでプログラムを閉じることができます:
$solana program close [ProgramID]
例えば:
$solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r
おめでとうございます。Anchorフレームワークを使用して最初のSolanaプログラムを構築しデプロイしました。
Is this page helpful?