node/transition_frontier/sync/ledger/
transition_frontier_sync_ledger_actions.rs

1use openmina_core::ActionEvent;
2use serde::{Deserialize, Serialize};
3
4use crate::{transition_frontier::sync::TransitionFrontierSyncAction, TransitionFrontierAction};
5
6use super::{
7    snarked::TransitionFrontierSyncLedgerSnarkedAction,
8    staged::TransitionFrontierSyncLedgerStagedAction, TransitionFrontierSyncLedgerState,
9};
10
11pub type TransitionFrontierSyncLedgerActionWithMeta =
12    redux::ActionWithMeta<TransitionFrontierSyncLedgerAction>;
13pub type TransitionFrontierSyncLedgerActionWithMetaRef<'a> =
14    redux::ActionWithMeta<&'a TransitionFrontierSyncLedgerAction>;
15
16#[derive(derive_more::From, Serialize, Deserialize, Debug, Clone, ActionEvent)]
17pub enum TransitionFrontierSyncLedgerAction {
18    Init,
19    Snarked(TransitionFrontierSyncLedgerSnarkedAction),
20    Staged(TransitionFrontierSyncLedgerStagedAction),
21    Success,
22}
23
24impl redux::EnablingCondition<crate::State> for TransitionFrontierSyncLedgerAction {
25    fn is_enabled(&self, state: &crate::State, time: redux::Timestamp) -> bool {
26        match self {
27            TransitionFrontierSyncLedgerAction::Init => state
28                .transition_frontier
29                .sync
30                .ledger()
31                .is_some_and(|s| matches!(s, TransitionFrontierSyncLedgerState::Init { .. })),
32            TransitionFrontierSyncLedgerAction::Snarked(a) => a.is_enabled(state, time),
33            TransitionFrontierSyncLedgerAction::Staged(a) => a.is_enabled(state, time),
34            TransitionFrontierSyncLedgerAction::Success => {
35                state.transition_frontier.sync.is_ledger_sync_complete()
36            }
37        }
38    }
39}
40
41impl From<TransitionFrontierSyncLedgerAction> for crate::Action {
42    fn from(value: TransitionFrontierSyncLedgerAction) -> Self {
43        Self::TransitionFrontier(TransitionFrontierAction::Sync(
44            TransitionFrontierSyncAction::Ledger(value),
45        ))
46    }
47}