triad_protocol/instructions/
create_user.rs1use 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}