diff --git a/dap-sdk b/dap-sdk index 3ea2d8efab87f827cc27f903778db66c61074eef..cad9d9aad6754d38daf334a93c4f522439ae87a0 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 3ea2d8efab87f827cc27f903778db66c61074eef +Subproject commit cad9d9aad6754d38daf334a93c4f522439ae87a0 diff --git a/modules/chain/dap_chain.c b/modules/chain/dap_chain.c index 8415b5b77d1b2ef8d267e376f78a70805b6207ff..00410809fb86f219fc939b5bbdccd7f82bb3955b 100644 --- a/modules/chain/dap_chain.c +++ b/modules/chain/dap_chain.c @@ -745,7 +745,7 @@ ssize_t dap_chain_atom_save(dap_chain_cell_t *a_chain_cell, const uint8_t *a_ato log_it(L_CRITICAL, g_error_memory_alloc); continue; } - dap_proc_thread_callback_add(NULL, s_notify_atom_on_thread, l_arg); + dap_proc_thread_callback_add_pri(NULL, s_notify_atom_on_thread, l_arg, DAP_QUEUE_MSG_PRIORITY_LOW); } } if (l_chain->callback_atom_add_from_treshold) { diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index d605dd6e3823b3d6c3ecb363f4c0521afa4499c4..998ceea52d952f03f36ed4b71aa3a71aff815813 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -183,7 +183,7 @@ typedef struct dap_chain_net_pvt{ uint16_t poa_nodes_count; dap_stream_node_addr_t *poa_nodes_addrs; - + bool seeds_is_poas; uint16_t seed_nodes_count; struct sockaddr_in *seed_nodes_ipv4; struct sockaddr_in6 *seed_nodes_ipv6; // TODO @@ -573,14 +573,15 @@ static bool s_net_link_start(dap_chain_net_t *a_net, struct net_link *a_link, ui * @brief s_fill_links_from_root_aliases * @param a_net */ -static void s_fill_links_from_root_aliases(dap_chain_net_t * a_net) +static void s_fill_links_from_root_aliases(dap_chain_net_t *a_net) { dap_chain_net_pvt_t *l_net_pvt = PVT(a_net); for (size_t i = 0; i < l_net_pvt->seed_nodes_count; i++) { dap_chain_node_info_t l_link_node_info = {}; l_link_node_info.hdr.ext_addr_v4 = l_net_pvt->seed_nodes_ipv4[i].sin_addr; l_link_node_info.hdr.ext_port = l_net_pvt->seed_nodes_ipv4[i].sin_port; - l_link_node_info.hdr.address = l_net_pvt->poa_nodes_addrs[i]; + if (PVT(a_net)->seeds_is_poas) + l_link_node_info.hdr.address = l_net_pvt->poa_nodes_addrs[i]; if (s_net_link_add(a_net, &l_link_node_info) > 0) // Maximum links count reached break; } @@ -2549,13 +2550,15 @@ int s_net_init(const char * a_net_name, uint16_t a_acl_idx) if ((l_seed_nodes_ipv4_len && l_seed_nodes_ipv4_len != l_seed_nodes_port_len) || (l_seed_nodes_ipv6_len && l_seed_nodes_ipv6_len != l_seed_nodes_port_len) || (l_seed_nodes_hostnames_len && l_seed_nodes_hostnames_len != l_seed_nodes_port_len) || - (!l_seed_nodes_ipv4_len && !l_seed_nodes_ipv6_len && !l_seed_nodes_hostnames_len)) { + (!l_seed_nodes_ipv4_len && !l_seed_nodes_ipv6_len && !l_seed_nodes_hostnames_len) || + l_net_pvt->poa_nodes_count != l_seed_nodes_port_len) { log_it (L_ERROR, "Configuration mistake for seed nodes"); dap_chain_net_delete(l_net); dap_config_close(l_cfg); return -6; } l_net_pvt->seed_nodes_count = l_seed_nodes_port_len; + l_net_pvt->seeds_is_poas = true; } else { if (!l_bootstrap_nodes_len) log_it(L_WARNING, "Configuration for network %s doesn't contains any links", l_net->pub.name); @@ -2632,6 +2635,11 @@ int s_net_init(const char * a_net_name, uint16_t a_acl_idx) struct sockaddr_in tmp = l_net_pvt->seed_nodes_ipv4[n]; l_net_pvt->seed_nodes_ipv4[n] = l_net_pvt->seed_nodes_ipv4[j]; l_net_pvt->seed_nodes_ipv4[j] = tmp; + if (!l_bootstrap_nodes_len) { + dap_stream_node_addr_t l_addr = l_net_pvt->poa_nodes_addrs[n]; + l_net_pvt->poa_nodes_addrs[n] = l_net_pvt->poa_nodes_addrs[j]; + l_net_pvt->poa_nodes_addrs[j] = l_addr; + } } /* *** Chains init by configs *** */ @@ -3070,7 +3078,7 @@ static void s_nodelist_change_notify(dap_store_obj_t *a_obj, void *a_arg) char l_ts[128] = { '\0' }; dap_nanotime_to_str_rfc822(l_ts, sizeof(l_ts), a_obj->timestamp); - log_it(L_MSG, "Add node "NODE_ADDR_FP_STR" ipv4 %s(ipv6 %s):%s at %s to network\n", + log_it(L_ATT, "Add node "NODE_ADDR_FP_STR" ipv4 %s(ipv6 %s):%s at %s to network\n", NODE_ADDR_FP_ARGS_S(l_node_info->hdr.address), l_node_ipv4_str, dap_itoa(l_node_info->hdr.ext_port), l_ts, l_net->pub.name); diff --git a/modules/net/dap_chain_net_node_list.c b/modules/net/dap_chain_net_node_list.c index f493431055a54c5b0a5098b8ba88d7128de7a124..74ee7e389c6988c5d518bc0336b3f9842edb7f7b 100644 --- a/modules/net/dap_chain_net_node_list.c +++ b/modules/net/dap_chain_net_node_list.c @@ -254,44 +254,3 @@ int dap_chain_net_node_list_request(dap_chain_net_t *a_net, dap_chain_node_info_ s_node_list_request_deinit(l_node_list_request); return ret; } - -static void s_node_list_callback_notify(dap_store_obj_t *a_obj, void *a_arg) -{ - if (!a_arg || !a_obj || !a_obj->key) - return; - dap_chain_net_t *l_net = (dap_chain_net_t *)a_arg; - assert(l_net); - - if (!dap_strcmp(a_obj->group, l_net->pub.gdb_nodes)) { - if (a_obj->value && a_obj->type == DAP_GLOBAL_DB_OPTYPE_ADD) { - dap_chain_node_info_t *l_node_info = (dap_chain_node_info_t *)a_obj->value; - if(l_node_info->info.owner_addr.uint64 == 0){ - log_it(L_NOTICE, "Node %s removed, there is not pinners", a_obj->key); - dap_global_db_del_sync(a_obj->group, a_obj->key); - } else { - char l_node_ipv4_str[INET_ADDRSTRLEN]={ '\0' }, l_node_ipv6_str[INET6_ADDRSTRLEN]={ '\0' }; - inet_ntop(AF_INET, &l_node_info->hdr.ext_addr_v4, l_node_ipv4_str, INET_ADDRSTRLEN); - inet_ntop(AF_INET6, &l_node_info->hdr.ext_addr_v6, l_node_ipv6_str, INET6_ADDRSTRLEN); - char l_ts[128] = { '\0' }; - dap_nanotime_to_str_rfc822(l_ts, sizeof(l_ts), a_obj->timestamp); - - log_it(L_MSG, "Add node "NODE_ADDR_FP_STR" %s %u, pinned by "NODE_ADDR_FP_STR" at %s", - NODE_ADDR_FP_ARGS_S(l_node_info->hdr.address), - l_node_ipv4_str, l_node_info->hdr.ext_port, - NODE_ADDR_FP_ARGS_S(l_node_info->info.owner_addr), - l_ts); - } - } - } -} - -int dap_chain_net_node_list_init() -{ - uint16_t l_net_count = 0; - dap_chain_net_t **l_net_list = dap_chain_net_list(&l_net_count); - for (uint16_t i = 0; i < l_net_count; i++) { - dap_chain_net_add_nodelist_notify_callback(l_net_list[i], s_node_list_callback_notify, l_net_list[i]); - } - DAP_DELETE(l_net_list); - return 0; -}