diff --git a/modules/chain/dap_chain_cell.c b/modules/chain/dap_chain_cell.c index 042512b9cdaa638514d9bbaa098f8a535a137f3f..e442d4a934cd638503ec182e8456c7c676c4b192 100644 --- a/modules/chain/dap_chain_cell.c +++ b/modules/chain/dap_chain_cell.c @@ -93,12 +93,18 @@ dap_chain_cell_t * dap_chain_cell_find_by_id(dap_chain_t * a_chain, dap_chain_ce */ dap_chain_cell_t * dap_chain_cell_create_fill(dap_chain_t * a_chain, dap_chain_cell_id_t a_cell_id) { - dap_chain_cell_t * l_cell = DAP_NEW_Z(dap_chain_cell_t); + dap_chain_cell_t * l_cell = NULL; + pthread_rwlock_wrlock(&a_chain->cell_rwlock); + HASH_FIND(hh, a_chain->cells, &a_cell_id, sizeof(dap_chain_cell_id_t), l_cell); + if (l_cell) { + pthread_rwlock_unlock(&a_chain->cell_rwlock); + return l_cell; + } + l_cell = DAP_NEW_Z(dap_chain_cell_t); l_cell->chain = a_chain; l_cell->id.uint64 = a_cell_id.uint64; l_cell->file_storage_path = dap_strdup_printf("%0"DAP_UINT64_FORMAT_x".dchaincell", l_cell->id.uint64); pthread_rwlock_init(&l_cell->storage_rwlock, NULL); - pthread_rwlock_wrlock(&a_chain->cell_rwlock); HASH_ADD(hh, a_chain->cells, id, sizeof(dap_chain_cell_id_t), l_cell); pthread_rwlock_unlock(&a_chain->cell_rwlock); return l_cell; @@ -114,9 +120,9 @@ dap_chain_cell_t * dap_chain_cell_create_fill(dap_chain_t * a_chain, dap_chain_c */ dap_chain_cell_t * dap_chain_cell_create_fill2(dap_chain_t * a_chain, const char *a_filename) { - dap_chain_cell_id_t l_cell_id; - sscanf(a_filename, "%"DAP_UINT64_FORMAT_x".dchaincell", &l_cell_id.uint64); - return dap_chain_cell_create_fill(a_chain, l_cell_id); + uint64_t l_cell_id_uint64; + dap_sscanf(a_filename, "%"DAP_UINT64_FORMAT_x".dchaincell", &l_cell_id_uint64); + return dap_chain_cell_create_fill(a_chain, (dap_chain_cell_id_t){ .uint64 = l_cell_id_uint64}); } /** diff --git a/modules/net/dap_chain_net_tx.c b/modules/net/dap_chain_net_tx.c index 779d9a5f697fd9b0a932ffe7ad0fe336f80df8a9..cc74bc967d1e4f428a8fba7f78bc049879d128fa 100644 --- a/modules/net/dap_chain_net_tx.c +++ b/modules/net/dap_chain_net_tx.c @@ -231,8 +231,9 @@ void dap_chain_net_get_tx_all(dap_chain_net_t * a_net, dap_chain_net_tx_search_t } // If found TX + if ( l_tx ) { - a_tx_callback(a_net, l_tx, a_arg); + a_tx_callback(a_net, l_tx, a_arg); } } DAP_DEL_Z(l_datums); diff --git a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c index 520364f370bbad592607eb8bb2d6a77bb5fc0210..3d8e45d8c887d54342bbfa069c907a6fc3f8919d 100644 --- a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c +++ b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c @@ -1308,7 +1308,7 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply) DAP_DELETE(l_decree_hash_str); } break; case CMD_LIST: { - l_arg_index++; + l_arg_index++; if (dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "keys", NULL)) { const char *l_net_str = NULL, *l_cert_str = NULL; @@ -1379,6 +1379,8 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply) char *spaces = {"--------------------------------------------------------------------------------------------------------------------"}; char *l_signing_addr_str = NULL; char *l_balance = NULL; + char *l_coins = NULL; + char *l_pkey_hash_str = NULL; char* l_node_address_text_block = NULL; dap_chain_net_get_tx_all(l_net,TX_SEARCH_TYPE_NET,s_get_tx_filter_callback, l_args); l_args->ret = dap_list_sort(l_args->ret, callback_compare_tx_list); @@ -1396,20 +1398,23 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply) dap_string_append_printf(l_str_tmp,"tx_hash:\t%s \n",l_hash_str); l_signing_addr_str = dap_chain_addr_to_str(&l_tx_out_cond->subtype.srv_stake_pos_delegate.signing_addr); + l_pkey_hash_str = dap_chain_hash_fast_to_str_new(&l_tx_out_cond->subtype.srv_stake_pos_delegate.signing_addr.data.hash_fast); + l_coins = dap_chain_balance_to_coins(l_tx_out_cond->header.value); + l_balance = dap_chain_balance_print(l_tx_out_cond->header.value); char *l_pkey_hash_str = dap_chain_hash_fast_to_str_new(&l_tx_out_cond->subtype.srv_stake_pos_delegate.signing_addr.data.hash_fast); - l_balance = dap_chain_balance_to_coins(l_tx_out_cond->header.value); dap_string_append_printf(l_str_tmp,"signing_addr:\t%s \n",l_signing_addr_str); dap_string_append_printf(l_str_tmp,"signing_hash:\t%s \n",l_pkey_hash_str); l_node_address_text_block = dap_strdup_printf("node_address:\t" NODE_ADDR_FP_STR,NODE_ADDR_FP_ARGS_S(l_tx_out_cond->subtype.srv_stake_pos_delegate.signer_node_addr)); dap_string_append_printf(l_str_tmp,"%s \n",l_node_address_text_block); - dap_string_append_printf(l_str_tmp,"value:\t\t%s \n",l_balance); + dap_string_append_printf(l_str_tmp,"value:\t\t%s (%s) \n",l_coins,l_balance); DAP_DELETE(l_node_address_text_block); DAP_DELETE(l_signing_addr_str); DAP_DELETE(l_pkey_hash_str); DAP_DELETE(l_balance); DAP_DELETE(l_hash_str); + DAP_DEL_Z(l_coins); } dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_tmp->str);