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