LCOV - code coverage report
Current view: top level - choreo/votor - ag_slot_state.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 26 26 100.0 %
Date: 2026-09-17 04:28:31 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_event.h"
       8             : #include "ag_vote.h"
       9             : #include "../../util/fd_hash32.h"
      10             : 
      11          33 : #define AG_PARENT_STATUS_KNOWN     (1)
      12          21 : #define AG_PARENT_STATUS_CERTIFIED (2)
      13             : 
      14        4194 : #define AG_SLASHABLE_NONE                        (0)
      15           3 : #define AG_SLASHABLE_NOTAR_DIFFERENT_HASH        (1)
      16           6 : #define AG_SLASHABLE_SKIP_AND_NOTARIZE           (2)
      17          12 : #define AG_SLASHABLE_SKIP_AND_FINALIZE           (3)
      18           6 : #define AG_SLASHABLE_NOTAR_FALLBACK_AND_FINALIZE (4)
      19           6 : #define AG_SLASHABLE_NOTAR_FALLBACK_OVER_THREE   (5)
      20             : 
      21             : #define AG_SLOT_STATE_OUT_CERT_MAX   (3UL)
      22             : #define AG_SLOT_STATE_OUT_EVENT_MAX  (3UL)
      23             : #define AG_SLOT_STATE_OUT_REPAIR_MAX (3UL)
      24             : 
      25    16844223 : #define AG_NOTAR_MAP_LG_SLOT_CNT          (11)
      26     5206344 : #define AG_NOTAR_FALLBACK_MAP_LG_SLOT_CNT (13)
      27             : FD_STATIC_ASSERT( AG_VAT_MAX                           <(1UL<<AG_NOTAR_MAP_LG_SLOT_CNT         ), notar_map          );
      28             : FD_STATIC_ASSERT( AG_VAT_MAX*AG_NOTAR_FALLBACK_VOTE_MAX<(1UL<<AG_NOTAR_FALLBACK_MAP_LG_SLOT_CNT), notar_fallback_map );
      29             : 
      30             : struct ag_slot_voted_stake_hash {
      31             :   ag_block_hash_key_t hash;
      32             :   ulong               stake;
      33             :   fd_bls_agg_t        agg;
      34             : };
      35             : typedef struct ag_slot_voted_stake_hash ag_slot_voted_stake_hash_t;
      36             : 
      37             : #define MAP_NAME              notar_map
      38       20841 : #define MAP_T                 ag_slot_voted_stake_hash_t
      39    16844223 : #define MAP_LG_SLOT_CNT       AG_NOTAR_MAP_LG_SLOT_CNT
      40     1428846 : #define MAP_KEY               hash
      41      150882 : #define MAP_KEY_T             ag_block_hash_key_t
      42     1277964 : #define MAP_KEY_NULL          ((ag_block_hash_key_t){ .ul = { ULONG_MAX, ULONG_MAX, ULONG_MAX, ULONG_MAX } })
      43    15601923 : #define MAP_KEY_INVAL(k)      (((k).ul[0]&(k).ul[1]&(k).ul[2]&(k).ul[3])==ULONG_MAX)
      44      144480 : #define MAP_KEY_EQUAL(k0,k1)  (!memcmp( &(k0), &(k1), sizeof(ag_block_hash_key_t) ))
      45             : #define MAP_KEY_EQUAL_IS_SLOW 1
      46       35148 : #define MAP_KEY_HASH(key)     ((uint)fd_hash32( (key).uc, 42UL ))
      47             : #define MAP_MEMOIZE           0
      48             : #include "../../util/tmpl/fd_map.c"
      49             : 
      50             : #define MAP_NAME              notar_fallback_map
      51       40413 : #define MAP_T                 ag_slot_voted_stake_hash_t
      52     5206344 : #define MAP_LG_SLOT_CNT       AG_NOTAR_FALLBACK_MAP_LG_SLOT_CNT
      53     5205717 : #define MAP_KEY               hash
      54       93909 : #define MAP_KEY_T             ag_block_hash_key_t
      55     5111808 : #define MAP_KEY_NULL          ((ag_block_hash_key_t){ .ul = { ULONG_MAX, ULONG_MAX, ULONG_MAX, ULONG_MAX } })
      56       93969 : #define MAP_KEY_INVAL(k)      (((k).ul[0]&(k).ul[1]&(k).ul[2]&(k).ul[3])==ULONG_MAX)
      57       75864 : #define MAP_KEY_EQUAL(k0,k1)  (!memcmp( &(k0), &(k1), sizeof(ag_block_hash_key_t) ))
      58             : #define MAP_KEY_EQUAL_IS_SLOW 1
      59       39789 : #define MAP_KEY_HASH(key)     ((uint)fd_hash32( (key).uc, 42UL ))
      60             : #define MAP_MEMOIZE           0
      61             : #include "../../util/tmpl/fd_map.c"
      62             : 
      63             : 
      64             : struct ag_parent_status {
      65             :   ag_block_hash_t hash;
      66             :   int             kind;
      67             : };
      68             : typedef struct ag_parent_status ag_parent_status_t;
      69             : 
      70             : struct ag_block_hash_set {
      71             :   ulong           cnt;
      72             :   ag_block_hash_t hash[ AG_EQVOC_BLOCK_HASH_MAX ];
      73             : };
      74             : typedef struct ag_block_hash_set ag_block_hash_set_t;
      75             : 
      76             : struct ag_slot_voted_stake {
      77             :   ag_slot_voted_stake_hash_t notar[ 1UL<<AG_NOTAR_MAP_LG_SLOT_CNT ];
      78             :   fd_bls_sig_t               notar_sig[ AG_VAT_MAX ];
      79             :   ag_slot_voted_stake_hash_t notar_fallback[ 1UL<<AG_NOTAR_FALLBACK_MAP_LG_SLOT_CNT ];
      80             :   fd_bls_sig_t               notar_fallback_sig[ AG_VAT_MAX ][ AG_NOTAR_FALLBACK_VOTE_MAX ];
      81             :   ag_block_hash_t            notar_fallback_sig_hash[ AG_VAT_MAX ][ AG_NOTAR_FALLBACK_VOTE_MAX ];
      82             :   uchar                      notar_fallback_sig_cnt[ AG_VAT_MAX ];
      83             :   ulong                      skip;
      84             :   fd_bls_sig_t               skip_sig[ AG_VAT_MAX ];
      85             :   fd_bls_agg_t               skip_agg;
      86             :   ulong                      skip_fallback;
      87             :   fd_bls_sig_t               skip_fallback_sig[ AG_VAT_MAX ];
      88             :   fd_bls_agg_t               skip_fallback_agg;
      89             :   ulong                      finalize;
      90             :   fd_bls_sig_t               finalize_sig[ AG_VAT_MAX ];
      91             :   fd_bls_agg_t               finalize_agg;
      92             :   ulong                      notar_or_skip;
      93             :   ulong                      top_notar;
      94             :   ag_block_hash_t            top_notar_hash;
      95             : };
      96             : typedef struct ag_slot_voted_stake ag_slot_voted_stake_t;
      97             : 
      98             : struct ag_slot_certs {
      99             :   ag_cert_notar_t          notar;
     100             :   ag_cert_notar_fallback_t notar_fallback[ AG_NOTAR_FALLBACK_CERT_MAX ];
     101             :   ulong                    notar_fallback_cnt;
     102             :   ag_cert_skip_t           skip;
     103             :   ag_cert_fast_final_t     fast_finalize;
     104             :   ag_cert_final_t          finalize;
     105             : };
     106             : typedef struct ag_slot_certs ag_slot_certs_t;
     107             : 
     108             : struct __attribute__((aligned(128UL))) ag_slot_state {
     109             :   ag_slot_voted_stake_t votes; /* the reference's votes and voted_stakes combined */
     110             :   ag_slot_certs_t       certs;
     111             : 
     112             :   ag_parent_status_t parents[ AG_EQVOC_BLOCK_HASH_MAX ];
     113             :   ulong              parents_cnt;
     114             : 
     115             :   ag_block_hash_set_t pending_safe_to_notar;
     116             :   ag_block_hash_set_t sent_safe_to_notar;
     117             :   int                 sent_safe_to_skip;
     118             : 
     119             :   ulong  slot;
     120             :   ulong  own_rank;
     121             :   ushort shred_version;
     122             : 
     123             :   ag_epoch_info_t const * epoch_info;
     124             : };
     125             : typedef struct ag_slot_state ag_slot_state_t;
     126             : 
     127             : FD_PROTOTYPES_BEGIN
     128             : 
     129             : void
     130             : ag_slot_state_zero( ag_slot_state_t *       self,
     131             :                     ulong                   slot,
     132             :                     ag_epoch_info_t const * epoch_info,
     133             :                     ulong                   own_rank );
     134             : 
     135             : void
     136             : ag_slot_state_add_cert( ag_slot_state_t * self,
     137             :                         ag_cert_t const * cert );
     138             : 
     139             : int
     140             : ag_slot_state_add_vote( ag_slot_state_t *   self,
     141             :                         ag_vote_t const *   vote,
     142             :                         ulong               stake,
     143             :                         ag_event_cert_t *   out_cert_events,
     144             :                         ulong *             out_cert_event_cnt,
     145             :                         ag_event_pool_t *   out_pool_events,
     146             :                         ulong *             out_pool_event_cnt,
     147             :                         ag_event_repair_t * out_repair_events,
     148             :                         ulong *             out_repair_event_cnt,
     149             :                         fd_bls_set_t *      bad );
     150             : 
     151             : void
     152             : ag_slot_state_notify_parent_known( ag_slot_state_t *     self,
     153             :                                    ag_block_hash_t const block_hash );
     154             : 
     155             : int
     156             : ag_slot_state_notify_parent_certified( ag_slot_state_t *     self,
     157             :                                        ag_block_hash_t const block_hash,
     158             :                                        fd_bls_set_t *        bad );
     159             : 
     160             : FD_FN_PURE int
     161             : ag_slot_state_check_slashable_offence( ag_slot_state_t const * self,
     162             :                                        ag_vote_t const *       vote );
     163             : 
     164             : FD_FN_PURE int
     165             : ag_slot_state_should_ignore_vote( ag_slot_state_t const * self,
     166             :                                   ag_vote_t const *       vote );
     167             : 
     168             : FD_FN_PURE int
     169             : ag_slot_state_is_notar_fallback( ag_slot_state_t const * self,
     170             :                                  ag_block_hash_t const   block_hash );
     171             : 
     172             : FD_FN_PURE int
     173             : ag_slot_state_is_notar_fallback_or_stronger( ag_slot_state_t const * self,
     174             :                                              ag_block_hash_t const   block_hash );
     175             : 
     176             : FD_PROTOTYPES_END
     177             : 
     178             : #endif

Generated by: LCOV version 1.14