tachyon_math_library/instructions/
initialize.rs

1use std::mem::size_of;
2
3use anchor_lang::prelude::*;
4
5use crate::error::ErrorCode;
6use crate::state::*;
7
8#[derive(Accounts)]
9pub struct Initialize<'info> {
10    #[account(mut)]
11    pub admin: Signer<'info>,
12    #[account(
13        init,
14        seeds = [FUNCTIONS_SEED],
15        bump,
16        payer = admin,
17        space = 8 + size_of::<Functions>()
18    )]
19    pub functions: Account<'info, Functions>,
20    pub rent: Sysvar<'info, Rent>,
21    pub system_program: Program<'info, System>,
22}
23
24pub fn handler(ctx: Context<Initialize>) -> Result<()> {
25    if ctx.accounts.functions.initialized {
26        return err!(ErrorCode::ProgramAlreadyInitialized);
27    }
28
29    ctx.accounts.functions.admin = ctx.accounts.admin.key();
30    ctx.accounts.functions.initialized = true;
31
32    Ok(())
33}