LCOV - code coverage report
Current view: top level - choreo/votor - ag_votor.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 0 6 0.0 %
Date: 2026-10-22 18:10:43 Functions: 0 0 -

          Line data    Source code
       1             : #ifndef HEADER_fd_src_choreo_votor_ag_votor_h
       2             : #define HEADER_fd_src_choreo_votor_ag_votor_h
       3             : 
       4             : #include "ag_votor_base.h"
       5             : #include "../../ballet/bls/fd_bls.h"
       6             : #include "ag_pool.h"
       7             : 
       8           0 : #define AG_VOTOR_REASON_BLOCK_REPLAYED  (0)
       9           0 : #define AG_VOTOR_REASON_PARENT_READY    (1)
      10           0 : #define AG_VOTOR_REASON_BLOCK_NOTARIZED (2)
      11           0 : #define AG_VOTOR_REASON_TIMEOUT         (3)
      12           0 : #define AG_VOTOR_REASON_SAFE_TO_NOTAR   (4)
      13           0 : #define AG_VOTOR_REASON_SAFE_TO_SKIP    (5)
      14             : 
      15             : typedef struct ag_votor ag_votor_t;
      16             : 
      17             : struct ag_votor_metrics {
      18             :   ulong slot_state_pool_used;
      19             :   ulong slot_state_pool_free;
      20             :   ulong highest_final_cert_slot;
      21             :   ulong vote_events_cnt;
      22             : };
      23             : typedef struct ag_votor_metrics ag_votor_metrics_t;
      24             : 
      25             : FD_PROTOTYPES_BEGIN
      26             : 
      27             : FD_FN_CONST ulong
      28             : ag_votor_align( void );
      29             : 
      30             : FD_FN_CONST ulong
      31             : ag_votor_footprint( ulong slot_max );
      32             : 
      33             : void *
      34             : ag_votor_new( void * mem,
      35             :               ulong  slot_max,
      36             :               ulong  seed );
      37             : 
      38             : ag_votor_t *
      39             : ag_votor_join( void * mem );
      40             : 
      41             : void *
      42             : ag_votor_leave( ag_votor_t const * votor );
      43             : 
      44             : void *
      45             : ag_votor_delete( void * mem );
      46             : 
      47             : /* ag_votor_init starts votor at root, a finalized block that is
      48             :    treated as notarized (Section 2.9).  It does not arm the root
      49             :    window's skip timeouts; call ag_votor_arm_skip_timeouts for that. */
      50             : 
      51             : void
      52             : ag_votor_init( ag_votor_t *          self,
      53             :                ag_block_id_t const * root,
      54             :                long                  now,
      55             :                long                  ns_per_slot,
      56             :                ushort                shred_version,
      57             :                fd_bls_sign_fn        sign_fn,
      58             :                void *                sign_ctx );
      59             : 
      60             : /* ag_votor_arm_skip_timeouts arms the root window's skip timeouts at
      61             :    now.  Split from init so a wait-for-supermajority can arm them at
      62             :    the restart instant: set_timeout only lowers a live deadline, so
      63             :    timeouts armed at boot cannot be moved out afterwards.  Call once. */
      64             : 
      65             : void
      66             : ag_votor_arm_skip_timeouts( ag_votor_t * self,
      67             :                             long         now );
      68             : 
      69             : void
      70             : ag_votor_fini( ag_votor_t * self );
      71             : 
      72             : FD_FN_PURE ag_votor_metrics_t
      73             : ag_votor_metrics( ag_votor_t const * self );
      74             : 
      75             : void
      76             : ag_votor_advance_epoch( ag_votor_t *       self,
      77             :                         long               ns_per_slot,
      78             :                         ulong              epoch_rank,
      79             :                         ulong              epoch_slot,
      80             :                         ag_bls_key_t const bls_key );
      81             : 
      82             : void
      83             : ag_votor_set_bls_key( ag_votor_t *       self,
      84             :                       ulong              epoch_slot,
      85             :                       ag_bls_key_t const bls_key );
      86             : 
      87             : void
      88             : ag_votor_set_rank( ag_votor_t * self,
      89             :                    ulong        epoch_slot,
      90             :                    ulong        epoch_rank );
      91             : 
      92             : /* Algorithm 1, lines 9-25. Votor::handle_pool_event */
      93             : 
      94             : ag_cert_t const *
      95             : ag_votor_handle_pool_event( ag_votor_t *            self,
      96             :                             ag_pool_event_t const * event,
      97             :                             long                    now );
      98             : 
      99             : /* Algorithm 1, lines 1-5. Votor::handle_blockstore_event, Block */
     100             : 
     101             : void
     102             : ag_votor_process_replay( ag_votor_t *            self,
     103             :                          ulong                   slot,
     104             :                          ag_block_info_t const * block_info );
     105             : 
     106             : /* ag_votor_set_catchup_vote_slot raises the first slot worth a vote
     107             :    while catching up, from verified certs past the pool window.  Below
     108             :    it, state still advances, but votes are not signed and certs not
     109             :    broadcast. */
     110             : 
     111             : void
     112             : ag_votor_set_catchup_vote_slot( ag_votor_t * self,
     113             :                                 ulong        slot );
     114             : 
     115             : /* Algorithm 1, lines 6-8. Votor::handle_timeout_event */
     116             : 
     117             : void
     118             : ag_votor_handle_skip_timeout( ag_votor_t * self,
     119             :                               ulong        slot );
     120             : 
     121             : int
     122             : ag_votor_poll_skip_timeout( ag_votor_t * self,
     123             :                             long         now,
     124             :                             ulong *      slot );
     125             : 
     126             : FD_FN_PURE long
     127             : ag_votor_next_skip_timeout( ag_votor_t const * self );
     128             : 
     129             : int
     130             : ag_votor_poll_vote( ag_votor_t * self,
     131             :                     ag_vote_t *  vote,
     132             :                     uchar *      reason );
     133             : 
     134             : FD_PROTOTYPES_END
     135             : 
     136             : #endif

Generated by: LCOV version 1.14