snark/block_verify/
mod.rs

1mod snark_block_verify_state;
2pub use snark_block_verify_state::*;
3
4mod snark_block_verify_actions;
5pub use snark_block_verify_actions::*;
6
7mod snark_block_verify_reducer;
8pub use snark_block_verify_reducer::reducer;
9
10pub use crate::block_verify_effectful::{
11    SnarkBlockVerifyError, SnarkBlockVerifyId, SnarkBlockVerifyIdType,
12};
13
14use serde::{Deserialize, Serialize};
15use std::sync::Arc;
16
17use openmina_core::block::{Block, BlockHash, BlockHeader, BlockHeaderWithHash, BlockWithHash};
18
19#[derive(derive_more::From, Serialize, Deserialize, Debug, Clone)]
20pub enum VerifiableBlockWithHash {
21    FullBox(BlockWithHash<Box<Block>>),
22    FullArc(BlockWithHash<Arc<Block>>),
23    HeaderBox(BlockHeaderWithHash<Box<BlockHeader>>),
24    HeaderArc(BlockHeaderWithHash<Arc<BlockHeader>>),
25}
26
27impl VerifiableBlockWithHash {
28    pub fn hash_ref(&self) -> &BlockHash {
29        match self {
30            Self::FullBox(v) => &v.hash,
31            Self::FullArc(v) => &v.hash,
32            Self::HeaderBox(v) => &v.hash,
33            Self::HeaderArc(v) => &v.hash,
34        }
35    }
36
37    pub fn full_ref(&self) -> Option<&Block> {
38        match self {
39            Self::FullBox(v) => Some(&v.block),
40            Self::FullArc(v) => Some(&v.block),
41            Self::HeaderBox(_) => None,
42            Self::HeaderArc(_) => None,
43        }
44    }
45
46    pub fn header_ref(&self) -> &BlockHeader {
47        match self {
48            Self::FullBox(v) => &v.block.header,
49            Self::FullArc(v) => &v.block.header,
50            Self::HeaderBox(v) => &v.header,
51            Self::HeaderArc(v) => &v.header,
52        }
53    }
54}
55
56impl AsRef<BlockHeader> for VerifiableBlockWithHash {
57    fn as_ref(&self) -> &BlockHeader {
58        self.header_ref()
59    }
60}
61
62impl From<(BlockHash, Box<Block>)> for VerifiableBlockWithHash {
63    fn from((hash, block): (BlockHash, Box<Block>)) -> Self {
64        BlockWithHash { hash, block }.into()
65    }
66}
67
68impl From<(BlockHash, Arc<Block>)> for VerifiableBlockWithHash {
69    fn from((hash, block): (BlockHash, Arc<Block>)) -> Self {
70        BlockWithHash { hash, block }.into()
71    }
72}
73
74impl From<(BlockHash, Box<BlockHeader>)> for VerifiableBlockWithHash {
75    fn from((hash, header): (BlockHash, Box<BlockHeader>)) -> Self {
76        BlockHeaderWithHash { hash, header }.into()
77    }
78}
79
80impl From<(BlockHash, Arc<BlockHeader>)> for VerifiableBlockWithHash {
81    fn from((hash, header): (BlockHash, Arc<BlockHeader>)) -> Self {
82        BlockHeaderWithHash { hash, header }.into()
83    }
84}