light_registry/account_compression_cpi/
batch_append.rs

1use account_compression::{program::AccountCompression, utils::constants::CPI_AUTHORITY_PDA_SEED};
2use anchor_lang::prelude::*;
3
4use crate::ForesterEpochPda;
5
6#[derive(Accounts)]
7pub struct BatchAppend<'info> {
8    /// CHECK: only eligible foresters can append leaves. Is checked in ix.
9    #[account(mut)]
10    pub registered_forester_pda: Option<Account<'info, ForesterEpochPda>>,
11    pub authority: Signer<'info>,
12    /// CHECK: (seed constraints) used to invoke account compression program via cpi.
13    #[account(seeds = [CPI_AUTHORITY_PDA_SEED], bump)]
14    pub cpi_authority: AccountInfo<'info>,
15    /// CHECK: (account compression program) group access control.
16    pub registered_program_pda: AccountInfo<'info>,
17    pub account_compression_program: Program<'info, AccountCompression>,
18    /// CHECK: (account compression program) when emitting event.
19    pub log_wrapper: UncheckedAccount<'info>,
20    /// CHECK: (account compression program).
21    #[account(mut)]
22    pub merkle_tree: AccountInfo<'info>,
23    /// CHECK: (account compression program).
24    #[account(mut)]
25    pub output_queue: AccountInfo<'info>,
26}
27
28pub fn process_batch_append(ctx: &Context<BatchAppend>, bump: u8, data: Vec<u8>) -> Result<()> {
29    let bump = &[bump];
30    let seeds = [CPI_AUTHORITY_PDA_SEED, bump];
31    let signer_seeds = &[&seeds[..]];
32    let accounts = account_compression::cpi::accounts::BatchAppend {
33        authority: ctx.accounts.cpi_authority.to_account_info(),
34        merkle_tree: ctx.accounts.merkle_tree.to_account_info(),
35        registered_program_pda: Some(ctx.accounts.registered_program_pda.clone()),
36        log_wrapper: ctx.accounts.log_wrapper.to_account_info(),
37        output_queue: ctx.accounts.output_queue.to_account_info(),
38    };
39
40    let cpi_ctx = CpiContext::new_with_signer(
41        ctx.accounts.account_compression_program.to_account_info(),
42        accounts,
43        signer_seeds,
44    );
45
46    account_compression::cpi::batch_append(cpi_ctx, data)
47}