triggr-program 0.1.1

Created with Anchor
Documentation
pub use crate::state::*;
use anchor_lang::{
    prelude::*,
    system_program::{transfer, Transfer},
};

#[derive(Accounts)]
pub struct CreateUser<'info> {
    #[account(mut)]
    authority: Signer<'info>,

    #[account(init, seeds = ["user".as_bytes(), &authority.key().to_bytes()[..]], bump, space = User::MIN_SIZE , payer = authority)]
    user: Account<'info, User>,

    #[account(mut, seeds = ["payer".as_bytes(), &authority.key().to_bytes()[..]], bump)]
    payer_pda: SystemAccount<'info>,

    system_program: Program<'info, System>,
}

pub fn handler(ctx: Context<CreateUser>, lamports: u64) -> Result<()> {
    // init user storage account
    *ctx.accounts.user = User::new();

    // init user's payer account
    let cpi_context = CpiContext::new(
        ctx.accounts.system_program.to_account_info(),
        Transfer {
            from: ctx.accounts.authority.to_account_info(),
            to: ctx.accounts.payer_pda.to_account_info(),
        },
    );

    transfer(cpi_context, lamports)?;

    Ok(())
}