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<()> {
*ctx.accounts.user = User::new();
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(())
}