light_system_program/instructions/
invoke_cpi.rs1use account_compression::program::AccountCompression;
2use anchor_lang::{prelude::*, solana_program::pubkey::Pubkey, system_program::System};
3
4use crate::{
5 account_traits::{InvokeAccounts, SignerAccounts},
6 constants::SOL_POOL_PDA_SEED,
7 cpi_context_account::CpiContextAccount,
8};
9
10#[derive(Accounts)]
11pub struct InvokeCpiInstruction<'info> {
12 #[account(mut)]
14 pub fee_payer: Signer<'info>,
15 pub authority: Signer<'info>,
16 pub registered_program_pda: AccountInfo<'info>,
18 pub noop_program: UncheckedAccount<'info>,
20 pub account_compression_authority: UncheckedAccount<'info>,
22 pub account_compression_program: Program<'info, AccountCompression>,
24 pub invoking_program: UncheckedAccount<'info>,
26 #[account(
27 mut,
28 seeds = [SOL_POOL_PDA_SEED], bump
29 )]
30 pub sol_pool_pda: Option<AccountInfo<'info>>,
31 #[account(mut)]
32 pub decompression_recipient: Option<AccountInfo<'info>>,
33 pub system_program: Program<'info, System>,
34 #[account(mut)]
35 pub cpi_context_account: Option<Account<'info, CpiContextAccount>>,
36}
37
38impl<'info> SignerAccounts<'info> for InvokeCpiInstruction<'info> {
39 fn get_fee_payer(&self) -> &Signer<'info> {
40 &self.fee_payer
41 }
42
43 fn get_authority(&self) -> &Signer<'info> {
44 &self.authority
45 }
46}
47
48impl<'info> InvokeAccounts<'info> for InvokeCpiInstruction<'info> {
49 fn get_registered_program_pda(&self) -> &AccountInfo<'info> {
50 &self.registered_program_pda
51 }
52
53 fn get_noop_program(&self) -> &UncheckedAccount<'info> {
54 &self.noop_program
55 }
56
57 fn get_account_compression_authority(&self) -> &UncheckedAccount<'info> {
58 &self.account_compression_authority
59 }
60
61 fn get_account_compression_program(&self) -> &Program<'info, AccountCompression> {
62 &self.account_compression_program
63 }
64
65 fn get_system_program(&self) -> &Program<'info, System> {
66 &self.system_program
67 }
68
69 fn get_sol_pool_pda(&self) -> Option<&AccountInfo<'info>> {
70 self.sol_pool_pda.as_ref()
71 }
72
73 fn get_decompression_recipient(&self) -> Option<&AccountInfo<'info>> {
74 self.decompression_recipient.as_ref()
75 }
76}