問題一覧に戻る
中級Solanaプログラミング基礎
問題26: Anchorプログラムのインストラクション

Anchorでプログラムのインストラクションを定義する方法を学びます。#[program]属性は、インストラクションハンドラーを含むモジュールをマークします。このモジュール内の各パブリック関数は、クライアントアプリケーションから呼び出せるインストラクションになります。Context型はアカウントや他のインストラクションデータへのアクセスを提供します。

use anchor_lang::prelude::*;

declare_id!("11111111111111111111111111111111");

// このアトリビュートはAnchorプログラムのエントリーポイントを定義します
#[]
mod hello_anchor {
// 親モジュールからすべてのアイテムをインポート
use ::*;

// Contextとカスタムdataパラメータを受け取るinitializeインストラクションを定義
pub fn initialize(ctx: <Initialize>, data: u64) -> Result<()> {
// コンテキストからアカウントデータにアクセス
..new_account.data = data;
msg!("Changed data to: {}!", data);
Ok(())
}
}

#[derive(Accounts)]
pub struct Initialize<'info> {
#[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
}