light_compressed_pda/invoke_cpi/
processor.rs1use super::{process_cpi_context::process_cpi_context, verify_signer::cpi_signer_checks};
2use crate::{
3 invoke::processor::process, invoke_cpi::instruction::InvokeCpiInstruction,
4 sdk::accounts::SignerAccounts, InstructionDataInvoke, InstructionDataInvokeCpi,
5};
6pub use anchor_lang::prelude::*;
7use light_heap::{bench_sbf_end, bench_sbf_start};
8
9pub fn process_invoke_cpi<'a, 'b, 'c: 'info + 'b, 'info>(
10 mut ctx: Context<'a, 'b, 'c, 'info, InvokeCpiInstruction<'info>>,
11 inputs: InstructionDataInvokeCpi,
12) -> Result<()> {
13 bench_sbf_start!("cpda_cpi_signer_checks");
14 cpi_signer_checks(
15 &inputs.signer_seeds,
16 &ctx.accounts.invoking_program.key(),
17 &ctx.accounts.get_authority().key(),
18 &inputs,
19 )?;
20 bench_sbf_end!("cpda_cpi_signer_checks");
21
22 bench_sbf_start!("cpda_process_cpi_context");
23 let inputs = match process_cpi_context(inputs, &mut ctx) {
24 Ok(Some(inputs)) => inputs,
25 Ok(None) => return Ok(()),
26 Err(err) => return Err(err),
27 };
28 bench_sbf_end!("cpda_process_cpi_context");
29 bench_sbf_start!("cpda_InstructionDataInvoke");
30 let data = InstructionDataInvoke {
32 input_compressed_accounts_with_merkle_context: inputs
33 .input_compressed_accounts_with_merkle_context,
34 output_compressed_accounts: inputs.output_compressed_accounts,
35 relay_fee: inputs.relay_fee,
36 input_root_indices: inputs.input_root_indices,
37 output_state_merkle_tree_account_indices: inputs.output_state_merkle_tree_account_indices,
38 proof: inputs.proof,
39 new_address_params: inputs.new_address_params,
40 compression_lamports: inputs.compression_lamports,
41 is_compress: inputs.is_compress,
42 };
43 bench_sbf_end!("cpda_InstructionDataInvoke");
44 process(data, Some(ctx.accounts.invoking_program.key()), ctx)
45}