LCOV - code coverage report
Current view: top level - choreo/votor - ag_epoch_info.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 13 13 100.0 %
Date: 2026-09-17 04:28:31 Functions: 13 212 6.1 %

          Line data    Source code
       1             : #ifndef HEADER_fd_src_choreo_votor_ag_epoch_info_h
       2             : #define HEADER_fd_src_choreo_votor_ag_epoch_info_h
       3             : 
       4             : #include "ag_votor_base.h"
       5             : #include "../../ballet/bls/fd_bls.h"
       6             : 
       7             : FD_STATIC_ASSERT( FD_BLS_SET_MAX==AG_VAT_MAX, fd_bls_set_max );
       8             : 
       9             : struct ag_validator_info {
      10             :   ulong         id;
      11             :   ulong         stake;
      12             :   ag_id_key_t   id_key;
      13             :   ag_vote_key_t vote_key;
      14             :   fd_bls_pub_t  bls_key;
      15             : };
      16             : typedef struct ag_validator_info ag_validator_info_t;
      17             : 
      18             : struct ag_epoch_info {
      19             :   ulong               validator_cnt;
      20             :   ulong               total_stake;
      21             :   ag_validator_info_t validators[ AG_VAT_MAX ]; /* indexed by rank; validator_cnt live */
      22             :   fd_bls_pub_t        pubkeys   [ AG_VAT_MAX ]; /* validated keys, indexed by rank */
      23             : };
      24             : typedef struct ag_epoch_info ag_epoch_info_t;
      25             : 
      26             : FD_PROTOTYPES_BEGIN
      27             : 
      28             : FD_FN_CONST static inline ag_validator_info_t const *
      29        9780 : ag_epoch_info_validators( ag_epoch_info_t const * self ) {
      30        9780 :   return self->validators;
      31        9780 : }
      32             : 
      33             : FD_FN_PURE static inline ag_validator_info_t const *
      34             : ag_epoch_info_validator( ag_epoch_info_t const * self,
      35        9216 :                          ulong                   rank ) {
      36        9216 :   FD_TEST( rank<self->validator_cnt );
      37        9216 :   return ag_epoch_info_validators( self ) + rank;
      38        9216 : }
      39             : 
      40             : FD_FN_PURE static inline ag_validator_info_t const *
      41             : ag_epoch_info_leader( ag_epoch_info_t const * self,
      42          15 :                       ulong                   slot ) {
      43          15 :   ulong window    = slot / AG_SLOTS_PER_WINDOW;
      44          15 :   ulong leader_id = window % self->validator_cnt;
      45          15 :   return ag_epoch_info_validator( self, leader_id );
      46          15 : }
      47             : 
      48             : FD_FN_PURE static inline ulong
      49           3 : ag_epoch_info_total_stake( ag_epoch_info_t const * self ) { return self->total_stake; }
      50             : 
      51             : FD_FN_PURE int ag_epoch_info_is_weakest_quorum( ag_epoch_info_t const * self, ulong stake );
      52             : FD_FN_PURE int ag_epoch_info_is_weak_quorum   ( ag_epoch_info_t const * self, ulong stake );
      53             : FD_FN_PURE int ag_epoch_info_is_quorum        ( ag_epoch_info_t const * self, ulong stake );
      54             : FD_FN_PURE int ag_epoch_info_is_strong_quorum ( ag_epoch_info_t const * self, ulong stake );
      55             : 
      56             : FD_PROTOTYPES_END
      57             : 
      58             : #endif

Generated by: LCOV version 1.14