Line data Source code
1 : #ifndef HEADER_fd_src_choreo_votor_ag_vote_serde_h 2 : #define HEADER_fd_src_choreo_votor_ag_vote_serde_h 3 : 4 : #include "ag_vote.h" 5 : 6 15 : #define AG_VOTE_DE_SUCCESS ( 0) 7 30 : #define AG_VOTE_DE_ERR_SZ (-1) /* Io(ReadSizeLimit), TrailingBytes, PreallocationSizeLimit, LengthEncodingOverflow */ 8 0 : #define AG_VOTE_DE_ERR_INVAL (-2) /* InvalidTagEncoding, InvalidValue */ 9 : 10 10767 : #define AG_VOTE_SERDE_TAG_NOTAR (1) /* WireConsensusMessageKind::NotarVote #[wincode(tag = 1)] */ 11 0 : #define AG_VOTE_SERDE_TAG_FINAL (2) /* WireConsensusMessageKind::FinalizeVote #[wincode(tag = 2)] */ 12 0 : #define AG_VOTE_SERDE_TAG_SKIP (3) /* WireConsensusMessageKind::SkipVote #[wincode(tag = 3)] */ 13 0 : #define AG_VOTE_SERDE_TAG_NOTAR_FALLBACK (4) /* WireConsensusMessageKind::NotarFallbackVote #[wincode(tag = 4)] */ 14 0 : #define AG_VOTE_SERDE_TAG_SKIP_FALLBACK (5) /* WireConsensusMessageKind::SkipFallbackVote #[wincode(tag = 5)] */ 15 : 16 : FD_STATIC_ASSERT( AG_VOTE_KIND_NOTAR +1==AG_VOTE_SERDE_TAG_NOTAR, ag_vote_serde ); 17 : FD_STATIC_ASSERT( AG_VOTE_KIND_FINAL +1==AG_VOTE_SERDE_TAG_FINAL, ag_vote_serde ); 18 : FD_STATIC_ASSERT( AG_VOTE_KIND_SKIP +1==AG_VOTE_SERDE_TAG_SKIP, ag_vote_serde ); 19 : FD_STATIC_ASSERT( AG_VOTE_KIND_NOTAR_FALLBACK+1==AG_VOTE_SERDE_TAG_NOTAR_FALLBACK, ag_vote_serde ); 20 : FD_STATIC_ASSERT( AG_VOTE_KIND_SKIP_FALLBACK +1==AG_VOTE_SERDE_TAG_SKIP_FALLBACK, ag_vote_serde ); 21 : 22 : struct ag_vote_serde { 23 : uchar version; /* VersionedWireConsensusMessage::V1 (u8 tag) */ 24 : uchar tag; /* WireConsensusMessageKind (u8 tag) */ 25 : ulong slot; /* WireSlotVoteMessage::slot (Slot) */ 26 : uchar const * block_id; /* Block::block_id (Hash) */ 27 : uchar const * signature; /* WireVoteSignature::signature (BLSSignature) */ 28 : ushort shred_version; /* WireConsensusMessageV1::shred_version (u16) */ 29 : }; 30 : typedef struct ag_vote_serde ag_vote_serde_t; 31 : 32 : #define AG_VOTE_SIGNING_SER_MAX ( sizeof(uchar) /* kind */ + \ 33 : sizeof(ulong) /* slot */ + \ 34 : sizeof(ag_block_hash_t) /* block_id */ + \ 35 : sizeof(ushort) /* shred_version */ ) 36 : 37 : #define AG_VOTE_SER_SZ( has_block_id ) ( sizeof(uchar) /* version */ + \ 38 : sizeof(uchar) /* kind */ + \ 39 : sizeof(ulong) /* slot */ + \ 40 : ( (has_block_id) ? sizeof(ag_block_hash_t) : 0UL ) /* block_id */ + \ 41 : FD_BLS_SIG_SZ /* signature */ + \ 42 : sizeof(ushort) /* shred_version */ ) 43 : 44 : #define AG_VOTE_SER_MAX AG_VOTE_SER_SZ( 1 ) 45 : 46 : FD_PROTOTYPES_BEGIN 47 : 48 : ulong 49 : ag_vote_ser( ag_vote_t const * self, 50 : uchar buf[ static AG_VOTE_SER_MAX ] ); 51 : 52 : int 53 : ag_vote_de( ag_vote_t * self, 54 : uchar const * buf, 55 : ulong buf_sz ); 56 : 57 : ulong 58 : ag_vote_signing_ser( uint kind, 59 : ulong slot, 60 : uchar const * block_hash, 61 : ushort shred_version, 62 : uchar buf[ static AG_VOTE_SIGNING_SER_MAX ] ); 63 : 64 : FD_PROTOTYPES_END 65 : 66 : #endif /* HEADER_fd_src_choreo_votor_ag_vote_serde_h */