cronos_scheduler/instructions/
queue_new.rs1use {
2 crate::state::*,
3 anchor_lang::{prelude::*, solana_program::{system_program, sysvar}},
4 std::mem::size_of
5};
6
7#[derive(Accounts)]
8#[instruction(schedule: String)]
9pub struct QueueNew<'info> {
10 #[account()]
11 pub authority: Signer<'info>,
12
13 #[account(address = sysvar::clock::ID)]
14 pub clock: Sysvar<'info, Clock>,
15
16 #[account(
17 init,
18 seeds = [
19 SEED_FEE,
20 queue.key().as_ref()
21 ],
22 bump,
23 payer = payer,
24 space = 8 + size_of::<Fee>(),
25 )]
26 pub fee: Account<'info, Fee>,
27
28 #[account(
29 mut,
30 seeds = [
31 SEED_MANAGER,
32 manager.authority.as_ref()
33 ],
34 bump,
35 has_one = authority,
36 )]
37 pub manager: Account<'info, Manager>,
38
39 #[account(mut)]
40 pub payer: Signer<'info>,
41
42 #[account(
43 init,
44 seeds = [
45 SEED_QUEUE,
46 manager.key().as_ref(),
47 manager.queue_count.to_be_bytes().as_ref(),
48 ],
49 bump,
50 payer = payer,
51 space = 8 + size_of::<Queue>(),
52 )]
53 pub queue: Account<'info, Queue>,
54
55 #[account(address = system_program::ID)]
56 pub system_program: Program<'info, System>,
57}
58
59pub fn handler(ctx: Context<QueueNew>, schedule: String) -> Result<()> {
60 let clock = &ctx.accounts.clock;
61 let fee = &mut ctx.accounts.fee;
62 let manager = &mut ctx.accounts.manager;
63 let queue = &mut ctx.accounts.queue;
64
65 fee.new(queue.key())?;
66 queue.new(clock, manager, schedule)?;
67
68 Ok(())
69}