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 1014 : #define AG_FINALIZATION_STATUS_NOTARIZED (0) 10 81 : #define AG_FINALIZATION_STATUS_FINAL_PENDING_NOTAR (1) 11 1416 : #define AG_FINALIZATION_STATUS_FINALIZED (2) 12 654 : #define AG_FINALIZATION_STATUS_IMPLICITLY_FINALIZED (3) 13 90 : #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 936 : ulong * implicitly_skipped ) { 29 936 : ag_finalization_event_t event; 30 : event.finalized.slot = ULONG_MAX; 31 936 : event.implicitly_finalized = implicitly_finalized; event.implicitly_finalized_cnt = 0UL; 32 936 : event.implicitly_skipped = implicitly_skipped; event.implicitly_skipped_cnt = 0UL; 33 936 : return event; 34 936 : } 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 : void 64 : ag_finality_tracker_add_parent( ag_finality_tracker_t * self, 65 : ag_block_id_t const * block, 66 : ag_block_id_t const * parent, 67 : ag_finalization_event_t * event ); 68 : 69 : void 70 : ag_finality_tracker_mark_fast_finalized( ag_finality_tracker_t * self, 71 : ag_block_id_t const * block, 72 : ag_finalization_event_t * event ); 73 : 74 : void 75 : ag_finality_tracker_mark_notarized( ag_finality_tracker_t * self, 76 : ag_block_id_t const * block, 77 : ag_finalization_event_t * event ); 78 : 79 : void 80 : ag_finality_tracker_mark_finalized( ag_finality_tracker_t * self, 81 : ulong slot, 82 : ag_finalization_event_t * event ); 83 : 84 : FD_FN_PURE ulong 85 : ag_finality_tracker_highest_finalized_slot( ag_finality_tracker_t const * self ); 86 : 87 : FD_FN_PURE uchar const * 88 : ag_finality_tracker_highest_finalized_block_hash( ag_finality_tracker_t const * self ); 89 : 90 : FD_FN_PURE ulong 91 : ag_finality_tracker_first_unpruned_slot( ag_finality_tracker_t const * self ); 92 : 93 : int 94 : ag_finality_tracker_status( ag_finality_tracker_t const * self, 95 : ulong slot, 96 : ag_block_hash_t out_hash ); 97 : 98 : FD_FN_PURE int 99 : ag_finality_tracker_has_parent( ag_finality_tracker_t const * self, 100 : ag_block_id_t const * block ); 101 : 102 : FD_PROTOTYPES_END 103 : 104 : #endif