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