diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index 516700b7fb8fb42278938fe8ddbb208dbb3d0b78..15d4a82879b2cd81ec987b247e5938c0eda9b7f7 100644 --- a/modules/type/blocks/dap_chain_cs_blocks.c +++ b/modules/type/blocks/dap_chain_cs_blocks.c @@ -997,8 +997,8 @@ static int s_cli_blocks(int a_argc, char ** a_argv, void **a_str_reply) dap_chain_block_cache_t *l_last_block = HASH_LAST(PVT(l_blocks)->blocks); char l_buf[DAP_TIME_STR_SIZE]; dap_time_to_str_rfc822(l_buf, DAP_TIME_STR_SIZE, l_last_block->ts_created); - json_object_object_add(json_obj_out, "block",json_object_new_uint64(l_last_block->block_number)); - json_object_object_add(json_obj_out, "hash",json_object_new_string(l_last_block->block_hash_str)); + json_object_object_add(json_obj_out, "Last block num",json_object_new_uint64(l_last_block->block_number)); + json_object_object_add(json_obj_out, "Last block hash",json_object_new_string(l_last_block->block_hash_str)); json_object_object_add(json_obj_out, "ts_create",json_object_new_string(l_buf)); sprintf(l_tmp_buff,"%s.%s has blocks - ",l_net->pub.name,l_chain->name); @@ -1006,7 +1006,33 @@ static int s_cli_blocks(int a_argc, char ** a_argv, void **a_str_reply) json_object_array_add(*json_arr_reply, json_obj_out); } break; case SUBCMD_FIND: { - + const char* l_datum_hash_str = NULL; + json_object* json_obj_out = json_object_new_object(); + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-datum", &l_datum_hash_str); + if (!l_datum_hash_str) { + dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_BLOCK_PARAM_ERR, "Command 'block find' requires parameter '-datum'"); + return DAP_CHAIN_NODE_CLI_COM_BLOCK_PARAM_ERR; + } + dap_hash_fast_t l_datum_hash = {}; + int ret_code = 0; + int l_atoms_cnt = 0; + dap_chain_hash_fast_from_str(l_datum_hash_str, &l_datum_hash); + pthread_rwlock_rdlock(&PVT(l_blocks)->datums_rwlock); + dap_chain_block_cache_t *l_curr_block = PVT(l_blocks)->blocks; + json_object* json_arr_bl_cache_out = json_object_new_array(); + for (;l_curr_block;l_curr_block = l_curr_block->hh.next){ + for (size_t i = 0; i < l_curr_block->datum_count; i++){ + if (dap_hash_fast_compare(&l_datum_hash, &l_curr_block->datum_hash[i])){ + json_object_array_add(json_arr_bl_cache_out, json_object_new_string(dap_hash_fast_to_str_static(&l_curr_block->block_hash))); + l_atoms_cnt++; + continue; + } + } + } + pthread_rwlock_unlock(&PVT(l_blocks)->datums_rwlock); + json_object_object_add(json_obj_out, "Blocks", json_arr_bl_cache_out); + json_object_object_add(json_obj_out, "Total",json_object_new_int(l_atoms_cnt)); + json_object_array_add(*json_arr_reply, json_obj_out); } break; case SUBCMD_COUNT: { char l_tmp_buff[70]={0}; diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index e7dca3dd963e765278675e9c9c3b75c31b72fbe5..17ec0958d2bf9ac5d635004aa051eeac298dd2c3 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -1336,6 +1336,8 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply) SUBCMD_EVENT_DUMP, SUBCMD_EVENT_SIGN, SUBCMD_EVENT_COUNT, + SUBCMD_EVENT_LAST, + SUBCMD_EVENT_FIND, SUBCMD_UNDEFINED } l_event_subcmd={0}; @@ -1945,7 +1947,27 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply) dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_ret_str->str); dap_string_free(l_ret_str, true); } break; + case SUBCMD_EVENT_LAST:{ + char l_tmp_buff[70]={0}; + dap_string_t *l_ret_str = dap_string_new(NULL); + pthread_mutex_lock(&PVT(l_dag)->events_mutex); + dap_chain_cs_dag_event_item_t *l_last_event = HASH_LAST(PVT(l_dag)->events); + pthread_mutex_unlock(&PVT(l_dag)->events_mutex); + char l_buf[DAP_TIME_STR_SIZE]; + dap_time_to_str_rfc822(l_buf, DAP_TIME_STR_SIZE, l_last_event->ts_added); + char buf[DAP_TIME_STR_SIZE]; + dap_time_to_str_rfc822(buf, DAP_TIME_STR_SIZE, l_last_event->header.ts_created); + json_object_object_add(json_obj_out, "Last block num",json_object_new_uint64(l_last_block->block_number)); + json_object_object_add(json_obj_out, "Last block hash",json_object_new_string(l_last_block->block_hash_str)); + json_object_object_add(json_obj_out, "ts_create",json_object_new_string(l_buf)); + + sprintf(l_tmp_buff,"%s.%s has blocks - ",l_net->pub.name,l_chain->name); + json_object_object_add(json_obj_out, l_tmp_buff, json_object_new_uint64(PVT(l_blocks)->blocks_count)); + json_object_array_add(*json_arr_reply, json_obj_out); + } break; + case SUBCMD_EVENT_FIND:{ + } break; case SUBCMD_EVENT_SIGN: { // Sign event command char * l_gdb_group_events = l_dag->gdb_group_events_round_new; size_t l_round_item_size = 0;