light_merkle_tree_program/verifier_invoked_instructions/
insert_two_leaves_event.rs1use anchor_lang::prelude::*;
2
3use crate::{
4    event_merkle_tree::EventMerkleTree, utils::constants::EVENT_MERKLE_TREE_SEED,
5    RegisteredVerifier,
6};
7
8#[derive(Accounts)]
9#[instruction(
10    leaf_left: [u8; 32],
11    leaf_right: [u8; 32],
12)]
13pub struct InsertTwoLeavesEvent<'info> {
14    #[account(
15        mut,
16        seeds = [__program_id.to_bytes().as_ref()],
17        bump,
18        seeds::program = registered_verifier.pubkey,
19    )]
20    pub authority: Signer<'info>,
21    #[account(mut, seeds = [
22        EVENT_MERKLE_TREE_SEED,
23        event_merkle_tree.load().unwrap().merkle_tree_nr.to_le_bytes().as_ref()
24    ], bump)]
25    pub event_merkle_tree: AccountLoader<'info, EventMerkleTree>,
26    pub system_program: Program<'info, System>,
27    #[account(
28        seeds = [®istered_verifier.pubkey.to_bytes()],
29        bump,
30    )]
31    pub registered_verifier: Account<'info, RegisteredVerifier>,
32}
33
34pub fn process_insert_two_leaves_event(
35    ctx: Context<InsertTwoLeavesEvent>,
36    leaf_left: [u8; 32],
37    leaf_right: [u8; 32],
38) -> Result<()> {
39    let mut merkle_tree = ctx.accounts.event_merkle_tree.load_mut()?;
40    merkle_tree.merkle_tree.insert(leaf_left, leaf_right);
41    Ok(())
42}