From db91d481076c89b58e44fc7c5a4aa31cddc833b4 Mon Sep 17 00:00:00 2001
From: Roman Khlopkov <roman.khlopkov@demlabs.net>
Date: Fri, 7 Apr 2023 15:12:20 +0300
Subject: [PATCH] [*] NULL candidate postprocessing fix

---
 .../consensus/esbocs/dap_chain_cs_esbocs.c    | 22 ++++++++++++++-----
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index 51e18e0f29..e94453c57f 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -380,7 +380,7 @@ static dap_list_t *s_get_validators_list(dap_chain_esbocs_session_t *a_session,
         for (size_t l_current_vld_cnt = 0; l_current_vld_cnt < l_need_vld_cnt; l_current_vld_cnt++) {
             uint256_t l_raw_result;
             uint256_t l_chosen_weight = dap_pseudo_random_get(l_total_weight, &l_raw_result);
-            if (PVT(a_session->esbocs)->debug) {
+            if (false) { //PVT(a_session->esbocs)->debug) {
                 char *l_chosen_weignt_str = dap_chain_balance_print(l_chosen_weight);
                 char *l_total_weight_str = dap_chain_balance_print(l_total_weight);
                 char *l_seed_hash_str = dap_hash_fast_to_str_new(&a_session->cur_round.last_block_hash);
@@ -680,11 +680,20 @@ static void s_session_state_change(dap_chain_esbocs_session_t *a_session, enum s
             HASH_ITER(hh, a_session->cur_round.message_items, l_item, l_tmp) {
                 if (l_item->message->hdr.type == DAP_STREAM_CH_VOTING_MSG_TYPE_SUBMIT &&
                         dap_chain_addr_compare(&l_item->signing_addr, &a_session->cur_round.attempt_submit_validator)) {
-                    a_session->cur_round.attempt_candidate_hash = l_item->message->hdr.candidate_hash;
-                    s_session_state_change(a_session, DAP_CHAIN_ESBOCS_SESSION_STATE_WAIT_SIGNS, dap_time_now());
-                    // Verify and vote already submitted candidate
-                    s_session_candidate_verify(a_session, (dap_chain_block_t *)l_item->message->msg_n_sign,
-                                               l_item->message->hdr.message_size, &a_session->cur_round.attempt_candidate_hash);
+                    dap_hash_fast_t *l_candidate_hash = &l_item->message->hdr.candidate_hash;
+                    if (dap_hash_fast_is_blank(l_candidate_hash))
+                        s_session_attempt_new(a_session);
+                    else {
+                        dap_chain_esbocs_store_t *l_store;
+                        HASH_FIND(hh, a_session->cur_round.store_items, l_candidate_hash, sizeof(dap_chain_hash_fast_t), l_store);
+                        if (l_store) {
+                            a_session->cur_round.attempt_candidate_hash = *l_candidate_hash;
+                            s_session_state_change(a_session, DAP_CHAIN_ESBOCS_SESSION_STATE_WAIT_SIGNS, dap_time_now());
+                            // Verify and vote already submitted candidate
+                            s_session_candidate_verify(a_session, l_store->candidate, l_store->candidate_size, l_candidate_hash);
+                        }
+                    }
+                    break;
                 }
             }
         }
@@ -1302,6 +1311,7 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
             s_session_state_change(l_session, DAP_CHAIN_ESBOCS_SESSION_STATE_WAIT_PROC, dap_time_now());
         }
     } break;
+
     case DAP_STREAM_CH_VOTING_MSG_TYPE_SUBMIT: {
         uint8_t *l_candidate = l_message->msg_n_sign;
         size_t l_candidate_size = l_message->hdr.message_size;
-- 
GitLab