triad-protocol 0.1.4

Triad protocol, trade solana projects
Documentation
use crate::{ state::UserPosition, Position, Ticker };

use anchor_lang::prelude::*;

#[derive(Accounts)]
pub struct CreateUserPosition<'info> {
    #[account(mut)]
    pub signer: Signer<'info>,

    #[account(mut)]
    pub ticker: Account<'info, Ticker>,

    #[account(
        init,
        payer = signer,
        space = UserPosition::SPACE,
        seeds = [UserPosition::PREFIX_SEED, signer.key().as_ref(), ticker.key().as_ref()],
        bump
    )]
    pub user_position: Account<'info, UserPosition>,

    pub system_program: Program<'info, System>,
}

pub fn create_user_position(ctx: Context<CreateUserPosition>) -> Result<()> {
    let user_position: &mut Account<UserPosition> = &mut ctx.accounts.user_position;

    user_position.ts = Clock::get()?.unix_timestamp;
    user_position.bump = ctx.bumps.user_position;
    user_position.authority = *ctx.accounts.signer.key;
    user_position.ticker = *ctx.accounts.ticker.to_account_info().key;
    user_position.positions = [Position::default(); 3];

    Ok(())
}