triad_protocol/instructions/
create_user_position.rs

1use crate::{ state::UserPosition, Position, Ticker };
2
3use anchor_lang::prelude::*;
4
5#[derive(Accounts)]
6pub struct CreateUserPosition<'info> {
7    #[account(mut)]
8    pub signer: Signer<'info>,
9
10    #[account(mut)]
11    pub ticker: Account<'info, Ticker>,
12
13    #[account(
14        init,
15        payer = signer,
16        space = UserPosition::SPACE,
17        seeds = [UserPosition::PREFIX_SEED, signer.key().as_ref(), ticker.key().as_ref()],
18        bump
19    )]
20    pub user_position: Account<'info, UserPosition>,
21
22    pub system_program: Program<'info, System>,
23}
24
25pub fn create_user_position(ctx: Context<CreateUserPosition>) -> Result<()> {
26    let user_position: &mut Account<UserPosition> = &mut ctx.accounts.user_position;
27
28    user_position.ts = Clock::get()?.unix_timestamp;
29    user_position.bump = ctx.bumps.user_position;
30    user_position.authority = *ctx.accounts.signer.key;
31    user_position.ticker = *ctx.accounts.ticker.to_account_info().key;
32    user_position.positions = [Position::default(); 3];
33
34    Ok(())
35}