From 4a5fa1c01921ed087f2ac7c9b88bd3608f8dea2a Mon Sep 17 00:00:00 2001 From: "oljas.jarasbaev" <oljas.jarasbaev@demlabs.net> Date: Sat, 9 Nov 2024 17:30:02 +0700 Subject: [PATCH] [-] 11040 --- .../consensus/esbocs/dap_chain_cs_esbocs.c | 127 ++---------------- 1 file changed, 11 insertions(+), 116 deletions(-) diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c index 84bed03a95..78079f4e59 100644 --- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c +++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c @@ -196,9 +196,7 @@ int dap_chain_cs_esbocs_init() "esbocs emergency_validators {add|remove} -net <net_name> [-chain <chain_name>] -cert <poa_cert_name> -pkey_hash <validator_pkey_hash>\n" "\tAdd or remove validator by its signature public key hash to list of validators allowed to work in emergency mode\n" "esbocs emergency_validators show -net <net_name> [-chain <chain_name>]\n" - "\tShow list of validators public key hashes allowed to work in emergency mode\n" - "esbocs status -net <net_name> [-chain <chain_name>]\n" - "\tShow current esbocs consensus status\n"); + "\tShow list of validators public key hashes allowed to work in emergency mode\n"); return 0; } @@ -1282,14 +1280,11 @@ 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) +dap_chain_esbocs_directive_t *s_session_directive_ready(dap_chain_esbocs_session_t *a_session) { 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) { - log_it(L_MSG, "Not enough participants for directive, all validators = %u, sunced validators = %u", - l_list_length, a_session->cur_round.total_validators_synced); - return false; // Not a valid round, less than 2/3 participants - } + if (a_session->cur_round.total_validators_synced * 3 < l_list_length * 2) + return NULL; // Not a valid round, less than 2/3 participants bool l_kick = false; dap_chain_esbocs_penalty_item_t *l_item, *l_tmp; HASH_ITER(hh, a_session->penalty, l_item, l_tmp) { @@ -1301,28 +1296,15 @@ static bool s_session_directive_ready(dap_chain_esbocs_session_t *a_session) } if (l_item->miss_count >= DAP_CHAIN_ESBOCS_PENALTY_KICK && l_key_state == 1) { l_kick = true; - return true; + break; } if (l_item->miss_count == 0 && l_key_state == -1) - return false; + break; } if (!l_item) - 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); + return NULL; 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; - } - } + a_session->cur_round.total_validators_synced, l_list_length); uint32_t l_directive_size = s_directive_calc_size(l_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); @@ -1373,8 +1355,7 @@ static void s_session_state_change(dap_chain_esbocs_session_t *a_session, enum s 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); + l_directive = s_session_directive_ready(a_session); #endif if (l_directive) { dap_hash_fast_t l_directive_hash; @@ -3057,15 +3038,13 @@ static int s_cli_esbocs(int a_argc, char **a_argv, void **a_str_reply) SUBCMD_UNDEFINED = 0, SUBCMD_MIN_VALIDATORS_COUNT, SUBCMD_CHECK_SIGNS_STRUCTURE, - SUBCMD_EMERGENCY_VALIDATOR, - SUBCMD_STATUS + SUBCMD_EMERGENCY_VALIDATOR } l_subcmd = SUBCMD_UNDEFINED; const char *l_subcmd_strs[] = { [SUBCMD_UNDEFINED] = NULL, [SUBCMD_MIN_VALIDATORS_COUNT] = "min_validators_count", [SUBCMD_CHECK_SIGNS_STRUCTURE] = "check_signs_structure", - [SUBCMD_EMERGENCY_VALIDATOR] = "emergency_validators", - [SUBCMD_STATUS] = "status", + [SUBCMD_EMERGENCY_VALIDATOR] = "emergency_validators" }; const size_t l_subcmd_str_count = sizeof(l_subcmd_strs) / sizeof(char *); @@ -3210,90 +3189,6 @@ static int s_cli_esbocs(int a_argc, char **a_argv, void **a_str_reply) } } break; - case SUBCMD_STATUS: { - const char * l_net_str = NULL, *l_chain_str = NULL; - dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-net", &l_net_str); - if (!l_net_str) { - dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_COM_ESBOCS_NO_NET,"Command '%s' requires parameter -net", l_subcmd_strs[l_subcmd]); - return -DAP_CHAIN_NODE_CLI_COM_ESBOCS_NO_NET; - } - dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-chain", &l_chain_str); - - dap_chain_net_t *l_net = dap_chain_net_by_name(l_net_str); - if (!l_net) { - log_it(L_WARNING, "Can't find net %s", l_net_str); - return -DAP_CHAIN_NODE_CLI_COM_ESBOCS_CANT_FIND_NET; - } - - dap_chain_esbocs_session_t *l_session; - if (l_chain_str) { - DL_FOREACH(s_session_items, l_session) - if (!dap_strcmp(l_chain_str, l_session->chain->name)) - break; - if (!l_session) { - log_it(L_WARNING, "Session for net %s chain %s not found", l_net->pub.name, l_chain_str); - return -DAP_CHAIN_NODE_CLI_COM_ESBOCS_NO_SESSION; - } - } else { - DL_FOREACH(s_session_items, l_session) - if (l_session->chain->net_id.uint64 == l_net->pub.id.uint64) - break; - if (!l_session) { - log_it(L_WARNING, "Session for net %s not found", l_net->pub.name); - return -DAP_CHAIN_NODE_CLI_COM_ESBOCS_NO_SESSION; - } - } - - const char *l_penalty_group = s_get_penalty_group(l_net->pub.id); - size_t l_penalties_count = 0; - json_object * l_json_obj_banlist = json_object_new_object(); - json_object * l_json_arr_banlist = json_object_new_array(); - dap_global_db_obj_t *l_objs = dap_global_db_get_all_sync(l_penalty_group, &l_penalties_count); - for (size_t i = 0; i < l_penalties_count; i++) { - dap_chain_addr_t *l_validator_addr = dap_chain_addr_from_str(l_objs[i].key); - json_object* l_ban_validator = json_object_new_object(); - json_object_object_add(l_ban_validator, "node_addr", json_object_new_string(dap_chain_addr_to_str_static(l_validator_addr))); - json_object_array_add(l_json_arr_banlist, l_ban_validator); - } - if (!json_object_array_length(l_json_arr_banlist)) { - json_object_object_add(l_json_obj_banlist, "BANLIST", json_object_new_string("empty")); - } else { - json_object_object_add(l_json_obj_banlist, "BANLIST", l_json_arr_banlist); - } - json_object_array_add(*a_json_arr_reply, l_json_obj_banlist); - - json_object* l_json_obj_status = json_object_new_object(); - json_object_object_add(l_json_obj_status, "ban_list_count", json_object_new_int(l_penalties_count)); - json_object_object_add(l_json_obj_status, "sync_attempt", json_object_new_uint64(l_session->cur_round.sync_attempt)); - json_object_object_add(l_json_obj_status, "round_id", json_object_new_uint64(l_session->cur_round.id)); - json_object_array_add(*a_json_arr_reply, l_json_obj_status); - if (l_session->esbocs->last_submitted_candidate_timestamp) { - char l_time_buf[DAP_TIME_STR_SIZE] = {'\0'}; - dap_time_to_str_rfc822(l_time_buf, DAP_TIME_STR_SIZE, l_session->esbocs->last_submitted_candidate_timestamp); - json_object_object_add(l_json_obj_status, "last_submitted_candidate_timestamp", json_object_new_string(l_time_buf)); - } - dap_chain_datum_iter_t *l_datum_iter = l_session->chain->callback_datum_iter_create(l_session->chain); - dap_chain_datum_t * l_last_datum = l_session->chain->callback_datum_iter_get_last(l_datum_iter); - if (l_last_datum) { - char l_time_buf[DAP_TIME_STR_SIZE] = {'\0'}; - dap_time_to_str_rfc822(l_time_buf, DAP_TIME_STR_SIZE, l_last_datum->header.ts_create); - json_object_object_add(l_json_obj_status, "last_accepted_block_time", json_object_new_string(l_time_buf)); - } - l_session->chain->callback_datum_iter_delete(l_datum_iter); - - if (l_session->esbocs->last_directive_accept_timestamp) { - char l_time_buf[DAP_TIME_STR_SIZE] = {'\0'}; - dap_time_to_str_rfc822(l_time_buf, DAP_TIME_STR_SIZE, l_session->esbocs->last_directive_accept_timestamp); - json_object_object_add(l_json_obj_status, "last_directive_accept_timestamp", json_object_new_string(l_time_buf)); - } - - if (l_session->esbocs->last_directive_vote_timestamp) { - char l_time_buf[DAP_TIME_STR_SIZE] = {'\0'}; - dap_time_to_str_rfc822(l_time_buf, DAP_TIME_STR_SIZE, l_session->esbocs->last_directive_vote_timestamp); - json_object_object_add(l_json_obj_status, "last_directive_vote_timestamp", json_object_new_string(l_time_buf)); - } - } break; - default: dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_COM_ESBOCS_SUB_ERR,"Unrecognized subcommand '%s'", a_argv[l_arg_index - 1]); } -- GitLab