diff --git a/dap-sdk b/dap-sdk
index 32ee5dddfa5641119add13d4334d3f37a90c4313..1111f90da0d94d4d464b767d1e36be3a5a5a58b1 160000
--- a/dap-sdk
+++ b/dap-sdk
@@ -1 +1 @@
-Subproject commit 32ee5dddfa5641119add13d4334d3f37a90c4313
+Subproject commit 1111f90da0d94d4d464b767d1e36be3a5a5a58b1
diff --git a/modules/chain/dap_chain.c b/modules/chain/dap_chain.c
index 0bf5ca47a6c9c7a182e61870deb53c57e5bdaebf..efcc10edb4c4a6cccc114fd9ab5218ebd92652f4 100644
--- a/modules/chain/dap_chain.c
+++ b/modules/chain/dap_chain.c
@@ -703,32 +703,32 @@ bool dap_chain_get_atom_last_hash(dap_chain_t *a_chain, dap_hash_fast_t *a_atom_
     return l_ret;
 }
 
-ssize_t dap_chain_atom_save(dap_chain_t *a_chain, const uint8_t *a_atom, size_t a_atom_size, dap_chain_cell_id_t a_cell_id)
+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_cell_t *l_cell = dap_chain_cell_find_by_id(a_chain, a_cell_id);
-    if (!l_cell) {
-        log_it(L_INFO, "Creating cell 0x%016"DAP_UINT64_FORMAT_X, a_cell_id.uint64);
-        l_cell = dap_chain_cell_create_fill(a_chain, a_cell_id);
-        if (!l_cell) {
-            log_it(L_ERROR, "Can't create cell with id 0x%"DAP_UINT64_FORMAT_x" to save event...", a_cell_id.uint64);
-            return -7;
-        }
+    dap_chain_t *l_chain = (l_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,
+                                 a_atom, a_atom_size, a_new_atom_hash);
     }
-    ssize_t l_res = dap_chain_cell_file_append(l_cell, a_atom, a_atom_size);
-    if (a_chain->atom_notifiers) {
+    ssize_t l_res = dap_chain_cell_file_append(a_chain_cell, a_atom, a_atom_size);
+    if (l_chain->atom_notifiers) {
         dap_list_t *l_iter;
-        DL_FOREACH(a_chain->atom_notifiers, l_iter) {
+        DL_FOREACH(l_chain->atom_notifiers, l_iter) {
             dap_chain_atom_notifier_t *l_notifier = (dap_chain_atom_notifier_t*)l_iter->data;
-            l_notifier->callback(l_notifier->arg, a_chain, l_cell->id, (void*)a_atom, a_atom_size);
+            l_notifier->callback(l_notifier->arg, l_chain, a_chain_cell->id, (void*)a_atom, a_atom_size);
         }
     }
-    if (a_chain->callback_atom_add_from_treshold) {
+    if (l_chain->callback_atom_add_from_treshold) {
         dap_chain_atom_ptr_t l_atom_treshold;
         do {
             size_t l_atom_treshold_size;
-            l_atom_treshold = a_chain->callback_atom_add_from_treshold(a_chain, &l_atom_treshold_size);
+            l_atom_treshold = l_chain->callback_atom_add_from_treshold(l_chain, &l_atom_treshold_size);
             if (l_atom_treshold) {
-                if (dap_chain_cell_file_append(l_cell, l_atom_treshold, l_atom_treshold_size) > 0)
+                if (dap_chain_cell_file_append(a_chain_cell, l_atom_treshold, l_atom_treshold_size) > 0)
                     log_it(L_INFO, "Added atom from treshold");
                 else
                     log_it(L_ERROR, "Can't add atom from treshold");
diff --git a/modules/chain/include/dap_chain.h b/modules/chain/include/dap_chain.h
index 08cd3ab3bc0b0dca131845cebc0c3452c14b5ad0..cd90370807ec279a8e1c5a1910160f5c7cd23b3e 100644
--- a/modules/chain/include/dap_chain.h
+++ b/modules/chain/include/dap_chain.h
@@ -259,7 +259,7 @@ void dap_chain_delete(dap_chain_t * a_chain);
 void dap_chain_add_callback_notify(dap_chain_t * a_chain, dap_chain_callback_notify_t a_callback, void * a_arg);
 dap_chain_atom_ptr_t dap_chain_get_atom_by_hash(dap_chain_t * a_chain, dap_chain_hash_fast_t * a_atom_hash, size_t * a_atom_size);
 bool dap_chain_get_atom_last_hash(dap_chain_t *a_chain, dap_hash_fast_t *a_atom_hash, dap_chain_cell_id_t a_cel_id);
-ssize_t dap_chain_atom_save(dap_chain_t *a_chain, const uint8_t *a_atom, size_t a_atom_size, dap_chain_cell_id_t a_cell_id);
+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);
 int dap_cert_chain_file_save(dap_chain_datum_t *datum, char *net_name);
 const char* dap_chain_get_path(dap_chain_t *a_chain);
 
diff --git a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
index 2481153ee9e1ba31919fad4cc0a66ef6eab738eb..14749e119fc946f9cb7f4b1fa57fd50142fce62e 100644
--- a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
+++ b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
@@ -133,7 +133,7 @@ static pthread_mutex_t s_ht_grace_table_mutex;
 int dap_stream_ch_chain_net_srv_init(void)
 {
     log_it(L_NOTICE,"Chain network services channel initialized");
-    dap_stream_ch_proc_add(DAP_STREAM_CH_ID_NET_SRV, s_stream_ch_new,s_stream_ch_delete,s_stream_ch_packet_in,s_stream_ch_packet_out);
+    dap_stream_ch_proc_add(DAP_STREAM_CH_NET_SRV_ID, s_stream_ch_new,s_stream_ch_delete,s_stream_ch_packet_in,s_stream_ch_packet_out);
     pthread_mutex_init(&s_ht_grace_table_mutex, NULL);
 
     return 0;
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 fd0a2f8ca47aee266b1f731f1a90188825dd6448..28f683a478e3f73993399b3e571d948ff6355737 100644
--- a/modules/channel/chain-net/dap_stream_ch_chain_net.c
+++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c
@@ -69,7 +69,7 @@ static void s_stream_ch_packet_out(dap_stream_ch_t* ch, void* arg);
 int dap_stream_ch_chain_net_init()
 {
     log_it(L_NOTICE, "Chain network channel initialized");
-    dap_stream_ch_proc_add(DAP_STREAM_CH_ID_NET, s_stream_ch_new, s_stream_ch_delete,
+    dap_stream_ch_proc_add(DAP_STREAM_CH_NET_ID, s_stream_ch_new, s_stream_ch_delete,
             s_stream_ch_packet_in, s_stream_ch_packet_out);
 
     return 0;
diff --git a/modules/channel/chain-net/include/dap_stream_ch_chain_net.h b/modules/channel/chain-net/include/dap_stream_ch_chain_net.h
index 6838b09975b30d6d27be1d681819dc2150fe8bec..d9518d618364f34de559766974590d8824b9c6c7 100644
--- a/modules/channel/chain-net/include/dap_stream_ch_chain_net.h
+++ b/modules/channel/chain-net/include/dap_stream_ch_chain_net.h
@@ -61,7 +61,7 @@ typedef struct dap_stream_ch_chain_validator_test{
 #define D_SIGN 0x40//data signed
 #define F_CERT 0x80//faund sert
 
-#define DAP_STREAM_CH_ID_NET 'N'
+#define DAP_STREAM_CH_NET_ID 'N'
 #define DAP_STREAM_CH_CHAIN_NET(a) ((dap_stream_ch_chain_net_t *) ((a)->internal) )
 
 dap_chain_node_addr_t dap_stream_ch_chain_net_from_session_data_extract_node_addr(uint32_t a_session_id);
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 926c12e0723450fc8cdea8a55d590054f0a9becd..b9ff167aa0727d1ef894e036c8449e9cdbebce66 100644
--- a/modules/channel/chain-voting/dap_stream_ch_chain_voting.c
+++ b/modules/channel/chain-voting/dap_stream_ch_chain_voting.c
@@ -42,7 +42,7 @@ int dap_stream_ch_chain_voting_init()
     log_it(L_NOTICE, "Chains voting channel initialized");
 
     pthread_rwlock_init(&s_node_client_list_lock, NULL);
-    dap_stream_ch_proc_add(DAP_STREAM_CH_ID_VOTING,
+    dap_stream_ch_proc_add(DAP_STREAM_CH_VOTING_ID,
                            s_stream_ch_new,
                            s_stream_ch_delete,
                            s_stream_ch_packet_in,
@@ -99,7 +99,7 @@ void dap_stream_ch_chain_voting_message_write(dap_chain_net_t *a_net, dap_chain_
                 log_it(L_WARNING, "Can't find validator's addr "NODE_ADDR_FP_STR" in database", NODE_ADDR_FP_ARGS(a_remote_node_addr));
                 return;
             }
-            char l_channels[] = { DAP_STREAM_CH_ID_VOTING, '\0' };
+            char l_channels[] = { DAP_STREAM_CH_VOTING_ID, '\0' };
             dap_chain_node_client_t *l_node_client = dap_chain_node_client_connect_channels(a_net, l_node_info, l_channels);
             if (!l_node_client || !l_node_client->client) {
                 log_it(L_ERROR, "Can't connect to remote node "NODE_ADDR_FP_STR, NODE_ADDR_FP_ARGS(a_remote_node_addr));
@@ -124,7 +124,7 @@ void dap_stream_ch_chain_voting_message_write(dap_chain_net_t *a_net, dap_chain_
             log_it(L_ERROR, "NULL node_client in item of voting channel");
             return;
         }
-        dap_chain_node_client_write_mt(l_node_client_item->node_client, DAP_STREAM_CH_ID_VOTING,
+        dap_chain_node_client_write_mt(l_node_client_item->node_client, DAP_STREAM_CH_VOTING_ID,
                                        DAP_STREAM_CH_CHAIN_VOTING_PKT_TYPE_DATA, a_voting_pkt,
                                        l_voting_pkt_size);
     } else
diff --git a/modules/channel/chain-voting/include/dap_stream_ch_chain_voting.h b/modules/channel/chain-voting/include/dap_stream_ch_chain_voting.h
index f55f67014b3fbedfd086279a0d3032c471ecf504..5f55d10dea0daee4f7209fb5d484fbf5ba52f438 100644
--- a/modules/channel/chain-voting/include/dap_stream_ch_chain_voting.h
+++ b/modules/channel/chain-voting/include/dap_stream_ch_chain_voting.h
@@ -12,7 +12,7 @@
 #define DAP_STREAM_CH_CHAIN_VOTING_PKT_TYPE_TEST        0x02
 #define DAP_STREAM_CH_CHAIN_VOTING_PKT_TYPE_ERROR       0xFF
 
-#define DAP_STREAM_CH_ID_VOTING 'V'
+#define DAP_STREAM_CH_VOTING_ID 'V'
 
 typedef void (*dap_chain_voting_ch_callback_t)(void *a_arg, dap_chain_node_addr_t *a_sender_addr, dap_chain_node_addr_t *a_receiver_addr,
                                                dap_chain_hash_fast_t *a_data_hash, uint8_t *a_data, size_t a_data_size);
diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c
index 106422dd480b9a02fd119568795f491eef41aaed..bc9e92affd9c6361b0dbf81b41cef0dc87f18703 100644
--- a/modules/channel/chain/dap_stream_ch_chain.c
+++ b/modules/channel/chain/dap_stream_ch_chain.c
@@ -128,8 +128,6 @@ static void s_stream_ch_chain_pkt_write(dap_stream_ch_t *a_ch, uint8_t a_type, u
 static bool s_debug_more=false;
 static uint_fast16_t s_update_pack_size=100; // Number of hashes packed into the one packet
 static uint_fast16_t s_skip_in_reactor_count=50; // Number of hashes packed to skip in one reactor loop callback out packet
-static char **s_list_ban_groups = NULL;
-static char **s_list_white_groups = NULL;
 static uint16_t s_size_ban_groups = 0;
 static uint16_t s_size_white_groups = 0;
 
@@ -152,13 +150,10 @@ static  dap_memstat_rec_t   s_memstat [MEMSTAT$K_NR] = {
 int dap_stream_ch_chain_init()
 {
     log_it(L_NOTICE, "Chains and global db exchange channel initialized");
-    dap_stream_ch_proc_add(DAP_STREAM_CH_ID, s_stream_ch_new, s_stream_ch_delete, s_stream_ch_packet_in,
+    dap_stream_ch_proc_add(DAP_STREAM_CH_CHAIN_ID, s_stream_ch_new, s_stream_ch_delete, s_stream_ch_packet_in,
             s_stream_ch_packet_out);
     s_debug_more = dap_config_get_item_bool_default(g_config,"stream_ch_chain","debug_more",false);
     s_update_pack_size = dap_config_get_item_int16_default(g_config,"stream_ch_chain","update_pack_size",100);
-    s_list_ban_groups = dap_config_get_array_str(g_config, "stream_ch_chain", "ban_list_sync_groups", &s_size_ban_groups);
-    s_list_white_groups = dap_config_get_array_str(g_config, "stream_ch_chain", "white_list_sync_groups", &s_size_white_groups);
-
 #ifdef  DAP_SYS_DEBUG
     for (int i = 0; i < MEMSTAT$K_NR; i++)
         dap_memstat_reg(&s_memstat[i]);
@@ -595,7 +590,7 @@ static bool s_sync_in_chains_callback(void *a_arg)
         if (s_debug_more) {
             log_it(L_INFO,"Accepted atom with hash %s for %s:%s", l_atom_hash_str, l_chain->net_name, l_chain->name);
         }
-        int l_res = dap_chain_atom_save(l_chain, l_atom_copy, l_atom_copy_size, l_sync_request->request_hdr.cell_id);
+        int l_res = dap_chain_atom_save(l_chain->cells, l_atom_copy, l_atom_copy_size, NULL);
         if(l_res < 0) {
             log_it(L_ERROR, "Can't save atom %s to the file", l_atom_hash_str);
         } else {
@@ -1490,7 +1485,7 @@ static void s_stream_ch_io_complete(dap_events_socket_t *a_es, void *a_arg, int
         return;
     dap_stream_ch_t *l_ch = NULL;
     for (size_t i = 0; i < l_stream->channel_count; i++)
-        if (l_stream->channel[i]->proc->id == DAP_STREAM_CH_ID)
+        if (l_stream->channel[i]->proc->id == DAP_STREAM_CH_CHAIN_ID)
             l_ch = l_stream->channel[i];
     if (!l_ch || !DAP_STREAM_CH_CHAIN(l_ch))
         return;
diff --git a/modules/channel/chain/include/dap_stream_ch_chain.h b/modules/channel/chain/include/dap_stream_ch_chain.h
index 830725239d7b03560b42190dbf52f93eb31e2131..3598ebd9b6b6a96ce804176efd58bbad9d841fcd 100644
--- a/modules/channel/chain/include/dap_stream_ch_chain.h
+++ b/modules/channel/chain/include/dap_stream_ch_chain.h
@@ -89,7 +89,7 @@ typedef struct dap_stream_ch_chain {
 #define DAP_STREAM_CH_CHAIN(a) ((dap_stream_ch_chain_t *) ((a)->internal) )
 #define DAP_STREAM_CH(a) ((dap_stream_ch_t *)((a)->_inheritor))
 #define DAP_CHAIN_PKT_EXPECT_SIZE 7168
-#define DAP_STREAM_CH_ID 'C'
+#define DAP_STREAM_CH_CHAIN_ID 'C'
 
 int dap_stream_ch_chain_init(void);
 void dap_stream_ch_chain_deinit(void);
diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
index 76388e5da89764ed2957b9f8b604657afa648ea2..bff0dc5aa14c80f7a143483202070298f63e1983 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -613,15 +613,17 @@ static bool s_callback_round_event_to_chain_callback_get_round_item(dap_global_d
     if (l_chosen_item) {
         size_t l_event_size = l_chosen_item->event_size;
         dap_chain_cs_dag_event_t *l_new_atom = (dap_chain_cs_dag_event_t *)DAP_DUP_SIZE(l_chosen_item->event_n_signs, l_event_size);
-        char *l_event_hash_hex_str;
-        dap_get_data_hash_str_static(l_new_atom, l_event_size, l_event_hash_hex_str);
+        dap_hash_fast_t l_event_hash;
+        dap_hash_fast(l_new_atom, l_event_size, &l_event_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);
         dap_chain_datum_t *l_datum = dap_chain_cs_dag_event_get_datum(l_new_atom, l_event_size);
         l_dag->round_completed = dap_max(l_new_atom->header.round_id, l_dag->round_current);
         int l_verify_datum = dap_chain_net_verify_datum_for_add(l_dag->chain, l_datum, &l_chosen_item->round_info.datum_hash);
         if (!l_verify_datum) {
             dap_chain_atom_verify_res_t l_res = l_dag->chain->callback_atom_add(l_dag->chain, l_new_atom, l_event_size);
             if (l_res == ATOM_ACCEPT) {
-                dap_chain_atom_save(l_dag->chain, (dap_chain_atom_ptr_t)l_new_atom, l_event_size, l_dag->chain->cells->id);
+                dap_chain_atom_save(l_dag->chain->cells, (dap_chain_atom_ptr_t)l_new_atom, l_event_size, &l_event_hash);
                 s_poa_round_clean(l_dag->chain);
             } else if (l_res != ATOM_MOVE_TO_THRESHOLD)
                 DAP_DELETE(l_new_atom);
diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index b6f5152bba6c2d4f2aafb355d2077fb41db72dd7..4a1e64b677446de2a71c312a8e13f83e1e8c11c6 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -1539,7 +1539,7 @@ static bool s_session_candidate_to_chain(dap_chain_esbocs_session_t *a_session,
     switch (l_res) {
     case ATOM_ACCEPT:
         // block save to chain
-        if (dap_chain_atom_save(a_session->chain, (uint8_t *)l_candidate, a_candidate_size, a_session->chain->cells->id) < 0)
+        if (dap_chain_atom_save(a_session->chain->cells, (uint8_t *)l_candidate, a_candidate_size, a_candidate_hash) < 0)
             log_it(L_ERROR, "Can't save atom %s to the file", l_candidate_hash_str);
         else
         {
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index fe299af84a87860303373151cb3301ede4ed43e3..d8ad7b8b7cf7a06fc6836c0b98ac0d42ed6b8d79 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -543,7 +543,7 @@ static bool s_net_link_callback_connect_delayed(void *a_arg)
     dap_chain_node_client_t *l_client = l_link->link;
     log_it(L_MSG, "Connecting to link "NODE_ADDR_FP_STR" [%s]",
            NODE_ADDR_FP_ARGS_S(l_client->info->hdr.address), inet_ntoa(l_client->info->hdr.ext_addr_v4));
-    dap_chain_node_client_connect(l_client, "GND");
+    dap_chain_node_client_connect(l_client, "CGND");
     l_link->delay_timer = NULL;
     return false;
 }
@@ -563,7 +563,7 @@ static bool s_net_link_start(dap_chain_net_t *a_net, struct net_link *a_link, ui
         return true;
     }
     log_it(L_MSG, "Connecting to link "NODE_ADDR_FP_STR" [%s]", NODE_ADDR_FP_ARGS_S(l_link_info->hdr.address), inet_ntoa(l_link_info->hdr.ext_addr_v4));
-    return dap_chain_node_client_connect(l_client, "GND");
+    return dap_chain_node_client_connect(l_client, "CGND");
 }
 
 /**
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 8e56d3d88195e23f1c0375e6db3683f89cfe9f52..f4f9ecf428ae685e93a901de3bae6272bc626213 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -1317,7 +1317,7 @@ int com_node(int a_argc, char ** a_argv, void **a_str_reply)
         log_it(L_NOTICE, "Stream connection established");
 
         dap_stream_ch_chain_sync_request_t l_sync_request = {};
-        dap_stream_ch_t *l_ch_chain = dap_client_get_stream_ch_unsafe(l_node_client->client, DAP_STREAM_CH_ID);
+        dap_stream_ch_t *l_ch_chain = dap_client_get_stream_ch_unsafe(l_node_client->client, DAP_STREAM_CH_CHAIN_ID);
         // fill begin id
         l_sync_request.id_start = 1;
         // fill current node address
diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c
index fab62802869d5e1f002063209ddde223a555baf0..7b0c9473fa988906a37cf0cd5a5f8508e3a4af54 100644
--- a/modules/net/dap_chain_node_client.c
+++ b/modules/net/dap_chain_node_client.c
@@ -192,11 +192,12 @@ dap_chain_node_sync_status_t dap_chain_node_client_start_sync(dap_chain_node_cli
             bool l_trylocked = dap_chain_net_sync_trylock(l_net, a_node_client);
             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_gdb = {};
+                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);
-                dap_stream_ch_chain_pkt_write_unsafe(a_node_client->ch_chain, DAP_STREAM_CH_CHAIN_PKT_TYPE_UPDATE_GLOBAL_DB_REQ,
-                                                     l_net->pub.id.uint64, 0, 0,
-                                                     &l_sync_gdb, sizeof(l_sync_gdb));
+                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_sync_chain, sizeof(l_sync_chain));
                 if (!l_ch_chain->activity_timer)
                     dap_stream_ch_chain_timer_start(l_ch_chain);
                 return NODE_SYNC_STATUS_STARTED;
@@ -229,7 +230,7 @@ static bool s_timer_update_states_callback(void *a_arg)
                 l_me->callbacks.disconnected(l_me, l_me->callbacks_arg);
             if (l_me->keep_connection) {
                 log_it(L_INFO, "Reconnecting node client with peer "NODE_ADDR_FP_STR, NODE_ADDR_FP_ARGS_S(l_me->remote_node_addr));
-                l_me->state = NODE_CLIENT_STATE_CONNECTING ;
+                l_me->state = NODE_CLIENT_STATE_CONNECTING;
                 dap_client_go_stage(l_me->client, STAGE_STREAM_STREAMING, s_stage_connected_callback);
             }
         }
@@ -930,7 +931,7 @@ static int s_node_client_set_notify_callbacks(dap_client_t *a_client, uint8_t a_
             l_ret = 0;
             switch (a_ch_id) {
                 //  'C'
-            case DAP_STREAM_CH_ID: {
+            case DAP_STREAM_CH_CHAIN_ID: {
                 dap_stream_ch_chain_t *l_ch_chain       = DAP_STREAM_CH_CHAIN(l_ch);
                 l_ch_chain->callback_notify_packet_out  = s_ch_chain_callback_notify_packet_out;
                 l_ch_chain->callback_notify_packet_in   = s_ch_chain_callback_notify_packet_in;
@@ -940,7 +941,7 @@ static int s_node_client_set_notify_callbacks(dap_client_t *a_client, uint8_t a_
                 break;
             }
                 //  'N'
-            case DAP_STREAM_CH_ID_NET: {
+            case DAP_STREAM_CH_NET_ID: {
                 dap_stream_ch_chain_net_t *l_ch_chain   = DAP_STREAM_CH_CHAIN_NET(l_ch);
                 l_ch_chain->notify_callback     = s_ch_chain_callback_notify_packet_in2;
                 l_ch_chain->notify_callback_arg = l_node_client;
@@ -949,7 +950,7 @@ static int s_node_client_set_notify_callbacks(dap_client_t *a_client, uint8_t a_
                 break;
             }
                 //  'R'
-            case DAP_STREAM_CH_ID_NET_SRV: {
+            case DAP_STREAM_CH_NET_SRV_ID: {
                 dap_stream_ch_chain_net_srv_t *l_ch_chain = DAP_STREAM_CH_CHAIN_NET_SRV(l_ch);
                 if (l_node_client->notify_callbacks.srv_pkt_in) {
                     l_ch_chain->notify_callback     = (dap_stream_ch_chain_net_srv_callback_packet_t)l_node_client->notify_callbacks.srv_pkt_in;
@@ -963,7 +964,7 @@ static int s_node_client_set_notify_callbacks(dap_client_t *a_client, uint8_t a_
                 break;
             }
                 // 'V'
-            case DAP_STREAM_CH_ID_VOTING: {
+            case DAP_STREAM_CH_VOTING_ID: {
                 dap_stream_ch_chain_voting_t *l_ch_chain    = DAP_STREAM_CH_CHAIN_VOTING(l_ch);
                 // l_ch_chain->callback_notify              = s_ch_chain_callback_notify_voting_packet_in;
                 l_ch_chain->callback_notify_arg             = l_node_client;
diff --git a/modules/net/srv/dap_chain_net_srv_client.c b/modules/net/srv/dap_chain_net_srv_client.c
index d05c7c95c99ed5a8db7f0613a703e93dc69fdef1..11d7fc5e69a55486855fde1e0a7adc127e1c32ea 100644
--- a/modules/net/srv/dap_chain_net_srv_client.c
+++ b/modules/net/srv/dap_chain_net_srv_client.c
@@ -64,7 +64,7 @@ dap_chain_net_srv_client_t *dap_chain_net_srv_client_create_n_connect(dap_chain_
     }
     inet_pton(AF_INET, a_addr, &l_info->hdr.ext_addr_v4);
     l_info->hdr.ext_port = a_port;
-    const char l_channels[] = {DAP_STREAM_CH_ID_NET_SRV, '\0'};
+    const char l_channels[] = {DAP_STREAM_CH_NET_SRV_ID, '\0'};
     l_ret->node_client = dap_chain_node_client_create_n_connect(a_net, l_info,
                                                                 l_channels,
                                                                 &l_callbacks, l_ret);
@@ -82,7 +82,7 @@ ssize_t dap_chain_net_srv_client_write(dap_chain_net_srv_client_t *a_client, uin
     if (!a_client || !a_client->net_client || dap_client_get_stage(a_client->net_client) != STAGE_STREAM_STREAMING)
         return -1;
     if (a_type == DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_REQUEST) {
-        dap_stream_ch_t *l_ch = dap_client_get_stream_ch_unsafe(a_client->net_client, DAP_STREAM_CH_ID_NET_SRV);
+        dap_stream_ch_t *l_ch = dap_client_get_stream_ch_unsafe(a_client->net_client, DAP_STREAM_CH_NET_SRV_ID);
         dap_stream_ch_chain_net_srv_t *a_ch_chain = DAP_STREAM_CH_CHAIN_NET_SRV(l_ch);
         dap_stream_ch_chain_net_srv_pkt_request_t *l_request = (dap_stream_ch_chain_net_srv_pkt_request_t *)a_pkt_data;
         a_ch_chain->srv_uid.uint64 = l_request->hdr.srv_uid.uint64;
diff --git a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
index 3d226a3a562ea6bd068d57fb710d165961c2b60b..1e2534e5e4e21d77cd2ba9f7ba36537a1a1bb34d 100644
--- a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
+++ b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
@@ -2185,7 +2185,7 @@ int dap_chain_net_srv_stake_check_validator(dap_chain_net_t * a_net, dap_hash_fa
     }
     log_it(L_NOTICE, "Stream connection established");
 
-    uint8_t l_ch_id = DAP_STREAM_CH_ID_NET;
+    uint8_t l_ch_id = DAP_STREAM_CH_NET_ID;
     dap_stream_ch_t * l_ch_chain = dap_client_get_stream_ch_unsafe(l_node_client->client, l_ch_id);
 
     randombytes(l_test_data, sizeof(l_test_data));
diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c
index 8da57ebddb7c2b1f562415801d4f675ad560a541..3cd1c8e5946f9325ef094d128d2ca72fa5c487a1 100644
--- a/modules/service/vpn/dap_chain_net_srv_vpn.c
+++ b/modules/service/vpn/dap_chain_net_srv_vpn.c
@@ -902,7 +902,7 @@ int dap_chain_net_srv_vpn_init(dap_config_t * g_config) {
 
     log_it(L_INFO,"TUN driver configured successfuly");
     s_vpn_service_create(g_config);
-    dap_stream_ch_proc_add(DAP_STREAM_CH_ID_NET_SRV_VPN, s_ch_vpn_new, s_ch_vpn_delete, s_ch_packet_in,
+    dap_stream_ch_proc_add(DAP_STREAM_CH_NET_SRV_ID_VPN, s_ch_vpn_new, s_ch_vpn_delete, s_ch_packet_in,
             s_ch_packet_out);
 
     // add console command to display vpn statistics
diff --git a/modules/service/vpn/dap_chain_net_vpn_client.c b/modules/service/vpn/dap_chain_net_vpn_client.c
index f9278506e8d93b569dbcafd653b5f391d4ae7cf7..68fd1d2b17f335dfeea71e9fc18e28bf3746e82d 100644
--- a/modules/service/vpn/dap_chain_net_vpn_client.c
+++ b/modules/service/vpn/dap_chain_net_vpn_client.c
@@ -99,7 +99,7 @@ dap_stream_worker_t* dap_chain_net_vpn_client_get_stream_worker(void)
 
 dap_stream_ch_t* dap_chain_net_vpn_client_get_stream_ch(void)
 {
-    return s_vpn_client ? dap_client_get_stream_ch_unsafe(s_vpn_client->client, DAP_STREAM_CH_ID_NET_SRV_VPN) : NULL;
+    return s_vpn_client ? dap_client_get_stream_ch_unsafe(s_vpn_client->client, DAP_STREAM_CH_NET_SRV_ID_VPN) : NULL;
 }
 
 /// TODO convert below callback to processor of stage
@@ -515,7 +515,7 @@ int dap_chain_net_vpn_client_check(dap_chain_net_t *a_net, const char *a_ipv4_st
     clock_gettime(CLOCK_REALTIME, &l_t);//get_cur_time_msec
     long l_t1 = l_t.tv_sec * 1000 + l_t.tv_nsec / 1e6;
 
-    const char l_active_channels[] = { DAP_STREAM_CH_ID_NET_SRV, 0 }; //only R, without S
+    const char l_active_channels[] = { DAP_STREAM_CH_NET_SRV_ID, 0 }; //only R, without S
     if(a_ipv4_str)
         inet_pton(AF_INET, a_ipv4_str, &(s_node_info->hdr.ext_addr_v4));
     if(a_ipv6_str)
@@ -545,7 +545,7 @@ int dap_chain_net_vpn_client_check(dap_chain_net_t *a_net, const char *a_ipv4_st
     int l_dtime_connect_ms = l_t2 - l_t1;
 
     {
-        uint8_t l_ch_id = DAP_STREAM_CH_ID_NET_SRV; // Channel id for chain net request = 'R'
+        uint8_t l_ch_id = DAP_STREAM_CH_NET_SRV_ID; // Channel id for chain net request = 'R'
         dap_stream_ch_t *l_ch = dap_client_get_stream_ch_unsafe(s_vpn_client->client, l_ch_id);
         if(l_ch) {
             typedef dap_stream_ch_chain_net_srv_pkt_test_t pkt_t;
@@ -603,7 +603,7 @@ int dap_chain_net_vpn_client_start(dap_chain_net_t *a_net, const char *a_ipv4_st
         s_node_info = DAP_NEW_Z(dap_chain_node_info_t);
     s_node_info->hdr.ext_port = a_port;
 
-    const char l_active_channels[] = { DAP_STREAM_CH_ID_NET_SRV, DAP_STREAM_CH_ID_NET_SRV_VPN, 0 }; //R, S
+    const char l_active_channels[] = { DAP_STREAM_CH_NET_SRV_ID, DAP_STREAM_CH_NET_SRV_ID_VPN, 0 }; //R, S
     if(a_ipv4_str)
         inet_pton(AF_INET, a_ipv4_str, &(s_node_info->hdr.ext_addr_v4));
     if(a_ipv6_str)
@@ -634,7 +634,7 @@ int dap_chain_net_vpn_client_start(dap_chain_net_t *a_net, const char *a_ipv4_st
 
     // send first packet to server
     {
-        uint8_t l_ch_id = DAP_STREAM_CH_ID_NET_SRV; // Channel id for chain net request = 'R'
+        uint8_t l_ch_id = DAP_STREAM_CH_NET_SRV_ID; // Channel id for chain net request = 'R'
         dap_stream_ch_t *l_ch = dap_client_get_stream_ch_unsafe(s_vpn_client->client, l_ch_id);
         if(l_ch) {
             dap_stream_ch_chain_net_srv_pkt_request_t l_request;
@@ -676,7 +676,7 @@ int dap_chain_net_vpn_client_stop(void)
 dap_chain_net_vpn_client_status_t dap_chain_net_vpn_client_status(void)
 {
     if(s_vpn_client) {
-        uint8_t l_ch_id = DAP_STREAM_CH_ID_NET_SRV; // Channel id for chain net request = 'R'
+        uint8_t l_ch_id = DAP_STREAM_CH_NET_SRV_ID; // Channel id for chain net request = 'R'
         dap_stream_ch_t *l_ch = dap_client_get_stream_ch_unsafe(s_vpn_client->client, l_ch_id);
         if(!l_ch)
             return VPN_CLIENT_STATUS_CONN_LOST;
diff --git a/modules/service/vpn/include/dap_chain_net_srv_vpn.h b/modules/service/vpn/include/dap_chain_net_srv_vpn.h
index 8a844bbd01626c279407f921189971b32de684bb..82cccff2fa0364d805b390265c7389c06adfb048 100644
--- a/modules/service/vpn/include/dap_chain_net_srv_vpn.h
+++ b/modules/service/vpn/include/dap_chain_net_srv_vpn.h
@@ -34,7 +34,7 @@
 #define DAP_STREAM_CH_PKT_TYPE_NET_SRV_VPN_CLIENT    0x01
 #define DAP_STREAM_CH_PKT_TYPE_NET_SRV_VPN_DATA      0x02
 
-#define DAP_STREAM_CH_ID_NET_SRV_VPN        'S'
+#define DAP_STREAM_CH_NET_SRV_ID_VPN        'S'
 
 #define DAP_CHAIN_NET_SRV_VPN_ID            0x0000000000000001
 
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index c03c7c942e92a6ecfa39cde92f09a185c771f172..ba7e6339d69f4fb2308339b84b0fa557c36421da 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -724,12 +724,13 @@ static bool s_chain_callback_datums_pool_proc(dap_chain_t *a_chain, dap_chain_da
         log_it(L_ERROR,"Can't create new event!");
         return false;
     }
-
+    dap_hash_fast_t l_event_hash;
+    dap_hash_fast(l_new_atom, 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)) {
         case ATOM_ACCEPT:
-            return dap_chain_atom_save(a_chain, (uint8_t *)l_event, l_event_size, a_chain->cells->id) > 0;
+            return dap_chain_atom_save(a_chain->cells, (uint8_t *)l_event, l_event_size, &l_event_hash) > 0;
         default:
             log_it(L_ERROR, "Can't add new event to the file, atom verification result %d", l_verify_res);
             return false;
@@ -739,8 +740,8 @@ static bool s_chain_callback_datums_pool_proc(dap_chain_t *a_chain, dap_chain_da
     dap_global_db_set_sync(l_dag->gdb_group_events_round_new, DAG_ROUND_CURRENT_KEY,
                       &l_current_round, sizeof(uint64_t), false);
     dap_chain_cs_dag_event_round_item_t l_round_item = { .round_info.datum_hash = l_datum_hash };
-    char *l_event_hash_str;
-    dap_get_data_hash_str_static(l_event, l_event_size, l_event_hash_str);
+    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);
     log_it(l_res ? L_INFO : L_ERROR,
            l_res ? "Event %s placed in the new forming round [id %"DAP_UINT64_FORMAT_U"]"