light_merkle_tree_program/event_merkle_tree/
initialize.rs1use std::cell::RefMut;
2
3use aligned_sized::aligned_sized;
4use anchor_lang::prelude::*;
5use light_macros::pubkey;
6use light_merkle_tree::{
7 config::MerkleTreeConfig,
8 constants::{sha256::ZERO_BYTES, ZeroBytes},
9 hasher::Sha256,
10 HashFunction, MerkleTree,
11};
12
13use crate::{impl_indexed_merkle_tree, utils::config::MERKLE_TREE_HEIGHT, MerkleTreeAuthority};
14
15#[derive(Clone, Copy)]
16pub struct EventMerkleTreeConfig {}
17
18impl MerkleTreeConfig for EventMerkleTreeConfig {
19 const ZERO_BYTES: ZeroBytes = ZERO_BYTES;
20 const PROGRAM_ID: Pubkey = pubkey!("JA5cjkRJ1euVi9xLWsCJVzsRzEkT8vcC4rqw9sVAo5d6");
21}
22
23#[account(zero_copy)]
24#[aligned_sized(anchor)]
25pub struct EventMerkleTree {
26 pub merkle_tree_nr: u64,
27 pub newest: u8,
28 _padding: [u8; 7],
29 pub merkle_tree: MerkleTree<Sha256, EventMerkleTreeConfig>,
30}
31
32impl_indexed_merkle_tree!(EventMerkleTree);
33
34pub fn process_initialize_new_event_merkle_tree(
35 merkle_tree: &mut RefMut<'_, EventMerkleTree>,
36 merkle_tree_authority: &mut Account<'_, MerkleTreeAuthority>,
37) {
38 merkle_tree
39 .merkle_tree
40 .init(MERKLE_TREE_HEIGHT, HashFunction::Sha256);
41 merkle_tree.merkle_tree_nr = merkle_tree_authority.event_merkle_tree_index;
42 merkle_tree.newest = 1;
43
44 merkle_tree_authority.event_merkle_tree_index += 1;
45}