問題一覧に戻る
中級Solanaプログラミング基礎
問題27: Anchorのアカウント構造体
Anchorでアカウント構造体を定義する方法を学びます。#[derive(Accounts)]属性は、インストラクションに必要なアカウントを指定します。各フィールドは特定の型と制約を持つ個別のアカウントを表します。Anchorはフィールドタイプ(例:Signer'<''info'>')と制約(例:#[account(mut)])を通じて、一般的なセキュリティチェックを自動的に処理します。#[account]属性は、プログラムが作成して所有するカスタムデータ構造を定義します。
use anchor_lang::prelude::*;
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);
Ok(())
}
}
// このインストラクションに必要なアカウントを定義
#[()]
pub struct Initialize<'info> {
// このプログラムが所有する新しいアカウントを作成して初期化
#[account(, payer = signer, space = 8 + 8)]
pub new_account: Account<'info, NewAccount>,
// トランザクションに署名し、手数料を支払うアカウント
#[account()]
pub signer: <'info>,
pub system_program: Program<'info, System>,
}
// プログラムが所有するアカウントのデータ構造を定義
#[)
pub struct NewAccount {
data: u64
}