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

          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             : FD_STATIC_ASSERT( sizeof(ag_bls_key_t)==FD_BLS_PUB_COMPRESSED_SZ, ag_bls_key_sz );
       9             : 
      10             : struct ag_validator_info {
      11             :   ulong         id;
      12             :   ulong         stake;
      13             :   ag_id_key_t   id_key;
      14             :   ag_vote_key_t vote_key;
      15             :   ag_bls_key_t  bls_key;
      16             : };
      17             : typedef struct ag_validator_info ag_validator_info_t;
      18             : 
      19             : struct ag_epoch_info {
      20             :   ulong               validator_cnt;
      21             :   ulong               total_stake;
      22             :   ag_validator_info_t validators[ AG_VAT_MAX ]; /* indexed by rank; validator_cnt live */
      23             :   fd_bls_pub_t        pubkeys   [ AG_VAT_MAX ]; /* validated keys, indexed by rank */
      24             : };
      25             : typedef struct ag_epoch_info ag_epoch_info_t;
      26             : 
      27             : FD_PROTOTYPES_BEGIN
      28             : 
      29             : /* EpochInfo::validators */
      30             : 
      31             : FD_FN_CONST static inline ag_validator_info_t const *
      32           0 : ag_epoch_info_validators( ag_epoch_info_t const * self ) {
      33           0 :   return self->validators;
      34           0 : }
      35             : 
      36             : /* EpochInfo::validator */
      37             : 
      38             : FD_FN_PURE static inline ag_validator_info_t const *
      39             : ag_epoch_info_validator( ag_epoch_info_t const * self,
      40           0 :                          ulong                   rank ) {
      41           0 :   FD_TEST( rank<self->validator_cnt );
      42           0 :   return ag_epoch_info_validators( self ) + rank;
      43           0 : }
      44             : 
      45             : /* Deserialized ag_epoch_info_validator( self, rank )->bls_key */
      46             : 
      47             : FD_FN_PURE static inline fd_bls_pub_t const *
      48             : ag_epoch_info_pubkey( ag_epoch_info_t const * self,
      49           0 :                       ulong                   rank ) {
      50           0 :   FD_TEST( rank<self->validator_cnt );
      51           0 :   return self->pubkeys + rank;
      52           0 : }
      53             : 
      54             : /* EpochInfo::leader */
      55             : 
      56             : FD_FN_PURE static inline ag_validator_info_t const *
      57             : ag_epoch_info_leader( ag_epoch_info_t const * self,
      58           0 :                       ulong                   slot ) {
      59           0 :   ulong window    = slot / AG_SLOTS_PER_WINDOW;
      60           0 :   ulong leader_id = window % self->validator_cnt;
      61           0 :   return ag_epoch_info_validator( self, leader_id );
      62           0 : }
      63             : 
      64             : /* EpochInfo::total_stake */
      65             : 
      66             : FD_FN_PURE static inline ulong
      67           0 : ag_epoch_info_total_stake( ag_epoch_info_t const * self ) { return self->total_stake; }
      68             : 
      69             : /* Definition 13. EpochInfo::is_weakest_quorum, is_weak_quorum, is_quorum, is_strong_quorum */
      70             : 
      71             : FD_FN_PURE int ag_epoch_info_is_weakest_quorum( ag_epoch_info_t const * self, ulong stake );
      72             : FD_FN_PURE int ag_epoch_info_is_weak_quorum   ( ag_epoch_info_t const * self, ulong stake );
      73             : FD_FN_PURE int ag_epoch_info_is_quorum        ( ag_epoch_info_t const * self, ulong stake );
      74             : FD_FN_PURE int ag_epoch_info_is_strong_quorum ( ag_epoch_info_t const * self, ulong stake );
      75             : 
      76             : FD_PROTOTYPES_END
      77             : 
      78             : #endif

Generated by: LCOV version 1.14