snark/block_verify/
snark_block_verify_state.rs1use std::sync::Arc;
2
3use serde::{Deserialize, Serialize};
4
5use openmina_core::{block::BlockHash, requests::PendingRequests};
6
7use crate::{BlockVerifier, VerifierSRS};
8
9use super::{
10 SnarkBlockVerifyError, SnarkBlockVerifyId, SnarkBlockVerifyIdType, VerifiableBlockWithHash,
11};
12
13#[derive(Serialize, Deserialize, Clone)]
14pub struct SnarkBlockVerifyState {
15 pub verifier_index: BlockVerifier,
16 pub verifier_srs: Arc<VerifierSRS>,
17 pub jobs: PendingRequests<SnarkBlockVerifyIdType, SnarkBlockVerifyStatus>,
18}
19
20impl SnarkBlockVerifyState {
21 pub fn new(verifier_index: BlockVerifier, verifier_srs: Arc<VerifierSRS>) -> Self {
22 Self {
23 verifier_index,
24 verifier_srs,
25 jobs: Default::default(),
26 }
27 }
28
29 pub fn next_req_id(&self) -> SnarkBlockVerifyId {
30 self.jobs.next_req_id()
31 }
32}
33
34impl std::fmt::Debug for SnarkBlockVerifyState {
35 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
36 f.debug_struct("SnarkBlockVerifyState")
37 .field("verifier_index", &"<content too big>")
39 .field("verifier_srs", &"<content too big>")
40 .field("jobs", &self.jobs)
41 .finish()
42 }
43}
44
45#[derive(Serialize, Deserialize, Debug, Clone)]
46pub enum SnarkBlockVerifyStatus {
47 Init {
48 time: redux::Timestamp,
49 block: VerifiableBlockWithHash,
50 on_success: redux::Callback<BlockHash>,
51 on_error: redux::Callback<(BlockHash, SnarkBlockVerifyError)>,
52 },
53 Pending {
54 time: redux::Timestamp,
55 block: VerifiableBlockWithHash,
56 on_success: redux::Callback<BlockHash>,
57 on_error: redux::Callback<(BlockHash, SnarkBlockVerifyError)>,
58 },
59 Error {
60 time: redux::Timestamp,
61 block: VerifiableBlockWithHash,
62 error: SnarkBlockVerifyError,
63 },
64 Success {
65 time: redux::Timestamp,
66 block: VerifiableBlockWithHash,
67 },
68}
69
70impl SnarkBlockVerifyStatus {
71 pub fn is_init(&self) -> bool {
72 matches!(self, Self::Init { .. })
73 }
74
75 pub fn is_pending(&self) -> bool {
76 matches!(self, Self::Pending { .. })
77 }
78
79 pub fn is_finished(&self) -> bool {
80 matches!(self, Self::Error { .. } | Self::Success { .. })
81 }
82
83 pub fn block(&self) -> &VerifiableBlockWithHash {
84 match self {
85 Self::Init { block, .. } => block,
86 Self::Pending { block, .. } => block,
87 Self::Error { block, .. } => block,
88 Self::Success { block, .. } => block,
89 }
90 }
91}