1use moloch_core::{AuditEvent, Block, BlockHash, BlockHeader, EventId, Hash, Result};
4
5pub trait EventStore {
7 fn get_event(&self, id: &EventId) -> Result<Option<AuditEvent>>;
9
10 fn put_event(&self, event: &AuditEvent) -> Result<()>;
12
13 fn event_exists(&self, id: &EventId) -> Result<bool>;
15
16 fn get_events_by_block(&self, height: u64) -> Result<Vec<AuditEvent>>;
18}
19
20pub trait BlockStore {
22 fn get_block(&self, height: u64) -> Result<Option<Block>>;
24
25 fn get_block_by_hash(&self, hash: &BlockHash) -> Result<Option<Block>>;
27
28 fn get_header(&self, height: u64) -> Result<Option<BlockHeader>>;
30
31 fn put_block(&self, block: &Block) -> Result<()>;
33
34 fn latest_height(&self) -> Result<Option<u64>>;
36
37 fn latest_block(&self) -> Result<Option<Block>>;
39}
40
41pub trait ChainStore: EventStore + BlockStore {
43 fn get_mmr_node(&self, pos: u64) -> Result<Option<Hash>>;
45
46 fn put_mmr_node(&self, pos: u64, hash: Hash) -> Result<()>;
48
49 fn mmr_size(&self) -> Result<u64>;
51
52 fn mmr_leaf_count(&self) -> Result<u64>;
54
55 fn set_mmr_meta(&self, size: u64, leaf_count: u64) -> Result<()>;
57
58 fn flush(&self) -> Result<()>;
60}