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}