triggr/instructions/
withdraw_from_payer.rs1pub use crate::state::*;
2use anchor_lang::{
3 prelude::*,
4 system_program::{transfer, System, Transfer},
5};
6
7#[derive(Accounts)]
8pub struct WithdrawFromPayer<'info> {
9 #[account(mut)]
10 authority: Signer<'info>,
11
12 #[account(mut, seeds = ["payer".as_bytes(), authority.key().as_ref()], bump)]
13 payer_pda: SystemAccount<'info>,
14
15 system_program: Program<'info, System>,
16}
17
18pub fn handler(ctx: Context<WithdrawFromPayer>, lamports: u64) -> Result<()> {
19 let payer_seeds = &[
20 "payer".as_bytes(),
21 &ctx.accounts.authority.key().to_bytes()[..],
22 &[ctx.bumps.get("payer_pda").unwrap().clone()],
23 ];
24
25 let payer = &[&payer_seeds[..]];
26
27 let cpi_context = CpiContext::new_with_signer(
28 ctx.accounts.system_program.to_account_info(),
29 Transfer {
30 from: ctx.accounts.payer_pda.to_account_info(),
31 to: ctx.accounts.authority.to_account_info(),
32 },
33 payer,
34 );
35
36 transfer(cpi_context, lamports)?;
37
38 msg!("Withdrawl {} lamports", lamports);
39
40 Ok(())
41}