account_compression/processor/
insert_into_queues.rs1use anchor_lang::prelude::*;
2use light_compressed_account::instruction_data::insert_into_queues::InsertIntoQueuesInstructionData;
3use light_zero_copy::borsh::Deserialize;
4
5use super::{
6 insert_addresses::insert_addresses, insert_leaves::insert_leaves,
7 insert_nullifiers::insert_nullifiers,
8};
9use crate::{context::AcpAccount, errors::AccountCompressionErrorCode, GenericInstruction};
10
11pub fn process_insert_into_queues<'a, 'b, 'c: 'info, 'info>(
12 ctx: &Context<'a, 'b, 'c, 'info, GenericInstruction<'info>>,
13 bytes: Vec<u8>,
14) -> Result<()> {
15 let (inputs, _) = InsertIntoQueuesInstructionData::zero_copy_at(bytes.as_slice())
16 .map_err(ProgramError::from)?;
17 let authority = ctx.accounts.authority.to_account_info();
18 let mut accounts = AcpAccount::from_account_infos(
23 ctx.remaining_accounts,
24 &authority,
25 inputs.is_invoked_by_program(),
26 inputs.bump,
27 )?;
28 if inputs.nullifiers.is_empty() && inputs.addresses.is_empty() && inputs.leaves.is_empty() {
29 return Err(AccountCompressionErrorCode::InputElementsEmpty.into());
30 }
31
32 let current_slot = Clock::get()?.slot;
33 #[cfg(feature = "bench-sbf")]
38 light_heap::bench_sbf_start!("insert_nullifiers");
39 insert_nullifiers(
40 inputs.num_queues,
41 inputs.tx_hash,
42 inputs.nullifiers.as_slice(),
43 &mut accounts,
44 ¤t_slot,
45 )?;
46 #[cfg(feature = "bench-sbf")]
47 light_heap::bench_sbf_end!("insert_nullifiers");
48 #[cfg(feature = "bench-sbf")]
49 light_heap::bench_sbf_start!("append_leaves");
50 insert_leaves(
51 inputs.leaves.as_slice(),
52 inputs.start_output_appends,
53 inputs.num_output_queues,
54 &mut accounts,
55 ¤t_slot,
56 )?;
57 #[cfg(feature = "bench-sbf")]
58 light_heap::bench_sbf_end!("append_leaves");
59
60 #[cfg(feature = "bench-sbf")]
61 light_heap::bench_sbf_start!("insert_addresses");
62 insert_addresses(
63 inputs.num_address_queues,
64 inputs.addresses.as_slice(),
65 &mut accounts,
66 ¤t_slot,
67 )?;
68
69 #[cfg(feature = "bench-sbf")]
70 light_heap::bench_sbf_end!("insert_addresses");
71 Ok(())
72}