account_compression/processor/
initialize_nullifier_queue.rs1use anchor_lang::{prelude::*, solana_program::pubkey::Pubkey};
2use light_merkle_tree_metadata::{access::AccessMetadata, rollover::RolloverMetadata, QueueType};
3
4use crate::{queue_from_bytes_zero_copy_init, QueueAccount};
5
6pub fn process_initialize_nullifier_queue<'a, 'b, 'c: 'info, 'info>(
7 nullifier_queue_account_info: AccountInfo<'info>,
8 nullifier_queue_account_loader: &'a AccountLoader<'info, QueueAccount>,
9 index: u64,
10 owner: Pubkey,
11 program_owner: Option<Pubkey>,
12 forester: Option<Pubkey>,
13 associated_merkle_tree: Pubkey,
14 capacity: u16,
15 sequence_threshold: u64,
16 rollover_threshold: Option<u64>,
17 close_threshold: Option<u64>,
18 network_fee: u64,
19) -> Result<()> {
20 {
21 let mut nullifier_queue = nullifier_queue_account_loader.load_init()?;
22 let rollover_meta_data = RolloverMetadata {
23 index,
24 rollover_threshold: rollover_threshold.unwrap_or_default(),
25 close_threshold: close_threshold.unwrap_or(u64::MAX),
26 rolledover_slot: u64::MAX,
27 network_fee,
28 rollover_fee: 0,
32 additional_bytes: 0,
33 };
34
35 nullifier_queue.init(
36 AccessMetadata {
37 owner: owner.into(),
38 program_owner: program_owner.unwrap_or_default().into(),
39 forester: forester.unwrap_or_default().into(),
40 },
41 rollover_meta_data,
42 associated_merkle_tree,
43 QueueType::NullifierV1,
44 );
45
46 drop(nullifier_queue);
47 }
48
49 let nullifier_queue = nullifier_queue_account_info;
50 let mut nullifier_queue = nullifier_queue.try_borrow_mut_data()?;
51 unsafe {
52 queue_from_bytes_zero_copy_init(
53 &mut nullifier_queue,
54 capacity.into(),
55 sequence_threshold as usize,
56 )
57 .map_err(ProgramError::from)?;
58 }
59 Ok(())
60}