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

          Line data    Source code
       1             : #ifndef HEADER_fd_src_choreo_votor_ag_slot_state_h
       2             : #define HEADER_fd_src_choreo_votor_ag_slot_state_h
       3             : 
       4             : #include "ag_votor_base.h"
       5             : #include "ag_cert.h"
       6             : #include "ag_epoch_info.h"
       7             : #include "ag_vote.h"
       8             : 
       9           0 : #define AG_PARENT_STATUS_KNOWN     (1)
      10           0 : #define AG_PARENT_STATUS_CERTIFIED (2)
      11             : 
      12           0 : #define AG_SLASHABLE_NONE                        (0)
      13           0 : #define AG_SLASHABLE_NOTAR_DIFFERENT_HASH        (1)
      14           0 : #define AG_SLASHABLE_SKIP_AND_NOTARIZE           (2)
      15           0 : #define AG_SLASHABLE_SKIP_AND_FINALIZE           (3)
      16           0 : #define AG_SLASHABLE_NOTAR_FALLBACK_AND_FINALIZE (4)
      17           0 : #define AG_SLASHABLE_NOTAR_FALLBACK_OVER_THREE   (5)
      18             : 
      19             : #define AG_SLOT_STATE_OUT_CERT_MAX   (3UL)
      20             : #define AG_SLOT_STATE_OUT_EVENT_MAX  (3UL)
      21             : #define AG_SLOT_STATE_OUT_REPAIR_MAX (3UL)
      22             : 
      23           0 : #define AG_NOTAR_FALLBACK_HASH_MAX (AG_VAT_MAX*AG_NOTAR_FALLBACK_VOTE_MAX)
      24             : 
      25             : struct ag_vote_stake_ele {
      26             :   ag_block_id_t block_id;
      27             :   ulong         stake;
      28             :   ulong         next;
      29             :   ulong         prev;
      30             : };
      31             : typedef struct ag_vote_stake_ele ag_vote_stake_ele_t;
      32             : FD_STATIC_ASSERT( sizeof(ag_vote_stake_ele_t)==64UL, ag_vote_stake_ele );
      33             : 
      34             : #define POOL_NAME ag_vote_stake_pool
      35           0 : #define POOL_T    ag_vote_stake_ele_t
      36           0 : #define POOL_NEXT next
      37             : #define POOL_LAZY 1
      38             : #include "../../util/tmpl/fd_pool.c"
      39             : 
      40             : #define MAP_NAME               ag_vote_stake_map
      41             : #define MAP_ELE_T              ag_vote_stake_ele_t
      42           0 : #define MAP_KEY                block_id
      43             : #define MAP_KEY_T              ag_block_id_t
      44           0 : #define MAP_NEXT               next
      45           0 : #define MAP_KEY_EQ(k0,k1)      (ag_block_id_eq( (k0), (k1) ))
      46           0 : #define MAP_KEY_HASH(key,seed) (fd_hash( (seed), (key), sizeof(ag_block_id_t) ))
      47             : #include "../../util/tmpl/fd_map_chain.c"
      48             : 
      49             : struct ag_parent_status {
      50             :   ag_block_hash_t hash;
      51             :   int             kind;
      52             : };
      53             : typedef struct ag_parent_status ag_parent_status_t;
      54             : 
      55             : struct ag_block_hash_set {
      56             :   ag_block_hash_t hash[ AG_EQVOC_BLOCK_HASH_MAX ];
      57             :   ulong           cnt;
      58             : };
      59             : typedef struct ag_block_hash_set ag_block_hash_set_t;
      60             : 
      61             : struct fd_bls_sig_ele {
      62             :   fd_bls_sig_t sig;
      63             :   ulong        next;
      64             : };
      65             : typedef struct fd_bls_sig_ele fd_bls_sig_ele_t;
      66             : 
      67             : #define POOL_NAME fd_bls_sig_pool
      68           0 : #define POOL_T    fd_bls_sig_ele_t
      69             : #include "../../util/tmpl/fd_pool.c"
      70             : 
      71             : struct ag_slot_votes {
      72             :   fd_bls_set_t    notar_set                    [ fd_bls_set_word_cnt ];
      73             :   uint            notar_sig_idx                [ AG_VAT_MAX ];
      74             :   uint            notar_hash_stake_idx         [ AG_VAT_MAX ];
      75             :   ulong           notar_hash_stake_head;
      76             :   ulong           notar_hash_stake_cnt;
      77             :   uint            notar_fallback_sig_idx       [ AG_VAT_MAX ][ AG_NOTAR_FALLBACK_VOTE_MAX ];
      78             :   uint            notar_fallback_hash_stake_idx[ AG_VAT_MAX ][ AG_NOTAR_FALLBACK_VOTE_MAX ];
      79             :   ulong           notar_fallback_hash_stake_head;
      80             :   ulong           notar_fallback_hash_stake_cnt;
      81             :   uchar           notar_fallback_sig_cnt       [ AG_VAT_MAX ];
      82             :   ulong           skip_stake;
      83             :   uint            skip_sig_idx                 [ AG_VAT_MAX ];
      84             :   fd_bls_agg_t    skip_agg;
      85             :   ulong           skip_fallback_stake;
      86             :   uint            skip_fallback_sig_idx        [ AG_VAT_MAX ];
      87             :   fd_bls_agg_t    skip_fallback_agg;
      88             :   ulong           finalize_stake;
      89             :   uint            finalize_sig_idx             [ AG_VAT_MAX ];
      90             :   fd_bls_agg_t    finalize_agg;
      91             :   ulong           notar_or_skip_stake;
      92             :   ulong           top_notar_stake;
      93             :   ag_block_hash_t top_notar_hash;
      94             : };
      95             : typedef struct ag_slot_votes ag_slot_votes_t;
      96             : 
      97             : struct ag_slot_certs {
      98             :   ag_cert_notar_t          notar;
      99             :   ag_cert_notar_fallback_t notar_fallback[ AG_NOTAR_FALLBACK_CERT_MAX ];
     100             :   ulong                    notar_fallback_cnt;
     101             :   ag_cert_skip_t           skip;
     102             :   ag_cert_fast_final_t     fast_finalize;
     103             :   ag_cert_final_t          finalize;
     104             : };
     105             : typedef struct ag_slot_certs ag_slot_certs_t;
     106             : 
     107             : struct ag_slot_state {
     108             :   ag_slot_votes_t votes;
     109             :   ag_slot_certs_t certs;
     110             : 
     111             :   ag_parent_status_t parents[ AG_EQVOC_BLOCK_HASH_MAX ];
     112             :   ulong              parents_cnt;
     113             : 
     114             :   ag_block_hash_set_t pending_safe_to_notar;
     115             :   ag_block_hash_set_t sent_safe_to_notar;
     116             :   int                 sent_safe_to_skip;
     117             : 
     118             :   ulong  slot;
     119             :   ulong  own_rank;
     120             :   ushort shred_version;
     121             : };
     122             : typedef struct ag_slot_state ag_slot_state_t;
     123             : 
     124             : struct ag_slot_states {
     125             :   fd_bls_sig_ele_t *      bls_sig_pool;
     126             :   ag_vote_stake_ele_t *   notar_hash_stake_pool;
     127             :   ag_vote_stake_map_t *   notar_hash_stake_map;
     128             :   ag_vote_stake_ele_t *   notar_fallback_hash_stake_pool;
     129             :   ag_vote_stake_map_t *   notar_fallback_hash_stake_map;
     130             :   ag_epoch_info_t const * prev_epoch_info;
     131             :   ulong                   prev_epoch_rank;
     132             :   ulong                   prev_epoch_slot;
     133             :   ag_epoch_info_t const * curr_epoch_info;
     134             :   ulong                   curr_epoch_rank;
     135             :   ulong                   curr_epoch_slot;
     136             :   ag_epoch_info_t const * next_epoch_info;
     137             :   ulong                   next_epoch_rank;
     138             :   ulong                   next_epoch_slot;
     139             :   ulong                   bls_verify_cnt;
     140             : };
     141             : typedef struct ag_slot_states ag_slot_states_t;
     142             : 
     143             : FD_PROTOTYPES_BEGIN
     144             : 
     145             : /* Resets self to an empty slot state.  self must be zeroed memory or a
     146             :    slot state. */
     147             : 
     148             : void
     149             : ag_slot_state_null( ag_slot_state_t *  self,
     150             :                     ag_slot_states_t * states );
     151             : 
     152             : /* Replaces our rank own_rank (USHORT_MAX if unstaked). */
     153             : 
     154             : void
     155             : ag_slot_state_set_own_rank( ag_slot_state_t * self,
     156             :                             ulong             own_rank );
     157             : 
     158             : /* Definition 13. SlotState::add_cert */
     159             : 
     160             : void
     161             : ag_slot_state_add_cert( ag_slot_state_t * self,
     162             :                         ag_cert_t const * cert );
     163             : 
     164             : /* Definition 12. SlotState::add_vote */
     165             : 
     166             : int
     167             : ag_slot_state_add_vote( ag_slot_state_t *  self,
     168             :                         ag_slot_states_t * states,
     169             :                         ag_vote_t const *  vote,
     170             :                         ulong              stake,
     171             :                         ag_cert_t *        out_cert_events,
     172             :                         ulong *            out_cert_event_cnt,
     173             :                         ag_block_id_t *    out_safe_to_notar,
     174             :                         ulong *            out_safe_to_notar_cnt,
     175             :                         ulong *            out_safe_to_skip,
     176             :                         ulong *            out_safe_to_skip_cnt,
     177             :                         ag_block_id_t *    out_repair_events,
     178             :                         ulong *            out_repair_event_cnt,
     179             :                         fd_bls_set_t *     bad );
     180             : 
     181             : /* Definition 16. SlotState::notify_parent_known */
     182             : 
     183             : void
     184             : ag_slot_state_notify_parent_known( ag_slot_state_t *     self,
     185             :                                    ag_block_hash_t const block_hash );
     186             : 
     187             : /* Definition 16. SlotState::notify_parent_certified */
     188             : 
     189             : int
     190             : ag_slot_state_notify_parent_certified( ag_slot_state_t *     self,
     191             :                                        ag_slot_states_t *    states,
     192             :                                        ag_block_hash_t const block_hash,
     193             :                                        fd_bls_set_t *        bad );
     194             : 
     195             : /* SlotState::check_slashable_offence */
     196             : 
     197             : FD_FN_PURE int
     198             : ag_slot_state_check_slashable_offence( ag_slot_state_t const *  self,
     199             :                                        ag_slot_states_t const * states,
     200             :                                        ag_vote_t const *        vote );
     201             : 
     202             : /* Definition 12. SlotState::should_ignore_vote */
     203             : 
     204             : FD_FN_PURE int
     205             : ag_slot_state_should_ignore_vote( ag_slot_state_t const *  self,
     206             :                                   ag_slot_states_t const * states,
     207             :                                   ag_vote_t const *        vote );
     208             : 
     209             : /* Definition 13. SlotState::is_notar_fallback */
     210             : 
     211             : FD_FN_PURE int
     212             : ag_slot_state_is_notar_fallback( ag_slot_state_t const * self,
     213             :                                  ag_block_hash_t const   block_hash );
     214             : 
     215             : /* Definition 13. SlotState::is_notar_fallback_or_stronger */
     216             : 
     217             : FD_FN_PURE int
     218             : ag_slot_state_is_notar_fallback_or_stronger( ag_slot_state_t const * self,
     219             :                                              ag_block_hash_t const   block_hash );
     220             : 
     221             : /* Accessors for reward certs */
     222             : 
     223             : fd_bls_agg_t *
     224             : ag_slot_state_notar_reward_agg( ag_slot_state_t const *  self,
     225             :                                 ag_slot_states_t const * states,
     226             :                                 fd_bls_agg_t *           out );
     227             : 
     228             : FD_FN_PURE fd_bls_agg_t const *
     229             : ag_slot_state_skip_reward_agg( ag_slot_state_t const * self );
     230             : 
     231             : /* Copies the kind vote sigs of the ranks in set into out[ rank ].
     232             :    block_hash selects the sig for notar fallback; for notar the caller
     233             :    filters set by hash. */
     234             : 
     235             : fd_bls_sig_t *
     236             : ag_slot_state_sigs( ag_slot_state_t const *  self,
     237             :                     ag_slot_states_t const * states,
     238             :                     uint                     kind,
     239             :                     ag_block_hash_t const    block_hash,
     240             :                     fd_bls_set_t const *     set,
     241             :                     fd_bls_sig_t *           out );
     242             : 
     243             : FD_PROTOTYPES_END
     244             : 
     245             : #endif

Generated by: LCOV version 1.14