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