From 5ba04b1acf9d74896665982682840bc7443317f8 Mon Sep 17 00:00:00 2001 From: "oljas.jarasbaev" <oljas.jarasbaev@demlabs.net> Date: Sat, 9 Nov 2024 17:21:33 +0700 Subject: [PATCH] [*] fix dir --- .../consensus/esbocs/dap_chain_cs_esbocs.c | 42 ++++++++----------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c index 653f59ec2e..bc94af3266 100644 --- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c +++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c @@ -1262,12 +1262,13 @@ static int s_signs_sort_callback(dap_list_t *a_sign1, dap_list_t *a_sign2) return l_ret; } -static bool s_session_directive_ready(dap_chain_esbocs_session_t *a_session) +static bool s_session_directive_ready(dap_chain_esbocs_session_t *a_session, bool * a_kick, dap_chain_addr_t * a_signing_addr) { size_t l_list_length = dap_list_length(a_session->cur_round.all_validators); if (a_session->cur_round.total_validators_synced * 3 < l_list_length * 2) return false; // Not a valid round, less than 2/3 participants - bool l_kick = false; + debug_if(PVT(a_session->esbocs)->debug, L_MSG, "Current consensus online %hu from %zu is acceptable, so issue the directive", + a_session->cur_round.total_validators_synced, l_list_length); dap_chain_esbocs_penalty_item_t *l_item, *l_tmp; HASH_ITER(hh, a_session->penalty, l_item, l_tmp) { int l_key_state = dap_chain_net_srv_stake_key_delegated(&l_item->signing_addr); @@ -1277,40 +1278,30 @@ static bool s_session_directive_ready(dap_chain_esbocs_session_t *a_session) continue; } if (l_item->miss_count >= DAP_CHAIN_ESBOCS_PENALTY_KICK && l_key_state == 1) { - l_kick = true; + *a_kick = true; return true; } if (l_item->miss_count == 0 && l_key_state == -1) - return false; + *a_kick = false; + return true; } if (!l_item) - return true; + return false; + return true; } -static dap_chain_esbocs_directive_t* s_session_directive_compose(dap_chain_esbocs_session_t *a_session) { - size_t l_list_length = dap_list_length(a_session->cur_round.all_validators); - debug_if(PVT(a_session->esbocs)->debug, L_MSG, "Current consensus online %hu from %zu is acceptable, so issue the directive", - a_session->cur_round.total_validators_synced, l_list_length); - bool l_kick = false; - dap_chain_esbocs_penalty_item_t *l_item = NULL, *l_tmp = NULL; - HASH_ITER(hh, a_session->penalty, l_item, l_tmp) { - int l_key_state = dap_chain_net_srv_stake_key_delegated(&l_item->signing_addr); - if (l_item->miss_count >= DAP_CHAIN_ESBOCS_PENALTY_KICK && l_key_state == 1) { - l_kick = true; - break; - } - } - uint32_t l_directive_size = s_directive_calc_size(l_kick ? DAP_CHAIN_ESBOCS_DIRECTIVE_KICK : DAP_CHAIN_ESBOCS_DIRECTIVE_LIFT); +static dap_chain_esbocs_directive_t* s_session_directive_compose(dap_chain_esbocs_session_t *a_session, bool a_kick, dap_chain_addr_t * a_signing_addr) { + uint32_t l_directive_size = s_directive_calc_size(a_kick ? DAP_CHAIN_ESBOCS_DIRECTIVE_KICK : DAP_CHAIN_ESBOCS_DIRECTIVE_LIFT); dap_chain_esbocs_directive_t *l_ret = NULL; DAP_NEW_Z_SIZE_RET_VAL(l_ret, dap_chain_esbocs_directive_t, l_directive_size, NULL, NULL); l_ret->version = DAP_CHAIN_ESBOCS_DIRECTIVE_VERSION; - l_ret->type = l_kick ? DAP_CHAIN_ESBOCS_DIRECTIVE_KICK : DAP_CHAIN_ESBOCS_DIRECTIVE_LIFT; + l_ret->type = a_kick ? DAP_CHAIN_ESBOCS_DIRECTIVE_KICK : DAP_CHAIN_ESBOCS_DIRECTIVE_LIFT; l_ret->size = l_directive_size; l_ret->timestamp = dap_nanotime_now(); dap_tsd_t *l_tsd = (dap_tsd_t *)l_ret->tsd; l_tsd->type = DAP_CHAIN_ESBOCS_DIRECTIVE_TSD_TYPE_ADDR; l_tsd->size = sizeof(dap_chain_addr_t); - *(dap_chain_addr_t *)l_tsd->data = l_item->signing_addr; + *(dap_chain_addr_t *)l_tsd->data = *a_signing_addr; return l_ret; } @@ -1349,9 +1340,12 @@ static void s_session_state_change(dap_chain_esbocs_session_t *a_session, enum s if (dap_chain_addr_compare(&a_session->cur_round.attempt_submit_validator, &a_session->my_signing_addr)) { dap_chain_esbocs_directive_t *l_directive = NULL; #ifdef DAP_CHAIN_CS_ESBOCS_DIRECTIVE_SUPPORT - if (!a_session->cur_round.directive && !PVT(a_session->esbocs)->emergency_mode) - if (s_session_directive_ready(a_session)) - l_directive = s_session_directive_compose(a_session); + if (!a_session->cur_round.directive && !PVT(a_session->esbocs)->emergency_mode) { + bool l_kick = false; + dap_chain_addr_t* l_signing_addr = NULL; + if (s_session_directive_ready(a_session, &l_kick, l_signing_addr)) + l_directive = s_session_directive_compose(a_session, l_kick, l_signing_addr); + } #endif if (l_directive) { dap_hash_fast_t l_directive_hash; -- GitLab