light_registry/account_compression_cpi/
initialize_batched_state_tree.rs1use account_compression::{program::AccountCompression, utils::constants::CPI_AUTHORITY_PDA_SEED};
2use anchor_lang::prelude::*;
3use light_system_program::program::LightSystemProgram;
4
5use crate::protocol_config::state::ProtocolConfigPda;
6
7#[derive(Accounts)]
8pub struct InitializeBatchedStateMerkleTreeAndQueue<'info> {
9 #[account(mut)]
10 pub authority: Signer<'info>,
11 #[account(mut)]
13 pub merkle_tree: AccountInfo<'info>,
14 #[account(mut)]
16 pub queue: AccountInfo<'info>,
17 pub registered_program_pda: AccountInfo<'info>,
19 #[account(mut, seeds = [CPI_AUTHORITY_PDA_SEED], bump)]
21 pub cpi_authority: AccountInfo<'info>,
22 pub account_compression_program: Program<'info, AccountCompression>,
23 pub protocol_config_pda: Account<'info, ProtocolConfigPda>,
24 #[account(mut)]
26 pub cpi_context_account: AccountInfo<'info>,
27 pub light_system_program: Program<'info, LightSystemProgram>,
28}
29
30pub fn process_initialize_batched_state_merkle_tree(
31 ctx: &Context<InitializeBatchedStateMerkleTreeAndQueue>,
32 bump: u8,
33 params: Vec<u8>,
34) -> Result<()> {
35 let bump = &[bump];
36 let seeds = [CPI_AUTHORITY_PDA_SEED, bump];
37 let signer_seeds = &[&seeds[..]];
38 let accounts = account_compression::cpi::accounts::InitializeBatchedStateMerkleTreeAndQueue {
39 authority: ctx.accounts.cpi_authority.to_account_info(),
40 merkle_tree: ctx.accounts.merkle_tree.to_account_info(),
41 queue: ctx.accounts.queue.to_account_info(),
42 registered_program_pda: Some(ctx.accounts.registered_program_pda.clone()),
43 };
44
45 let cpi_ctx = CpiContext::new_with_signer(
46 ctx.accounts.account_compression_program.to_account_info(),
47 accounts,
48 signer_seeds,
49 );
50
51 account_compression::cpi::initialize_batched_state_merkle_tree(cpi_ctx, params)
52}