snark/block_verify/
snark_block_verify_actions.rs1use openmina_core::{block::BlockHash, ActionEvent, SubstateAccess};
2use serde::{Deserialize, Serialize};
3
4use super::{SnarkBlockVerifyError, SnarkBlockVerifyId, VerifiableBlockWithHash};
5
6pub type SnarkBlockVerifyActionWithMeta = redux::ActionWithMeta<SnarkBlockVerifyAction>;
7pub type SnarkBlockVerifyActionWithMetaRef<'a> = redux::ActionWithMeta<&'a SnarkBlockVerifyAction>;
8
9#[derive(Serialize, Deserialize, Debug, Clone, ActionEvent)]
10pub enum SnarkBlockVerifyAction {
11 Init {
12 block: VerifiableBlockWithHash,
13
14 on_init: redux::Callback<(BlockHash, SnarkBlockVerifyId)>,
15 on_success: redux::Callback<BlockHash>,
16 on_error: redux::Callback<(BlockHash, SnarkBlockVerifyError)>,
17 },
18 Pending {
19 req_id: SnarkBlockVerifyId,
20 },
21 Error {
22 req_id: SnarkBlockVerifyId,
23 error: SnarkBlockVerifyError,
24 },
25 Success {
26 req_id: SnarkBlockVerifyId,
27 },
28 Finish {
29 req_id: SnarkBlockVerifyId,
30 },
31}
32
33impl redux::EnablingCondition<crate::SnarkState> for SnarkBlockVerifyAction {
34 fn is_enabled(&self, state: &crate::SnarkState, _time: redux::Timestamp) -> bool {
35 match self {
36 SnarkBlockVerifyAction::Init { .. } => true,
37 SnarkBlockVerifyAction::Pending { req_id } => state
38 .block_verify
39 .jobs
40 .get(*req_id)
41 .is_some_and(|v| v.is_init()),
42 SnarkBlockVerifyAction::Error { req_id, .. } => state
43 .block_verify
44 .jobs
45 .get(*req_id)
46 .is_some_and(|v| v.is_pending()),
47 SnarkBlockVerifyAction::Success { req_id } => state
48 .block_verify
49 .jobs
50 .get(*req_id)
51 .is_some_and(|v| v.is_pending()),
52 SnarkBlockVerifyAction::Finish { req_id } => state
53 .block_verify
54 .jobs
55 .get(*req_id)
56 .is_some_and(|v| v.is_finished()),
57 }
58 }
59}
60
61impl<T> redux::EnablingCondition<T> for SnarkBlockVerifyAction
62where
63 T: SubstateAccess<crate::SnarkState>,
64{
65 fn is_enabled(&self, state: &T, time: redux::Timestamp) -> bool {
66 state
67 .substate()
68 .is_ok_and(|state| self.is_enabled(state, time))
69 }
70}