clockwork_scheduler/instructions/
queue_deposit.rs

1
2
3use {
4    crate::state::*,
5    anchor_lang::{prelude::*, system_program::{transfer, Transfer}, solana_program::system_program},
6};
7
8#[derive(Accounts)]
9#[instruction(amount: u64)]
10pub struct QueueDeposit<'info> {
11    #[account(mut)]
12    pub payer: Signer<'info>,
13
14    #[account(
15        mut,
16        seeds = [
17            SEED_QUEUE, 
18            queue.authority.key().as_ref(),
19            queue.name.as_bytes(),
20        ],
21        bump,
22    )]
23    pub queue: Account<'info, Queue>,
24
25    #[account()]
26    pub signer: Signer<'info>,
27
28    #[account(address = system_program::ID)]
29    pub system_program: Program<'info, System>,
30}
31
32pub fn handler(ctx: Context<QueueDeposit>, amount: u64) -> Result<()> {
33    // Get accounts
34    let payer = &mut ctx.accounts.payer;
35    let queue = &mut ctx.accounts.queue;
36    let system_program = &ctx.accounts.system_program;
37
38    // Transfer balance into the queue
39    transfer(
40        CpiContext::new(
41            system_program.to_account_info(),
42            Transfer {
43                from: payer.to_account_info(),
44                to: queue.to_account_info(),
45            },
46        ),
47        amount,
48    )?;
49
50    Ok(())
51}