初めての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)が含まれており、以下のことを行います:

  • 入力として*rsdata: u64*パラメータを必要とします
  • 新しいアカウントを作成します
  • アカウントのデータに*rsdata: u64*パラメータの値を保存します
  • トランザクションのプログラムログにメッセージを記録します
lib.rs
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 logs
Ok(())
}
}
#[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 コマンドはプログラムをコンパイルします。プログラムのバイトコードはデプロイ時に実行可能なプログラムアカウントに格納されます。

Terminal
$
build

Solana Playgroundは declare_id!() のアドレスを更新します。このアドレスはプログラムのオンチェーンアドレス(プログラムID)を表します。

プログラムをビルドした後、ターミナルで deploy を実行して、プログラムをネットワーク(デフォルトではdevnet)にデプロイします。プログラムのデプロイには、プログラムを格納するオンチェーンアカウントにSOLを割り当てる必要があります。

デプロイ前に、十分なSOLがあることを確認してください。PlaygroundのターミナルでSOLを取得するには solana airdrop 5 を実行するか、Webフォーセットを使用します。

Terminal
$
deploy

左側のパネルにある Build ボタンと Deploy ボタンを使用することもできます。

ビルドとデプロイビルドとデプロイ

プログラムをデプロイした後、そのプログラムの命令を呼び出すことができます。

プログラムのテスト

スターターコードには tests/anchor.test.ts にテストファイルが含まれています。このファイルは、クライアントからプログラムの initialize 命令を呼び出す方法を示しています。

anchor.test.ts
// No imports needed: web3, anchor, pg and more are globally available
describe("Test", () => {
it("initialize", async () => {
// Generate keypair for the new account
const newAccountKp = new web3.Keypair();
// Send transaction
const 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 transaction
await pg.connection.confirmTransaction(txHash);
// Fetch the created account
const 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 を実行します。

Terminal
$
test

テストが正常に合格したことを確認する出力を探してください。

左側のパネルにある Test ボタンを使用することもできます。

テストの実行テストの実行

テスト出力からトランザクションハッシュ(署名)を指定して solana confirm -v コマンドを実行することで、トランザクションログを表示できます:

Terminal
$
solana confirm -v [TxHash]

例えば:

Terminal
$
solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc

トランザクション署名(ハッシュ)を検索することで、SolanaFMSolana Explorerでトランザクションの詳細を確認することもできます。

使用するExplorerのクラスター(ネットワーク)接続をSolana Playgroundに合わせて更新することを忘れないでください。Solana Playgroundはデフォルトでdevnetクラスターを使用します。

プログラムを閉じる

最後に、プログラムを閉じることで、オンチェーンプログラムに割り当てられたSOLを完全に回収することができます。

以下のコマンドを実行し、*rsdeclare_id!()*で見つかるプログラムアドレスを指定することでプログラムを閉じることができます:

Terminal
$
solana program close [ProgramID]

例えば:

Terminal
$
solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r

おめでとうございます。Anchorフレームワークを使用して最初のSolanaプログラムを構築しデプロイしました。

Is this page helpful?

目次

ページを編集