From 1aeebd66514cdb8d3c90182b36b787fe302cf303 Mon Sep 17 00:00:00 2001 From: "Constantin P." <papizh.konstantin@demlabs.net> Date: Thu, 19 Sep 2024 17:36:40 +0700 Subject: [PATCH] Errors fixes + out-of-scope usage fix --- modules/chain/dap_chain_ch.c | 33 +++++------ .../dap_stream_ch_chain_net_srv.c | 8 +-- .../chain-net/dap_stream_ch_chain_net.c | 17 ++---- modules/common/dap_chain_datum_decree.c | 4 +- .../consensus/dag-poa/dap_chain_cs_dag_poa.c | 43 +++++++------- modules/mempool/dap_chain_mempool.c | 4 +- modules/net/dap_chain_node_cli_cmd.c | 57 ++++++------------- .../stake/dap_chain_net_srv_stake_lock.c | 4 +- 8 files changed, 64 insertions(+), 106 deletions(-) diff --git a/modules/chain/dap_chain_ch.c b/modules/chain/dap_chain_ch.c index 6c71b25332..57ef34f7f4 100644 --- a/modules/chain/dap_chain_ch.c +++ b/modules/chain/dap_chain_ch.c @@ -618,33 +618,32 @@ static bool s_sync_in_chains_callback(void *a_arg) DAP_DELETE(l_args); return false; } - char *l_atom_hash_str = NULL; - l_atom_hash_str = DAP_NEW_STACK_SIZE(char, DAP_CHAIN_HASH_FAST_STR_SIZE); - dap_hash_fast_t l_atom_hash = {}; + dap_hash_str_t l_atom_hash_str = { }; + dap_hash_fast_t l_atom_hash = { }; dap_hash_fast(l_atom, l_atom_size, &l_atom_hash); if (s_debug_more) - dap_get_data_hash_str_static(l_atom, l_atom_size, l_atom_hash_str); + l_atom_hash_str = dap_get_data_hash_str(l_atom, l_atom_size); dap_chain_atom_verify_res_t l_atom_add_res = l_chain->callback_atom_add(l_chain, l_atom, l_atom_size, &l_atom_hash, false); bool l_ack_send = false; switch (l_atom_add_res) { case ATOM_PASS: debug_if(s_debug_more, L_WARNING, "Atom with hash %s for %s:%s not accepted (code ATOM_PASS, already present)", - l_atom_hash_str, l_chain->net_name, l_chain->name); + &l_atom_hash_str, l_chain->net_name, l_chain->name); l_ack_send = true; break; case ATOM_MOVE_TO_THRESHOLD: - debug_if(s_debug_more, L_INFO, "Thresholded atom with hash %s for %s:%s", l_atom_hash_str, l_chain->net_name, l_chain->name); + debug_if(s_debug_more, L_INFO, "Thresholded atom with hash %s for %s:%s", &l_atom_hash_str, l_chain->net_name, l_chain->name); break; case ATOM_ACCEPT: - debug_if(s_debug_more, L_INFO, "Accepted atom with hash %s for %s:%s", l_atom_hash_str, l_chain->net_name, l_chain->name); + debug_if(s_debug_more, L_INFO, "Accepted atom with hash %s for %s:%s", &l_atom_hash_str, l_chain->net_name, l_chain->name); l_ack_send = true; break; case ATOM_REJECT: { - debug_if(s_debug_more, L_WARNING, "Atom with hash %s for %s:%s rejected", l_atom_hash_str, l_chain->net_name, l_chain->name); + debug_if(s_debug_more, L_WARNING, "Atom with hash %s for %s:%s rejected", &l_atom_hash_str, l_chain->net_name, l_chain->name); break; } case ATOM_FORK: { - debug_if(s_debug_more, L_WARNING, "Atom with hash %s for %s:%s added to a fork branch.", l_atom_hash_str, l_chain->net_name, l_chain->name); + debug_if(s_debug_more, L_WARNING, "Atom with hash %s for %s:%s added to a fork branch.", &l_atom_hash_str, l_chain->net_name, l_chain->name); l_ack_send = true; break; } @@ -776,12 +775,9 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) l_args->addr = a_ch->stream->node; l_args->ack_req = true; memcpy(l_args->data, l_chain_pkt, l_ch_pkt->hdr.data_size); - if (s_debug_more) { - char *l_atom_hash_str; - dap_get_data_hash_str_static(l_chain_pkt->data, l_chain_pkt_data_size, l_atom_hash_str); - log_it(L_INFO, "In: CHAIN pkt: atom hash %s, size %zd, net id %" DAP_UINT64_FORMAT_U ", chain id %" DAP_UINT64_FORMAT_U, - l_atom_hash_str, l_chain_pkt_data_size, l_chain_pkt->hdr.net_id.uint64, l_chain_pkt->hdr.chain_id.uint64); - } + debug_if(s_debug_more, L_INFO, "In: CHAIN pkt: atom hash %s, size %zd, net id %" DAP_UINT64_FORMAT_U ", chain id %" DAP_UINT64_FORMAT_U, + dap_get_data_hash_str(l_chain_pkt->data, l_chain_pkt_data_size).s, l_chain_pkt_data_size, + l_chain_pkt->hdr.net_id.uint64, l_chain_pkt->hdr.chain_id.uint64); dap_proc_thread_callback_add(a_ch->stream_worker->worker->proc_queue_input, s_sync_in_chains_callback, l_args); } break; @@ -1498,11 +1494,8 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) } l_chain_pkt->hdr.data_size = l_chain_pkt_data_size; memcpy(l_args->data, l_chain_pkt, l_ch_pkt->hdr.data_size); - if (s_debug_legacy) { - char *l_atom_hash_str; - dap_get_data_hash_str_static(l_chain_pkt->data, l_chain_pkt_data_size, l_atom_hash_str); - log_it(L_INFO, "In: CHAIN_OLD pkt: atom hash %s (size %zd)", l_atom_hash_str, l_chain_pkt_data_size); - } + debug_if(s_debug_legacy, L_INFO, "In: CHAIN_OLD pkt: atom hash %s (size %zd)", + dap_get_data_hash_str(l_chain_pkt->data, l_chain_pkt_data_size).s, l_chain_pkt_data_size); dap_proc_thread_callback_add(a_ch->stream_worker->worker->proc_queue_input, s_sync_in_chains_callback, l_args); } break; diff --git a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c index 5dcf39ce43..66822232bd 100644 --- a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c +++ b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c @@ -1124,7 +1124,6 @@ static bool s_grace_period_finish(dap_chain_net_srv_grace_usage_t *a_grace_item) } // make receipt or tx - char *l_receipt_hash_str; dap_chain_datum_tx_receipt_t *l_receipt = NULL; if (l_grace->usage->receipt_next){ l_receipt = l_grace->usage->receipt_next; @@ -1158,8 +1157,7 @@ static bool s_grace_period_finish(dap_chain_net_srv_grace_usage_t *a_grace_item) log_it(L_WARNING, "Tx already in chain, but receipt is not signed by client. Finish grace and wait receipt sign responce."); RET_WITH_DEL_A_GRACE(DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_RECEIPT_NO_SIGN); } - dap_get_data_hash_str_static(l_receipt, l_receipt_size, l_receipt_hash_str); - dap_global_db_set(SRV_RECEIPTS_GDB_GROUP, l_receipt_hash_str, l_receipt, l_receipt_size, false, NULL, NULL); + dap_global_db_set(SRV_RECEIPTS_GDB_GROUP, dap_get_data_hash_str(l_receipt, l_receipt_size).s, l_receipt, l_receipt_size, false, NULL, NULL); // Form input transaction char *l_hash_str = dap_hash_fast_to_str_new(&l_grace->usage->tx_cond_hash); log_it(L_NOTICE, "Trying create input tx cond from tx %s with active receipt", l_hash_str); @@ -1447,9 +1445,7 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void *a_arg) } // Store receipt if any problems with transactions - char *l_receipt_hash_str; - dap_get_data_hash_str_static(l_receipt, l_receipt_size, l_receipt_hash_str); - dap_global_db_set(SRV_RECEIPTS_GDB_GROUP, l_receipt_hash_str, l_receipt, l_receipt_size, false, NULL, NULL); + dap_global_db_set(SRV_RECEIPTS_GDB_GROUP, dap_get_data_hash_str(l_receipt, l_receipt_size).s, l_receipt, l_receipt_size, false, NULL, NULL); size_t l_success_size; if (!l_usage->is_grace) { // Form input transaction diff --git a/modules/channel/chain-net/dap_stream_ch_chain_net.c b/modules/channel/chain-net/dap_stream_ch_chain_net.c index fe4c18c862..ec9fffdf12 100644 --- a/modules/channel/chain-net/dap_stream_ch_chain_net.c +++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c @@ -113,17 +113,12 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void* a_arg) dap_stream_ch_chain_net_t * l_ch_chain_net = DAP_STREAM_CH_CHAIN_NET(a_ch); if(l_ch_chain_net) { dap_stream_ch_pkt_t *l_ch_pkt = (dap_stream_ch_pkt_t *)a_arg; - if (l_ch_pkt->hdr.type == DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_TEST) { - char *l_data_hash_str; - dap_get_data_hash_str_static(l_ch_pkt->data, l_ch_pkt->hdr.data_size, l_data_hash_str); - log_it(L_ATT, "Receive test data packet with hash %s", l_data_hash_str); - return false; - } - if (l_ch_pkt->hdr.data_size < sizeof(dap_stream_ch_chain_net_pkt_t)) { - log_it(L_WARNING, "Too small stream channel N packet size %u (header size %zu)", - l_ch_pkt->hdr.data_size, sizeof(dap_stream_ch_chain_net_pkt_t)); - return false; - } + if (l_ch_pkt->hdr.type == DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_TEST) + return log_it(L_ATT, "Receive test data packet with hash %s", + dap_get_data_hash_str(l_ch_pkt->data, l_ch_pkt->hdr.data_size).s), false; + if (l_ch_pkt->hdr.data_size < sizeof(dap_stream_ch_chain_net_pkt_t)) + return log_it(L_WARNING, "Too small stream channel N packet size %u (header size %zu)", + l_ch_pkt->hdr.data_size, sizeof(dap_stream_ch_chain_net_pkt_t)), false; dap_stream_ch_chain_net_pkt_t *l_ch_chain_net_pkt = (dap_stream_ch_chain_net_pkt_t *)l_ch_pkt->data; if ((uint32_t)l_ch_chain_net_pkt->hdr.data_size + sizeof(dap_stream_ch_chain_net_pkt_t) > l_ch_pkt->hdr.data_size) { log_it(L_WARNING, "Too small stream channel N packet size %u (expected at least %zu)", diff --git a/modules/common/dap_chain_datum_decree.c b/modules/common/dap_chain_datum_decree.c index 5ef31fc6f9..467d98c872 100644 --- a/modules/common/dap_chain_datum_decree.c +++ b/modules/common/dap_chain_datum_decree.c @@ -200,9 +200,7 @@ void dap_chain_datum_decree_dump_json(json_object *a_json_out, dap_chain_datum_d } dap_pkey_t *l_owner_pkey = /*DAP_NEW_STACK_SIZE(dap_pkey_t, l_tsd->size); memcpy(l_owner_pkey, l_tsd->data, l_tsd->size);*/ _dap_tsd_get_object(l_tsd, dap_pkey_t); - char *l_owner_pkey_str; - dap_get_data_hash_str_static(l_owner_pkey->pkey, l_owner_pkey->header.size, l_owner_pkey_str); - json_object_object_add(a_json_out, "Owner fingerprint", json_object_new_string(l_owner_pkey_str)); + json_object_object_add(a_json_out, "Owner fingerprint", json_object_new_string(dap_get_data_hash_str(l_owner_pkey->pkey, l_owner_pkey->header.size).s)); break; case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_MIN_OWNER: if (l_tsd->size > sizeof(uint256_t)){ diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c index 6d337c206e..2c82fa4cd2 100644 --- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c +++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c @@ -545,9 +545,9 @@ static bool s_callback_round_event_to_chain_callback_get_round_item(dap_global_d pthread_rwlock_unlock(&l_poa_pvt->rounds_rwlock); uint16_t l_max_signs_count = 0; dap_list_t *l_dups_list = NULL; - char *l_key = NULL; - size_t i, j, l_expired_vals[a_values_count]; - for (i = 0, j = 0; i < a_values_count; i++) { + size_t i, e, k; + const char *l_complete_keys[a_values_count], *l_expired_keys[a_values_count]; + for (i = 0, e = 0, k = 0; i < a_values_count; i++) { if (!strcmp(DAG_ROUND_CURRENT_KEY, a_values[i].key)) continue; if (a_values[i].value_len <= sizeof(dap_chain_cs_dag_event_round_item_t) + sizeof(dap_chain_cs_dag_event_t)) { @@ -563,43 +563,46 @@ static bool s_callback_round_event_to_chain_callback_get_round_item(dap_global_d l_dups_list = dap_list_append(l_dups_list, l_round_item); if (l_event->header.signs_count > l_max_signs_count) l_max_signs_count = l_event->header.signs_count; - l_key = a_values[i].key; + l_complete_keys[k++] = a_values[i].key; } else if ( dap_nanotime_from_sec(l_poa_pvt->wait_sync_before_complete + l_poa_pvt->confirmations_timeout + 10) < dap_nanotime_now() - l_round_item->round_info.ts_update ) { - l_expired_vals[j++] = i; + l_expired_keys[e++] = a_values[i].key; } } dap_chain_cs_dag_event_round_item_t *l_chosen_item = s_round_event_choose_dup(l_dups_list, l_max_signs_count); dap_list_free(l_dups_list); - char *l_datum_hash_str = dap_hash_fast_to_str_static(&l_arg->datum_hash); + const char *l_datum_hash_str = dap_hash_fast_to_str_static(&l_arg->datum_hash); if (l_chosen_item) { size_t l_event_size = l_chosen_item->event_size; dap_chain_cs_dag_event_t *l_new_atom = (dap_chain_cs_dag_event_t *)l_chosen_item->event_n_signs; - char *l_event_hash_hex_str; - dap_get_data_hash_str_static(l_new_atom, l_event_size, l_event_hash_hex_str); + dap_hash_fast_t l_atom_hash; + dap_hash_fast(l_new_atom, l_event_size, &l_atom_hash); + const char *l_event_hash_hex_str = dap_hash_fast_to_str_static(&l_atom_hash); dap_chain_datum_t *l_datum = dap_chain_cs_dag_event_get_datum(l_new_atom, l_event_size); int l_verify_datum = dap_chain_net_verify_datum_for_add(l_dag->chain, l_datum, &l_chosen_item->round_info.datum_hash); if (!l_verify_datum) { - dap_hash_fast_t l_atom_hash; - dap_hash_fast(l_new_atom, l_event_size, &l_atom_hash); dap_chain_atom_verify_res_t l_res = l_dag->chain->callback_atom_add(l_dag->chain, l_new_atom, l_event_size, &l_atom_hash, true); if (l_res == ATOM_ACCEPT) { - log_it(L_INFO, "Remove event %s with datum %s, round complete", l_key, l_datum_hash_str); - dap_global_db_del_sync(a_group, l_key); - for (; j; --j) { - dap_global_db_obj_t *l_expired_obj = a_values + l_expired_vals[j - 1]; - log_it(L_INFO, "Event %s with datum %s has expired, dump it", l_expired_obj->key, l_datum_hash_str); - dap_global_db_del_sync(a_group, l_expired_obj->key); + for (; k; --k) { + log_it(L_INFO, "Remove event %s with datum %s, round complete", l_complete_keys[k - 1], l_datum_hash_str); + dap_global_db_del_sync(a_group, l_complete_keys[k - 1]); + } + for (; e; --e) { + log_it(L_INFO, "Event %s with datum %s has expired, dump it", l_expired_keys[e - 1], l_datum_hash_str); + dap_global_db_del_sync(a_group, l_expired_keys[e - 1]); } } log_it(L_INFO, "Event %s with datum %s is %s", - l_event_hash_hex_str, l_datum_hash_str, dap_chain_atom_verify_res_str[l_res]); + &l_event_hash_hex_str, l_datum_hash_str, dap_chain_atom_verify_res_str[l_res]); } else { - dap_global_db_del_sync(a_group, l_key); log_it(L_ERROR, "Event %s is not chained: datum %s doesn't pass verification, error \"%s\"", - l_event_hash_hex_str, l_datum_hash_str, dap_chain_net_verify_datum_err_code_to_str(l_datum, l_verify_datum)); + &l_event_hash_hex_str, l_datum_hash_str, dap_chain_net_verify_datum_err_code_to_str(l_datum, l_verify_datum)); + for (; k; --k) { + log_it(L_INFO, "Remove event %s with unverified datum %s", l_complete_keys[k - 1], l_datum_hash_str); + dap_global_db_del_sync(a_group, l_complete_keys[k - 1]); + } } } else /* !l_chosen_item */ log_it(L_WARNING, "No valid candidates to wrap datum %s in current round #%"DAP_UINT64_FORMAT_U"", @@ -666,7 +669,7 @@ static void s_round_changes_notify(dap_store_obj_t *a_obj, void *a_arg) pthread_rwlock_rdlock(&l_poa_pvt->rounds_rwlock); if (l_poa_pvt->event_items) { dap_chain_cs_dag_event_round_item_t *l_round_item = (dap_chain_cs_dag_event_round_item_t*)a_obj->value; - dap_chain_cs_dag_event_t *l_event = (dap_chain_cs_dag_event_t*)(l_round_item->event_n_signs, l_round_item->event_size); + dap_chain_cs_dag_event_t *l_event = (dap_chain_cs_dag_event_t*)(l_round_item->event_n_signs); dap_chain_cs_dag_poa_event_item_t *l_event_item = NULL; dap_hash_fast_t l_datum_hash = l_round_item->round_info.datum_hash; HASH_FIND(hh, l_poa_pvt->event_items, &l_datum_hash, sizeof(l_datum_hash), l_event_item); diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c index 8fc3ad433d..7ca0d0de3b 100644 --- a/modules/mempool/dap_chain_mempool.c +++ b/modules/mempool/dap_chain_mempool.c @@ -1497,9 +1497,7 @@ void dap_chain_mempool_filter(dap_chain_t *a_chain, int *a_removed){ continue; } //Filter hash - char *l_hash_content_str; - dap_get_data_hash_str_static(l_datum->data, l_datum->header.data_size, l_hash_content_str); - if (dap_strcmp(l_hash_content_str, l_objs[i].key) != 0) { + if (dap_strcmp(dap_get_data_hash_str(l_datum->data, l_datum->header.data_size).s, l_objs[i].key) != 0) { l_removed++; log_it(L_NOTICE, "Removed datum from mempool with \"%s\" key group %s. The hash of the contents of the " "datum does not match the key.", l_objs[i].key, l_gdb_group); diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index e8b1aa3c31..ecd031bae9 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -566,8 +566,6 @@ int com_global_db(int a_argc, char ** a_argv, void **a_str_reply) switch (l_subcmd) { case SUMCMD_GET: // Get value { - char *l_hash_str; - dap_get_data_hash_str_static(l_value, l_value_len, l_hash_str); char *l_value_str = DAP_NEW_Z_SIZE(char, l_value_len * 2 + 2); if(!l_value_str) { log_it(L_CRITICAL, "%s", c_error_memory_alloc); @@ -580,7 +578,7 @@ int com_global_db(int a_argc, char ** a_argv, void **a_str_reply) size_t ret = dap_bin2hex(l_value_str, l_value, l_value_len); json_object_object_add(json_obj_rec, "command status", json_object_new_string("Record found")); json_object_object_add(json_obj_rec, "lenght(byte)", json_object_new_uint64(l_value_len)); - json_object_object_add(json_obj_rec, "hash", json_object_new_string(l_hash_str)); + json_object_object_add(json_obj_rec, "hash", json_object_new_string(dap_get_data_hash_str(l_value, l_value_len).s)); json_object_object_add(json_obj_rec, "pinned", l_is_pinned ? json_object_new_string("Yes") : json_object_new_string("No") ); json_object_object_add(json_obj_rec, "value", json_object_new_string(l_value_str)); DAP_DELETE(l_value_str); @@ -6819,9 +6817,8 @@ int com_tx_create_json(int a_argc, char ** a_argv, void **reply) // Add transaction to mempool char *l_gdb_group_mempool_base_tx = dap_chain_net_get_gdb_group_mempool_new(l_chain);// get group name for mempool - char *l_tx_hash_str; - dap_get_data_hash_str_static(l_datum_tx->data, l_datum_tx->header.data_size, l_tx_hash_str); - bool l_placed = !dap_global_db_set(l_gdb_group_mempool_base_tx,l_tx_hash_str, l_datum_tx, l_datum_tx_size, false, NULL, NULL); + char *l_tx_hash_str = dap_get_data_hash_str(l_datum_tx->data, l_datum_tx->header.data_size).s; + bool l_placed = !dap_global_db_set(l_gdb_group_mempool_base_tx, l_tx_hash_str, l_datum_tx, l_datum_tx_size, false, NULL, NULL); DAP_DEL_Z(l_datum_tx); DAP_DELETE(l_gdb_group_mempool_base_tx); @@ -8247,46 +8244,26 @@ static int s_signer_cmd(int a_arg_index, int a_argc, char **a_argv, void **a_str dap_cli_server_cmd_find_option_val(a_argv, a_arg_index, a_argc, l_opts_signer[i].name, (const char **) &l_opts_sign[i]); } - if (!l_opts_sign[OPT_CERT]) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "%s need to be selected", l_opts_signer[OPT_CERT].name); - return -1; - } + if (!l_opts_sign[OPT_CERT]) + return dap_cli_server_cmd_set_reply_text(a_str_reply, "%s need to be selected", l_opts_signer[OPT_CERT].name), -1; dap_chain_net_t *l_network = dap_chain_net_by_name(l_opts_sign[OPT_NET]); - if (!l_network) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "%s network not found", l_opts_sign[OPT_NET]); - return -1; - } + if ( !l_network ) + return dap_cli_server_cmd_set_reply_text(a_str_reply, "%s network not found", l_opts_sign[OPT_NET]), -1; dap_chain_t *l_chain = dap_chain_net_get_chain_by_name(l_network, l_opts_sign[OPT_CHAIN]); - if (!l_chain) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "%s chain not found", l_opts_sign[OPT_CHAIN]); - return -1; - } + if (!l_chain) + return dap_cli_server_cmd_set_reply_text(a_str_reply, "%s chain not found", l_opts_sign[OPT_CHAIN]), -1; - int l_ret = 0; dap_sign_t *l_sign = NULL; - dap_chain_datum_t *l_datum = NULL; - - l_ret = s_get_key_from_file(l_opts_sign[OPT_FILE], l_opts_sign[OPT_MIME], l_opts_sign[OPT_CERT], &l_sign); - if (!l_ret) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "%s cert not found", l_opts_sign[OPT_CERT]); - return -1; - } - - l_datum = dap_chain_datum_create(DAP_CHAIN_DATUM_SIGNER, l_sign->pkey_n_sign, l_sign->header.sign_size); - if (!l_datum) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "not created datum"); - return -1; - } - - l_ret = l_chain->callback_add_datums(l_chain, &l_datum, 1); - - char *l_key_str; - dap_get_data_hash_str_static(l_datum->data, l_datum->header.data_size, l_key_str); - dap_cli_server_cmd_set_reply_text(a_str_reply, "hash: %s", l_key_str); - DAP_DELETE(l_datum); - return l_ret; + if ( !s_get_key_from_file(l_opts_sign[OPT_FILE], l_opts_sign[OPT_MIME], l_opts_sign[OPT_CERT], &l_sign) ) + return dap_cli_server_cmd_set_reply_text(a_str_reply, "%s cert not found", l_opts_sign[OPT_CERT]), -1; + + dap_chain_datum_t * l_datum = dap_chain_datum_create(DAP_CHAIN_DATUM_SIGNER, l_sign->pkey_n_sign, l_sign->header.sign_size); + if (!l_datum) + return dap_cli_server_cmd_set_reply_text(a_str_reply, "not created datum"), -1; + dap_cli_server_cmd_set_reply_text(a_str_reply, "hash: %s", dap_get_data_hash_str(l_datum->data, l_datum->header.data_size)); + return DAP_DELETE(l_datum), l_chain->callback_add_datums(l_chain, &l_datum, 1); } diff --git a/modules/service/stake/dap_chain_net_srv_stake_lock.c b/modules/service/stake/dap_chain_net_srv_stake_lock.c index 53a2166075..b5cbfdd52f 100644 --- a/modules/service/stake/dap_chain_net_srv_stake_lock.c +++ b/modules/service/stake/dap_chain_net_srv_stake_lock.c @@ -1043,10 +1043,8 @@ static int s_stake_lock_callback_verificator(dap_ledger_t *a_ledger, dap_chain_t if (!l_burning_tx) { char l_burning_tx_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE] = { '\0' }; dap_hash_fast_to_str(&l_burning_tx_hash, l_burning_tx_hash_str, DAP_CHAIN_HASH_FAST_STR_SIZE); - char *l_take_tx_hash_str; - dap_get_data_hash_str_static(a_tx_in, dap_chain_datum_tx_get_size(a_tx_in), l_take_tx_hash_str); debug_if(s_debug_more, L_ERROR, "[Legacy] Can't find burning tx with hash %s, obtained from the receipt of take tx %s", - l_burning_tx_hash_str, l_take_tx_hash_str); + l_burning_tx_hash_str, dap_get_data_hash_str(a_tx_in, dap_chain_datum_tx_get_size(a_tx_in)).s); return -10; } } else -- GitLab