triad_protocol/instructions/
swap_404.rs1use crate::{ errors::TriadProtocolError, User };
2
3use anchor_lang::prelude::*;
4
5#[derive(Accounts)]
6pub struct Swap404<'info> {
7 #[account(mut)]
8 pub signer: Signer<'info>,
9
10 #[account(mut, seeds = [User::PREFIX_SEED, signer.key().as_ref()], bump)]
11 pub user: Account<'info, User>,
12
13 pub system_program: Program<'info, System>,
14}
15
16pub fn swap_404(ctx: Context<Swap404>) -> Result<()> {
17 let user: &mut Account<User> = &mut ctx.accounts.user;
18
19 let ts = Clock::get()?.unix_timestamp;
20 let is_24h = ts - user.first_swap < 24 * 60 * 60;
21
22 let reached_limit = user.swaps_made >= user.swaps;
23
24 if reached_limit && is_24h {
25 user.swaps_made = 0;
26 user.first_swap = ts;
27 }
28
29 if reached_limit && !is_24h {
30 return Err(TriadProtocolError::SwapsReachedLimit.into());
31 }
32
33 user.swaps_made += 1;
34
35 Ok(())
36}