triad-protocol 0.1.4

Triad protocol, trade solana projects
Documentation
use crate::{ errors::TriadProtocolError, User };

use anchor_lang::prelude::*;

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

    #[account(mut, seeds = [User::PREFIX_SEED, signer.key().as_ref()], bump)]
    pub user: Account<'info, User>,

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

pub fn swap_404(ctx: Context<Swap404>) -> Result<()> {
    let user: &mut Account<User> = &mut ctx.accounts.user;

    let ts = Clock::get()?.unix_timestamp;
    let is_24h = ts - user.first_swap < 24 * 60 * 60;

    let reached_limit = user.swaps_made >= user.swaps;

    if reached_limit && is_24h {
        user.swaps_made = 0;
        user.first_swap = ts;
    }

    if reached_limit && !is_24h {
        return Err(TriadProtocolError::SwapsReachedLimit.into());
    }

    user.swaps_made += 1;

    Ok(())
}