light_registry/account_compression_cpi/
batch_update_address_tree.rs1use account_compression::{program::AccountCompression, utils::constants::CPI_AUTHORITY_PDA_SEED};
2use anchor_lang::prelude::*;
3
4use crate::ForesterEpochPda;
5
6#[derive(Accounts)]
7pub struct BatchUpdateAddressTree<'info> {
8 #[account(mut)]
10 pub registered_forester_pda: Option<Account<'info, ForesterEpochPda>>,
11 pub authority: Signer<'info>,
12 #[account(seeds = [CPI_AUTHORITY_PDA_SEED], bump)]
14 pub cpi_authority: AccountInfo<'info>,
15 pub registered_program_pda: AccountInfo<'info>,
17 pub account_compression_program: Program<'info, AccountCompression>,
18 pub log_wrapper: UncheckedAccount<'info>,
20 #[account(mut)]
22 pub merkle_tree: AccountInfo<'info>,
23}
24
25pub fn process_batch_update_address_tree(
26 ctx: &Context<BatchUpdateAddressTree>,
27 bump: u8,
28 data: Vec<u8>,
29) -> Result<()> {
30 let bump = &[bump];
31 let seeds = [CPI_AUTHORITY_PDA_SEED, bump];
32 let signer_seeds = &[&seeds[..]];
33 let accounts = account_compression::cpi::accounts::BatchUpdateAddressTree {
34 authority: ctx.accounts.cpi_authority.to_account_info(),
35 merkle_tree: ctx.accounts.merkle_tree.to_account_info(),
36 registered_program_pda: Some(ctx.accounts.registered_program_pda.clone()),
37 log_wrapper: ctx.accounts.log_wrapper.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_update_address_tree(cpi_ctx, data)
47}