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 : }
|