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