cronos_scheduler/instructions/
queue_start.rs1use {
2 crate::{state::*, errors::CronosError},
3 anchor_lang::{prelude::*, solana_program::sysvar},
4};
5
6#[derive(Accounts)]
7pub struct QueueStart<'info> {
8 #[account(address = sysvar::clock::ID)]
9 pub clock: Sysvar<'info, Clock>,
10
11 #[account(mut)]
12 pub delegate: Signer<'info>,
13
14 #[account(
15 seeds = [
16 SEED_MANAGER,
17 manager.authority.as_ref()
18 ],
19 bump,
20 )]
21 pub manager: Account<'info, Manager>,
22
23 #[account(
24 mut,
25 seeds = [
26 SEED_QUEUE,
27 queue.manager.as_ref(),
28 queue.id.to_be_bytes().as_ref(),
29 ],
30 bump,
31 has_one = manager,
32 constraint = queue.exec_at.is_some() && queue.exec_at <= Some(clock.unix_timestamp) @ CronosError::QueueNotDue,
33 constraint = queue.status == QueueStatus::Pending @ CronosError::InvalidQueueStatus,
34 )]
35 pub queue: Account<'info, Queue>,
36}
37
38pub fn handler(ctx: Context<QueueStart>) -> Result<()> {
39 let queue = &mut ctx.accounts.queue;
40 queue.start()
41}