LCOV - code coverage report
Current view: top level - choreo/votor - ag_vote.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 63 63 100.0 %
Date: 2026-09-17 04:28:31 Functions: 7 7 100.0 %

          Line data    Source code
       1             : #include "ag_vote_serde.h"
       2             : 
       3             : static void
       4             : sign( ag_vote_t const * self,
       5             :       fd_bls_sign_fn    sign_fn,
       6             :       void *            sign_ctx,
       7             :       ushort            shred_version,
       8        8700 :       fd_bls_sig_t *    sig ) {
       9        8700 :   uchar buf[ AG_VOTE_SIGNING_SER_MAX ];
      10        8700 :   ulong sz = ag_vote_signing_ser( self->kind, ag_vote_slot( self ), ag_vote_block_hash( self ), shred_version, buf );
      11        8700 :   sign_fn( sign_ctx, sig, buf, sz );
      12        8700 : }
      13             : 
      14             : ag_vote_t
      15             : ag_vote_construct_notar( fd_bls_sign_fn        sign_fn,
      16             :                          void *                sign_ctx,
      17             :                          ulong                 slot,
      18             :                          ag_block_hash_t const hash,
      19             :                          ushort                rank,
      20        5754 :                          ushort                shred_version ) {
      21        5754 :   ag_vote_t vote;
      22        5754 :   vote.kind                = AG_VOTE_KIND_NOTAR;
      23        5754 :   vote.notar.slot          = slot;
      24        5754 :   vote.notar.rank          = rank;
      25        5754 :   vote.notar.shred_version = shred_version;
      26        5754 :   memcpy( vote.notar.block_hash, hash, sizeof(ag_block_hash_t) );
      27        5754 :   sign( &vote, sign_fn, sign_ctx, shred_version, &vote.notar.sig );
      28        5754 :   return vote;
      29        5754 : }
      30             : 
      31             : ag_vote_t
      32             : ag_vote_construct_final( fd_bls_sign_fn sign_fn,
      33             :                          void *         sign_ctx,
      34             :                          ulong          slot,
      35             :                          ushort         rank,
      36         954 :                          ushort         shred_version ) {
      37         954 :   ag_vote_t vote;
      38         954 :   vote.kind                = AG_VOTE_KIND_FINAL;
      39         954 :   vote.final.slot          = slot;
      40         954 :   vote.final.rank          = rank;
      41         954 :   vote.final.shred_version = shred_version;
      42         954 :   sign( &vote, sign_fn, sign_ctx, shred_version, &vote.final.sig );
      43         954 :   return vote;
      44         954 : }
      45             : 
      46             : ag_vote_t
      47             : ag_vote_construct_skip( fd_bls_sign_fn sign_fn,
      48             :                         void *         sign_ctx,
      49             :                         ulong          slot,
      50             :                         ushort         rank,
      51        1386 :                         ushort         shred_version ) {
      52        1386 :   ag_vote_t vote;
      53        1386 :   vote.kind               = AG_VOTE_KIND_SKIP;
      54        1386 :   vote.skip.slot          = slot;
      55        1386 :   vote.skip.rank          = rank;
      56        1386 :   vote.skip.shred_version = shred_version;
      57        1386 :   sign( &vote, sign_fn, sign_ctx, shred_version, &vote.skip.sig );
      58        1386 :   return vote;
      59        1386 : }
      60             : 
      61             : ag_vote_t
      62             : ag_vote_construct_notar_fallback( fd_bls_sign_fn        sign_fn,
      63             :                                   void *                sign_ctx,
      64             :                                   ulong                 slot,
      65             :                                   ag_block_hash_t const hash,
      66             :                                   ushort                rank,
      67         528 :                                   ushort                shred_version ) {
      68         528 :   ag_vote_t vote;
      69         528 :   vote.kind                         = AG_VOTE_KIND_NOTAR_FALLBACK;
      70         528 :   vote.notar_fallback.slot          = slot;
      71         528 :   vote.notar_fallback.rank          = rank;
      72         528 :   vote.notar_fallback.shred_version = shred_version;
      73         528 :   memcpy( vote.notar_fallback.block_hash, hash, sizeof(ag_block_hash_t) );
      74         528 :   sign( &vote, sign_fn, sign_ctx, shred_version, &vote.notar_fallback.sig );
      75         528 :   return vote;
      76         528 : }
      77             : 
      78             : ag_vote_t
      79             : ag_vote_construct_skip_fallback( fd_bls_sign_fn sign_fn,
      80             :                                  void *         sign_ctx,
      81             :                                  ulong          slot,
      82             :                                  ushort         rank,
      83          78 :                                  ushort         shred_version ) {
      84          78 :   ag_vote_t vote;
      85          78 :   vote.kind                        = AG_VOTE_KIND_SKIP_FALLBACK;
      86          78 :   vote.skip_fallback.slot          = slot;
      87          78 :   vote.skip_fallback.rank          = rank;
      88          78 :   vote.skip_fallback.shred_version = shred_version;
      89          78 :   sign( &vote, sign_fn, sign_ctx, shred_version, &vote.skip_fallback.sig );
      90          78 :   return vote;
      91          78 : }
      92             : 
      93             : char *
      94             : ag_vote_to_cstr( ag_vote_t const * self,
      95           3 :                  char              cstr[ static AG_VOTE_CSTR_MAX ] ) {
      96           3 :   static char const * kind_cstr[] = { "Notar", "Final", "Skip", "NotarFallback", "SkipFallback" };
      97           3 :   uchar         sig[ FD_BLS_SIG_COMPRESSED_SZ ]; blst_p2_compress( sig, ag_vote_sig( self ) );
      98           3 :   uchar const * block_hash = ag_vote_block_hash( self );
      99           3 :   char *        p          = cstr;
     100           3 :   p = fd_cstr_append_printf( p, "%s { slot: %lu", kind_cstr[ self->kind ], ag_vote_slot( self ) );
     101           3 :   if( FD_LIKELY( block_hash ) ) p = fd_cstr_append_printf( p, ", hash: %02x%02x%02x...", block_hash[0], block_hash[1], block_hash[2] );
     102           3 :   p = fd_cstr_append_printf( p, ", sig: %02x%02x%02x..., rank: %u }", sig[0], sig[1], sig[2], (uint)ag_vote_rank( self ) );
     103           3 :   *p = '\0';
     104           3 :   return cstr;
     105           3 : }

Generated by: LCOV version 1.14