初めてのソラナプログラムをデプロイする

Anchorフレームワークを使用して、最初のプログラムをソラナブロックチェーンに構築、デプロイ、テストしましょう。このガイドは、ソラナプレイグラウンドに慣れるのに役立ち、Program Derived Address(PDA)やCross Program Invocation(CPI)を使用する準備をするのに役立ちます。

Anchorプロジェクトを作成する

  1. ウェブブラウザでソラナプレイグラウンドを開きます
  2. 左側のパネルで**+ Create a new project**をクリックします
  3. Project nameを入力します
  4. フレームワークとして**Anchor (Rust)**を選択します
  5. Createをクリックします

新規プロジェクト新規プロジェクト

src/lib.rsソースファイルが開きます。これには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
}

プログラムのビルドとデプロイ

  1. プログラムコードをコンパイルする
Terminal
$
build

declare_id!() で定義されたプログラムIDが更新されます。

  1. ウォレットにSOLを追加する(任意)

プログラムをデプロイするには、プログラムのオンチェーンアカウントにSOLが必要です。必要に応じて、ステップ3に進む前にウォレットにSOLを追加してください。

  1. プログラムをネットワークにデプロイする
Terminal
$
deploy

デプロイされると、プログラムのバイトコードは実行可能なprogram accountに保存されます。

注意: 必要に応じて、以下のスクリーンショットに示すように、左側のパネルにあるビルドデプロイボタンを使用することもできます。

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

プログラムをテストする

  1. 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));
});
});
  1. テストファイルを実行します
Terminal
$
test
  1. 出力に含まれるトランザクションハッシュ(TxHash)を保存します

(上記の例では、トランザクションハッシュは3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5ucです。)

注意: 必要に応じて、左側パネルのTestボタンを使用することもできます。

テストを実行テストを実行

  1. solana confirm -v [TxHash]を実行してトランザクションログを表示します
Terminal
$
solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
  1. トランザクションの詳細を表示します

SolanaFMまたはSolana Explorerを開き、トランザクションハッシュを検索します。

Solana Explorer: ネットワーククラスターをSolana Playgroundと一致させるためにdevnetに設定してください。

プログラムを閉じる

オンチェーンプログラムに割り当てられたSOLを回収するためにプログラムを閉じます。そのためには、*rsdeclare_id!()*マクロに保存されているプログラムアドレスを使用してsolana program close [ProgramID]を実行します。

Terminal
$
solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r

プログラムは、アップグレード権限を持つアカウントによってのみ閉じたり更新したりすることができます。Playgroundウォレットは、プログラムがデプロイされるとき、自動的に各プログラムのアップグレード権限を持ちます。アップグレード権限が取り消されると、プログラムは不変になります。

おめでとうございます!Anchorを使用して最初のSolanaプログラムをビルドしてデプロイしました。

次のステップ

最初のプログラムをデプロイしたので、次は プログラム派生アドレスクロスプログラム呼び出しについて探索する準備ができました。

Is this page helpful?

目次

ページを編集