snark/block_verify/
mod.rs1mod 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}