triad_protocol/instructions/
create_user.rs

1use crate::{ state::User, CreateUserArgs };
2use anchor_lang::prelude::*;
3
4#[derive(Accounts)]
5#[instruction(args: CreateUserArgs)]
6pub struct CreateUser<'info> {
7    #[account(mut)]
8    pub signer: Signer<'info>,
9
10    #[account(mut)]
11    pub referral: Account<'info, User>,
12
13    #[account(
14        init,
15        payer = signer,
16        space = User::SPACE,
17        seeds = [User::PREFIX_SEED, signer.key().as_ref()],
18        bump
19    )]
20    pub user: Account<'info, User>,
21
22    pub system_program: Program<'info, System>,
23}
24
25pub fn create_user(ctx: Context<CreateUser>, args: CreateUserArgs) -> Result<()> {
26    let user: &mut Account<User> = &mut ctx.accounts.user;
27    let referral: &mut Account<User> = &mut ctx.accounts.referral;
28
29    user.ts = Clock::get()?.unix_timestamp;
30    user.bump = ctx.bumps.user;
31    user.name = args.name;
32    user.authority = *ctx.accounts.signer.key;
33    user.referral = referral.key();
34    user.swaps = 0;
35    user.swaps_made = 0;
36
37    referral.referred += 1;
38
39    Ok(())
40}