light_registry/account_compression_cpi/
migrate_state.rs1use account_compression::{
2 program::AccountCompression, utils::constants::CPI_AUTHORITY_PDA_SEED, StateMerkleTreeAccount,
3};
4use anchor_lang::prelude::*;
5
6use crate::epoch::register_epoch::ForesterEpochPda;
7
8#[derive(Accounts)]
9pub struct MigrateState<'info> {
10 #[account(mut)]
12 pub registered_forester_pda: Account<'info, ForesterEpochPda>,
13 pub authority: Signer<'info>,
14 #[account(seeds = [CPI_AUTHORITY_PDA_SEED], bump)]
16 pub cpi_authority: AccountInfo<'info>,
17 pub registered_program_pda: AccountInfo<'info>,
19 pub account_compression_program: Program<'info, AccountCompression>,
20 pub log_wrapper: UncheckedAccount<'info>,
22 #[account(mut)]
24 pub merkle_tree: AccountLoader<'info, StateMerkleTreeAccount>,
25 #[account(mut)]
27 pub output_queue: AccountInfo<'info>,
28}
29
30pub fn process_migrate_state(
31 ctx: &Context<MigrateState>,
32 bump: u8,
33 input: account_compression::MigrateLeafParams,
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::MigrateState {
39 authority: ctx.accounts.cpi_authority.to_account_info(),
40 registered_program_pda: Some(ctx.accounts.registered_program_pda.to_account_info()),
41 log_wrapper: ctx.accounts.log_wrapper.to_account_info(),
42 merkle_tree: ctx.accounts.merkle_tree.to_account_info(),
43 output_queue: ctx.accounts.output_queue.to_account_info(),
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::migrate_state(cpi_ctx, input)
52}