11use std:: collections:: BTreeSet ;
2+ use std:: sync:: Arc ;
23
34use mina_p2p_messages:: v2:: StateHash ;
45use openmina_core:: block:: ArcBlockWithHash ;
@@ -25,6 +26,8 @@ pub enum TransitionFrontierAction {
2526 /// block, otherwise we don't need it so we use dummy proof instead.
2627 #[ action_event( level = info) ]
2728 GenesisInject ,
29+ #[ action_event( level = info) ]
30+ GenesisProvenInject ,
2831
2932 Sync ( TransitionFrontierSyncAction ) ,
3033 /// Transition frontier synced.
@@ -44,15 +47,20 @@ impl redux::EnablingCondition<crate::State> for TransitionFrontierAction {
4447 TransitionFrontierAction :: Genesis ( a) => a. is_enabled ( state, time) ,
4548 TransitionFrontierAction :: GenesisEffect ( a) => a. is_enabled ( state, time) ,
4649 TransitionFrontierAction :: GenesisInject => {
47- if state. transition_frontier . best_tip ( ) . is_some ( ) {
50+ state. transition_frontier . root ( ) . is_none ( )
51+ && state
52+ . transition_frontier
53+ . genesis
54+ . block_with_real_or_dummy_proof ( )
55+ . is_some ( )
56+ }
57+ TransitionFrontierAction :: GenesisProvenInject => {
58+ let Some ( genesis) = state. transition_frontier . genesis . proven_block ( ) else {
4859 return false ;
49- }
50- let genesis_state = & state. transition_frontier . genesis ;
51- if state. should_produce_blocks_after_genesis ( ) {
52- genesis_state. proven_block ( ) . is_some ( )
53- } else {
54- genesis_state. block_with_dummy_proof ( ) . is_some ( )
55- }
60+ } ;
61+ state. transition_frontier . root ( ) . map_or ( true , |b| {
62+ b. is_genesis ( ) && !Arc :: ptr_eq ( & genesis. block , & b. block )
63+ } )
5664 }
5765 TransitionFrontierAction :: Sync ( a) => a. is_enabled ( state, time) ,
5866 TransitionFrontierAction :: Synced { .. } => matches ! (
0 commit comments