LCOV - code coverage report
Current view: top level - choreo/votor - fd_votor_pool.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 0 20 0.0 %
Date: 2026-11-11 12:40:43 Functions: 0 0 -

          Line data    Source code
       1             : #ifndef HEADER_fd_src_choreo_votor_fd_votor_pool_h
       2             : #define HEADER_fd_src_choreo_votor_fd_votor_pool_h
       3             : 
       4             : #include "fd_votor_base.h"
       5             : #include "fd_cert.h"
       6             : #include "fd_epoch_info.h"
       7             : #include "fd_parent_ready_tracker.h" /* fd_parent_ready_t */
       8             : #include "fd_vote.h"
       9             : 
      10           0 : #define FD_VOTOR_POOL_SUCCESS                ( 0)
      11           0 : #define FD_VOTOR_POOL_ERR_SLOT_TOO_OLD       (-1)
      12           0 : #define FD_VOTOR_POOL_ERR_SLOT_TOO_NEW       (-2)
      13           0 : #define FD_VOTOR_POOL_ERR_DUPLICATE          (-3)
      14           0 : #define FD_VOTOR_POOL_ERR_SLASHABLE          (-4)
      15           0 : #define FD_VOTOR_POOL_ERR_CERT_VERIFY        (-5)
      16           0 : #define FD_VOTOR_POOL_ERR_VOTE_VERIFY        (-6)
      17             : 
      18           0 : #define FD_VOTOR_POOL_QUORUM_REACHED_FINAL          (FD_CERT_KIND_FINAL)
      19           0 : #define FD_VOTOR_POOL_QUORUM_REACHED_FAST_FINAL     (FD_CERT_KIND_FAST_FINAL)
      20           0 : #define FD_VOTOR_POOL_QUORUM_REACHED_NOTAR          (FD_CERT_KIND_NOTAR)
      21           0 : #define FD_VOTOR_POOL_QUORUM_REACHED_NOTAR_FALLBACK (FD_CERT_KIND_NOTAR_FALLBACK)
      22           0 : #define FD_VOTOR_POOL_QUORUM_REACHED_SKIP           (FD_CERT_KIND_SKIP)
      23           0 : #define FD_VOTOR_POOL_QUORUM_REACHED_SAFE_TO_NOTAR  (5)
      24           0 : #define FD_VOTOR_POOL_QUORUM_REACHED_SAFE_TO_SKIP   (6)
      25             : 
      26           0 : #define FD_VOTOR_POOL_EVENT_PARENT_READY  (0) /* Definition 15, ParentReady. PoolEvent::ParentReady */
      27           0 : #define FD_VOTOR_POOL_EVENT_SAFE_TO_NOTAR (1) /* Definition 16, SafeToNotar. PoolEvent::SafeToNotar */
      28           0 : #define FD_VOTOR_POOL_EVENT_SAFE_TO_SKIP  (2) /* Definition 16, SafeToSkip. PoolEvent::SafeToSkip   */
      29           0 : #define FD_VOTOR_POOL_EVENT_CERT_CREATED  (3) /* Definition 13. PoolEvent::CertCreated */
      30             : #define FD_VOTOR_POOL_EVENT_STANDSTILL    (4) /* Section 4.1.   PoolEvent::Standstill  */
      31             : 
      32           0 : #define FD_VOTOR_POOL_EVENT_IMPLICITLY_SKIPPED   (5) /* Firedancer only: for other tiles, never routed to fd_votor_loop */
      33           0 : #define FD_VOTOR_POOL_EVENT_IMPLICITLY_FINALIZED (6) /* Firedancer only: for other tiles, never routed to fd_votor_loop */
      34             : 
      35             : typedef struct fd_votor_pool fd_votor_pool_t;
      36             : 
      37             : struct fd_votor_pool_event {
      38             :   int kind;
      39             :   union {
      40             :     fd_parent_ready_t parent_ready;
      41             :     fd_block_id_t     safe_to_notar;
      42             :     ulong             safe_to_skip;
      43             :     fd_cert_t         cert_created;
      44             :     fd_standstill_t   standstill;
      45             :     ulong             implicitly_skipped;
      46             :     fd_block_id_t     implicitly_finalized;
      47             :   };
      48             : };
      49             : typedef struct fd_votor_pool_event fd_votor_pool_event_t;
      50             : 
      51             : struct fd_votor_pool_standstill_iter {
      52             :   ulong finalized;
      53             :   ulong slot; /* ULONG_MAX when done */
      54             :   ulong idx;
      55             :   int   is_vote;
      56             :   union {
      57             :     fd_cert_t cert;
      58             :     fd_vote_t vote;
      59             :   };
      60             : };
      61             : typedef struct fd_votor_pool_standstill_iter fd_votor_pool_standstill_iter_t;
      62             : 
      63             : struct fd_votor_pool_metrics {
      64             :   ulong slot_state_pool_used;
      65             :   ulong slot_state_pool_free;
      66             :   ulong finalized_slot;
      67             :   ulong pool_events_cnt;
      68             :   ulong bls_verify_cnt;
      69             : };
      70             : typedef struct fd_votor_pool_metrics fd_votor_pool_metrics_t;
      71             : 
      72             : FD_PROTOTYPES_BEGIN
      73             : 
      74             : FD_FN_CONST ulong
      75             : fd_votor_pool_align( void );
      76             : 
      77             : FD_FN_CONST ulong
      78             : fd_votor_pool_footprint( ulong slot_max,
      79             :                          ulong burst );
      80             : 
      81             : void *
      82             : fd_votor_pool_new( void * mem,
      83             :                    ulong  slot_max,
      84             :                    ulong  burst,
      85             :                    ulong  seed );
      86             : 
      87             : fd_votor_pool_t *
      88             : fd_votor_pool_join( void * mem );
      89             : 
      90             : void *
      91             : fd_votor_pool_leave( fd_votor_pool_t const * self );
      92             : 
      93             : void *
      94             : fd_votor_pool_delete( void * mem );
      95             : 
      96             : FD_FN_PURE fd_votor_pool_metrics_t
      97             : fd_votor_pool_metrics( fd_votor_pool_t const * self );
      98             : 
      99             : void
     100             : fd_votor_pool_from_snapshot( fd_votor_pool_t *     self,
     101             :                              fd_block_id_t const * root );
     102             : 
     103             : void
     104             : fd_votor_pool_from_genesis( fd_votor_pool_t *     self,
     105             :                             fd_block_id_t const * genesis );
     106             : 
     107             : void
     108             : fd_votor_pool_advance_epoch( fd_votor_pool_t *       self,
     109             :                              fd_epoch_info_t const * epoch_info,
     110             :                              ulong                   epoch_rank,
     111             :                              ulong                   epoch_slot );
     112             : 
     113             : void
     114             : fd_votor_pool_update_own_rank( fd_votor_pool_t * self,
     115             :                                ulong             epoch_slot,
     116             :                                ulong             epoch_rank );
     117             : 
     118             : /* Definition 16, SafeToNotar. Pool::add_block */
     119             : 
     120             : int
     121             : fd_votor_pool_add_block( fd_votor_pool_t *     self,
     122             :                          fd_block_id_t const * block_id,
     123             :                          fd_block_id_t const * parent_id,
     124             :                          fd_bls_set_t *        bad );
     125             : 
     126             : /* Definition 13. Pool::add_cert */
     127             : 
     128             : int
     129             : fd_votor_pool_add_cert( fd_votor_pool_t * self,
     130             :                         fd_cert_t const * cert,
     131             :                         int               verified,
     132             :                         fd_bls_set_t *    bad );
     133             : 
     134             : /* Definition 12. Pool::add_vote */
     135             : 
     136             : int
     137             : fd_votor_pool_add_vote( fd_votor_pool_t * self,
     138             :                         fd_vote_t const * vote,
     139             :                         int               verified,
     140             :                         fd_bls_set_t *    bad,
     141             :                         uchar *           quorum_reached );
     142             : 
     143             : fd_block_hash_t const *
     144             : fd_votor_pool_agg_rewards( fd_votor_pool_t * self,
     145             :                            ulong             slot,
     146             :                            fd_bls_agg_t *    notar,
     147             :                            fd_bls_agg_t *    skip,
     148             :                            fd_bls_set_t *    bad );
     149             : 
     150             : fd_cert_final_t *
     151             : fd_votor_pool_final_cert( fd_votor_pool_t const * self,
     152             :                           ulong                   slot,
     153             :                           fd_cert_final_t *       out );
     154             : 
     155             : fd_cert_notar_t *
     156             : fd_votor_pool_notar_cert( fd_votor_pool_t const * self,
     157             :                           ulong                   slot,
     158             :                           fd_cert_notar_t *       out );
     159             : 
     160             : /* Section 4.1. Pool::recover_from_standstill */
     161             : 
     162             : fd_votor_pool_standstill_iter_t *
     163             : fd_votor_pool_standstill_iter_init( fd_votor_pool_standstill_iter_t * iter,
     164             :                                     fd_votor_pool_t const *           self );
     165             : 
     166             : fd_votor_pool_standstill_iter_t *
     167             : fd_votor_pool_standstill_iter_next( fd_votor_pool_standstill_iter_t * iter,
     168             :                                     fd_votor_pool_t const *           self );
     169             : 
     170             : FD_FN_PURE int
     171             : fd_votor_pool_standstill_iter_done( fd_votor_pool_standstill_iter_t const * iter );
     172             : 
     173             : /* Definition 14. Pool::finalized_slot */
     174             : 
     175             : FD_FN_PURE ulong
     176             : fd_votor_pool_finalized_slot( fd_votor_pool_t const * self );
     177             : 
     178             : FD_FN_PURE fd_block_hash_t const *
     179             : fd_votor_pool_finalized_block_hash( fd_votor_pool_t const * self );
     180             : 
     181             : FD_FN_PURE ulong
     182             : fd_votor_pool_highest_parent_ready( fd_votor_pool_t const * self );
     183             : 
     184             : /* Definition 15, ParentReady. Pool::parents_ready. */
     185             : 
     186             : ulong
     187             : fd_votor_pool_parents_ready( fd_votor_pool_t const * self,
     188             :                              ulong                   slot,
     189             :                              fd_block_id_t *         out,
     190             :                              ulong                   out_max );
     191             : 
     192             : /* Definition 15, ParentReady. Pool::wait_for_parent_ready. */
     193             : 
     194             : FD_FN_PURE fd_block_id_t
     195             : fd_votor_pool_wait_for_parent_ready( fd_votor_pool_t const * self,
     196             :                                      ulong                   slot );
     197             : 
     198             : int
     199             : fd_votor_pool_poll_pool_event( fd_votor_pool_t *       self,
     200             :                                fd_votor_pool_event_t * event );
     201             : 
     202             : int
     203             : fd_votor_pool_poll_repair_event( fd_votor_pool_t * self,
     204             :                                  fd_block_id_t *   block );
     205             : 
     206             : FD_PROTOTYPES_END
     207             : 
     208             : #endif

Generated by: LCOV version 1.14