node/transition_frontier/genesis/
transition_frontier_genesis_actions.rs1use std::sync::Arc;
2
3use mina_p2p_messages::v2;
4use openmina_core::ActionEvent;
5use serde::{Deserialize, Serialize};
6
7use super::{GenesisConfigLoaded, TransitionFrontierGenesisState};
8
9pub type TransitionFrontierGenesisActionWithMeta =
10 redux::ActionWithMeta<TransitionFrontierGenesisAction>;
11pub type TransitionFrontierGenesisActionWithMetaRef<'a> =
12 redux::ActionWithMeta<&'a TransitionFrontierGenesisAction>;
13
14#[derive(derive_more::From, Serialize, Deserialize, Debug, Clone, ActionEvent)]
15#[action_event(level = trace)]
16pub enum TransitionFrontierGenesisAction {
17 LedgerLoadInit,
18 LedgerLoadPending,
19 LedgerLoadSuccess {
20 data: GenesisConfigLoaded,
21 },
22 Produce,
23 ProveInit,
24 #[action_event(level = info)]
26 ProvePending,
27 #[action_event(level = info)]
29 ProveSuccess {
30 proof: Arc<v2::MinaBaseProofStableV2>,
31 },
32 }
34
35impl redux::EnablingCondition<crate::State> for TransitionFrontierGenesisAction {
36 fn is_enabled(&self, state: &crate::State, _time: redux::Timestamp) -> bool {
37 let genesis_state = &state.transition_frontier.genesis;
38 match self {
39 TransitionFrontierGenesisAction::LedgerLoadInit => {
40 matches!(genesis_state, TransitionFrontierGenesisState::Idle { .. })
41 }
42 TransitionFrontierGenesisAction::LedgerLoadPending => {
43 matches!(genesis_state, TransitionFrontierGenesisState::Idle { .. })
44 }
45 TransitionFrontierGenesisAction::LedgerLoadSuccess { .. } => {
46 matches!(
47 genesis_state,
48 TransitionFrontierGenesisState::LedgerLoadPending { .. }
49 )
50 }
51 TransitionFrontierGenesisAction::Produce => matches!(
52 genesis_state,
53 TransitionFrontierGenesisState::LedgerLoadSuccess { .. }
54 ),
55 TransitionFrontierGenesisAction::ProveInit => {
56 state.producing_block_after_genesis()
57 && matches!(
58 genesis_state,
59 TransitionFrontierGenesisState::Produced { .. }
60 )
61 }
62 TransitionFrontierGenesisAction::ProvePending => matches!(
63 genesis_state,
64 TransitionFrontierGenesisState::Produced { .. }
65 ),
66 TransitionFrontierGenesisAction::ProveSuccess { .. } => matches!(
67 genesis_state,
68 TransitionFrontierGenesisState::ProvePending { .. }
69 ),
70 }
71 }
72}
73
74impl From<TransitionFrontierGenesisAction> for crate::Action {
75 fn from(value: TransitionFrontierGenesisAction) -> Self {
76 crate::transition_frontier::TransitionFrontierAction::Genesis(value).into()
77 }
78}