From 81780f14a9acfc69b0d813257ff62e42c8963ff8 Mon Sep 17 00:00:00 2001
From: "roman.khlopkov" <roman.khlopkov@demlabs.net>
Date: Fri, 9 Feb 2024 21:42:46 +0300
Subject: [PATCH] [*] BUild fix

---
 CMakeLists.txt                                |   2 +-
 modules/CMakeLists.txt                        |   1 -
 modules/chain/CMakeLists.txt                  |   2 +-
 modules/chain/dap_chain.c                     |   6 +-
 .../dap_chain_ch.c}                           | 224 ++----------------
 .../dap_chain_ch_pkt.c}                       |   2 +-
 .../include/dap_chain_ch.h}                   |   4 +-
 .../include/dap_chain_ch_pkt.h}               |   6 -
 modules/channel/chain-net-srv/CMakeLists.txt  |   4 +-
 .../dap_stream_ch_chain_net_srv.h             |   2 +-
 modules/channel/chain-net/CMakeLists.txt      |   5 +-
 .../chain-net/dap_stream_ch_chain_net.c       |   7 +
 .../chain-net/dap_stream_ch_chain_net_pkt.c   |   1 -
 .../chain-voting/dap_stream_ch_chain_voting.c |   3 +-
 modules/channel/chain/CMakeLists.txt          |  22 --
 modules/net/dap_chain_net.c                   |   3 +-
 modules/net/dap_chain_node_cli_cmd.c          |   3 +-
 modules/net/dap_chain_node_client.c           |   8 +-
 modules/type/dag/dap_chain_cs_dag.c           |   6 +-
 19 files changed, 45 insertions(+), 266 deletions(-)
 rename modules/{channel/chain/dap_stream_ch_chain.c => chain/dap_chain_ch.c} (88%)
 rename modules/{channel/chain/dap_stream_ch_chain_pkt.c => chain/dap_chain_ch_pkt.c} (99%)
 rename modules/{channel/chain/include/dap_stream_ch_chain.h => chain/include/dap_chain_ch.h} (94%)
 rename modules/{channel/chain/include/dap_stream_ch_chain_pkt.h => chain/include/dap_chain_ch_pkt.h} (97%)
 delete mode 100644 modules/channel/chain/CMakeLists.txt

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 14b4ffc9cc..08fce37d85 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -85,7 +85,7 @@ endif()
 if (CELLFRAME_MODULES MATCHES "network")
     message("[+] Module 'network'")
     set(CELLFRAME_LIBS ${CELLFRAME_LIBS} dap_io dap_json_rpc dap_enc_server dap_notify_srv dap_http_server dap_session
-        dap_stream dap_stream_ch dap_client dap_cli_server dap_stream_ch_chain dap_stream_ch_chain_net dap_chain_net dap_chain_net_srv dap_stream_ch_chain_voting dap_chain_mempool )
+        dap_stream dap_stream_ch dap_client dap_cli_server dap_stream_ch_chain_net dap_chain_net dap_chain_net_srv dap_stream_ch_chain_voting dap_chain_mempool )
 endif()
 
 # Chain net services
diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt
index 6f7f30de50..188c40318a 100644
--- a/modules/CMakeLists.txt
+++ b/modules/CMakeLists.txt
@@ -22,7 +22,6 @@ if (CELLFRAME_MODULES MATCHES "network")
     add_subdirectory(net/srv)
     add_subdirectory(json_rpc)
     # Stream channels
-    add_subdirectory(channel/chain)
     add_subdirectory(channel/chain-net)
     add_subdirectory(channel/chain-voting)
 endif()
diff --git a/modules/chain/CMakeLists.txt b/modules/chain/CMakeLists.txt
index 892e2ac057..f635a344e3 100644
--- a/modules/chain/CMakeLists.txt
+++ b/modules/chain/CMakeLists.txt
@@ -14,7 +14,7 @@ endif()
 #find_package(PkgConfig REQUIRED)
 #pkg_search_module(GLIB REQUIRED glib-2.0)
 
-target_link_libraries(${PROJECT_NAME} dap_chain_common dap_global_db dap_notify_srv ${GLIB_LDFLAGS})
+target_link_libraries(${PROJECT_NAME} dap_chain_common dap_global_db dap_notify_srv dap_stream ${GLIB_LDFLAGS})
 target_include_directories(${PROJECT_NAME} INTERFACE . include/ ${GLIB_INCLUDE_DIRS})
 target_include_directories(${PROJECT_NAME} PUBLIC include)
 target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../dap-sdk/3rdparty/uthash/src)
diff --git a/modules/chain/dap_chain.c b/modules/chain/dap_chain.c
index efcc10edb4..4afb24c9ae 100644
--- a/modules/chain/dap_chain.c
+++ b/modules/chain/dap_chain.c
@@ -39,6 +39,8 @@
 #include "dap_chain_cell.h"
 #include "dap_chain_cs.h"
 #include "dap_cert_file.h"
+#include "dap_chain_ch.h"
+#include "dap_stream_ch_gossip.h"
 #include <uthash.h>
 #include <pthread.h>
 
@@ -705,13 +707,13 @@ bool dap_chain_get_atom_last_hash(dap_chain_t *a_chain, dap_hash_fast_t *a_atom_
 
 ssize_t dap_chain_atom_save(dap_chain_cell_t *a_chain_cell, const uint8_t *a_atom, size_t a_atom_size, dap_hash_fast_t *a_new_atom_hash)
 {
-    dap_chain_t *l_chain = (l_chain;
+    dap_chain_t *l_chain = a_chain_cell->chain;
     dap_return_val_if_fail(l_chain, -1);
 
     if (a_new_atom_hash) { // Atom is new and need to be distributed for the net
         dap_cluster_t *l_net_cluster = dap_cluster_by_mnemonim(l_chain->net_name);
         if (l_net_cluster)
-            dap_gossip_msg_issue(a_cluster->links_cluster, DAP_STREAM_CH_CHAIN_ID,
+            dap_gossip_msg_issue(l_net_cluster, DAP_STREAM_CH_CHAIN_ID,
                                  a_atom, a_atom_size, a_new_atom_hash);
     }
     ssize_t l_res = dap_chain_cell_file_append(a_chain_cell, a_atom, a_atom_size);
diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/chain/dap_chain_ch.c
similarity index 88%
rename from modules/channel/chain/dap_stream_ch_chain.c
rename to modules/chain/dap_chain_ch.c
index bc9e92affd..e05de2e74f 100644
--- a/modules/channel/chain/dap_stream_ch_chain.c
+++ b/modules/chain/dap_chain_ch.c
@@ -64,9 +64,8 @@
 #include "dap_stream_ch_pkt.h"
 #include "dap_stream_ch.h"
 #include "dap_stream_ch_proc.h"
-#include "dap_stream_ch_chain.h"
-#include "dap_stream_ch_chain_pkt.h"
-#include "dap_chain_net.h"
+#include "dap_chain_ch.h"
+#include "dap_chain_ch_pkt.h"
 
 #define LOG_TAG "dap_stream_ch_chain"
 
@@ -271,16 +270,13 @@ static void s_sync_out_chains_first_worker_callback(dap_worker_t *a_worker, void
 
     l_ch_chain->state = CHAIN_STATE_SYNC_CHAINS;
     l_ch_chain->request_atom_iter = l_sync_request->chain.request_atom_iter;
-    dap_chain_node_addr_t l_node_addr = {};
-    dap_chain_net_t *l_net = dap_chain_net_by_id(l_sync_request->request_hdr.net_id);
-    l_node_addr.uint64 = dap_chain_net_get_cur_addr_int(l_net);
 
     if (s_debug_more )
         log_it(L_INFO,"Out: DAP_STREAM_CH_CHAIN_PKT_TYPE_FIRST_CHAIN");
 
     dap_stream_ch_chain_pkt_write_unsafe(l_ch, DAP_STREAM_CH_CHAIN_PKT_TYPE_FIRST_CHAIN,
             l_ch_chain->request_hdr.net_id.uint64, l_ch_chain->request_hdr.chain_id.uint64,
-            l_ch_chain->request_hdr.cell_id.uint64, &l_node_addr, sizeof(dap_chain_node_addr_t));
+            l_ch_chain->request_hdr.cell_id.uint64, &g_node_addr, sizeof(dap_chain_node_addr_t));
     DAP_DELETE(l_sync_request);
 
 }
@@ -380,16 +376,13 @@ static void s_sync_out_gdb_first_worker_callback(dap_worker_t *a_worker, void *a
         return;
     }
 
-    dap_chain_net_t *l_net = dap_chain_net_by_id(l_ch_chain->request_hdr.net_id);
     // Add it to outgoing list
     l_ch_chain->state = CHAIN_STATE_SYNC_GLOBAL_DB;
-    dap_chain_node_addr_t l_node_addr = { 0 };
-    l_node_addr.uint64 = dap_chain_net_get_cur_addr_int(l_net);
     if (s_debug_more )
         log_it(L_INFO,"Out: DAP_STREAM_CH_CHAIN_PKT_TYPE_FIRST_GLOBAL_DB");
     dap_stream_ch_chain_pkt_write_unsafe(DAP_STREAM_CH(l_ch_chain), DAP_STREAM_CH_CHAIN_PKT_TYPE_FIRST_GLOBAL_DB,
             l_ch_chain->request_hdr.net_id.uint64, l_ch_chain->request_hdr.chain_id.uint64,
-            l_ch_chain->request_hdr.cell_id.uint64, &l_node_addr, sizeof(dap_chain_node_addr_t));
+            l_ch_chain->request_hdr.cell_id.uint64, &g_node_addr, sizeof(dap_chain_node_addr_t));
     if(l_ch_chain->callback_notify_packet_out)
         l_ch_chain->callback_notify_packet_out(l_ch_chain, DAP_STREAM_CH_CHAIN_PKT_TYPE_FIRST_GLOBAL_DB,
                                                 NULL, 0, l_ch_chain->callback_notify_arg);
@@ -475,7 +468,7 @@ static bool s_sync_out_gdb_proc_callback(void *a_arg)
     } else {
          dap_worker_exec_callback_on(dap_events_worker_get(l_sync_request->worker->id), s_sync_out_gdb_last_worker_callback, l_sync_request );
     } */
-    return true;
+    return false;
 }
 
 static void s_sync_update_gdb_start_worker_callback(dap_worker_t *a_worker, void *a_arg)
@@ -534,7 +527,12 @@ static bool s_sync_update_gdb_proc_callback(void *a_arg)
     l_sync_request->request.node_addr.uint64 = dap_chain_net_get_cur_addr_int(l_net);
      dap_worker_exec_callback_on(dap_events_worker_get(l_sync_request->worker->id), s_sync_update_gdb_start_worker_callback, l_sync_request);
      */
-    return true;
+    return false;
+}
+
+static bool s_gdb_in_pkt_proc_callback(void *a_arg)
+{
+    return false;
 }
 
 /**
@@ -636,87 +634,6 @@ static void s_gdb_in_pkt_error_worker_callback(dap_worker_t *a_worker, void *a_a
     DAP_DELETE(l_sync_request);
 }
 
-/**
- * @brief s_gdb_sync_tsd_worker_callback
- * @param a_worker
- * @param a_arg
- */
-static void s_gdb_sync_tsd_worker_callback(dap_worker_t *a_worker, void *a_arg)
-{
-    struct sync_request *l_sync_request = (struct sync_request *) a_arg;
-
-    dap_stream_ch_t *l_ch = dap_stream_ch_find_by_uuid_unsafe(DAP_STREAM_WORKER(a_worker), l_sync_request->ch_uuid);
-    if( l_ch == NULL ) {
-        log_it(L_INFO,"Client disconnected before we sent the reply");
-    } else {
-        size_t l_gr_len = strlen(l_sync_request->gdb.sync_group) + 1;
-        size_t l_data_size = 2 * sizeof(uint64_t) + l_gr_len;
-        dap_tsd_t *l_tsd_rec = DAP_NEW_SIZE(dap_tsd_t, l_data_size + sizeof(dap_tsd_t));
-        l_tsd_rec->type = DAP_STREAM_CH_CHAIN_PKT_TYPE_UPDATE_TSD_LAST_ID;
-        l_tsd_rec->size = l_data_size;
-        uint64_t l_node_addr = dap_chain_net_get_cur_addr_int(dap_chain_net_by_id(l_sync_request->request_hdr.net_id));
-        void *l_data_ptr = l_tsd_rec->data;
-        memcpy(l_data_ptr, &l_node_addr, sizeof(uint64_t));
-        l_data_ptr += sizeof(uint64_t);
-        memcpy(l_data_ptr, &l_sync_request->request.id_end, sizeof(uint64_t));
-        l_data_ptr += sizeof(uint64_t);
-        memcpy(l_data_ptr, l_sync_request->gdb.sync_group, l_gr_len);
-        s_stream_ch_chain_pkt_write(l_ch, DAP_STREAM_CH_CHAIN_PKT_TYPE_UPDATE_GLOBAL_DB_TSD,
-                                             l_sync_request->request_hdr.net_id.uint64,
-                                             l_sync_request->request_hdr.chain_id.uint64,
-                                             l_sync_request->request_hdr.cell_id.uint64,
-                                             l_tsd_rec, l_tsd_rec->size + sizeof(dap_tsd_t));
-        DAP_DELETE(l_tsd_rec);
-    }
-    DAP_DELETE(l_sync_request->gdb.sync_group);
-    DAP_DELETE(l_sync_request);
-}
-
-/**
- * @brief s_gdb_in_pkt_proc_callback_get_ts_callback
- * @param a_global_db_context
- * @param a_rc
- * @param a_group
- * @param a_key
- * @param a_value
- * @param a_value_len
- * @param value_ts
- * @param a_is_pinned
- * @param a_arg
- */
-
-/**
- * @brief s_gdb_in_pkt_callback
- * @param a_thread
- * @param a_arg
- * @return
- */
-static bool s_gdb_in_pkt_proc_callback(void *a_arg)
-{
-    return true;
-}
-
-/**
- * @brief s_gdb_in_pkt_proc_set_raw_callback
- * @param a_global_db_context
- * @param a_rc
- * @param a_group
- * @param a_key
- * @param a_values_current
- * @param a_values_shift
- * @param a_values_count
- * @param a_values
- * @param a_arg
- */
-static bool s_gdb_in_pkt_proc_set_raw_callback(dap_global_db_instance_t *a_dbi,
-                                               int a_rc, const char *a_group,
-                                               const size_t a_values_total, const size_t a_values_count,
-                                               dap_store_obj_t *a_values, void *a_arg)
-{
-    return true;
-}
-
-
 /**
  * @brief dap_stream_ch_chain_create_sync_request_gdb
  * @param a_ch_chain
@@ -842,45 +759,7 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
         return;
     }
     size_t l_chain_pkt_data_size = l_ch_pkt->hdr.data_size - sizeof(l_chain_pkt->hdr);
-    dap_chain_net_t *l_net = dap_chain_net_by_id(l_chain_pkt->hdr.net_id);
-    if (!l_net) {
-        if (l_ch_pkt->hdr.type == DAP_STREAM_CH_CHAIN_PKT_TYPE_ERROR) {
-            if(l_ch_chain->callback_notify_packet_in) {
-                l_ch_chain->callback_notify_packet_in(l_ch_chain, l_ch_pkt->hdr.type, l_chain_pkt,
-                                                      l_chain_pkt_data_size, l_ch_chain->callback_notify_arg);
-            }
-        } else {
-            log_it(L_ERROR, "Invalid request from %s with ext_id %016"DAP_UINT64_FORMAT_x" net id 0x%016"DAP_UINT64_FORMAT_x
-                            " chain id 0x%016"DAP_UINT64_FORMAT_x" cell_id 0x%016"DAP_UINT64_FORMAT_x" in packet",
-                            a_ch->stream->esocket->remote_addr_str, l_chain_pkt->hdr.ext_id,
-                            l_chain_pkt->hdr.net_id.uint64, l_chain_pkt->hdr.chain_id.uint64,
-                            l_chain_pkt->hdr.cell_id.uint64);
-            s_stream_ch_write_error_unsafe(a_ch, l_chain_pkt->hdr.net_id.uint64,
-                                                l_chain_pkt->hdr.chain_id.uint64, l_chain_pkt->hdr.cell_id.uint64,
-                                                "ERROR_NET_INVALID_ID");
-            // Who are you? I don't know you! go away!
-            a_ch->stream->esocket->flags |= DAP_SOCK_SIGNAL_CLOSE;
-        }
-        return;
-    }
-    if (dap_chain_net_get_state(l_net) == NET_STATE_OFFLINE) {
-        s_stream_ch_write_error_unsafe(a_ch, l_chain_pkt->hdr.net_id.uint64,
-                                            l_chain_pkt->hdr.chain_id.uint64, l_chain_pkt->hdr.cell_id.uint64,
-                                            "ERROR_NET_IS_OFFLINE");
-        a_ch->stream->esocket->flags |= DAP_SOCK_SIGNAL_CLOSE;
-        return;
-    }
-    uint16_t l_acl_idx = dap_chain_net_get_acl_idx(l_net);
-    uint8_t l_acl = a_ch->stream->session->acl ? a_ch->stream->session->acl[l_acl_idx] : 1;
-    if (!l_acl) {
-        log_it(L_WARNING, "Unauthorized request attempt from %s to network %s",
-               a_ch->stream->esocket->remote_addr_str,
-               dap_chain_net_by_id(l_chain_pkt->hdr.net_id)->pub.name);
-        s_stream_ch_write_error_unsafe(a_ch, l_chain_pkt->hdr.net_id.uint64,
-                                            l_chain_pkt->hdr.chain_id.uint64, l_chain_pkt->hdr.cell_id.uint64,
-                                            "ERROR_NET_NOT_AUTHORIZED");
-        return;
-    }
+
     s_chain_timer_reset(l_ch_chain);
     switch (l_ch_pkt->hdr.type) {
         /// --- GDB update ---
@@ -897,11 +776,7 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
                             l_chain_pkt->hdr.net_id.uint64, l_chain_pkt->hdr.chain_id.uint64, l_chain_pkt->hdr.cell_id.uint64);
             if (l_chain_pkt_data_size == (size_t)sizeof(dap_stream_ch_chain_sync_request_t))
                 l_ch_chain->request = *(dap_stream_ch_chain_sync_request_t*)l_chain_pkt->data;
-            dap_chain_node_client_t *l_client = (dap_chain_node_client_t *)l_ch_chain->callback_notify_arg;
-            if (l_client && l_client->resync_gdb)
-                l_ch_chain->request.id_start = 0;
-            else
-                l_ch_chain->request.id_start = 1;   // incremental sync by default
+            l_ch_chain->request.id_start = 0;
             struct sync_request *l_sync_request = dap_stream_ch_chain_create_sync_request(l_chain_pkt, a_ch);
             l_ch_chain->stats_request_gdb_processed = 0;
             l_ch_chain->request_hdr = l_chain_pkt->hdr;
@@ -910,26 +785,7 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
 
         // Response with metadata organized in TSD
         case DAP_STREAM_CH_CHAIN_PKT_TYPE_UPDATE_GLOBAL_DB_TSD: {
-            if (l_chain_pkt_data_size) {
-                dap_tsd_t *l_tsd_rec = (dap_tsd_t *)l_chain_pkt->data;
-                if (l_tsd_rec->type != DAP_STREAM_CH_CHAIN_PKT_TYPE_UPDATE_TSD_LAST_ID ||
-                        l_tsd_rec->size < 2 * sizeof(uint64_t) + 2) {
-                    break;
-                }
-                void *l_data_ptr = l_tsd_rec->data;
-                uint64_t l_node_addr = *(uint64_t *)l_data_ptr;
-                l_data_ptr += sizeof(uint64_t);
-                uint64_t l_last_id = *(uint64_t *)l_data_ptr;
-                l_data_ptr += sizeof(uint64_t);
-                char *l_group = (char *)l_data_ptr;
-                //dap_db_set_last_id_remote(l_node_addr, l_last_id, l_group);
-                if (s_debug_more) {
-                    dap_chain_node_addr_t l_addr;
-                    l_addr.uint64 = l_node_addr;
-                    log_it(L_INFO, "Set last_id %"DAP_UINT64_FORMAT_U" for group %s for node "NODE_ADDR_FP_STR,
-                                    l_last_id, l_group, NODE_ADDR_FP_ARGS_S(l_addr));
-                }
-            } else if (s_debug_more)
+            if (s_debug_more)
                 log_it(L_DEBUG, "Global DB TSD packet detected");
         } break;
 
@@ -1064,36 +920,12 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
                                 l_chain_pkt->hdr.net_id.uint64, l_chain_pkt->hdr.chain_id.uint64, l_chain_pkt->hdr.cell_id.uint64);
                 if (!l_ch_chain->callback_notify_packet_in) { // we haven't node client waitng, so reply to other side
                     dap_stream_ch_chain_sync_request_t l_sync_gdb = {};
-                    dap_chain_net_t *l_net = dap_chain_net_by_id(l_chain_pkt->hdr.net_id);
-                    l_sync_gdb.node_addr.uint64 = dap_chain_net_get_cur_addr_int(l_net);
+                    l_sync_gdb.node_addr.uint64 = g_node_addr.uint64;
                     dap_stream_ch_chain_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_PKT_TYPE_UPDATE_GLOBAL_DB_REQ, l_chain_pkt->hdr.net_id.uint64,
                                                   l_chain_pkt->hdr.chain_id.uint64, l_chain_pkt->hdr.cell_id.uint64, &l_sync_gdb, sizeof(l_sync_gdb));
                 }
         } break;
 
-        case DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_GLOBAL_DB_RVRS: {
-            dap_stream_ch_chain_sync_request_t l_sync_gdb = {};
-            l_sync_gdb.id_start = 1;
-            dap_chain_net_t *l_net = dap_chain_net_by_id(l_chain_pkt->hdr.net_id);
-            l_sync_gdb.node_addr.uint64 = dap_chain_net_get_cur_addr_int(l_net);
-            log_it(L_INFO, "In:  SYNC_GLOBAL_DB_RVRS pkt: net 0x%016"DAP_UINT64_FORMAT_x" chain 0x%016"DAP_UINT64_FORMAT_x" cell 0x%016"DAP_UINT64_FORMAT_x
-                           ", request gdb sync from %"DAP_UINT64_FORMAT_U, l_chain_pkt->hdr.net_id.uint64 , l_chain_pkt->hdr.chain_id.uint64,
-                           l_chain_pkt->hdr.cell_id.uint64, l_sync_gdb.id_start );
-            dap_stream_ch_chain_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_GLOBAL_DB, l_chain_pkt->hdr.net_id.uint64,
-                                          l_chain_pkt->hdr.chain_id.uint64, l_chain_pkt->hdr.cell_id.uint64, &l_sync_gdb, sizeof(l_sync_gdb));
-        } break;
-
-        case DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNCED_GLOBAL_DB_GROUP: {
-            if (s_debug_more)
-                log_it(L_INFO, "In:  SYNCED_GLOBAL_DB_GROUP pkt net 0x%016"DAP_UINT64_FORMAT_x" chain 0x%016"DAP_UINT64_FORMAT_x" cell 0x%016"DAP_UINT64_FORMAT_x,
-                                l_chain_pkt->hdr.net_id.uint64, l_chain_pkt->hdr.chain_id.uint64, l_chain_pkt->hdr.cell_id.uint64);
-        } break;
-        case DAP_STREAM_CH_CHAIN_PKT_TYPE_FIRST_GLOBAL_DB_GROUP: {
-            if (s_debug_more)
-                log_it(L_INFO, "In:  FIRST_GLOBAL_DB_GROUP pkt net 0x%016"DAP_UINT64_FORMAT_x" chain 0x%016"DAP_UINT64_FORMAT_x" cell 0x%016"DAP_UINT64_FORMAT_x,
-                                l_chain_pkt->hdr.net_id.uint64, l_chain_pkt->hdr.chain_id.uint64, l_chain_pkt->hdr.cell_id.uint64);
-        } break;
-
         /// --- Chains update ---
         // Request for atoms list update
         case DAP_STREAM_CH_CHAIN_PKT_TYPE_UPDATE_CHAINS_REQ:{
@@ -1357,32 +1189,6 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
             }
         } break;
 
-        case DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS_RVRS: {
-            if(l_chain_pkt_data_size == sizeof(dap_stream_ch_chain_sync_request_t)) {
-                dap_stream_ch_chain_sync_request_t l_request = { };
-                dap_chain_t *l_chain = dap_chain_find_by_id(l_chain_pkt->hdr.net_id, l_chain_pkt->hdr.chain_id);
-                if (l_chain) {
-                    dap_chain_hash_fast_t l_hash;
-                    dap_chain_get_atom_last_hash(l_chain, &l_hash, l_chain_pkt->hdr.cell_id); // Move away from i/o reactor to callback processor
-                    l_request.hash_from = l_hash;
-                    if( dap_log_level_get()<= L_INFO){
-                        char l_hash_from_str[DAP_CHAIN_HASH_FAST_STR_SIZE] = {'\0'};
-                        dap_chain_hash_fast_to_str(&l_hash, l_hash_from_str, DAP_CHAIN_HASH_FAST_STR_SIZE);
-                        log_it(L_INFO, "In:  SYNC_CHAINS_RVRS pkt: net 0x%016"DAP_UINT64_FORMAT_x" chain 0x%016"DAP_UINT64_FORMAT_x" cell 0x%016"DAP_UINT64_FORMAT_x
-                                       "request chains sync from %s", l_chain_pkt->hdr.net_id.uint64, l_chain_pkt->hdr.chain_id.uint64, l_chain_pkt->hdr.cell_id.uint64,
-                                        l_hash_from_str[0] ? l_hash_from_str : "(null)");
-                    }
-                    dap_stream_ch_chain_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS, l_chain_pkt->hdr.net_id.uint64,
-                                                  l_chain_pkt->hdr.chain_id.uint64, l_chain_pkt->hdr.cell_id.uint64, &l_request, sizeof(l_request));
-                }
-            }else{
-                log_it(L_WARNING, "DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS_RVRS: Wrong chain packet size %zd when expected %zd", l_chain_pkt_data_size, sizeof(l_ch_chain->request));
-                s_stream_ch_write_error_unsafe(a_ch, l_chain_pkt->hdr.net_id.uint64,
-                        l_chain_pkt->hdr.chain_id.uint64, l_chain_pkt->hdr.cell_id.uint64,
-                        "ERROR_CHAIN_PKT_DATA_SIZE" );
-            }
-        } break;
-
         case DAP_STREAM_CH_CHAIN_PKT_TYPE_ERROR:{
             char * l_error_str = (char*)l_chain_pkt->data;
             if(l_chain_pkt_data_size>1)
diff --git a/modules/channel/chain/dap_stream_ch_chain_pkt.c b/modules/chain/dap_chain_ch_pkt.c
similarity index 99%
rename from modules/channel/chain/dap_stream_ch_chain_pkt.c
rename to modules/chain/dap_chain_ch_pkt.c
index e4b48b5a6b..7f71ee760c 100644
--- a/modules/channel/chain/dap_stream_ch_chain_pkt.c
+++ b/modules/chain/dap_chain_ch_pkt.c
@@ -18,7 +18,7 @@
 #include "dap_stream_ch.h"
 #include "dap_stream_worker.h"
 #include "dap_stream_ch_pkt.h"
-#include "dap_stream_ch_chain_pkt.h"
+#include "dap_chain_ch_pkt.h"
 #include "dap_chain.h"
 
 #define LOG_TAG "dap_stream_ch_chain_pkt"
diff --git a/modules/channel/chain/include/dap_stream_ch_chain.h b/modules/chain/include/dap_chain_ch.h
similarity index 94%
rename from modules/channel/chain/include/dap_stream_ch_chain.h
rename to modules/chain/include/dap_chain_ch.h
index 3598ebd9b6..0685aaf412 100644
--- a/modules/channel/chain/include/dap_stream_ch_chain.h
+++ b/modules/chain/include/dap_chain_ch.h
@@ -28,9 +28,8 @@
 
 #include "dap_chain_common.h"
 #include "dap_chain.h"
-#include "dap_chain_node_client.h"
 #include "dap_list.h"
-#include "dap_stream_ch_chain_pkt.h"
+#include "dap_chain_ch_pkt.h"
 #include "uthash.h"
 #include "dap_global_db_cluster.h"
 
@@ -94,6 +93,5 @@ typedef struct dap_stream_ch_chain {
 int dap_stream_ch_chain_init(void);
 void dap_stream_ch_chain_deinit(void);
 
-void dap_stream_ch_chain_create_sync_request_gdb(dap_stream_ch_chain_t * a_ch_chain, dap_chain_net_t * a_net);
 void dap_stream_ch_chain_timer_start(dap_stream_ch_chain_t *a_ch_chain);
 void dap_stream_ch_chain_reset_unsafe(dap_stream_ch_chain_t *a_ch_chain);
diff --git a/modules/channel/chain/include/dap_stream_ch_chain_pkt.h b/modules/chain/include/dap_chain_ch_pkt.h
similarity index 97%
rename from modules/channel/chain/include/dap_stream_ch_chain_pkt.h
rename to modules/chain/include/dap_chain_ch_pkt.h
index 69af3d189f..c2b4f60616 100644
--- a/modules/channel/chain/include/dap_stream_ch_chain_pkt.h
+++ b/modules/chain/include/dap_chain_ch_pkt.h
@@ -43,7 +43,6 @@
 
 #define DAP_STREAM_CH_CHAIN_PKT_TYPE_FIRST_CHAIN               0x20
 #define DAP_STREAM_CH_CHAIN_PKT_TYPE_FIRST_GLOBAL_DB           0x21
-#define DAP_STREAM_CH_CHAIN_PKT_TYPE_FIRST_GLOBAL_DB_GROUP     0x31
 
 #define DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS               0x02
 #define DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_GLOBAL_DB            0x12
@@ -52,11 +51,6 @@
 #define DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNCED_CHAINS             0x03
 #define DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNCED_GLOBAL_DB          0x13
 #define DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNCED_ALL                0x23
-#define DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNCED_GLOBAL_DB_GROUP    0x33
-
-#define DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS_RVRS          0x04
-#define DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_GLOBAL_DB_RVRS       0x14
-
 
 #define DAP_STREAM_CH_CHAIN_PKT_TYPE_UPDATE_CHAINS_REQ         0x05
 #define DAP_STREAM_CH_CHAIN_PKT_TYPE_UPDATE_CHAINS_TSD         0x15
diff --git a/modules/channel/chain-net-srv/CMakeLists.txt b/modules/channel/chain-net-srv/CMakeLists.txt
index 993f891e65..39a9e5e9c7 100644
--- a/modules/channel/chain-net-srv/CMakeLists.txt
+++ b/modules/channel/chain-net-srv/CMakeLists.txt
@@ -6,7 +6,7 @@ file(GLOB DAP_STREAM_CH_CHAIN_NET_SRV_HDRS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_STREAM_CH_CHAIN_NET_SRV_SRCS} ${DAP_STREAM_CH_CHAIN_NET_SRV_HDRS})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain_common dap_chain dap_chain_mempool dap_chain_net dap_chain_net_srv dap_io dap_stream dap_stream_ch dap_stream_ch_chain dap_stream_ch_chain_net)
+target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain_common dap_chain dap_chain_mempool dap_chain_net dap_chain_net_srv dap_io dap_stream dap_stream_ch dap_stream_ch_chain_net)
 
 target_include_directories(${PROJECT_NAME} INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
@@ -18,4 +18,4 @@ INSTALL(TARGETS ${PROJECT_NAME}
         ARCHIVE DESTINATION lib/modules/channel/chain-net-srv/
         PUBLIC_HEADER DESTINATION include/modules/channel/chain-net-srv/
 )
-endif()
\ No newline at end of file
+endif()
diff --git a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.h b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.h
index 3346512aa7..18d3f1a112 100644
--- a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.h
+++ b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.h
@@ -53,7 +53,7 @@ typedef struct dap_stream_ch_chain_net_srv {
 } dap_stream_ch_chain_net_srv_t;
 
 #define DAP_STREAM_CH_CHAIN_NET_SRV(a) ((dap_stream_ch_chain_net_srv_t *) ((a)->internal) )
-#define DAP_STREAM_CH_ID_NET_SRV 'R'
+#define DAP_STREAM_CH_NET_SRV_ID 'R'
 
 int dap_stream_ch_chain_net_srv_init(void);
 
diff --git a/modules/channel/chain-net/CMakeLists.txt b/modules/channel/chain-net/CMakeLists.txt
index 7f854714d5..cd64879393 100644
--- a/modules/channel/chain-net/CMakeLists.txt
+++ b/modules/channel/chain-net/CMakeLists.txt
@@ -6,8 +6,7 @@ file(GLOB DAP_STREAM_CH_CHAIN_NET_HDRS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_STREAM_CH_CHAIN_NET_SRCS} ${DAP_STREAM_CH_CHAIN_NET_HDRS})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_stream dap_stream_ch dap_stream_ch_chain
-                                               dap_chain_net dap_chain_net_srv_stake)
+target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_stream dap_stream_ch dap_chain_net dap_chain_net_srv_stake)
 
 target_include_directories(${PROJECT_NAME} INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
@@ -20,4 +19,4 @@ INSTALL(TARGETS ${PROJECT_NAME}
         ARCHIVE DESTINATION lib/modules/channel/chain-net/
         PUBLIC_HEADER DESTINATION include/modules/channel/chain-net/
 )
-endif()
\ No newline at end of file
+endif()
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 28f683a478..317d1b64f2 100644
--- a/modules/channel/chain-net/dap_stream_ch_chain_net.c
+++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c
@@ -156,6 +156,13 @@ void s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void* a_arg)
                                               l_ch_chain_net_pkt->hdr.net_id, l_err_str, sizeof(l_err_str));
             return;
         }
+        /*if (dap_chain_net_get_state(l_net) == NET_STATE_OFFLINE) {
+            s_stream_ch_write_error_unsafe(a_ch, l_chain_pkt->hdr.net_id.uint64,
+                                                l_chain_pkt->hdr.chain_id.uint64, l_chain_pkt->hdr.cell_id.uint64,
+                                                "ERROR_NET_IS_OFFLINE");
+            a_ch->stream->esocket->flags |= DAP_SOCK_SIGNAL_CLOSE;
+            return;
+        }*/
         switch (l_ch_pkt->hdr.type) {
         case DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_ANNOUNCE:
             assert(!dap_stream_node_addr_is_blank(&a_ch->stream->node));
diff --git a/modules/channel/chain-net/dap_stream_ch_chain_net_pkt.c b/modules/channel/chain-net/dap_stream_ch_chain_net_pkt.c
index c43d17b8ca..24be3ab116 100644
--- a/modules/channel/chain-net/dap_stream_ch_chain_net_pkt.c
+++ b/modules/channel/chain-net/dap_stream_ch_chain_net_pkt.c
@@ -19,7 +19,6 @@
 #include <dap_stream.h>
 #include <dap_stream_pkt.h>
 #include <dap_stream_ch_pkt.h>
-#include "dap_stream_ch_chain_pkt.h"
 #include "dap_stream_ch_chain_net.h"
 #include "dap_stream_ch_chain_net_pkt.h"
 
diff --git a/modules/channel/chain-voting/dap_stream_ch_chain_voting.c b/modules/channel/chain-voting/dap_stream_ch_chain_voting.c
index b9ff167aa0..bc51e1c74d 100644
--- a/modules/channel/chain-voting/dap_stream_ch_chain_voting.c
+++ b/modules/channel/chain-voting/dap_stream_ch_chain_voting.c
@@ -3,8 +3,7 @@
 #include "dap_stream_ch_pkt.h"
 #include "dap_stream_ch.h"
 #include "dap_stream_ch_proc.h"
-#include "dap_stream_ch_chain.h"
-#include "dap_stream_ch_chain_pkt.h"
+#include "dap_chain_ch.h"
 #include "dap_stream_ch_chain_voting.h"
 #include "dap_chain_net.h"
 #include "dap_client_pvt.h"
diff --git a/modules/channel/chain/CMakeLists.txt b/modules/channel/chain/CMakeLists.txt
deleted file mode 100644
index 66387a0de8..0000000000
--- a/modules/channel/chain/CMakeLists.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-cmake_minimum_required(VERSION 3.10)
-project (dap_stream_ch_chain)
-  
-file(GLOB DAP_STREAM_CH_CHAIN_SRCS *.c)
-file(GLOB DAP_STREAM_CH_CHAIN_HDRS include/*.h)
-
-add_library(${PROJECT_NAME} STATIC ${DAP_STREAM_CH_CHAIN_SRCS} ${DAP_STREAM_CH_CHAIN_HDRS})
-
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_net dap_global_db dap_stream dap_stream_ch)
-
-target_include_directories(${PROJECT_NAME} INTERFACE .)
-target_include_directories(${PROJECT_NAME} PUBLIC include)
-target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../../dap-sdk/3rdparty/uthash/src)
-
-if (INSTALL_SDK)
-set_target_properties(${PROJECT_NAME}  PROPERTIES PUBLIC_HEADER "${DAP_STREAM_CH_CHAIN_HDRS}")
-INSTALL(TARGETS ${PROJECT_NAME} 
-        LIBRARY DESTINATION lib/modules/channel/chain/
-        ARCHIVE DESTINATION lib/modules/channel/chain/
-        PUBLIC_HEADER DESTINATION include/modules/channel/chain/
-)
-endif()
\ No newline at end of file
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index d8ad7b8b7c..1cf3a9d7cf 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -104,8 +104,7 @@
 #include "dap_global_db.h"
 #include "dap_stream_ch_chain_net_pkt.h"
 #include "dap_stream_ch_chain_net.h"
-#include "dap_stream_ch_chain.h"
-#include "dap_stream_ch_chain_pkt.h"
+#include "dap_chain_ch.h"
 #include "dap_stream_ch.h"
 #include "dap_stream.h"
 #include "dap_stream_ch_pkt.h"
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index f4f9ecf428..d7c4c4b394 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -104,8 +104,7 @@
 #include "dap_global_db_cluster.h"
 
 #include "dap_stream_ch_chain_net.h"
-#include "dap_stream_ch_chain.h"
-#include "dap_stream_ch_chain_pkt.h"
+#include "dap_chain_ch.h"
 #include "dap_stream_ch_chain_net_pkt.h"
 #include "dap_enc_base64.h"
 #include "dap_chain_net_srv_stake_pos_delegate.h"
diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c
index 7b0c9473fa..4d82fde476 100644
--- a/modules/net/dap_chain_node_client.c
+++ b/modules/net/dap_chain_node_client.c
@@ -61,8 +61,8 @@
 #include "dap_chain_net_srv.h"
 #include "dap_stream_worker.h"
 #include "dap_stream_ch_pkt.h"
-#include "dap_stream_ch_chain.h"
-#include "dap_stream_ch_chain_pkt.h"
+#include "dap_chain_ch.h"
+#include "dap_chain_ch_pkt.h"
 #include "dap_stream_ch_chain_net.h"
 #include "dap_stream_ch_proc.h"
 #include "dap_stream_ch_chain_net_pkt.h"
@@ -193,10 +193,10 @@ dap_chain_node_sync_status_t dap_chain_node_client_start_sync(dap_chain_node_cli
             if (l_trylocked) {
                 log_it(L_INFO, "Start synchronization process with "NODE_ADDR_FP_STR, NODE_ADDR_FP_ARGS_S(a_node_client->remote_node_addr));
                 dap_stream_ch_chain_sync_request_t l_sync_chain = {};
-                l_sync_gdb.node_addr.uint64 = dap_chain_net_get_cur_addr_int(l_net);
+                l_sync_chain.node_addr.uint64 = dap_chain_net_get_cur_addr_int(l_net);
                 dap_stream_ch_chain_pkt_write_unsafe(a_node_client->ch_chain,
                                                      DAP_STREAM_CH_CHAIN_PKT_TYPE_UPDATE_CHAINS_REQ,
-                                                     l_net->pub.id.uint64, l_net->pub.chains->id, 0,
+                                                     l_net->pub.id.uint64, l_net->pub.chains->id.uint64, 0,
                                                      &l_sync_chain, sizeof(l_sync_chain));
                 if (!l_ch_chain->activity_timer)
                     dap_stream_ch_chain_timer_start(l_ch_chain);
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index ba7e6339d6..0b5f66f454 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -725,7 +725,7 @@ static bool s_chain_callback_datums_pool_proc(dap_chain_t *a_chain, dap_chain_da
         return false;
     }
     dap_hash_fast_t l_event_hash;
-    dap_hash_fast(l_new_atom, l_event_size, &l_event_hash);
+    dap_hash_fast(l_event, l_event_size, &l_event_hash);
     if (l_dag->is_add_directly) {
         dap_chain_atom_verify_res_t l_verify_res;
         switch (l_verify_res = s_chain_callback_atom_add(a_chain, l_event, l_event_size)) {
@@ -742,11 +742,11 @@ static bool s_chain_callback_datums_pool_proc(dap_chain_t *a_chain, dap_chain_da
     dap_chain_cs_dag_event_round_item_t l_round_item = { .round_info.datum_hash = l_datum_hash };
     char *l_event_hash_hex_str = DAP_NEW_STACK_SIZE(char, DAP_CHAIN_HASH_FAST_STR_SIZE);
     dap_chain_hash_fast_to_str(&l_event_hash, l_event_hash_hex_str, DAP_CHAIN_HASH_FAST_STR_SIZE);
-    bool l_res = dap_chain_cs_dag_event_gdb_set(l_dag, l_event_hash_str, l_event, l_event_size, &l_round_item);
+    bool l_res = dap_chain_cs_dag_event_gdb_set(l_dag, l_event_hash_hex_str, l_event, l_event_size, &l_round_item);
     log_it(l_res ? L_INFO : L_ERROR,
            l_res ? "Event %s placed in the new forming round [id %"DAP_UINT64_FORMAT_U"]"
                  : "Can't add new event [%s] to the new events round [id %"DAP_UINT64_FORMAT_U"]",
-           l_event_hash_str, l_current_round);
+           l_event_hash_hex_str, l_current_round);
     return l_res;
 }
 
-- 
GitLab