Line data Source code
1 : #include "fd_voter.h" 2 : 3 : #include "../../funk/fd_funk.h" 4 : #include "../../funk/fd_funk_val.h" 5 : 6 : fd_voter_state_t const * 7 0 : fd_voter_state( fd_funk_t * funk, fd_funk_rec_t const * rec ) { 8 0 : if( FD_UNLIKELY( !rec || !!( rec->flags & FD_FUNK_REC_FLAG_ERASE ) ) ) { 9 0 : FD_LOG_WARNING(( "account erased. address: %s", FD_BASE58_ENC_32_ALLOCA( rec->pair.key->uc ) )); 10 0 : return NULL; 11 0 : } 12 : 13 0 : fd_account_meta_t const * meta = fd_funk_val_const( rec, fd_funk_wksp(funk) ); 14 0 : if( FD_UNLIKELY( meta == NULL || meta->magic != FD_ACCOUNT_META_MAGIC ) ) { 15 0 : FD_LOG_WARNING(( "bad account meta. address: %s", FD_BASE58_ENC_32_ALLOCA( rec->pair.key->uc ) )); 16 0 : return NULL; 17 0 : } 18 : 19 0 : fd_voter_state_t const * state = fd_type_pun_const( (uchar const *)meta + meta->hlen ); 20 0 : if( FD_UNLIKELY( state == NULL || state->discriminant > fd_vote_state_versioned_enum_current ) ) { 21 0 : FD_LOG_WARNING(( "bad account state. address: %s", FD_BASE58_ENC_32_ALLOCA( rec->pair.key->uc ) )); 22 0 : return NULL; 23 0 : } 24 : 25 0 : return state; 26 0 : }