lesson-3_SolanaプログラムにGIFカウンターを実装しよう!
今のところ、作成したプログラムでは何も起こりません。
データを保存するための変更を加えていきましょう!
今回作成するWebアプリケーションは、誰でもGIFを投稿することができます。
そのため、total_gifs
でGIFの投稿数の管理ができるとかなり便利です。
🥞 GIF カウントを保存する
GIFの投稿数を保存するための変数total_gifs
を定義し、誰かが新しくGIFを投稿した際に、total_gifs
の数値を+1
すれば良いだけです。
しかし、SolanaはEthereumとは異なり、「ステートレス」であるため、データを永久に保持することはできません。
ただし、Solanaは「アカウント」とやり取りができます。
Solanaの「アカウント」は「プログラムが読み書きできるファイル」のことを指します。
「ウォレットでアカウントを作成する」といった際に利用される「アカウント」とは異なるので、紛らわしいですが注意しましょう。
アカウントについての詳細はこちらを参照してください。
それでは、lib.rs
を以下のとおり修正していきましょう。
use anchor_lang::prelude::*;
declare_id!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");
#[program]
pub mod myepicproject {
use super::*;
pub fn start_stuff_off(ctx: Context<StartStuffOff>) -> Result <()> {
// アカウントへのリファレンスを取得します。
let base_account = &mut ctx.accounts.base_account;
// total_gifsを初期化します。
base_account.total_gifs = 0;
Ok(())
}
}
// StartStuffOffコンテキストに特定の変数をアタッチします。
#[derive(Accounts)]
pub struct StartStuffOff<'info> {
#[account(init, payer = user, space = 9000)]
pub base_account: Account<'info, BaseAccount>,
#[account(mut)]
pub user: Signer<'info>,
pub system_program: Program <'info, System>,
}
// 指定のアカウントに何を保存したいかをSolanaに伝えます。
#[account]
pub struct BaseAccount {
pub total_gifs: u64,
}