Line data Source code
1 : #ifndef HEADER_fd_src_choreo_votor_ag_finality_tracker_h 2 : #define HEADER_fd_src_choreo_votor_ag_finality_tracker_h 3 : 4 : #include "ag_votor_base.h" 5 : 6 : /* Finalization status of a slot, as returned by 7 : ag_finality_tracker_status. */ 8 : 9 0 : #define AG_FINALIZATION_STATUS_NOTARIZED (0) 10 0 : #define AG_FINALIZATION_STATUS_FINAL_PENDING_NOTAR (1) 11 0 : #define AG_FINALIZATION_STATUS_FINALIZED (2) 12 0 : #define AG_FINALIZATION_STATUS_IMPLICITLY_FINALIZED (3) 13 0 : #define AG_FINALIZATION_STATUS_IMPLICITLY_SKIPPED (4) 14 : 15 : struct ag_finalization_event { 16 : ag_block_id_t finalized; 17 : ag_block_id_t * implicitly_finalized; ulong implicitly_finalized_cnt; 18 : ulong * implicitly_skipped; ulong implicitly_skipped_cnt; 19 : }; 20 : typedef struct ag_finalization_event ag_finalization_event_t; 21 : 22 : typedef struct ag_finality_tracker ag_finality_tracker_t; 23 : 24 : FD_PROTOTYPES_BEGIN 25 : 26 : FD_FN_CONST static inline ag_finalization_event_t 27 : ag_finalization_event_default( ag_block_id_t * implicitly_finalized, 28 0 : ulong * implicitly_skipped ) { 29 0 : ag_finalization_event_t event; 30 0 : event.finalized.slot = ULONG_MAX; 31 0 : event.implicitly_finalized = implicitly_finalized; event.implicitly_finalized_cnt = 0UL; 32 0 : event.implicitly_skipped = implicitly_skipped; event.implicitly_skipped_cnt = 0UL; 33 0 : return event; 34 0 : } 35 : 36 : FD_FN_CONST ulong 37 : ag_finality_tracker_align( void ); 38 : 39 : FD_FN_CONST ulong 40 : ag_finality_tracker_footprint( ulong slot_max ); 41 : 42 : void * 43 : ag_finality_tracker_new( void * shmem, 44 : ulong slot_max, 45 : ulong seed ); 46 : 47 : ag_finality_tracker_t * 48 : ag_finality_tracker_join( void * shtracker ); 49 : 50 : void * 51 : ag_finality_tracker_leave( ag_finality_tracker_t const * tracker ); 52 : 53 : void * 54 : ag_finality_tracker_delete( void * shtracker ); 55 : 56 : void 57 : ag_finality_tracker_init( ag_finality_tracker_t * self, 58 : ulong slot ); 59 : 60 : void 61 : ag_finality_tracker_fini( ag_finality_tracker_t * self ); 62 : 63 : /* Definition 14. FinalityTracker::add_parent */ 64 : 65 : void 66 : ag_finality_tracker_add_parent( ag_finality_tracker_t * self, 67 : ag_block_id_t const * block, 68 : ag_block_id_t const * parent, 69 : ag_finalization_event_t * event ); 70 : 71 : /* Definition 14. FinalityTracker::mark_fast_finalized */ 72 : 73 : void 74 : ag_finality_tracker_mark_fast_finalized( ag_finality_tracker_t * self, 75 : ag_block_id_t const * block, 76 : ag_finalization_event_t * event ); 77 : 78 : /* Definition 14. FinalityTracker::mark_notarized */ 79 : 80 : void 81 : ag_finality_tracker_mark_notarized( ag_finality_tracker_t * self, 82 : ag_block_id_t const * block, 83 : ag_finalization_event_t * event ); 84 : 85 : /* Definition 14. FinalityTracker::mark_finalized */ 86 : 87 : void 88 : ag_finality_tracker_mark_finalized( ag_finality_tracker_t * self, 89 : ulong slot, 90 : ag_finalization_event_t * event ); 91 : 92 : /* Definition 14. FinalityTracker::highest_finalized_slot */ 93 : 94 : FD_FN_PURE ulong 95 : ag_finality_tracker_highest_finalized_slot( ag_finality_tracker_t const * self ); 96 : 97 : FD_FN_PURE uchar const * 98 : ag_finality_tracker_highest_finalized_block_hash( ag_finality_tracker_t const * self ); 99 : 100 : /* Section 2.9. FinalityTracker::first_unpruned_slot */ 101 : 102 : FD_FN_PURE ulong 103 : ag_finality_tracker_first_unpruned_slot( ag_finality_tracker_t const * self ); 104 : 105 : int 106 : ag_finality_tracker_status( ag_finality_tracker_t const * self, 107 : ulong slot, 108 : ag_block_hash_t out_hash ); 109 : 110 : FD_FN_PURE int 111 : ag_finality_tracker_has_parent( ag_finality_tracker_t const * self, 112 : ag_block_id_t const * block ); 113 : 114 : FD_PROTOTYPES_END 115 : 116 : #endif