From 0d8cb1da7daf338b7648b531d1cd179b18413610 Mon Sep 17 00:00:00 2001 From: "oljas.jarasbaev" <oljas.jarasbaev@demlabs.net> Date: Sat, 25 Jan 2025 07:48:35 +0000 Subject: [PATCH] Feature 14735 --- dap-sdk | 2 +- modules/net/dap_chain_node.c | 17 +++++++++++------ modules/net/dap_chain_node_cli_cmd.c | 19 ++++++++++++++++--- modules/net/include/dap_chain_node.h | 2 +- modules/type/blocks/dap_chain_cs_blocks.c | 2 +- 5 files changed, 30 insertions(+), 12 deletions(-) diff --git a/dap-sdk b/dap-sdk index 2c0c158387..270a200b4f 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 2c0c158387ff85fb2d334b67735c3a5eb1770da8 +Subproject commit 270a200b4f491822276cbecf29f0a465962aec7c diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c index 779b9bce4e..fe232823cf 100644 --- a/modules/net/dap_chain_node.c +++ b/modules/net/dap_chain_node.c @@ -304,7 +304,7 @@ bool dap_chain_node_mempool_need_process(dap_chain_t *a_chain, dap_chain_datum_t } /* Return true if processed datum should be deleted from mempool */ -bool dap_chain_node_mempool_process(dap_chain_t *a_chain, dap_chain_datum_t *a_datum, const char *a_datum_hash_str) +bool dap_chain_node_mempool_process(dap_chain_t *a_chain, dap_chain_datum_t *a_datum, const char *a_datum_hash_str, int * a_ret) { if (!a_chain->callback_add_datums) { log_it(L_ERROR, "Not found chain callback for datums processing"); @@ -333,8 +333,11 @@ bool dap_chain_node_mempool_process(dap_chain_t *a_chain, dap_chain_datum_t *a_d l_verify_datum != DAP_CHAIN_CS_VERIFY_CODE_TX_NO_PREVIOUS && l_verify_datum != DAP_CHAIN_CS_VERIFY_CODE_TX_NO_EMISSION && l_verify_datum != DAP_CHAIN_CS_VERIFY_CODE_NOT_ENOUGH_SIGNS && - l_verify_datum != DAP_CHAIN_CS_VERIFY_CODE_NO_DECREE) - return true; + l_verify_datum != DAP_CHAIN_CS_VERIFY_CODE_NO_DECREE) { + if (a_ret) + *a_ret = l_verify_datum; + return true; + } return false; } @@ -407,11 +410,13 @@ void dap_chain_node_mempool_process_all(dap_chain_t *a_chain, bool a_force) } } } - - if (dap_chain_node_mempool_process(a_chain, l_datum, l_objs[i].key)) { + int l_ret = 0; + if (dap_chain_node_mempool_process(a_chain, l_datum, l_objs[i].key, &l_ret)) { // Delete processed objects log_it(L_INFO, " ! Delete datum %s from mempool", l_objs[i].key); - dap_global_db_del(l_gdb_group_mempool, l_objs[i].key, NULL, NULL); + char* l_ret_str = dap_strdup_printf("%d", l_ret); + dap_global_db_del_ex(l_gdb_group_mempool, l_objs[i].key, l_ret_str, strlen(l_ret_str)+1 , NULL, NULL); + DAP_DELETE(l_ret_str); } else { log_it(L_INFO, " ! Datum %s remains in mempool", l_objs[i].key); } diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 1e68cd41bf..ae8e775299 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -631,19 +631,18 @@ int com_global_db(int a_argc, char ** a_argv, void **a_str_reply) dap_cli_server_cmd_set_reply_text(a_str_reply, "Record with key %s in group %s not found", l_key_str, l_group_str); return -121; }*/ + json_object* json_obj_read = json_object_new_object(); if (l_ts) { char l_ts_str[80] = { '\0' }; dap_nanotime_to_str_rfc822(l_ts_str, sizeof(l_ts_str), l_ts); char *l_value_hexdump = dap_dump_hex(l_value_out, l_out_len); if (l_value_hexdump) { char *l_value_hexdump_new = dap_strdup_printf("\n%s", l_value_hexdump); - json_object* json_obj_read = json_object_new_object(); json_object_object_add(json_obj_read, "group", json_object_new_string(l_group_str)); json_object_object_add(json_obj_read, "key", json_object_new_string(l_key_str)); json_object_object_add(json_obj_read, "time", json_object_new_string(l_ts_str)); json_object_object_add(json_obj_read, "value len", json_object_new_uint64(l_out_len)); json_object_object_add(json_obj_read, "value hex", json_object_new_string(l_value_hexdump_new)); - json_object_array_add(*a_json_arr_reply, json_obj_read); DAP_DELETE(l_value_hexdump_new); DAP_DELETE(l_value_hexdump); } else { @@ -651,12 +650,26 @@ int com_global_db(int a_argc, char ** a_argv, void **a_str_reply) "\n\"%s : %s\"\nTime: %s\nNo value\n", l_group_str, l_key_str, l_ts_str); } - DAP_DELETE(l_value_out); + } else if (dap_global_db_group_match_mask(l_group_str, "*.mempool") && !l_value_out) { + // read hole value (error) in mempool + dap_store_obj_t* l_read_obj = dap_global_db_get_raw_sync(l_group_str, l_key_str); + if (!l_read_obj || !l_read_obj->value || !l_read_obj->value_len) { + dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_COM_GLOBAL_DB_TIME_NO_VALUE, + "\n\"%s : %s\"\nNo value\n", + l_group_str, l_key_str); + } else { + json_object_object_add(json_obj_read, "group", json_object_new_string(l_group_str)); + json_object_object_add(json_obj_read, "key", json_object_new_string(l_key_str)); + json_object_object_add(json_obj_read, "error", json_object_new_string((char*)l_read_obj->value)); + } + dap_store_obj_free_one(l_read_obj); } else { dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_COM_GLOBAL_DB_RECORD_NOT_FOUND, "\nRecord \"%s : %s\" not found\n", l_group_str, l_key_str); } + DAP_DELETE(l_value_out); + json_object_array_add(*a_json_arr_reply, json_obj_read); return DAP_CHAIN_NODE_CLI_COM_GLOBAL_DB_JSON_OK; } case CMD_DELETE: diff --git a/modules/net/include/dap_chain_node.h b/modules/net/include/dap_chain_node.h index 320748529e..f5fb177f1f 100644 --- a/modules/net/include/dap_chain_node.h +++ b/modules/net/include/dap_chain_node.h @@ -85,7 +85,7 @@ dap_chain_node_info_t* dap_chain_node_info_read(dap_chain_net_t *l_net, dap_chai int dap_chain_node_init(); bool dap_chain_node_mempool_need_process(dap_chain_t *a_chain, dap_chain_datum_t *a_datum); -bool dap_chain_node_mempool_process(dap_chain_t *a_chain, dap_chain_datum_t *a_datum, const char *a_datum_hash_str); +bool dap_chain_node_mempool_process(dap_chain_t *a_chain, dap_chain_datum_t *a_datum, const char *a_datum_hash_str, int * a_ret); void dap_chain_node_mempool_process_all(dap_chain_t *a_chain, bool a_force); bool dap_chain_node_mempool_autoproc_init(); inline static void dap_chain_node_mempool_autoproc_deinit() {} diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index 3b2083799c..e5a9083d5f 100644 --- a/modules/type/blocks/dap_chain_cs_blocks.c +++ b/modules/type/blocks/dap_chain_cs_blocks.c @@ -733,7 +733,7 @@ static int s_cli_blocks(int a_argc, char ** a_argv, void **a_str_reply) &l_datum_size, NULL, NULL); l_datums[0] = l_datum; for (size_t i = 0; i < l_datums_count; i++) { - if ( dap_chain_node_mempool_process(l_chain, l_datums[i], l_subcmd_str_arg) ) { + if ( dap_chain_node_mempool_process(l_chain, l_datums[i], l_subcmd_str_arg, NULL) ) { dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_COM_BLOCK_VERIF_ERR, "Error! Datum %s doesn't pass verifications, examine node log files", l_subcmd_str_arg); DAP_DEL_MULTY(l_datum, l_datums, l_gdb_group_mempool); -- GitLab