From e66a5ed3d7d88da2c417501f2e7f689d2ef4ee93 Mon Sep 17 00:00:00 2001 From: "pavel.uhanov" <pavel.uhanov@demlabs.net> Date: Fri, 12 Apr 2024 11:59:19 +0300 Subject: [PATCH] [*] resolve --- dap-sdk | 2 +- modules/net/dap_chain_net.c | 29 +++++++----- modules/net/dap_chain_net_balancer.c | 47 ++++++++++---------- modules/net/dap_chain_node.c | 9 +--- modules/net/include/dap_chain_net.h | 3 +- modules/net/include/dap_chain_net_balancer.h | 2 +- modules/net/include/dap_chain_node.h | 2 +- 7 files changed, 46 insertions(+), 48 deletions(-) diff --git a/dap-sdk b/dap-sdk index 21fae326ae..794906bf94 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 21fae326aec5a89dde44c0152e4ca3b4886c28f1 +Subproject commit 794906bf946a3f84f32d2b2cdf6abdd5ceda5915 diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index bdcffb0885..3f74907ba4 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -132,6 +132,11 @@ static bool s_debug_more = false; +struct request_link_info { + char addr[DAP_HOSTADDR_STRLEN + 1]; + uint16_t port; +}; + struct block_reward { uint64_t block_number; uint256_t reward; @@ -179,7 +184,7 @@ typedef struct dap_chain_net_pvt{ dap_stream_node_addr_t *authorized_nodes_addrs; uint16_t seed_nodes_count; - dap_link_info_t **seed_nodes_info; + struct request_link_info **seed_nodes_info; struct chain_sync_context sync_context; @@ -412,7 +417,7 @@ dap_chain_net_state_t dap_chain_net_get_target_state(dap_chain_net_t *a_net) return l_ret; } -static dap_link_info_t *s_balancer_link_from_cfg(dap_chain_net_t *a_net) +static struct request_link_info *s_balancer_link_from_cfg(dap_chain_net_t *a_net) { switch (PVT(a_net)->seed_nodes_count) { case 0: return log_it(L_ERROR, "No available links! Add them in net config"), NULL; @@ -439,7 +444,7 @@ dap_stream_node_addr_t *dap_chain_net_get_authorized_nodes(dap_chain_net_t *a_ne return dap_cluster_get_all_members_addrs(PVT(a_net)->nodes_cluster->role_cluster, a_nodes_count, DAP_GDB_MEMBER_ROLE_ROOT); } -int dap_net_link_add(dap_chain_net_t *a_net, dap_stream_node_addr_t *a_addr, const char *a_host, uint16_t a_port) +int dap_chain_net_link_add(dap_chain_net_t *a_net, dap_stream_node_addr_t *a_addr, const char *a_host, uint16_t a_port) { bool l_is_link_present = dap_link_manager_link_find(a_addr, a_net->pub.id.uint64); if (l_is_link_present || a_addr->uint64 == g_node_addr.uint64) @@ -487,7 +492,7 @@ static void s_link_manager_callback_connected(dap_link_t *a_link, uint64_t a_net &l_announce, sizeof(l_announce)); } -bool dap_chain_net_check_link_is_premanent(dap_chain_net_t *a_net, dap_stream_node_addr_t a_addr) +static bool s_net_check_link_is_premanent(dap_chain_net_t *a_net, dap_stream_node_addr_t a_addr) { dap_chain_net_pvt_t *l_net_pvt = PVT(a_net); for (uint16_t i = 0; i < l_net_pvt->permanent_links_count; i++) { @@ -510,7 +515,7 @@ static bool s_link_manager_callback_disconnected(dap_link_t *a_link, uint64_t a_ // func work dap_chain_net_t *l_net = dap_chain_net_by_id((dap_chain_net_id_t){.uint64 = a_net_id}); dap_chain_net_pvt_t *l_net_pvt = PVT(l_net); - bool l_link_is_permanent = dap_chain_net_check_link_is_premanent(l_net, a_link->addr); + bool l_link_is_permanent = s_net_check_link_is_premanent(l_net, a_link->addr); log_it(L_INFO, "%s."NODE_ADDR_FP_STR" can't connect for now. %s", l_net ? l_net->pub.name : "(unknown)" , NODE_ADDR_FP_ARGS_S(a_link->addr), l_link_is_permanent ? "Setting reconnection pause for it." : "Dropping it."); @@ -562,12 +567,12 @@ int s_link_manager_link_request(uint64_t a_net_id) return -2; if (l_net_pvt->state == NET_STATE_LINKS_PREPARE) l_net_pvt->state = NET_STATE_LINKS_CONNECTING; - dap_link_info_t *l_balancer_link = s_balancer_link_from_cfg(l_net); + struct request_link_info *l_balancer_link = s_balancer_link_from_cfg(l_net); if (!l_balancer_link) { log_it(L_ERROR, "Can't process balancer link %s request", dap_chain_net_balancer_type_to_str(PVT(l_net)->balancer_type)); return -5; } - return dap_chain_net_balancer_request(l_net, l_balancer_link, PVT(l_net)->balancer_type); + return dap_chain_net_balancer_request(l_net, l_balancer_link->addr, l_balancer_link->port, PVT(l_net)->balancer_type); } int s_link_manager_fill_net_info(dap_link_t *a_link) @@ -1953,7 +1958,7 @@ int s_net_init(const char *a_net_name, uint16_t a_acl_idx) l_seed_nodes_hosts = dap_config_get_array_str(l_cfg, "general", "bootstrap_hosts", &l_net_pvt->seed_nodes_count); if (!l_net_pvt->seed_nodes_count) log_it(L_WARNING, "Can't read seed nodes addresses, work with local balancer only"); - else if (!(l_net_pvt->seed_nodes_info = DAP_NEW_Z_COUNT(dap_link_info_t*, l_net_pvt->seed_nodes_count))) { + else if (!(l_net_pvt->seed_nodes_info = DAP_NEW_Z_COUNT(struct request_link_info *, l_net_pvt->seed_nodes_count))) { log_it(L_CRITICAL, "%s", g_error_memory_alloc); dap_chain_net_delete(l_net); dap_config_close(l_cfg); @@ -1969,15 +1974,15 @@ int s_net_init(const char *a_net_name, uint16_t a_acl_idx) dap_config_close(l_cfg); return -16; } - l_net_pvt->seed_nodes_info[i] = DAP_NEW_Z(dap_link_info_t); + l_net_pvt->seed_nodes_info[i] = DAP_NEW_Z(struct request_link_info); if (!l_net_pvt->seed_nodes_info[i]) { log_it(L_CRITICAL, "%s", g_error_memory_alloc); dap_chain_net_delete(l_net); dap_config_close(l_cfg); return -4; } - l_net_pvt->seed_nodes_info[i]->uplink_port = l_port; - dap_strncpy(l_net_pvt->seed_nodes_info[i]->uplink_addr, l_host, DAP_HOSTADDR_STRLEN); + l_net_pvt->seed_nodes_info[i]->port = l_port; + dap_strncpy(l_net_pvt->seed_nodes_info[i]->addr, l_host, DAP_HOSTADDR_STRLEN); } /* *** Chains init by configs *** */ @@ -2260,7 +2265,7 @@ int s_net_load(dap_chain_net_t *a_net) DAP_CLUSTER_ROLE_VIRTUAL); DAP_DELETE(l_gdb_groups_mask); // Nodes and its aliases cluster - l_net->pub.gdb_nodes = dap_strdup_printf("%s.nodes",l_net->pub.gdb_groups_prefix); + l_net->pub.gdb_nodes = dap_strdup_printf("%s.nodes.list",l_net->pub.gdb_groups_prefix); l_net->pub.gdb_nodes_aliases = dap_strdup_printf("%s.nodes.aliases",l_net->pub.gdb_groups_prefix); l_gdb_groups_mask = dap_strdup_printf("%s.nodes*", l_net->pub.gdb_groups_prefix); l_net_pvt->nodes_cluster = dap_global_db_cluster_add(dap_global_db_instance_get_default(), diff --git a/modules/net/dap_chain_net_balancer.c b/modules/net/dap_chain_net_balancer.c index 78a41d11e0..591778a033 100644 --- a/modules/net/dap_chain_net_balancer.c +++ b/modules/net/dap_chain_net_balancer.c @@ -35,7 +35,8 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/lic #define LOG_TAG "dap_chain_net_balancer" typedef struct dap_balancer_link_request { - dap_link_info_t *info; + const char* host_addr; + uint16_t host_port; dap_chain_net_t *net; dap_worker_t *worker; uint16_t required_links_count; @@ -49,15 +50,14 @@ static const size_t s_max_links_response_count = (DAP_BALANCER_MAX_REPLY_SIZE - * @param a_net - responce net * @param a_host_info - host info */ -struct json_object *s_balancer_states_json_collect(dap_chain_net_t *a_net, dap_link_info_t *a_host_info) +struct json_object *s_balancer_states_json_collect(dap_chain_net_t *a_net, const char* a_host_addr, uint16_t a_host_port) { struct json_object *l_json = json_object_new_object(); json_object_object_add(l_json, "class" , json_object_new_string("BalancerRequest")); json_object_object_add(l_json, "networkName" , json_object_new_string((const char*)a_net->pub.name)); - json_object_object_add(l_json, "nodeAddress" , json_object_new_string(dap_stream_node_addr_to_str_static(a_host_info ? a_host_info->node_addr : g_node_addr))); - json_object_object_add(l_json, "hostAddress" , json_object_new_string(a_host_info ? a_host_info->uplink_addr : "localhost")); - if (a_host_info) - json_object_object_add(l_json, "hostPort" , json_object_new_int(a_host_info->uplink_port)); + json_object_object_add(l_json, "hostAddress" , json_object_new_string(a_host_addr ? a_host_addr : "localhost")); + if (a_host_addr) + json_object_object_add(l_json, "hostPort" , json_object_new_int(a_host_port)); return l_json; } @@ -101,7 +101,7 @@ static dap_chain_net_links_t *s_get_ignored_node_addrs(dap_chain_net_t *a_net, s * @param a_link_full_node_list - getted node list * @param a_host_info - host info */ -static void s_balancer_link_prepare_success(dap_chain_net_t* a_net, dap_chain_net_links_t *a_link_full_node_list, dap_link_info_t *a_host_info) +static void s_balancer_link_prepare_success(dap_chain_net_t* a_net, dap_chain_net_links_t *a_link_full_node_list, const char* a_host_addr, uint16_t a_host_port) { char l_err_str[128] = {0}; struct json_object *l_json; @@ -109,9 +109,9 @@ static void s_balancer_link_prepare_success(dap_chain_net_t* a_net, dap_chain_ne dap_link_info_t *l_link_info = (dap_link_info_t *)a_link_full_node_list->nodes_info + i; log_it(L_DEBUG,"Link " NODE_ADDR_FP_STR " [ %s : %u ] prepare success", NODE_ADDR_FP_ARGS_S(l_link_info->node_addr), l_link_info->uplink_addr, l_link_info->uplink_port); - if (dap_net_link_add(a_net, &l_link_info->node_addr, l_link_info->uplink_addr, l_link_info->uplink_port)) + if (dap_chain_net_link_add(a_net, &l_link_info->node_addr, l_link_info->uplink_addr, l_link_info->uplink_port)) continue; - l_json = s_balancer_states_json_collect(a_net, a_host_info); + l_json = s_balancer_states_json_collect(a_net, a_host_addr, a_host_port); snprintf(l_err_str, sizeof(l_err_str) , "Link " NODE_ADDR_FP_STR " prepared" , NODE_ADDR_FP_ARGS_S(l_link_info->node_addr)); @@ -138,7 +138,7 @@ void s_http_balancer_link_prepare_success(void *a_response, size_t a_response_si if (a_response_size < sizeof(dap_chain_net_links_t) + sizeof(dap_link_info_t) || a_response_size > l_response_size_need) { log_it(L_ERROR, "Invalid balancer response size %zu (expected %zu)", a_response_size, l_response_size_need); } else { - s_balancer_link_prepare_success(l_balancer_request->net, l_link_full_node_list, l_balancer_request->info); + s_balancer_link_prepare_success(l_balancer_request->net, l_link_full_node_list, l_balancer_request->host_addr, l_balancer_request->host_port); } DAP_DELETE(l_balancer_request); } @@ -149,9 +149,9 @@ void s_http_balancer_link_prepare_success(void *a_response, size_t a_response_si * @param a_host_addr - host addr * @param a_errno - error code */ -static void s_balancer_link_prepare_error(dap_balancer_link_request_t *a_request, const char *a_host_addr, int a_errno) +static void s_balancer_link_prepare_error(dap_balancer_link_request_t *a_request, const char *a_host_addr, uint16_t a_host_port, int a_errno) { - struct json_object *l_json = s_balancer_states_json_collect(a_request->net, a_request->info); + struct json_object *l_json = s_balancer_states_json_collect(a_request->net, a_host_addr, a_host_port); char l_err_str[512] = { '\0' }; dap_snprintf(l_err_str, sizeof(l_err_str) , "Link from balancer %s can't be prepared, errno %d" @@ -170,7 +170,7 @@ static void s_balancer_link_prepare_error(dap_balancer_link_request_t *a_request static void s_http_balancer_link_prepare_error(int a_errno, void *a_arg) { dap_balancer_link_request_t *l_balancer_request = (dap_balancer_link_request_t *)a_arg; - s_balancer_link_prepare_error(l_balancer_request, l_balancer_request->info->uplink_addr, a_errno); + s_balancer_link_prepare_error(l_balancer_request, l_balancer_request->host_addr, l_balancer_request->host_port, a_errno); DAP_DELETE(l_balancer_request); } @@ -187,7 +187,7 @@ static dap_chain_net_links_t *s_get_node_addrs(dap_chain_net_t *a_net, uint16_t // sanity check dap_return_val_if_pass(!a_net, NULL); // preparing - dap_list_t *l_nodes_list = dap_get_nodes_states_list_sort(a_net, a_ignored ? (dap_chain_node_addr_t *)a_ignored->nodes_info : (dap_chain_node_addr_t *)NULL, a_ignored ? a_ignored->count_node : 0); + dap_list_t *l_nodes_list = dap_chain_node_get_states_list_sort(a_net, a_ignored ? (dap_chain_node_addr_t *)a_ignored->nodes_info : (dap_chain_node_addr_t *)NULL, a_ignored ? a_ignored->count_node : 0); if (!l_nodes_list) { log_it(L_WARNING, "There isn't any nodes in net %s", a_net->pub.name); return NULL; @@ -226,7 +226,7 @@ static dap_chain_net_links_t *s_get_node_addrs_old(dap_chain_net_t *a_net, uint1 // sanity check dap_return_val_if_pass(!a_net, NULL); // preparing - dap_list_t *l_nodes_list = dap_get_nodes_states_list_sort(a_net, NULL, 0); + dap_list_t *l_nodes_list = dap_chain_node_get_states_list_sort(a_net, NULL, 0); if (!l_nodes_list) { log_it(L_WARNING, "There isn't any nodes in net %s", a_net->pub.name); return NULL; @@ -395,7 +395,7 @@ dap_link_info_t *dap_chain_net_balancer_dns_issue_link(const char *a_net_name) * @param a_balancer_type - http or DNS * @return if ok 0, error - other */ -int dap_chain_net_balancer_request(dap_chain_net_t *a_net, dap_link_info_t *a_balancer_link, int a_balancer_type) +int dap_chain_net_balancer_request(dap_chain_net_t *a_net, const char *a_host_addr, uint16_t a_host_port, int a_balancer_type) { // sanity check dap_return_val_if_pass(!a_net, -1); @@ -406,7 +406,7 @@ int dap_chain_net_balancer_request(dap_chain_net_t *a_net, dap_link_info_t *a_ba // links from local GDB dap_chain_net_links_t *l_links = s_get_node_addrs(a_net, l_required_links_count, l_ignored_addrs, false); if (l_links) { - s_balancer_link_prepare_success(a_net, l_links, NULL); + s_balancer_link_prepare_success(a_net, l_links, NULL, 0); if (l_links->count_node >= l_required_links_count) { DAP_DEL_MULTY(l_ignored_addrs, l_links); return 0; @@ -415,7 +415,7 @@ int dap_chain_net_balancer_request(dap_chain_net_t *a_net, dap_link_info_t *a_ba l_required_links_count -= l_links->count_node; DAP_DELETE(l_links); } - if (!a_balancer_link) { + if (!a_host_addr || !a_host_port) { log_it(L_INFO, "Can't read seed nodes addresses, work with local balancer only"); return 0; } @@ -423,13 +423,14 @@ int dap_chain_net_balancer_request(dap_chain_net_t *a_net, dap_link_info_t *a_ba dap_balancer_link_request_t *l_balancer_request = NULL; DAP_NEW_Z_RET_VAL(l_balancer_request, dap_balancer_link_request_t, -4, NULL); *l_balancer_request = (dap_balancer_link_request_t) { - .info = a_balancer_link, + .host_addr = a_host_addr, + .host_port = a_host_port, .net = a_net, .worker = dap_events_worker_get_auto(), .required_links_count = l_required_links_count }; log_it(L_DEBUG, "Start balancer %s request to %s:%u", - dap_chain_net_balancer_type_to_str(a_balancer_type), l_balancer_request->info->uplink_addr, l_balancer_request->info->uplink_port); + dap_chain_net_balancer_type_to_str(a_balancer_type), l_balancer_request->host_addr, l_balancer_request->host_port); int ret; if (a_balancer_type == DAP_CHAIN_NET_BALANCER_TYPE_HTTP) { @@ -450,8 +451,8 @@ int dap_chain_net_balancer_request(dap_chain_net_t *a_net, dap_link_info_t *a_ba a_net->pub.name, l_ignored_addrs_str ? l_ignored_addrs_str : ""); ret = dap_client_http_request(l_balancer_request->worker, - l_balancer_request->info->uplink_addr, - l_balancer_request->info->uplink_port, + l_balancer_request->host_addr, + l_balancer_request->host_port, "GET", "text/text", l_request, @@ -464,7 +465,7 @@ int dap_chain_net_balancer_request(dap_chain_net_t *a_net, dap_link_info_t *a_ba NULL) == NULL; DAP_DEL_MULTY(l_ignored_addrs_str, l_request); } else { - l_balancer_request->info->uplink_port = DNS_LISTEN_PORT; + l_balancer_request->host_port = DNS_LISTEN_PORT; // TODO: change signature and implementation ret = /* dap_chain_node_info_dns_request(l_balancer_request->worker, l_link_node_info->hdr.ext_addr_v4, diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c index b9eb1d6519..5328f70f02 100644 --- a/modules/net/dap_chain_node.c +++ b/modules/net/dap_chain_node.c @@ -61,7 +61,6 @@ typedef struct dap_chain_node_net_states_info { static const uint64_t s_cmp_delta_timestamp = (uint64_t)1000 /*sec*/ * (uint64_t)1000000000; static const uint64_t s_cmp_delta_atom = 50; static const uint64_t s_timer_update_states_info = 10 /*sec*/ * 1000; -static _Thread_local dap_chain_net_t *s_checked_net = NULL; /** * @brief get states info about current @@ -384,11 +383,6 @@ static int s_node_states_info_cmp(dap_list_t *a_first, dap_list_t *a_second) dap_chain_node_states_info_t *a = (dap_chain_node_states_info_t *)a_first->data; dap_chain_node_states_info_t *b = (dap_chain_node_states_info_t *)a_second->data; - bool l_a_permanent = dap_chain_net_check_link_is_premanent(s_checked_net, a->link_info.node_addr); - bool l_b_permanent = dap_chain_net_check_link_is_premanent(s_checked_net, b->link_info.node_addr); - if(l_a_permanent && l_b_permanent) return 0; - if(l_a_permanent) return 1; - if(l_b_permanent) return -1; if(a->timestamp > b->timestamp && a->timestamp - b->timestamp > s_cmp_delta_timestamp) return -1; if(b->timestamp > a->timestamp && b->timestamp - a->timestamp > s_cmp_delta_timestamp) return 1; if(a->atoms_count > b->atoms_count && a->atoms_count - b->atoms_count > s_cmp_delta_atom) return -1; @@ -403,7 +397,7 @@ static int s_node_states_info_cmp(dap_list_t *a_first, dap_list_t *a_second) * @param a_net - pointer to net * @return pointer to sorted list or NULL if error */ -dap_list_t *dap_get_nodes_states_list_sort(dap_chain_net_t *a_net, dap_chain_node_addr_t *a_ignored, size_t a_ignored_count) +dap_list_t *dap_chain_node_get_states_list_sort(dap_chain_net_t *a_net, dap_chain_node_addr_t *a_ignored, size_t a_ignored_count) { // sanity check dap_return_val_if_pass(!a_net || (a_ignored_count && !a_ignored), NULL); @@ -416,7 +410,6 @@ dap_list_t *dap_get_nodes_states_list_sort(dap_chain_net_t *a_net, dap_chain_nod } char *l_gdb_group = dap_strdup_printf("%s.nodes.states", a_net->pub.gdb_groups_prefix); dap_list_t *l_ret = NULL; - s_checked_net = a_net; for (size_t i = 0; i < l_node_count; ++i) { if (!l_objs[i].value) { log_it(L_ERROR, "Invalid record, key %s", l_objs[i].key); diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h index dc17b25a2c..0d34cf4918 100644 --- a/modules/net/include/dap_chain_net.h +++ b/modules/net/include/dap_chain_net.h @@ -148,7 +148,6 @@ dap_chain_node_role_t dap_chain_net_get_role(dap_chain_net_t * a_net); dap_chain_node_info_t *dap_chain_net_get_my_node_info(dap_chain_net_t *a_net); bool dap_chain_net_is_my_node_authorized(dap_chain_net_t *a_net); dap_stream_node_addr_t *dap_chain_net_get_authorized_nodes(dap_chain_net_t *a_net, size_t *a_nodes_count); -bool dap_chain_net_check_link_is_premanent(dap_chain_net_t *a_net, dap_stream_node_addr_t a_addr); int dap_chain_net_add_auth_nodes_to_cluster(dap_chain_net_t *a_net, dap_global_db_cluster_t *a_cluster); bool dap_chain_net_add_validator_to_clusters(dap_chain_t *a_chain, dap_stream_node_addr_t *a_addr); @@ -157,7 +156,7 @@ dap_global_db_cluster_t *dap_chain_net_get_mempool_cluster(dap_chain_t *a_chain) int dap_chain_net_add_reward(dap_chain_net_t *a_net, uint256_t a_reward, uint64_t a_block_num); uint256_t dap_chain_net_get_reward(dap_chain_net_t *a_net, uint64_t a_block_num); -int dap_net_link_add(dap_chain_net_t *a_net, dap_stream_node_addr_t *a_addr, const char *a_host, uint16_t a_port); +int dap_chain_net_link_add(dap_chain_net_t *a_net, dap_stream_node_addr_t *a_addr, const char *a_host, uint16_t a_port); /** * @brief dap_chain_net_get_gdb_group_mempool diff --git a/modules/net/include/dap_chain_net_balancer.h b/modules/net/include/dap_chain_net_balancer.h index dd9326e2ad..a7aa901dab 100644 --- a/modules/net/include/dap_chain_net_balancer.h +++ b/modules/net/include/dap_chain_net_balancer.h @@ -54,4 +54,4 @@ void dap_chain_net_balancer_http_issue_link(dap_http_simple_t *a_http_simple, vo dap_link_info_t *dap_chain_net_balancer_dns_issue_link(const char *a_net_name); int dap_chain_net_balancer_handshake(dap_chain_node_info_t *a_node_info, dap_chain_net_t * a_net); dap_string_t *dap_chain_net_balancer_get_node_str(dap_chain_net_t *a_net); -int dap_chain_net_balancer_request(dap_chain_net_t *a_net, dap_link_info_t *a_balancer_link, int a_balancer_type); \ No newline at end of file +int dap_chain_net_balancer_request(dap_chain_net_t *a_net, const char *a_host_addr, uint16_t a_host_port, int a_balancer_type); \ No newline at end of file diff --git a/modules/net/include/dap_chain_node.h b/modules/net/include/dap_chain_node.h index 060142c652..2ee68992d8 100644 --- a/modules/net/include/dap_chain_node.h +++ b/modules/net/include/dap_chain_node.h @@ -91,5 +91,5 @@ bool dap_chain_node_mempool_process(dap_chain_t *a_chain, dap_chain_datum_t *a_d void dap_chain_node_mempool_process_all(dap_chain_t *a_chain, bool a_force); bool dap_chain_node_mempool_autoproc_init(); inline static void dap_chain_node_mempool_autoproc_deinit() {} -dap_list_t *dap_get_nodes_states_list_sort(dap_chain_net_t *a_net, dap_chain_node_addr_t *a_ignored, size_t a_ignored_count); +dap_list_t *dap_chain_node_get_states_list_sort(dap_chain_net_t *a_net, dap_chain_node_addr_t *a_ignored, size_t a_ignored_count); dap_string_t *dap_chain_node_states_info_read(dap_chain_net_t *a_net, dap_stream_node_addr_t a_addr); \ No newline at end of file -- GitLab