light_concurrent_merkle_tree/
event.rs1use borsh::{BorshDeserialize, BorshSerialize};
2#[derive(BorshDeserialize, BorshSerialize, Debug)]
3pub struct MerkleTreeEvents {
4 pub events: Vec<MerkleTreeEvent>,
5}
6
7#[derive(BorshDeserialize, BorshSerialize, Debug, PartialEq)]
12#[repr(C)]
13pub enum MerkleTreeEvent {
14 V1(ChangelogEvent),
15 V2(NullifierEvent),
16 V3(IndexedMerkleTreeEvent),
17}
18
19#[derive(BorshDeserialize, BorshSerialize, Debug, Eq, PartialEq)]
22pub struct PathNode {
23 pub node: [u8; 32],
24 pub index: u32,
25}
26
27#[derive(BorshDeserialize, BorshSerialize, Debug, PartialEq)]
29pub struct ChangelogEvent {
30 pub id: [u8; 32],
32 pub paths: Vec<Vec<PathNode>>,
34 pub seq: u64,
36 pub index: u32,
38}
39
40#[derive(BorshDeserialize, BorshSerialize, Debug, PartialEq)]
41pub struct NullifierEvent {
42 pub id: [u8; 32],
44 pub nullified_leaves_indices: Vec<u64>,
47 pub seq: u64,
51}
52
53#[derive(Debug, Default, Clone, Copy, BorshSerialize, BorshDeserialize, Eq, PartialEq)]
54pub struct RawIndexedElement<I>
55where
56 I: Clone,
57{
58 pub value: [u8; 32],
59 pub next_index: I,
60 pub next_value: [u8; 32],
61 pub index: I,
62}
63
64#[derive(BorshDeserialize, BorshSerialize, Debug, Clone, PartialEq)]
65pub struct IndexedMerkleTreeUpdate<I>
66where
67 I: Clone,
68{
69 pub new_low_element: RawIndexedElement<I>,
70 pub new_low_element_hash: [u8; 32],
72 pub new_high_element: RawIndexedElement<I>,
73 pub new_high_element_hash: [u8; 32],
76}
77
78#[derive(BorshDeserialize, BorshSerialize, Debug, PartialEq)]
79pub struct IndexedMerkleTreeEvent {
80 pub id: [u8; 32],
82 pub updates: Vec<IndexedMerkleTreeUpdate<usize>>,
83 pub seq: u64,
87}