diff --git a/dap-sdk b/dap-sdk index 61bd9f38eac8773f0decc482f5488a2b520fcfb4..8ea60824482c12c9d9a6902d3d1c56319dc1c18d 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 61bd9f38eac8773f0decc482f5488a2b520fcfb4 +Subproject commit 8ea60824482c12c9d9a6902d3d1c56319dc1c18d diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c index 144b69959c5047e5a094f0ae115207ce73ad769b..383f3ec95e042098793f7e05932e31d5cf296163 100644 --- a/modules/net/dap_chain_ledger.c +++ b/modules/net/dap_chain_ledger.c @@ -625,14 +625,14 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain l_tsd = (dap_tsd_t *)((byte_t *)l_tsd + l_tsd_size); l_tsd_size = dap_tsd_size(l_tsd); if (l_offset + l_tsd_size > a_tsd_total_size || l_offset + l_tsd_size < l_offset) { - log_it(L_WARNING, "Wrong TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } switch (l_tsd->type) { // set flags case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_SET_FLAGS: { if (l_tsd->size != sizeof(uint16_t)) { - log_it(L_WARNING, "Wrong SET_FLAGS TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong SET_FLAGS TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } if (!a_apply) @@ -643,7 +643,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain // unset flags case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_UNSET_FLAGS: { if (l_tsd->size != sizeof(uint16_t)) { - log_it(L_WARNING, "Wrong UNSET_FLAGS TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong UNSET_FLAGS TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } if (!a_apply) @@ -654,7 +654,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain // set total supply case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY: { // 256 if (l_tsd->size != sizeof(uint256_t)) { - log_it(L_WARNING, "Wrong TOTAL_SUPPLY TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TOTAL_SUPPLY TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } if (!a_item_apply_to) { @@ -675,7 +675,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain // Allowed tx receiver addres list add, remove or clear case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_ADD: { if (l_tsd->size != sizeof(dap_chain_addr_t)) { - log_it(L_WARNING, "Wrong TX_RECEIVER_ALLOWED_ADD TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TX_RECEIVER_ALLOWED_ADD TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } // Check if its correct @@ -714,7 +714,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_REMOVE: { if (l_tsd->size != sizeof(dap_chain_addr_t)) { - log_it(L_WARNING, "Wrong TX_RECEIVER_ALLOWED_REMOVE TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TX_RECEIVER_ALLOWED_REMOVE TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } // Check if its correct @@ -757,7 +757,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_CLEAR: { if (l_tsd->size != 0) { - log_it(L_WARNING, "Wrong TX_RECEIVER_ALLOWED_CLEAR TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TX_RECEIVER_ALLOWED_CLEAR TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } DAP_DEL_Z(l_new_tx_recv_allow); @@ -768,7 +768,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain // Blocked tx receiver addres list add, remove or clear case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_BLOCKED_ADD: { if (l_tsd->size != sizeof(dap_chain_addr_t)) { - log_it(L_WARNING, "Wrong TX_RECEIVER_BLOCKED_ADD TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TX_RECEIVER_BLOCKED_ADD TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } // Check if its correct @@ -807,7 +807,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_BLOCKED_REMOVE: { if (l_tsd->size != sizeof(dap_chain_addr_t)) { - log_it(L_WARNING, "Wrong TX_RECEIVER_BLOCKED_REMOVE TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TX_RECEIVER_BLOCKED_REMOVE TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } // Check if its correct @@ -850,7 +850,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_BLOCKED_CLEAR: { if (l_tsd->size != 0) { - log_it(L_WARNING, "Wrong TX_RECEIVER_BLOCKED_CLEAR TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TX_RECEIVER_BLOCKED_CLEAR TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } DAP_DEL_Z(l_new_tx_recv_block); @@ -861,7 +861,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain // Blocked tx sender addres list add, remove or clear case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_ADD: { if (l_tsd->size != sizeof(dap_chain_addr_t)) { - log_it(L_WARNING, "Wrong TX_SENDER_ALLOWED_ADD TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TX_SENDER_ALLOWED_ADD TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } // Check if its correct @@ -900,7 +900,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_REMOVE: { if (l_tsd->size != sizeof(dap_chain_addr_t)) { - log_it(L_WARNING, "Wrong TX_SENDER_ALLOWED_REMOVE TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TX_SENDER_ALLOWED_REMOVE TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } // Check if its correct @@ -944,7 +944,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_CLEAR: { if (l_tsd->size != 0) { - log_it(L_WARNING, "Wrong TX_SENDER_ALLOWED_CLEAR TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TX_SENDER_ALLOWED_CLEAR TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } DAP_DEL_Z(l_new_tx_send_allow); @@ -955,7 +955,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain // Blocked tx sender addres list add, remove or clear case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_ADD: { if (l_tsd->size != sizeof(dap_chain_addr_t)) { - log_it(L_WARNING, "Wrong TX_SENDER_BLOCKED_ADD TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TX_SENDER_BLOCKED_ADD TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } // Check if its correct @@ -996,7 +996,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_REMOVE: { if (l_tsd->size != sizeof(dap_chain_addr_t)) { - log_it(L_WARNING, "Wrong TX_SENDER_BLOCKED_REMOVE TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TX_SENDER_BLOCKED_REMOVE TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } // Check if its correct @@ -1039,7 +1039,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_BLOCKED_CLEAR: { if (l_tsd->size != 0) { - log_it(L_WARNING, "Wrong TX_SENDER_BLOCKED_CLEAR TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TX_SENDER_BLOCKED_CLEAR TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } DAP_DEL_Z(l_new_tx_send_block); @@ -1049,7 +1049,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain case DAP_CHAIN_DATUM_TOKEN_TSD_TOKEN_DESCRIPTION: { if (l_tsd->size == 0 || l_tsd->data[l_tsd->size - 1] != 0) { - log_it(L_ERROR, "Wrong TOKEN_DESCRIPTION TSD format or size %zu, exiting TSD parse", l_tsd_size); + log_it(L_ERROR, "Wrong TOKEN_DESCRIPTION TSD format or size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } if (!a_apply) @@ -1061,7 +1061,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain // Set signs count value need to emission be valid case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID: { if (l_tsd->size != sizeof(uint16_t)) { - log_it(L_WARNING, "Wrong SIGNS_VALID TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong SIGNS_VALID TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } l_new_signs_valid = dap_tsd_get_scalar(l_tsd, uint16_t); @@ -1069,7 +1069,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_PKEYS_ADD: { if (l_tsd->size < sizeof(dap_pkey_t) || l_tsd->size != dap_pkey_get_size((dap_pkey_t *)l_tsd->data)) { - log_it(L_WARNING, "Wrong TOTAL_PKEYS_ADD TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TOTAL_PKEYS_ADD TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } if (!l_new_pkeys && l_new_signs_total && !l_was_pkeys_copied) { @@ -1142,7 +1142,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_PKEYS_REMOVE: { if (l_tsd->size != sizeof(dap_hash_t)) { - log_it(L_WARNING, "Wrong TOTAL_PKEYS_REMOVE TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong TOTAL_PKEYS_REMOVE TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } if (!l_new_pkeys && l_new_signs_total && !l_was_pkeys_copied) { @@ -1201,7 +1201,7 @@ static int s_token_tsd_parse(dap_ledger_token_item_t *a_item_apply_to, dap_chain } if (l_tsd->size != sizeof(dap_chain_datum_token_tsd_delegate_from_stake_lock_t) && l_tsd->size != sizeof(dap_chain_datum_token_tsd_delegate_from_stake_lock_t) + 256 /* Legacy size */) { - log_it(L_WARNING, "Wrong DELEGATE_EMISSION_FROM_STAKE_LOCK TSD size %zu, exiting TSD parse", l_tsd_size); + log_it(L_WARNING, "Wrong DELEGATE_EMISSION_FROM_STAKE_LOCK TSD size %"DAP_UINT64_FORMAT_U", exiting TSD parse", l_tsd_size); return m_ret_cleanup(DAP_LEDGER_CHECK_INVALID_SIZE); } dap_chain_datum_token_tsd_delegate_from_stake_lock_t *l_delegate = dap_tsd_get_object(l_tsd, dap_chain_datum_token_tsd_delegate_from_stake_lock_t); @@ -1410,21 +1410,21 @@ int s_token_add_check(dap_ledger_t *a_ledger, byte_t *a_token, size_t a_token_si dap_sign_t *l_sign = (dap_sign_t *)(l_signs_ptr + l_signs_size); if (l_signs_offset + l_signs_size + sizeof(dap_sign_t) > l_token_size || l_signs_offset + l_signs_size + sizeof(dap_sign_t) < l_signs_offset) { - log_it(L_WARNING, "Incorrect size %zu of datum token, expected at least %zu", l_token_size, + log_it(L_WARNING, "Incorrect size %"DAP_UINT64_FORMAT_U" of datum token, expected at least %zu", l_token_size, l_signs_offset + l_signs_size + sizeof(dap_sign_t)); DAP_DELETE(l_token); return DAP_LEDGER_CHECK_INVALID_SIZE; } uint64_t l_sign_size = dap_sign_get_size(l_sign); if (!l_sign_size || l_sign_size + l_signs_size < l_signs_size) { - log_it(L_WARNING, "Incorrect size %zu of datum token sign", l_sign_size); + log_it(L_WARNING, "Incorrect size %"DAP_UINT64_FORMAT_U" of datum token sign", l_sign_size); DAP_DELETE(l_token); return DAP_LEDGER_CHECK_INVALID_SIZE; } l_signs_size += l_sign_size; } if (l_token_size != l_signs_offset + l_signs_size) { - log_it(L_WARNING, "Incorrect size %zu of datum token, expected %zu", l_token_size, l_signs_offset + l_signs_size); + log_it(L_WARNING, "Incorrect size %"DAP_UINT64_FORMAT_U" of datum token, expected %zu", l_token_size, l_signs_offset + l_signs_size); DAP_DELETE(l_token); return DAP_LEDGER_CHECK_INVALID_SIZE; } diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index f96876ca0c123643f522706371c5c3aef96b8354..43322e732fe08615710de6648ba79c98f2f8895d 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -107,6 +107,7 @@ #include "dap_stream_cluster.h" #include "dap_http_ban_list_client.h" #include "dap_net.h" +#include "dap_context.h" #include <stdio.h> #include <sys/types.h> @@ -154,7 +155,6 @@ typedef struct dap_chain_net_pvt{ dap_chain_node_info_t *node_info; // Current node's info dap_balancer_type_t balancer_type; - bool load_mode; uint16_t permanent_links_count; dap_link_info_t **permanent_links; @@ -193,6 +193,7 @@ static pthread_cond_t s_net_cond = PTHREAD_COND_INITIALIZER; static uint16_t s_net_loading_count = 0; static const char *c_net_states[] = { + [NET_STATE_LOADING] = "NET_STATE_LOADING", [NET_STATE_OFFLINE] = "NET_STATE_OFFLINE", [NET_STATE_LINKS_PREPARE ] = "NET_STATE_LINKS_PREPARE", [NET_STATE_LINKS_CONNECTING] = "NET_STATE_LINKS_CONNECTING", @@ -202,7 +203,7 @@ static const char *c_net_states[] = { }; static inline const char * dap_chain_net_state_to_str(dap_chain_net_state_t a_state) { - return a_state < NET_STATE_OFFLINE || a_state > NET_STATE_ONLINE ? "NET_STATE_INVALID" : c_net_states[a_state]; + return a_state < NET_STATE_LOADING || a_state > NET_STATE_ONLINE ? "NET_STATE_INVALID" : c_net_states[a_state]; } // Node link callbacks @@ -569,7 +570,11 @@ json_object *s_net_sync_status(dap_chain_net_t *a_net) l_jobj_chain_status = json_object_new_string("unknown"); break; } - if (l_chain->state == CHAIN_SYNC_STATE_IDLE) { + if (dap_chain_net_get_load_mode(a_net)) { + char *l_percent_str = dap_strdup_printf("%d %c", l_chain->load_progress, '%'); + l_jobj_percent = json_object_new_string(l_percent_str); + DAP_DELETE(l_percent_str); + } else if (l_chain->state == CHAIN_SYNC_STATE_IDLE) { l_jobj_percent = json_object_new_string(" - %"); } else { double l_percent = dap_min((double)l_chain->callback_count_atom(l_chain) * 100 / l_chain->atom_num_last, 100.0); @@ -737,11 +742,26 @@ void dap_chain_net_load_all() pthread_mutex_unlock(&s_net_cond_lock); return; } + dap_proc_thread_t *l_net_threads = DAP_NEW_Z_COUNT(dap_proc_thread_t, s_net_loading_count); + if (!l_net_threads) { + log_it(L_CRITICAL, "%s", c_error_memory_alloc); + pthread_mutex_unlock(&s_net_cond_lock); + return; + } + int l_net_counter = 0; + uint32_t l_cpu_count = dap_get_cpu_count(); dap_timerfd_t *l_load_notify_timer = dap_timerfd_start(5000, (dap_timerfd_callback_t)s_net_disk_load_notify_callback, NULL); - for (dap_chain_net_t *net = s_nets_by_name; net; net = net->hh.next) - dap_proc_thread_callback_add(NULL, s_net_load, net); + for (dap_chain_net_t *net = s_nets_by_name; net; net = net->hh.next) { + dap_proc_thread_create(l_net_threads + l_net_counter, dap_random_byte() % l_cpu_count); + dap_proc_thread_callback_add(l_net_threads + l_net_counter, s_net_load, net); + ++l_net_counter; + } + assert(l_net_counter == s_net_loading_count); while (s_net_loading_count) pthread_cond_wait(&s_net_cond, &s_net_cond_lock); + for (int i = 0; i < l_net_counter; ++i) + dap_context_stop_n_kill(l_net_threads[i].context); + DAP_DELETE(l_net_threads); pthread_mutex_unlock(&s_net_cond_lock); dap_timerfd_delete_mt(l_load_notify_timer->worker, l_load_notify_timer->esocket_uuid); } @@ -749,11 +769,9 @@ void dap_chain_net_load_all() dap_string_t* dap_cli_list_net() { dap_string_t *l_string_ret = dap_string_new(""); - unsigned l_net_i = 0; dap_string_append(l_string_ret, "Available networks and chains:\n"); for (dap_chain_net_t *net = s_nets_by_name; net; net = net->hh.next) { dap_string_append_printf(l_string_ret, "\t%s:\n", net->pub.name); - ++l_net_i; dap_chain_t *l_chain = net->pub.chains; while (l_chain) { dap_string_append_printf( l_string_ret, "\t\t%s\n", l_chain->name ); @@ -815,8 +833,7 @@ void s_set_reply_text_node_status(void **a_str_reply, dap_chain_net_t * a_net){ char* l_sync_current_link_text_block = NULL; if (PVT(a_net)->state != NET_STATE_OFFLINE) l_sync_current_link_text_block = dap_strdup_printf(", active links %zu from %u", - dap_link_manager_links_count(a_net->pub.id.uint64), - 0 /*HASH_COUNT(PVT(a_net)->net_links)*/); + dap_link_manager_links_count(a_net->pub.id.uint64), 0); dap_cli_server_cmd_set_reply_text(a_str_reply, "Network \"%s\" has state %s (target state %s)%s%s", a_net->pub.name, c_net_states[PVT(a_net)->state], @@ -1236,7 +1253,12 @@ static int s_cli_net(int argc, char **argv, void **reply) return DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED; } json_object_object_add(l_jobj_return, "to", l_jobj_to); - dap_chain_net_state_go_to(l_net, NET_STATE_ONLINE); + if (dap_chain_net_state_go_to(l_net, NET_STATE_ONLINE)) { + json_object_put(l_jobj_return); + dap_json_rpc_error_add(*a_json_arr_reply, DAP_JSON_RPC_ERR_CODE_METHOD_ERR_START, "%s", + "Can't change state of loading network\n"); + return DAP_JSON_RPC_ERR_CODE_METHOD_ERR_START; + } l_ret = DAP_CHAIN_NET_JSON_RPC_OK; } else if ( strcmp(l_go_str,"offline") == 0 ) { json_object *l_jobj_to = json_object_new_string(c_net_states[NET_STATE_OFFLINE]); @@ -1246,7 +1268,12 @@ static int s_cli_net(int argc, char **argv, void **reply) return DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED; } json_object_object_add(l_jobj_return, "to", l_jobj_to); - dap_chain_net_state_go_to(l_net, NET_STATE_OFFLINE); + if ( dap_chain_net_state_go_to(l_net, NET_STATE_OFFLINE) ) { + json_object_put(l_jobj_return); + dap_json_rpc_error_add(*a_json_arr_reply, DAP_JSON_RPC_ERR_CODE_METHOD_ERR_START, "%s", + "Can't change state of loading network\n"); + return DAP_JSON_RPC_ERR_CODE_METHOD_ERR_START; + } l_ret = DAP_CHAIN_NET_JSON_RPC_OK; } else if (strcmp(l_go_str, "sync") == 0) { json_object *l_jobj_to = json_object_new_string("resynchronizing"); @@ -1257,9 +1284,15 @@ static int s_cli_net(int argc, char **argv, void **reply) } json_object_object_add(l_jobj_return, "start", l_jobj_to); if (PVT(l_net)->state_target == NET_STATE_ONLINE) - dap_chain_net_state_go_to(l_net, NET_STATE_ONLINE); + l_ret = dap_chain_net_state_go_to(l_net, NET_STATE_ONLINE); else - dap_chain_net_state_go_to(l_net, NET_STATE_SYNC_CHAINS); + l_ret = dap_chain_net_state_go_to(l_net, NET_STATE_SYNC_CHAINS); + if (l_ret) { + json_object_put(l_jobj_return); + dap_json_rpc_error_add(*a_json_arr_reply, DAP_JSON_RPC_ERR_CODE_METHOD_ERR_START, "%s", + "Can't change state of loading network\n"); + return DAP_JSON_RPC_ERR_CODE_METHOD_ERR_START; + } l_ret = DAP_CHAIN_NET_JSON_RPC_OK; } else { json_object_put(l_jobj_return); @@ -1741,7 +1774,6 @@ int s_net_init(const char *a_net_name, const char *a_path, uint16_t a_acl_idx) return log_it(L_ERROR,"Can't create net \"%s\"", a_net_name), dap_config_close(l_cfg), -1; dap_chain_net_pvt_t *l_net_pvt = PVT(l_net); - l_net_pvt->load_mode = true; l_net_pvt->acl_idx = a_acl_idx; // Transaction can be sent to bridged networks uint16_t l_net_ids_count = 0; @@ -2001,7 +2033,6 @@ bool s_net_load(void *a_arg) log_it(L_NOTICE, "[%s] Chain [%s] processing took %f seconds", l_chain->net_name, l_chain->name, time_taken); l_chain = l_chain->next; } - l_net_pvt->load_mode = false; dap_ledger_load_end(l_net->pub.ledger); // Do specific role actions post-chain created @@ -2173,6 +2204,7 @@ bool s_net_load(void *a_arg) dap_proc_thread_timer_add(NULL, s_sync_timer_callback, l_net, c_sync_timer_period); log_it(L_INFO, "Chain network \"%s\" initialized", l_net->pub.name); + l_net_pvt->state = NET_STATE_OFFLINE; ret: if (l_err_code) log_it(L_ERROR, "Loading chains of net %s finished with (%d) error code.", l_net->pub.name, l_err_code); @@ -2794,7 +2826,7 @@ int dap_chain_datum_remove(dap_chain_t *a_chain, dap_chain_datum_t *a_datum, siz bool dap_chain_net_get_load_mode(dap_chain_net_t * a_net) { - return PVT(a_net)->load_mode; + return PVT(a_net)->state == NET_STATE_LOADING; } int dap_chain_net_add_reward(dap_chain_net_t *a_net, uint256_t a_reward, uint64_t a_block_num) @@ -3245,7 +3277,7 @@ static bool s_net_states_proc(void *a_arg) */ int dap_chain_net_state_go_to(dap_chain_net_t *a_net, dap_chain_net_state_t a_new_state) { - if (PVT(a_net)->load_mode) { + if (dap_chain_net_get_load_mode(a_net)) { log_it(L_ERROR, "Can't change state of loading network '%s'", a_net->pub.name); return -1; } diff --git a/modules/net/dap_chain_net_node_list.c b/modules/net/dap_chain_net_node_list.c index a4d6cb70db35f5732cd880609480a4fded514e3c..ba669e0342d7570a5d3380c723caf212e45ceb68 100644 --- a/modules/net/dap_chain_net_node_list.c +++ b/modules/net/dap_chain_net_node_list.c @@ -107,7 +107,7 @@ void dap_chain_net_node_check_http_issue_link(dap_http_simple_t *a_http_simple, } const char *l_key = dap_stream_node_addr_to_str_static( (dap_chain_node_addr_t){.uint64 = addr} ); if (!l_key) { - log_it(L_ERROR, "Bad node address %zu", addr); + log_it(L_ERROR, "Bad node address %"DAP_UINT64_FORMAT_U, addr); *l_return_code = Http_Status_BadRequest; return; } @@ -287,7 +287,7 @@ int dap_chain_net_node_list_request(dap_chain_net_t *a_net, uint16_t a_port, boo if (!l_link_node_request) return log_it(L_CRITICAL, "%s", c_error_memory_alloc), -4; - char *l_request = dap_strdup_printf( "%s/%s?version=1,method=%c,addr=%zu,port=%hu,net=%s", + char *l_request = dap_strdup_printf( "%s/%s?version=1,method=%c,addr=%"DAP_UINT64_FORMAT_U",port=%hu,net=%s", DAP_UPLINK_PATH_NODE_LIST, DAP_NODE_LIST_URI_HASH, a_cmd, g_node_addr.uint64, a_port, a_net->pub.name ); int l_ret = -1; diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 41a970c69dc0b21a9397eeeade35a1fd8a91657f..7c18b966bd173163e046e22bb43aacda5610a719 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -5434,7 +5434,7 @@ int com_tx_cond_remove(int a_argc, char ** a_argv, void **a_json_arr_reply) uint256_t l_cond_value_sum = {}; size_t l_num_of_hashes = dap_list_length(l_hashes_list); - log_it(L_INFO, "Found %"DAP_UINT64_FORMAT_U" hashes. Start returning funds from transactions.", l_num_of_hashes); + log_it(L_INFO, "Found %zu hashes. Start returning funds from transactions.", l_num_of_hashes); for (dap_list_t * l_tmp = l_hashes_list; l_tmp; l_tmp=l_tmp->next){ dap_hash_fast_t *l_hash = (dap_hash_fast_t*)l_tmp->data; // get tx by hash @@ -8461,7 +8461,7 @@ static dap_tsd_t *s_alloc_metadata (const char *a_file, const int a_meta) struct stat l_st; stat (a_file, &l_st); char l_size[513]; - snprintf(l_size, 513, "%ld", l_st.st_size); + snprintf(l_size, 513, "%lld", l_st.st_size); return dap_tsd_create_string(SIGNER_FILESIZE, l_size); } break; diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h index 304a9037505539a26d3b511d569940396d014976..052ffb7b6d94407e588b3cc6917c3af842b61d8b 100644 --- a/modules/net/include/dap_chain_net.h +++ b/modules/net/include/dap_chain_net.h @@ -48,7 +48,8 @@ typedef struct dap_chain_net_decree dap_chain_net_decree_t; typedef struct decree_table decree_table_t; typedef struct anchor_table anchor_table_t; typedef enum dap_chain_net_state { - NET_STATE_OFFLINE = 0, + NET_STATE_LOADING = 0, + NET_STATE_OFFLINE, NET_STATE_LINKS_PREPARE, NET_STATE_LINKS_CONNECTING, NET_STATE_LINKS_ESTABLISHED,