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 6f9b3c7bfa3603c6e331074de3b31932594b0a79..46c2fa71d5957f37732974d73df4614d3ce7fa54 100644
--- a/modules/channel/chain-voting/dap_stream_ch_chain_voting.c
+++ b/modules/channel/chain-voting/dap_stream_ch_chain_voting.c
@@ -153,7 +153,7 @@ static void s_callback_channel_pkt_free_unsafe(uint64_t node_addr_uint64) {
 
 void dap_stream_ch_chain_voting_pkt_broadcast(dap_chain_net_t * a_net, dap_list_t *a_sendto_nodes) {
     //if (dap_chain_net_get_state(a_net) == NET_STATE_ONLINE) {
-        pthread_rwlock_unlock(&s_pkt_items->rwlock_out);        
+        pthread_rwlock_rdlock(&s_pkt_items->rwlock_out);        
 
         // dap_list_t *l_node_list = dap_chain_net_get_node_list(a_net);
         //size_t l_nodes_count = dap_list_length(a_sendto_nodes); 
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 2afb73402da10f3fd0b39c3ea16481e0b3f5d67f..7a4db683f1aedf0aea8dbf70be41f375abce29a1 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -53,10 +53,16 @@
 
 #define LOG_TAG "dap_chain_cs_dag_poa"
 
+typedef struct dap_chain_cs_dag_poa_presign_callback{
+    dap_chain_cs_dag_poa_callback_t callback; 
+    void *arg;
+} dap_chain_cs_dag_poa_presign_callback_t;
+
 typedef struct dap_chain_cs_dag_poa_pvt
 {
     dap_cert_t * events_sign_cert;
     dap_cert_t ** auth_certs;
+    dap_chain_cs_dag_poa_presign_callback_t *callback_pre_sign;
     char * auth_certs_prefix;
     uint16_t auth_certs_count;
     uint16_t auth_certs_count_verify; // Number of signatures, needed for event verification
@@ -73,10 +79,10 @@ typedef struct dap_chain_cs_dag_poa_pvt
 typedef struct dap_chain_cs_dag_poa_callback_timer_arg {
     dap_chain_cs_dag_t * dag;
     char * l_event_hash_hex_str;
-    dap_chain_cs_dag_event_round_cfg_t event_round_cfg;
+    dap_chain_cs_dag_event_round_info_t event_round_info;
 } dap_chain_cs_dag_poa_callback_timer_arg_t;
 
-static void s_callback_get_round_cfg(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_round_cfg_t * a_event_round_cfg);
+static void s_callback_get_round_info(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_round_info_t * a_event_round_info);
 static void s_callback_delete(dap_chain_cs_dag_t * a_dag);
 static int s_callback_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg);
 static int s_callback_created(dap_chain_t * a_chain, dap_config_t *a_chain_cfg);
@@ -88,9 +94,9 @@ static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_
                                         const char *a_key, const void *a_value, const size_t a_value_size);
 static bool s_round_event_ready_minimum_check(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_t * a_event,
                                             size_t a_event_size, char * a_event_hash_hex_str,
-                                            dap_chain_cs_dag_event_round_cfg_t * a_event_round_cfg);
+                                            dap_chain_cs_dag_event_round_info_t * a_event_round_info);
 static void s_round_event_cs_done(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_t * a_event,
-                                    char * a_event_hash_hex_str, dap_chain_cs_dag_event_round_cfg_t * a_event_round_cfg);
+                                    char * a_event_hash_hex_str, dap_chain_cs_dag_event_round_info_t * a_event_round_info);
 static void s_round_event_clean_dup(dap_chain_cs_dag_t * a_dag, const char *a_event_hash_hex_str);
 
 // CLI commands
@@ -124,6 +130,29 @@ void dap_chain_cs_dag_poa_deinit(void)
 
 }
 
+/*
+// example
+static int s_callback_presign_test(dap_chain_t *a_chain, 
+                    dap_chain_cs_dag_event_t* a_event, size_t a_event_size, void *a_arg) {
+    dap_chain_hash_fast_t l_event_hash;
+    dap_chain_cs_dag_event_calc_hash(a_event, a_event_size, &l_event_hash);
+    char * l_event_hash_str = dap_chain_hash_fast_to_str_new(&l_event_hash);
+    log_it(L_NOTICE,"Callback: %s, net_name:%s, event_hash:%s", (char*)a_arg, a_chain->net_name, l_event_hash_str);
+    return -1; // return 0 if passed
+}
+
+// add callback
+// dap_chain_cs_dag_poa_presign_callback_set(l_dag->chain,
+//            (dap_chain_cs_dag_poa_callback_t)s_callback_presign_test, "Presign callback test");
+*/
+void dap_chain_cs_dag_poa_presign_callback_set(dap_chain_t *a_chain, dap_chain_cs_dag_poa_callback_t a_callback, void *a_arg){
+    dap_chain_cs_dag_t *l_dag = DAP_CHAIN_CS_DAG(a_chain);
+    dap_chain_cs_dag_poa_pvt_t * l_poa_pvt = PVT(DAP_CHAIN_CS_DAG_POA(l_dag));
+    l_poa_pvt->callback_pre_sign =
+            (dap_chain_cs_dag_poa_presign_callback_t*)DAP_NEW_Z(dap_chain_cs_dag_poa_presign_callback_t);
+    l_poa_pvt->callback_pre_sign->callback = a_callback;
+    l_poa_pvt->callback_pre_sign->arg = a_arg;
+}
 
 
 /**
@@ -156,7 +185,6 @@ static int s_cli_dag_poa(int argc, char ** argv, char **a_str_reply)
     }
 
     dap_chain_cs_dag_t * l_dag = DAP_CHAIN_CS_DAG(l_chain);
-    //dap_chain_cs_dag_poa_t * l_poa = DAP_CHAIN_CS_DAG_POA( l_dag ) ;
     dap_chain_cs_dag_poa_pvt_t * l_poa_pvt = PVT ( DAP_CHAIN_CS_DAG_POA( l_dag ) );
 
     const char * l_event_cmd_str = NULL;
@@ -207,34 +235,34 @@ static int s_cli_dag_poa(int argc, char ** argv, char **a_str_reply)
         ret = -1;
         if ( strcmp(l_event_cmd_str,"sign") == 0) { // Sign event command
             char * l_gdb_group_events = l_dag->gdb_group_events_round_new;
-            size_t l_event_size = 0;
-            dap_chain_cs_dag_event_t * l_event;
-            dap_chain_cs_dag_event_round_cfg_t l_event_round_cfg;
-
-            if ( (l_event = dap_chain_cs_dag_event_gdb_get( l_event_hash_hex_str, &l_event_size,
-                                                            l_gdb_group_events, &l_event_round_cfg )) == NULL  ){
+            size_t l_round_item_size = 0;
+            dap_chain_cs_dag_event_round_item_t *l_round_item =
+                                (dap_chain_cs_dag_event_round_item_t *)dap_chain_global_db_gr_get(
+                                                    l_event_hash_hex_str, &l_round_item_size, l_gdb_group_events);
+            if ( l_round_item == NULL ) {
                 dap_chain_node_cli_set_reply_text(a_str_reply,
                                                   "Can't find event in round.new - only place where could be signed the new event\n",
                                                   l_event_hash_str);
                 ret = -30;
             }else {
-                size_t l_event_size_new = 0;
-                dap_chain_cs_dag_event_t *l_event_new = dap_chain_cs_dag_event_copy_with_sign_add(l_event, l_event_size,
-                                                        &l_event_size_new,
-                                                        l_chain_net, l_poa_pvt->events_sign_cert->enc_key);
-                if ( l_event_new ) {
+                size_t l_event_size = l_round_item->event_size;
+                dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *)DAP_DUP_SIZE(l_round_item->event_n_signs, l_event_size);
+                size_t l_event_size_new = dap_chain_cs_dag_event_sign_add(&l_event, l_event_size,
+                                                            l_chain_net, l_poa_pvt->events_sign_cert->enc_key);
+
+                if ( l_event_size_new ) {
                     dap_chain_hash_fast_t l_event_new_hash;
-                    dap_chain_cs_dag_event_calc_hash(l_event_new, l_event_size_new, &l_event_new_hash);
+                    // dap_chain_cs_dag_event_calc_hash(l_event_new, l_event_size_new, &l_event_new_hash);
+                    dap_chain_cs_dag_event_calc_hash(l_event, l_event_size_new, &l_event_new_hash);
                     //size_t l_event_new_size = dap_chain_cs_dag_event_calc_size(l_event_new);
                     char * l_event_new_hash_hex_str = dap_chain_hash_fast_to_str_new(&l_event_new_hash);
                     char * l_event_new_hash_base58_str = dap_enc_base58_encode_hash_to_str(&l_event_new_hash);
-                    //char * l_event_new_hash_base58_str = dap_enc_base58_from_hex_str_to_str(l_event_new_hash_hex_str);
 
-                    bool l_event_is_ready = s_round_event_ready_minimum_check(l_dag, l_event_new, l_event_size_new,
-                                                                        l_event_new_hash_hex_str, &l_event_round_cfg);
+                    bool l_event_is_ready = s_round_event_ready_minimum_check(l_dag, l_event, l_event_size_new,
+                                                                        l_event_new_hash_hex_str, &l_round_item->round_info);
 
-                    if (dap_chain_cs_dag_event_gdb_set(l_event_new_hash_hex_str, l_event_new,
-                                                        l_event_size_new, l_gdb_group_events, &l_event_round_cfg) ){
+                    if (dap_chain_cs_dag_event_gdb_set(l_event_new_hash_hex_str, l_event,
+                                                    l_event_size_new, l_round_item, l_gdb_group_events)) { //&l_event_round_info) ){
                         if ( !dap_chain_global_db_gr_del( l_event_hash_hex_str, l_gdb_group_events) ) { // Delete old event
                             ret = 1;
                             dap_chain_node_cli_set_reply_text(a_str_reply, "Added new sign with cert \"%s\", event %s placed back in round.new\n"
@@ -255,7 +283,7 @@ static int s_cli_dag_poa(int argc, char ** argv, char **a_str_reply)
                         ret = 0;
                         // dap_chain_net_sync_gdb(l_chain_net); // Propagate changes in pool
                         if (l_event_is_ready && l_poa_pvt->auto_round_complete) { // cs done (minimum signs & verify passed)
-                            s_round_event_cs_done(l_dag, l_event_new, l_event_new_hash_hex_str, &l_event_round_cfg);
+                            s_round_event_cs_done(l_dag, l_event, l_event_new_hash_hex_str, &l_round_item->round_info);
                         }
 
                     }else {
@@ -272,7 +300,7 @@ static int s_cli_dag_poa(int argc, char ** argv, char **a_str_reply)
                         ret=-31;
 
                     }
-                    DAP_DELETE(l_event_new);
+                    DAP_DELETE(l_event);
                     DAP_DELETE(l_event_new_hash_hex_str);
                     DAP_DELETE(l_event_new_hash_base58_str);
                 } else {
@@ -281,11 +309,9 @@ static int s_cli_dag_poa(int argc, char ** argv, char **a_str_reply)
                                                   l_event_hash_str);
                     ret=-1;
                 }
-                //DAP_DELETE(l_event_new);
             }
-            // DAP_DELETE( l_gdb_group_events );
-            // DAP_DELETE(l_event_round_cfg);
-            DAP_DELETE(l_event);
+            // DAP_DELETE(l_event);
+            DAP_DELETE(l_round_item);
         } else {
             dap_chain_node_cli_set_reply_text(a_str_reply, "Command dag_poa requires subcommand 'sign'");
         }
@@ -299,6 +325,8 @@ static int s_cli_dag_poa(int argc, char ** argv, char **a_str_reply)
     return ret;
 }
 
+
+
 /**
  * @brief s_cs_callback
  * dap_chain_callback_new_cfg_item_t->callback_init function.
@@ -316,14 +344,18 @@ static int s_callback_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
     l_dag->callback_delete = s_callback_delete;
     l_dag->callback_cs_verify = s_callback_event_verify;
     l_dag->callback_cs_event_create = s_callback_event_create;
-    l_dag->callback_cs_get_round_cfg = s_callback_get_round_cfg;
+    l_dag->callback_cs_get_round_info = s_callback_get_round_info;
+    l_dag->callback_cs_event_round_sync = s_callback_event_round_sync;
     l_poa->_pvt = DAP_NEW_Z ( dap_chain_cs_dag_poa_pvt_t );
 
     dap_chain_cs_dag_poa_pvt_t * l_poa_pvt = PVT ( l_poa );
     if (dap_config_get_item_str(a_chain_cfg,"dag-poa","auth_certs_prefix") ) {
         l_poa_pvt->auth_certs_count = dap_config_get_item_uint16_default(a_chain_cfg,"dag-poa","auth_certs_number",0);
         l_poa_pvt->auth_certs_count_verify = dap_config_get_item_uint16_default(a_chain_cfg,"dag-poa","auth_certs_number_verify",0);
-        l_poa_pvt->confirmations_timeout = dap_config_get_item_uint16_default(a_chain_cfg,"dag-poa","confirmations_timeout",600);
+        l_poa_pvt->confirmations_timeout = dap_config_get_item_uint32_default(a_chain_cfg,"dag-poa","confirmations_timeout",600);
+        l_poa_pvt->auto_confirmation = dap_config_get_item_bool_default(a_chain_cfg,"dag-poa","auto_confirmation",true);
+        l_poa_pvt->auto_round_complete = dap_config_get_item_bool_default(a_chain_cfg,"dag-poa","auto_round_complete",true);
+        l_poa_pvt->wait_sync_before_complete = dap_config_get_item_uint32_default(a_chain_cfg,"dag-poa","wait_sync_before_complete",180);
         l_poa_pvt->auth_certs_prefix = strdup ( dap_config_get_item_str(a_chain_cfg,"dag-poa","auth_certs_prefix") );
         if (l_poa_pvt->auth_certs_count && l_poa_pvt->auth_certs_count_verify ) {
             l_poa_pvt->auth_certs = DAP_NEW_Z_SIZE ( dap_cert_t *, l_poa_pvt->auth_certs_count * sizeof(dap_cert_t));
@@ -343,11 +375,17 @@ static int s_callback_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
     }
     log_it(L_NOTICE,"Initialized DAG-PoA consensus with %u/%u minimum consensus",l_poa_pvt->auth_certs_count,l_poa_pvt->auth_certs_count_verify);
     // Save old callback if present and set the call of its own (chain callbacks)
+    l_poa_pvt->callback_pre_sign = NULL;
     l_poa_pvt->prev_callback_created = l_dag->chain->callback_created;
     l_dag->chain->callback_created = s_callback_created;
+    
+dap_chain_cs_dag_poa_presign_callback_set(l_dag->chain,
+           (dap_chain_cs_dag_poa_callback_t)s_callback_presign_test, "Presign callback test");
+
     return 0;
 }
 
+
 typedef struct event_clean_dup_items {
     uint16_t signs_count;
     uint64_t ts_update;
@@ -360,31 +398,31 @@ static event_clean_dup_items_t *s_event_clean_dup_items = NULL;
 static void s_round_event_clean_dup(dap_chain_cs_dag_t * a_dag, const char *a_event_hash_hex_str) {
     char * l_gdb_group_events = a_dag->gdb_group_events_round_new;
     size_t l_event_size = 0;
+    size_t l_round_item_size = 0;
+    dap_chain_cs_dag_event_round_item_t * l_round_item = NULL;
     dap_chain_cs_dag_event_t * l_event;
-    dap_chain_cs_dag_event_round_cfg_t l_event_round_cfg;
-    if ( (l_event = dap_chain_cs_dag_event_gdb_get( a_event_hash_hex_str, &l_event_size,
-                                                    l_gdb_group_events, &l_event_round_cfg )) == NULL  ) {
+
+    if ( (l_round_item = (dap_chain_cs_dag_event_round_item_t *)dap_chain_global_db_gr_get(
+                                    a_event_hash_hex_str, &l_round_item_size, l_gdb_group_events) ) == NULL ) {
         return;
     }
+    
+    l_event = (dap_chain_cs_dag_event_t *)l_round_item->event_n_signs;
+    l_event_size = l_round_item->event_size;
 
-    //char * l_event_first_hash_str = dap_chain_hash_fast_to_str_new(&l_event_round_cfg.first_event_hash);
     size_t l_events_round_size = 0;
-    // dap_global_db_obj_t * l_events_round = dap_chain_global_db_gr_load(a_dag->gdb_group_events_round_new, &l_events_round_size );
     dap_store_obj_t *l_events_round = dap_chain_global_db_driver_read(a_dag->gdb_group_events_round_new, NULL, &l_events_round_size);
     uint16_t l_max_signs_count = 0;
     //char * l_max_signs_hash;
     for (size_t l_index = 0; l_index<l_events_round_size; l_index++) {
-        // dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *)
-        //         ((dap_chain_cs_dag_event_round_item_t *)l_events_round[l_index].value)->event;
-        // size_t l_event_size = ((dap_chain_cs_dag_event_round_item_t *)l_events_round[l_index].value)->event_size;
         dap_chain_cs_dag_event_round_item_t *l_event_round_item = (dap_chain_cs_dag_event_round_item_t *)l_events_round[l_index].value;
-        dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *)l_event_round_item->event;
-        if ( memcmp(&l_event_round_cfg.first_event_hash,
-                        &l_event_round_item->cfg.first_event_hash, sizeof(dap_chain_hash_fast_t)) == 0 ) {
+        dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *)l_event_round_item->event_n_signs;
+        if ( memcmp(&l_round_item->round_info.first_event_hash,
+                        &l_event_round_item->round_info.first_event_hash, sizeof(dap_chain_hash_fast_t)) == 0 ) {
             event_clean_dup_items_t * l_item = DAP_NEW_Z(event_clean_dup_items_t);
             l_item->signs_count = l_event->header.signs_count;
             // l_item->ts_update = l_events_round[l_index].timestamp;
-            l_item->ts_update = l_event_round_item->cfg.ts_update;
+            l_item->ts_update = l_event_round_item->round_info.ts_update;
             l_item->hash_str = (char *)l_events_round[l_index].key;
             HASH_ADD_STR(s_event_clean_dup_items, hash_str, l_item);
             if ( l_event->header.signs_count > l_max_signs_count ) {
@@ -421,15 +459,15 @@ static void s_round_event_clean_dup(dap_chain_cs_dag_t * a_dag, const char *a_ev
 
 static bool s_round_event_ready_minimum_check(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_t * a_event,
                                             size_t a_event_size, char * a_event_hash_hex_str,
-                                            dap_chain_cs_dag_event_round_cfg_t * a_event_round_cfg) {
-    if ( a_event->header.signs_count < a_event_round_cfg->confirmations_minimum ) {
+                                            dap_chain_cs_dag_event_round_info_t * a_event_round_info) {
+    if ( a_event->header.signs_count < a_event_round_info->confirmations_minimum ) {
         return false;
     }
-    a_dag->callback_cs_set_event_round_cfg(a_dag, a_event_round_cfg);
+    a_dag->callback_cs_set_event_round_info(a_dag, a_event_round_info);
     int l_ret_event_verify = a_dag->callback_cs_verify(a_dag, a_event, a_event_size);
     if ( l_ret_event_verify == 0 ) {
-        if (a_event_round_cfg->ts_confirmations_minimum_completed == (uint64_t)0) {
-            a_event_round_cfg->ts_confirmations_minimum_completed = (uint64_t)time(NULL);
+        if (a_event_round_info->ts_confirmations_minimum_completed == (uint64_t)0) {
+            a_event_round_info->ts_confirmations_minimum_completed = (uint64_t)time(NULL);
         }
         return true;
     }
@@ -439,16 +477,16 @@ static bool s_round_event_ready_minimum_check(dap_chain_cs_dag_t * a_dag, dap_ch
 }
 
 static void s_round_event_cs_done(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_t * a_event,
-                                    char * a_event_hash_hex_str, dap_chain_cs_dag_event_round_cfg_t * a_event_round_cfg) {
+                                    char * a_event_hash_hex_str, dap_chain_cs_dag_event_round_info_t * a_event_round_info) {
     dap_chain_cs_dag_poa_t * l_poa = DAP_CHAIN_CS_DAG_POA( a_dag );
     dap_chain_cs_dag_poa_callback_timer_arg_t * l_callback_arg = DAP_NEW_Z(dap_chain_cs_dag_poa_callback_timer_arg_t);
     l_callback_arg->dag = a_dag;
     l_callback_arg->l_event_hash_hex_str = dap_strdup(a_event_hash_hex_str);
-    memcpy(&l_callback_arg->event_round_cfg, a_event_round_cfg, sizeof(dap_chain_cs_dag_event_round_cfg_t));
-    uint32_t l_timeout = a_event_round_cfg->confirmations_timeout;
+    memcpy(&l_callback_arg->event_round_info, a_event_round_info, sizeof(dap_chain_cs_dag_event_round_info_t));
+    uint32_t l_timeout = a_event_round_info->confirmations_timeout;
 
-    if (a_event_round_cfg->ts_confirmations_minimum_completed == (uint64_t)0) {
-        a_event_round_cfg->ts_confirmations_minimum_completed = (uint64_t)time(NULL);
+    if (a_event_round_info->ts_confirmations_minimum_completed == (uint64_t)0) {
+        a_event_round_info->ts_confirmations_minimum_completed = (uint64_t)time(NULL);
     }
 
     if ( a_event->header.signs_count >= PVT(l_poa)->auth_certs_count) {
@@ -461,8 +499,8 @@ static void s_round_event_cs_done(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_e
             log_it(L_NOTICE,"Run timer %dsec. for Event %s", PVT(l_poa)->wait_sync_before_complete, a_event_hash_hex_str);
         }
     }
-    else if ( l_timeout > ((uint64_t)time(NULL) - a_event_round_cfg->ts_confirmations_minimum_completed) ) {
-        l_timeout = l_timeout - ((uint64_t)time(NULL) - a_event_round_cfg->ts_confirmations_minimum_completed);
+    else if ( l_timeout > ((uint64_t)time(NULL) - a_event_round_info->ts_confirmations_minimum_completed) ) {
+        l_timeout = l_timeout - ((uint64_t)time(NULL) - a_event_round_info->ts_confirmations_minimum_completed);
         // placement in chain by timer
         l_timeout += PVT(l_poa)->wait_sync_before_complete;
         if (dap_timerfd_start(l_timeout*1000,
@@ -483,28 +521,33 @@ static void s_round_event_cs_done(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_e
     }
 }
 
-static void s_callback_get_round_cfg(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_round_cfg_t * a_event_round_cfg) {
+static void s_callback_get_round_info(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_round_info_t * a_event_round_info) {
     dap_chain_cs_dag_poa_t * l_poa = DAP_CHAIN_CS_DAG_POA(a_dag);
     dap_chain_cs_dag_poa_pvt_t * l_poa_pvt = PVT (l_poa);
-    a_event_round_cfg->confirmations_minimum = l_poa_pvt->auth_certs_count_verify;
-    a_event_round_cfg->confirmations_timeout = l_poa_pvt->confirmations_timeout;
-    a_event_round_cfg->ts_confirmations_minimum_completed = 0;
+    a_event_round_info->confirmations_minimum = l_poa_pvt->auth_certs_count_verify;
+    a_event_round_info->confirmations_timeout = l_poa_pvt->confirmations_timeout;
+    a_event_round_info->ts_confirmations_minimum_completed = 0;
+    a_event_round_info->reject_count = 0;
 }
 
 static bool s_callback_round_event_to_chain(dap_chain_cs_dag_poa_callback_timer_arg_t * a_callback_arg) {
     dap_chain_cs_dag_t * l_dag = a_callback_arg->dag;
     dap_chain_net_t *l_net = dap_chain_net_by_id(l_dag->chain->net_id);
     char * l_gdb_group_events = l_dag->gdb_group_events_round_new;
+    dap_chain_cs_dag_event_round_item_t * l_round_item = NULL;
     dap_chain_cs_dag_event_t * l_event;
     size_t l_event_size = 0;
-    dap_chain_cs_dag_event_round_cfg_t l_event_round_cfg;
+    size_t l_round_item_size = 0;
 
-    if ( (l_event = dap_chain_cs_dag_event_gdb_get( a_callback_arg->l_event_hash_hex_str, &l_event_size,
-                                                    l_gdb_group_events, &l_event_round_cfg )) == NULL  ){
+    if ( (l_round_item = (dap_chain_cs_dag_event_round_item_t *)dap_chain_global_db_gr_get(
+                                    a_callback_arg->l_event_hash_hex_str, &l_round_item_size, l_gdb_group_events) ) == NULL ) {
         log_it(L_NOTICE,"Can't find event %s in round.new. The hash may have changed by reason the addition of a new signature.",
                         a_callback_arg->l_event_hash_hex_str);
     }
     else {
+        l_event = (dap_chain_cs_dag_event_t *)l_round_item->event_n_signs;
+        l_event_size = l_round_item->event_size;
+
         dap_chain_atom_ptr_t l_new_atom = (dap_chain_atom_ptr_t)dap_chain_cs_dag_event_copy(l_event, l_event_size);
         memcpy(l_new_atom, l_event, l_event_size);
 
@@ -575,6 +618,9 @@ static void s_callback_delete(dap_chain_cs_dag_t * a_dag)
         if ( l_poa_pvt->auth_certs_prefix )
             free ( l_poa_pvt->auth_certs_prefix );
 
+        if ( l_poa_pvt->callback_pre_sign )
+            DAP_DELETE( l_poa_pvt->callback_pre_sign );
+
         DAP_DELETE ( l_poa->_pvt);
     }
 
@@ -614,7 +660,6 @@ static dap_chain_cs_dag_event_t * s_callback_event_create(dap_chain_cs_dag_t * a
 static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_op_code, const char *a_group,
                                         const char *a_key, const void *a_value, const size_t a_value_size)
 {
-
     dap_chain_net_t *l_net = dap_chain_net_by_id( a_dag->chain->net_id);
 
     if ( a_value == NULL || a_op_code != 'a' ) {
@@ -622,44 +667,89 @@ static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_
     }
 
     dap_chain_cs_dag_poa_t * l_poa = DAP_CHAIN_CS_DAG_POA(a_dag);
+
     if ( !PVT(l_poa)->auto_confirmation ) {
         s_round_event_clean_dup(a_dag, a_key); // Delete dup for manual mode
         return 0;
     }
-    dap_chain_cs_dag_event_round_item_t *l_event_round_item = (dap_chain_cs_dag_event_round_item_t *)a_value;
-    size_t l_event_size = l_event_round_item->event_size;
-    dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *)l_event_round_item->event;
-    // dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *)DAP_DUP_SIZE(l_event_round_item->event, l_event_size);
+    dap_chain_cs_dag_event_round_item_t *l_round_item =
+                        (dap_chain_cs_dag_event_round_item_t *)DAP_DUP_SIZE(a_value,a_value_size);
+    size_t l_event_size = l_round_item->event_size;
+    //dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *)l_round_item->event_n_signs;
+    dap_chain_cs_dag_event_t * l_event =
+                (dap_chain_cs_dag_event_t *)DAP_DUP_SIZE(l_round_item->event_n_signs, l_event_size);
+    if ( dap_chain_cs_dag_event_sign_exists(l_event, l_event_size,
+                                    l_net, PVT(l_poa)->events_sign_cert->enc_key)
+            || dap_chain_cs_dag_event_round_sign_exists(l_round_item,
+                                    l_net, PVT(l_poa)->events_sign_cert->enc_key) ) {
+        // if my sign exists
+        if (PVT(l_poa)->auto_round_complete) {
+            if ( s_round_event_ready_minimum_check(a_dag, l_event, l_event_size,
+                                                            a_key,  &l_round_item->round_info) ) {
+                // cs done (minimum signs & verify passed)
+                s_round_event_cs_done(a_dag, l_event, a_key, &l_round_item->round_info);
+            }
+        }
+        DAP_DELETE(l_round_item);
+        DAP_DELETE(l_event);
+        return 0;
+    }
+
     size_t l_event_size_new = 0;
-    dap_chain_cs_dag_event_t *l_event_new = dap_chain_cs_dag_event_copy_with_sign_add(l_event, l_event_size,
-                                            &l_event_size_new, l_net,
-                                            PVT(l_poa)->events_sign_cert->enc_key);
+    int ret = 0;
+    if ( !PVT(l_poa)->callback_pre_sign || !PVT(l_poa)->callback_pre_sign->callback
+            || (ret = PVT(l_poa)->callback_pre_sign->callback(a_dag->chain, 
+                                l_event, l_event_size, PVT(l_poa)->callback_pre_sign->arg)) == 0 ) {
+        l_event_size_new = dap_chain_cs_dag_event_sign_add(&l_event, l_event_size,
+                                                l_net, PVT(l_poa)->events_sign_cert->enc_key);
+    }
+    else {
+        size_t l_round_item_size_new = 0;
+        // set sign for reject
+        if ( (l_round_item_size_new = dap_chain_cs_dag_event_round_sign_add(&l_round_item, a_value_size,
+                                                l_net, PVT(l_poa)->events_sign_cert->enc_key)) ) {
+            // event reject
+            log_it(L_NOTICE,"Can't sign Event %s Sign rejected by pre_sign callback, ret code=%d", a_key, ret);
+            l_round_item->round_info.reject_count++;
+
+            if ( l_round_item->round_info.reject_count // check reject count
+                            <= (PVT(l_poa)->auth_certs_count - l_round_item->round_info.confirmations_minimum) ) {
+                // update reject_count
+                dap_chain_cs_dag_event_gdb_set(a_key, l_event, l_event_size,
+                                                        l_round_item, a_group);
+            }
+            else {
+                // delete from gdb if reject_count is max
+                dap_chain_global_db_gr_del(a_key, a_group);
+            }
+        }
+        // s_round_event_clean_dup(a_dag, a_key);
+        DAP_DELETE(l_round_item);
+        DAP_DELETE(l_event);
+        return 0;
+    }
 
-    if ( l_event_new ) {
-        char * l_gdb_group_events = a_dag->gdb_group_events_round_new;
+    if ( l_event_size_new ) {
+        //char * l_gdb_group_events = a_dag->gdb_group_events_round_new;
         dap_chain_hash_fast_t l_event_new_hash;
-        dap_chain_cs_dag_event_calc_hash(l_event_new, l_event_size_new, &l_event_new_hash);
+        dap_chain_cs_dag_event_calc_hash(l_event, l_event_size_new, &l_event_new_hash);
         char * l_event_new_hash_hex_str = dap_chain_hash_fast_to_str_new(&l_event_new_hash);
-        bool l_event_is_ready = s_round_event_ready_minimum_check(a_dag, l_event_new, l_event_size_new,
-                                                                    l_event_new_hash_hex_str,  &l_event_round_item->cfg);
-        if (dap_chain_cs_dag_event_gdb_set(l_event_new_hash_hex_str, l_event_new,
-                                            l_event_size_new, l_gdb_group_events, &l_event_round_item->cfg) ){
-            dap_chain_global_db_gr_del( a_key, l_gdb_group_events); // Delete old event
+        bool l_event_is_ready = s_round_event_ready_minimum_check(a_dag, l_event, l_event_size_new,
+                                                            l_event_new_hash_hex_str,  &l_round_item->round_info);
+
+        if (dap_chain_cs_dag_event_gdb_set(l_event_new_hash_hex_str, l_event,
+                                            l_event_size_new, l_round_item, a_group)) {
+            dap_chain_global_db_gr_del(a_key, a_group); // Delete old event
             if (l_event_is_ready && PVT(l_poa)->auto_round_complete) { // cs done (minimum signs & verify passed)
-                s_round_event_cs_done(a_dag, l_event_new, l_event_new_hash_hex_str, &l_event_round_item->cfg);
+                s_round_event_cs_done(a_dag, l_event, l_event_new_hash_hex_str, &l_round_item->round_info);
             }
         }
         s_round_event_clean_dup(a_dag, l_event_new_hash_hex_str); // Delete dup
-        DAP_DELETE(l_event_new);
     } else {
-        // if (PVT(l_poa)->auto_round_complete) {
-        //     if (s_round_event_ready_minimum_check(a_dag, l_event, l_event_size, &l_event_round_item->cfg)){
-        //         s_round_event_cs_done(a_dag, l_event, a_key, &l_event_round_item->cfg);
-        //     }
-        // }
         s_round_event_clean_dup(a_dag, a_key); // Delete dup
     }
-
+    DAP_DELETE(l_round_item);
+    DAP_DELETE(l_event);
     return 0;
 }
 
@@ -680,10 +770,10 @@ static int s_callback_event_verify(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_
                a_dag_event, l_offset_from_beginning, a_dag_event_size);
         return -7; // Incorrest size
     }
-    uint16_t l_certs_count_verify = a_dag->use_event_round_cfg ? a_dag->event_round_cfg.confirmations_minimum
+    uint16_t l_certs_count_verify = a_dag->use_event_round_info ? a_dag->event_round_info.confirmations_minimum
                                                                 : l_poa_pvt->auth_certs_count_verify;
-    a_dag->use_event_round_cfg = false;
-    // if ( a_dag_event->header.signs_count >= l_poa_pvt->auth_certs_count_verify ){
+
+    a_dag->use_event_round_info = false;
     if ( a_dag_event->header.signs_count >= l_certs_count_verify ){
         size_t l_verified = 0;
         for ( uint16_t i = 0; i < a_dag_event->header.signs_count; i++ ) {
@@ -704,7 +794,6 @@ static int s_callback_event_verify(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_
                     l_verified++;
             }
         }
-        //return l_verified >= l_poa_pvt->auth_certs_count_verify ? 0 : -1;
         return l_verified >= l_certs_count_verify ? 0 : -1;
     }else if (a_dag_event->header.hash_count == 0){
         dap_chain_hash_fast_t l_event_hash;
diff --git a/modules/consensus/dag-poa/include/dap_chain_cs_dag_poa.h b/modules/consensus/dag-poa/include/dap_chain_cs_dag_poa.h
index c437ff91d2f0f6f47e969196bab192cff9697609..5e47206823f2f4a85257267abe8506cce8b66e4c 100644
--- a/modules/consensus/dag-poa/include/dap_chain_cs_dag_poa.h
+++ b/modules/consensus/dag-poa/include/dap_chain_cs_dag_poa.h
@@ -25,6 +25,8 @@
 #include "dap_chain_cs_dag.h"
 #include "dap_cert.h"
 
+typedef int (*dap_chain_cs_dag_poa_callback_t)(dap_chain_t *, dap_chain_cs_dag_event_t*, size_t, void *);
+
 typedef struct dap_chain_cs_dag_poa
 {
     dap_chain_t * chain;
@@ -39,3 +41,5 @@ typedef struct dap_chain_cs_dag_poa
 int dap_chain_cs_dag_poa_init(void);
 void dap_chain_cs_dag_poa_deinit(void);
 dap_cert_t **dap_chain_cs_dag_poa_get_auth_certs(dap_chain_t *a_chain, size_t *a_auth_certs_count);
+void dap_chain_cs_dag_poa_presign_callback_set(dap_chain_t *a_chain,
+                  dap_chain_cs_dag_poa_callback_t a_callback, void *a_arg);
diff --git a/modules/net/srv/include/dap_chain_net_srv_client.h b/modules/net/srv/include/dap_chain_net_srv_client.h
index 93c2c95f338b2ec78016efdad8cc04f7212578df..815880d96824eae4984a056b40cfda809d85919b 100644
--- a/modules/net/srv/include/dap_chain_net_srv_client.h
+++ b/modules/net/srv/include/dap_chain_net_srv_client.h
@@ -24,7 +24,7 @@ along with any CellFrame SDK based project.  If not, see <http://www.gnu.org/lic
 #pragma once
 
 #include <stdint.h>
-#include <time.h>
+#include <sys/time.h>
 
 
 #include "dap_enc_key.h"
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index a839cad8010d8da0c46703f123a3913bfe51e3af..04f37bdd70393e65cccf33afaf48d55ed01ab185 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -121,7 +121,7 @@ static dap_chain_datum_t* s_chain_callback_datum_iter_get_next( dap_chain_datum_
 
 static int s_cli_dag(int argc, char ** argv, char **str_reply);
 void s_dag_events_lasts_process_new_last_event(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_item_t * a_event_item);
-static void s_dag_chain_cs_set_event_round_cfg(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_round_cfg_t * a_event_round_cfg);
+static void s_dag_chain_cs_set_event_round_info(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_round_info_t * a_event_round_info);
 
 static bool s_seed_mode = false;
 static bool s_debug_more = false;
@@ -248,8 +248,8 @@ int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
     l_dag->is_celled = dap_config_get_item_bool_default(a_chain_cfg,"dag","is_celled",false);
     l_dag->is_add_directly = dap_config_get_item_bool_default(a_chain_cfg,"dag","is_add_directly",false);
     l_dag->datum_add_hashes_count = dap_config_get_item_uint16_default(a_chain_cfg,"dag","datum_add_hashes_count",1);
-    l_dag->use_event_round_cfg = false;
-    l_dag->callback_cs_set_event_round_cfg = s_dag_chain_cs_set_event_round_cfg;
+    l_dag->use_event_round_info = false;
+    l_dag->callback_cs_set_event_round_info = s_dag_chain_cs_set_event_round_info;
     char * l_round_new_str = dap_strdup( dap_config_get_item_str_default(a_chain_cfg,"dag","gdb_group_events_round_new", "new"));
     dap_chain_net_t *l_net = dap_chain_net_by_id(a_chain->net_id);
     if(!l_dag->is_celled){
@@ -273,11 +273,11 @@ int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
     return 0;
 }
 
-static void s_dag_chain_cs_set_event_round_cfg(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_round_cfg_t * a_event_round_cfg){
-    memcpy(&a_dag->event_round_cfg, 
-                a_event_round_cfg, 
-                sizeof(dap_chain_cs_dag_event_round_cfg_t));
-    a_dag->use_event_round_cfg = true;
+static void s_dag_chain_cs_set_event_round_info(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_round_info_t * a_event_round_info){
+    memcpy(&a_dag->event_round_info, 
+                a_event_round_info, 
+                sizeof(dap_chain_cs_dag_event_round_info_t));
+    a_dag->use_event_round_info = true;
 }
 
 static void s_dap_chain_cs_dag_purge(dap_chain_t *a_chain)
@@ -580,10 +580,8 @@ static size_t s_chain_callback_datums_pool_proc(dap_chain_t * a_chain, dap_chain
             do{
                 int l_index = rand() % (int) l_events_round_new_size;
                 dap_chain_hash_fast_t l_hash;
-                // dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *) l_events_round_new[l_index].value;
-                // size_t l_event_size = l_events_round_new[l_index].value_len;
                 dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *)
-                                ((dap_chain_cs_dag_event_round_item_t *)l_events_round_new[l_index].value)->event;
+                                ((dap_chain_cs_dag_event_round_item_t *)l_events_round_new[l_index].value)->event_n_signs;
                 size_t l_event_size = ((dap_chain_cs_dag_event_round_item_t *)l_events_round_new[l_index].value)->event_size;
                 dap_hash_fast(l_event, l_event_size,&l_hash);
 
@@ -673,16 +671,22 @@ static size_t s_chain_callback_datums_pool_proc(dap_chain_t * a_chain, dap_chain
                     dap_chain_hash_fast_t l_event_hash;
                     dap_chain_cs_dag_event_calc_hash(l_event,l_event_size, &l_event_hash);
                     char * l_event_hash_str = dap_chain_hash_fast_to_str_new(&l_event_hash);
-                    // if(dap_chain_global_db_gr_set(dap_strdup(l_event_hash_str), (uint8_t *)l_event,
-                    //         l_event_size,
-                    //         l_dag->gdb_group_events_round_new)) {
-                    dap_chain_cs_dag_event_round_cfg_t l_event_round_cfg;
-                    if ( l_dag->callback_cs_get_round_cfg ) {
-                        l_dag->callback_cs_get_round_cfg(l_dag, &l_event_round_cfg);
+                    dap_chain_cs_dag_event_round_info_t l_event_round_info;
+                    if ( l_dag->callback_cs_get_round_info ) {
+                        l_dag->callback_cs_get_round_info(l_dag, &l_event_round_info);
                     }
+
+                    // set first event hash for round
+                    memcpy(&l_event_round_info.first_event_hash, &l_event_hash, sizeof(dap_chain_hash_fast_t));
+                    dap_chain_cs_dag_event_round_item_t * l_round_item = 
+                                DAP_NEW_SIZE(dap_chain_cs_dag_event_round_item_t, 
+                                                sizeof(dap_chain_cs_dag_event_round_item_t)+l_event_size);
+                    memcpy(&l_round_item->round_info, &l_event_round_info, sizeof(dap_chain_cs_dag_event_round_info_t));
+                    l_round_item->data_size = l_round_item->event_size = 0; 
+
                     if(dap_chain_cs_dag_event_gdb_set(l_event_hash_str, l_event,
-                                l_event_size, l_dag->gdb_group_events_round_new,
-                                &l_event_round_cfg)) {
+                                l_event_size, l_round_item, l_dag->gdb_group_events_round_new)) {
+                                //&l_event_round_info)) {
                         log_it(L_INFO, "Event %s placed in the new forming round", l_event_hash_str);
                         DAP_DELETE(l_event_hash_str);
                         l_event_hash_str = NULL;
@@ -1400,12 +1404,10 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
 
             // Check if its ready or not
             for (size_t i = 0; i< l_objs_size; i++ ){
-                // dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t*) l_objs[i].value;
-                // size_t l_event_size = l_objs[i].value_len;
                 dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *)
-                                ((dap_chain_cs_dag_event_round_item_t *)l_objs[i].value)->event;
+                                ((dap_chain_cs_dag_event_round_item_t *)l_objs[i].value)->event_n_signs;
                 size_t l_event_size = ((dap_chain_cs_dag_event_round_item_t *)l_objs[i].value)->event_size;
-                l_dag->callback_cs_set_event_round_cfg(l_dag, &((dap_chain_cs_dag_event_round_item_t *)l_objs[i].value)->cfg);
+                l_dag->callback_cs_set_event_round_info(l_dag, &((dap_chain_cs_dag_event_round_item_t *)l_objs[i].value)->round_info);
                 int l_ret_event_verify;
                 if ( ( l_ret_event_verify = l_dag->callback_cs_verify (l_dag,l_event,l_event_size) ) !=0 ){// if consensus accept the event
                     dap_string_append_printf( l_str_ret_tmp,
@@ -1604,20 +1606,23 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
                 }
                 DAP_DELETE(l_event_hash_hex_str);
                 DAP_DELETE(l_event_hash_base58_str);
-                // DAP_DELETE( l_gdb_group_events );
                 // dap_chain_net_sync_gdb(l_net);
             }break;
             case SUBCMD_EVENT_DUMP:{
+                dap_chain_cs_dag_event_round_item_t * l_round_item = NULL;
                 dap_chain_cs_dag_event_t * l_event = NULL;
-                dap_chain_cs_dag_event_round_cfg_t l_event_round_cfg;
+                // dap_chain_cs_dag_event_round_info_t l_event_round_info;
                 size_t l_event_size = 0;
                 if ( l_from_events_str ){
                     if ( strcmp(l_from_events_str,"round.new") == 0 ){
                         const char * l_gdb_group_events = l_dag->gdb_group_events_round_new;
-                        // l_event = (dap_chain_cs_dag_event_t *)  dap_chain_global_db_gr_get
-                        //                       ( l_event_hash_str ,&l_event_size,l_gdb_group_events );
-                        l_event = dap_chain_cs_dag_event_gdb_get(l_event_hash_str, &l_event_size,
-                                                                l_gdb_group_events, &l_event_round_cfg);
+                        size_t l_round_item_size = 0;
+                        l_round_item = (dap_chain_cs_dag_event_round_item_t *)dap_chain_global_db_gr_get(
+                                                        l_event_hash_str, &l_round_item_size, l_gdb_group_events);
+                        if (l_round_item) {
+                            l_event_size = l_round_item->event_size;
+                            l_event = (dap_chain_cs_dag_event_t *)DAP_DUP_SIZE(l_round_item->event_n_signs, l_event_size);
+                        }
                     }else if ( strncmp(l_from_events_str,"round.",6) == 0){
 
                     }else if ( strcmp(l_from_events_str,"events_lasts") == 0){
@@ -1668,22 +1673,24 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
 
                     dap_string_append_printf(l_str_tmp,"\nEvent %s:\n", l_event_hash_str);
 
-                    // Round cfg
+                    // Round info
                     if ( strcmp(l_from_events_str,"round.new") == 0 ){
                         dap_string_append_printf(l_str_tmp,
-                            "\t\tRound cfg:\n\t\t\t\tconfirmations_minimum: %d\n\t\t\t\tconfirmations_timeout: %d\n", 
-                            l_event_round_cfg.confirmations_minimum,
-                            l_event_round_cfg.confirmations_timeout);
-                        char * l_hash_str = dap_chain_hash_fast_to_str_new(&l_event_round_cfg.first_event_hash);
+                            "\t\tRound info:\n\t\t\t\tconfirmations_minimum: %d\n\t\t\t\tconfirmations_timeout: %d\n"
+                            "\t\t\t\tsigns reject: %d\n", 
+                            l_round_item->round_info.confirmations_minimum,
+                            l_round_item->round_info.confirmations_timeout,
+                            l_round_item->round_info.reject_count);
+                        char * l_hash_str = dap_chain_hash_fast_to_str_new(&l_round_item->round_info.first_event_hash);
                         dap_string_append_printf(l_str_tmp, "\t\t\t\tfirst_event_hash: %s\n", l_hash_str);
                         DAP_DELETE(l_hash_str);
                         dap_string_append_printf(l_str_tmp,
                             "\t\t\t\tts_update: %s", 
-                            dap_ctime_r((time_t *)&l_event_round_cfg.ts_update, buf) );
-                        if (l_event_round_cfg.ts_confirmations_minimum_completed != 0)
+                            dap_ctime_r((time_t *)&l_round_item->round_info.ts_update, buf) );
+                        if (l_round_item->round_info.ts_confirmations_minimum_completed != 0)
                             dap_string_append_printf(l_str_tmp,
                                 "\t\t\t\tts_confirmations_minimum_completed: %s", 
-                                dap_ctime_r((time_t *)&l_event_round_cfg.ts_confirmations_minimum_completed, buf) );
+                                dap_ctime_r((time_t *)&l_round_item->round_info.ts_confirmations_minimum_completed, buf) );
                     }
 
                      // Header
@@ -1748,6 +1755,8 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
                                                       l_event_hash_str);
                     ret=-10;
                 }
+                DAP_DELETE(l_round_item);
+                DAP_DELETE(l_event);
             }break;
             case SUBCMD_EVENT_LIST:{
                 if( (l_from_events_str == NULL) ||
@@ -1761,17 +1770,14 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
                         dap_string_append_printf(l_str_tmp,"%s.%s: Found %zu records :\n",l_net->pub.name,l_chain->name,l_objs_count);
 
                         for (size_t i = 0; i< l_objs_count; i++){
-                            // dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *) l_objs[i].value;
                             dap_chain_cs_dag_event_t * l_event = (dap_chain_cs_dag_event_t *)
-                                            ((dap_chain_cs_dag_event_round_item_t *)l_objs[i].value)->event;
+                                            ((dap_chain_cs_dag_event_round_item_t *)l_objs[i].value)->event_n_signs;
                             char buf[50];
                             time_t l_ts_create = (time_t) l_event->header.ts_created;
                             dap_string_append_printf(l_str_tmp,"\t%s: ts_create=%s",
                                                      l_objs[i].key, dap_ctime_r( &l_ts_create,buf ) );
 
                         }
-                        // bugs-3932
-                        //DAP_DELETE( l_gdb_group_events);
                         if (l_objs && l_objs_count )
                             dap_chain_global_db_objs_delete(l_objs, l_objs_count);
                         ret = 0;
diff --git a/modules/type/dag/dap_chain_cs_dag_event.c b/modules/type/dag/dap_chain_cs_dag_event.c
index 1f07d12882dd1b97bff2c039c8eec4ebdb318462..34e8b17bbd180b3ba29c622e43b3398b81a136c1 100644
--- a/modules/type/dag/dap_chain_cs_dag_event.c
+++ b/modules/type/dag/dap_chain_cs_dag_event.c
@@ -109,52 +109,78 @@ dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_copy(dap_chain_cs_dag_event_t
  * @param l_key
  * @return
  */
-dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_copy_with_sign_add( dap_chain_cs_dag_event_t * a_event, size_t a_event_size,
-                                                            size_t * a_event_size_new,
+size_t dap_chain_cs_dag_event_sign_add( dap_chain_cs_dag_event_t **a_event_ptr, size_t a_event_size,
                                                             dap_chain_net_t * a_net, dap_enc_key_t * a_key)
 {
-    size_t l_hashes_size = a_event->header.hash_count*sizeof(dap_chain_hash_fast_t);
-    dap_chain_datum_t * l_datum = (dap_chain_datum_t*)(a_event->hashes_n_datum_n_signs + l_hashes_size);
+    assert(a_event_ptr);
+    dap_chain_cs_dag_event_t *l_event = *a_event_ptr;
+    size_t l_hashes_size = l_event->header.hash_count*sizeof(dap_chain_hash_fast_t);
+    dap_chain_datum_t * l_datum = (dap_chain_datum_t*)(l_event->hashes_n_datum_n_signs + l_hashes_size);
     size_t l_datum_size =  dap_chain_datum_size(l_datum);
-    size_t l_event_size_excl_sign = sizeof(a_event->header)+l_hashes_size+l_datum_size;
-    // size_t l_event_size_excl_sign = dap_chain_cs_dag_event_calc_size_excl_signs(a_event,a_event_size);
+    size_t l_event_size_excl_sign = sizeof(l_event->header)+l_hashes_size+l_datum_size;
     size_t l_event_size = a_event_size;
-    size_t l_event_signs_size = l_event_size - l_event_size_excl_sign;
-    dap_sign_t * l_sign = dap_sign_create(a_key,a_event,l_event_size_excl_sign,0);
+    dap_sign_t * l_sign = dap_sign_create(a_key,l_event,l_event_size_excl_sign,0);
     size_t l_sign_size = dap_sign_get_size(l_sign);
     dap_chain_addr_t l_addr = {0};
     dap_chain_hash_fast_t l_pkey_hash;
     dap_sign_get_pkey_hash(l_sign, &l_pkey_hash);
     dap_chain_addr_fill(&l_addr, l_sign->header.type, &l_pkey_hash, a_net->pub.id);
-    char * l_addr_str = dap_chain_addr_to_str(&l_addr);
 
     size_t l_offset = l_hashes_size+l_datum_size;
     // checking re-sign from one address and calc signs size
-    while ( l_offset+sizeof(a_event->header) < l_event_size  ) {
-        dap_sign_t * l_item_sign = (dap_sign_t *)(a_event->hashes_n_datum_n_signs +l_offset);
-        size_t l_sign_size = dap_sign_get_size(l_item_sign);
+    while ( l_offset+sizeof(l_event->header) < l_event_size  ) {
+        dap_sign_t * l_item_sign = (dap_sign_t *)(l_event->hashes_n_datum_n_signs +l_offset);
+        size_t l_sign_item_size = dap_sign_get_size(l_item_sign);
         dap_chain_addr_t l_item_addr = {0};
         dap_chain_hash_fast_t l_item_pkey_hash;
         dap_sign_get_pkey_hash(l_item_sign, &l_item_pkey_hash);
         dap_chain_addr_fill(&l_item_addr, l_item_sign->header.type, &l_item_pkey_hash, a_net->pub.id);
         // checking re-sign from one address
         if (memcmp(&l_addr, &l_item_addr, sizeof(l_item_addr)) == 0) {
+            char * l_addr_str = dap_chain_addr_to_str(&l_addr);
             log_it(L_DEBUG, "Sign from this addr exists: %s", l_addr_str);
             DAP_DELETE(l_sign);
             DAP_DELETE(l_addr_str);
-            return NULL;
+            return 0;
         }
-        l_offset += l_sign_size;
+        l_offset += l_sign_item_size;
     }
-    // dap_chain_cs_dag_event_t * l_event_new = DAP_REALLOC(a_event, l_event_size+l_sign_size);
-    dap_chain_cs_dag_event_t * l_event_new = DAP_NEW_Z_SIZE(dap_chain_cs_dag_event_t, l_event_size+l_sign_size);
-    memcpy(l_event_new, a_event, l_event_size);
-    memcpy(l_event_new->hashes_n_datum_n_signs+l_offset, l_sign, l_sign_size);
-    *a_event_size_new = l_event_size+l_sign_size;
-    l_event_new->header.signs_count++;
+
+    *a_event_ptr = l_event = DAP_REALLOC(l_event, l_event_size+l_sign_size);
+    memcpy(l_event->hashes_n_datum_n_signs+l_offset, l_sign, l_sign_size);
+    l_event->header.signs_count++;
     DAP_DELETE(l_sign);
-    DAP_DELETE(l_addr_str);
-    return l_event_new;
+    return l_event_size+l_sign_size;
+}
+
+bool dap_chain_cs_dag_event_sign_exists(dap_chain_cs_dag_event_t *a_event, size_t a_event_size,
+                                                            dap_chain_net_t * a_net, dap_enc_key_t * a_key) {
+    dap_sign_type_t l_sign_type = dap_sign_type_from_key_type(a_key->type);
+    size_t l_pub_key_size = 0;
+    uint8_t *l_pub_key = dap_enc_key_serealize_pub_key(a_key, &l_pub_key_size);
+    dap_chain_hash_fast_t l_pkey_hash;
+    dap_hash_fast(l_pub_key, l_pub_key_size, &l_pkey_hash);
+    dap_chain_addr_t l_addr = {0};
+    dap_chain_addr_fill(&l_addr, l_sign_type, &l_pkey_hash, a_net->pub.id);
+    DAP_DELETE(l_pub_key);
+    
+    size_t l_hashes_size = a_event->header.hash_count*sizeof(dap_chain_hash_fast_t);
+    dap_chain_datum_t * l_datum = (dap_chain_datum_t*)(a_event->hashes_n_datum_n_signs + l_hashes_size);
+    size_t l_datum_size =  dap_chain_datum_size(l_datum);
+    size_t l_offset = l_hashes_size+l_datum_size;
+    while ( l_offset+sizeof(a_event->header) < a_event_size  ) {
+        dap_sign_t * l_item_sign = (dap_sign_t *)(a_event->hashes_n_datum_n_signs +l_offset);
+        size_t l_sign_item_size = dap_sign_get_size(l_item_sign);
+        dap_chain_addr_t l_item_addr = {0};
+        dap_chain_hash_fast_t l_item_pkey_hash;
+        dap_sign_get_pkey_hash(l_item_sign, &l_item_pkey_hash);
+        dap_chain_addr_fill(&l_item_addr, l_item_sign->header.type, &l_item_pkey_hash, a_net->pub.id);
+        if (memcmp(&l_addr, &l_item_addr, sizeof(l_item_addr)) == 0) {
+            return true;
+        }
+        l_offset += l_sign_item_size;
+    }
+    return false;
 }
 
 /**
@@ -186,25 +212,94 @@ dap_sign_t * dap_chain_cs_dag_event_get_sign( dap_chain_cs_dag_event_t * a_event
         return NULL;
 }
 
+size_t dap_chain_cs_dag_event_round_sign_add(dap_chain_cs_dag_event_round_item_t **a_round_item_ptr, size_t a_round_item_size,
+                                        dap_chain_net_t * a_net, dap_enc_key_t * a_key) {
+    dap_chain_cs_dag_event_round_item_t *l_round_item = *a_round_item_ptr;
+    dap_sign_t * l_sign = dap_sign_create(a_key, &l_round_item->round_info.first_event_hash, sizeof(dap_chain_hash_fast_t), 0);
+    size_t l_sign_size = dap_sign_get_size(l_sign);
+    dap_chain_addr_t l_addr = {0};
+    dap_chain_hash_fast_t l_pkey_hash;
+    dap_sign_get_pkey_hash(l_sign, &l_pkey_hash);
+    dap_chain_addr_fill(&l_addr, l_sign->header.type, &l_pkey_hash, a_net->pub.id);
+
+    size_t l_offset = l_round_item->event_size;
+    while ( l_offset < l_round_item->data_size ) {
+        dap_sign_t * l_item_sign = (dap_sign_t *)(l_round_item->event_n_signs+l_offset);
+        size_t l_sign_item_size = dap_sign_get_size(l_item_sign);
+        dap_chain_addr_t l_item_addr = {0};
+        dap_chain_hash_fast_t l_item_pkey_hash;
+        dap_sign_get_pkey_hash(l_item_sign, &l_item_pkey_hash);
+        dap_chain_addr_fill(&l_item_addr, l_item_sign->header.type, &l_item_pkey_hash, a_net->pub.id);
+        if (memcmp(&l_addr, &l_item_addr, sizeof(l_item_addr)) == 0) {
+            DAP_DELETE(l_sign);
+            return 0;
+        }
+        l_offset += l_sign_item_size;
+    }
+    *a_round_item_ptr = l_round_item = DAP_REALLOC(l_round_item, a_round_item_size+l_sign_size);
+    memcpy(l_round_item->event_n_signs+l_offset, l_sign, l_sign_size);
+    DAP_DELETE(l_sign);
+    l_round_item->data_size += l_sign_size;
+    return a_round_item_size+l_sign_size;
+}
+
+
+bool dap_chain_cs_dag_event_round_sign_exists(dap_chain_cs_dag_event_round_item_t *a_round_item,
+                                                        dap_chain_net_t * a_net, dap_enc_key_t * a_key) {
+    dap_sign_type_t l_sign_type = dap_sign_type_from_key_type(a_key->type);
+    size_t l_pub_key_size = 0;
+    uint8_t *l_pub_key = dap_enc_key_serealize_pub_key(a_key, &l_pub_key_size);
+    dap_chain_hash_fast_t l_pkey_hash;
+    dap_hash_fast(l_pub_key, l_pub_key_size, &l_pkey_hash);
+    dap_chain_addr_t l_addr = {0};
+    dap_chain_addr_fill(&l_addr, l_sign_type, &l_pkey_hash, a_net->pub.id);
+    DAP_DELETE(l_pub_key);
+
+    size_t l_offset = a_round_item->event_size;
+    while ( l_offset < a_round_item->data_size  ) {
+        dap_sign_t * l_item_sign = (dap_sign_t *)(a_round_item->event_n_signs +l_offset);
+        size_t l_sign_item_size = dap_sign_get_size(l_item_sign);
+        dap_chain_addr_t l_item_addr = {0};
+        dap_chain_hash_fast_t l_item_pkey_hash;
+        dap_sign_get_pkey_hash(l_item_sign, &l_item_pkey_hash);
+        dap_chain_addr_fill(&l_item_addr, l_item_sign->header.type, &l_item_pkey_hash, a_net->pub.id);
+        if (memcmp(&l_addr, &l_item_addr, sizeof(l_item_addr)) == 0) {
+            return true;
+        }
+        l_offset += l_sign_item_size;
+    }
+    return false;
+}
+
 bool dap_chain_cs_dag_event_gdb_set(char *a_event_hash_str, dap_chain_cs_dag_event_t * a_event, size_t a_event_size,
-                                    const char *a_group, dap_chain_cs_dag_event_round_cfg_t * a_event_round_cfg)
+                                    dap_chain_cs_dag_event_round_item_t * a_round_item,
+                                        const char *a_group)
 {
-    dap_chain_cs_dag_event_round_item_t * l_event_round_item = DAP_NEW_SIZE(dap_chain_cs_dag_event_round_item_t,
-                                                                            sizeof(dap_chain_cs_dag_event_round_item_t)+a_event_size );
-    l_event_round_item->event_size = a_event_size;
-    a_event_round_cfg->ts_update = (uint64_t)time(NULL);
-    // l_event_round_item->event = DAP_DUP_SIZE(a_event, a_event_size);
-    memcpy(&l_event_round_item->cfg, a_event_round_cfg, sizeof(dap_chain_cs_dag_event_round_cfg_t));
-    memcpy(l_event_round_item->event, a_event, a_event_size);
-    bool ret = dap_chain_global_db_gr_set(a_event_hash_str, l_event_round_item,
-            dap_chain_cs_dag_event_round_item_get_size(l_event_round_item),
+    size_t l_signs_size = a_round_item->data_size-a_round_item->event_size;
+    uint8_t *l_signs = (uint8_t*)DAP_DUP_SIZE(a_round_item->event_n_signs+a_round_item->event_size, l_signs_size);
+
+    dap_chain_cs_dag_event_round_item_t * l_round_item = DAP_NEW_SIZE(dap_chain_cs_dag_event_round_item_t,
+                                                    sizeof(dap_chain_cs_dag_event_round_item_t)+a_event_size+l_signs_size );
+
+    l_round_item->event_size = a_event_size;
+    l_round_item->data_size = a_event_size+l_signs_size;
+
+    memcpy(&l_round_item->round_info, &a_round_item->round_info, sizeof(dap_chain_cs_dag_event_round_info_t));
+    memcpy(l_round_item->event_n_signs, a_event, a_event_size);
+    memcpy(l_round_item->event_n_signs+a_event_size, l_signs, l_signs_size);
+
+    l_round_item->round_info.ts_update = (uint64_t)time(NULL);
+
+    bool ret = dap_chain_global_db_gr_set(a_event_hash_str, l_round_item,
+            dap_chain_cs_dag_event_round_item_get_size(l_round_item),
             a_group);
-    DAP_DELETE(l_event_round_item);
+
+    DAP_DELETE(l_round_item);
     return ret;
 }
 
 dap_chain_cs_dag_event_t* dap_chain_cs_dag_event_gdb_get(const char *a_event_hash_str, size_t *a_event_size, const char *a_group,
-                                                            dap_chain_cs_dag_event_round_cfg_t * a_event_round_cfg) {
+                                                            dap_chain_cs_dag_event_round_info_t * a_event_round_info) {
     size_t l_event_round_item_size = 0;
     dap_chain_cs_dag_event_round_item_t* l_event_round_item =
                 (dap_chain_cs_dag_event_round_item_t*)dap_chain_global_db_gr_get(a_event_hash_str, &l_event_round_item_size, a_group );
@@ -212,8 +307,8 @@ dap_chain_cs_dag_event_t* dap_chain_cs_dag_event_gdb_get(const char *a_event_has
         return NULL;
     size_t l_event_size = l_event_round_item->event_size;
     dap_chain_cs_dag_event_t* l_event = DAP_NEW_SIZE(dap_chain_cs_dag_event_t, l_event_size);
-    memcpy(a_event_round_cfg, &l_event_round_item->cfg, sizeof(dap_chain_cs_dag_event_round_cfg_t));
-    memcpy(l_event, l_event_round_item->event, l_event_size);
+    memcpy(a_event_round_info, &l_event_round_item->round_info, sizeof(dap_chain_cs_dag_event_round_info_t));
+    memcpy(l_event, l_event_round_item->event_n_signs, l_event_size);
     DAP_DELETE(l_event_round_item);
     *a_event_size = l_event_size;
     return l_event;
diff --git a/modules/type/dag/include/dap_chain_cs_dag.h b/modules/type/dag/include/dap_chain_cs_dag.h
index dcfc83dd4cd72274a2299a4f5bb6857f2a54dd5a..c497d75205d699b969328ae0762b394d0c6da89c 100644
--- a/modules/type/dag/include/dap_chain_cs_dag.h
+++ b/modules/type/dag/include/dap_chain_cs_dag.h
@@ -36,8 +36,8 @@ typedef dap_chain_cs_dag_event_t * (*dap_chain_cs_dag_callback_event_create_t)(d
                                                                                dap_chain_hash_fast_t *,
                                                                                size_t, size_t*);
 
-typedef void (*dap_chain_cs_dag_callback_get_round_cfg_t)(dap_chain_cs_dag_t *, dap_chain_cs_dag_event_round_cfg_t *);
-typedef void (*dap_chain_cs_dag_callback_set_event_round_cfg_t)(dap_chain_cs_dag_t *, dap_chain_cs_dag_event_round_cfg_t *);
+typedef void (*dap_chain_cs_dag_callback_get_round_info_t)(dap_chain_cs_dag_t *, dap_chain_cs_dag_event_round_info_t *);
+typedef void (*dap_chain_cs_dag_callback_set_event_round_info_t)(dap_chain_cs_dag_t *, dap_chain_cs_dag_event_round_info_t *);
 
 typedef int (*dap_chain_cs_dag_callback_event_round_sync_t)(dap_chain_cs_dag_t * a_dag, const char a_op_code, const char *a_group,
                                                 const char *a_key, const void *a_value, const size_t a_value_size);
@@ -57,8 +57,8 @@ typedef struct dap_chain_cs_dag
     dap_chain_hash_fast_t static_genesis_event_hash;
     dap_chain_cs_dag_hal_item_t *hal;
 
-    dap_chain_cs_dag_event_round_cfg_t event_round_cfg; // for verify function
-    bool use_event_round_cfg;
+    dap_chain_cs_dag_event_round_info_t event_round_info; // for verify function
+    bool use_event_round_info;
 
     uint16_t datum_add_hashes_count;
     char * gdb_group_events_round_new;
@@ -66,8 +66,8 @@ typedef struct dap_chain_cs_dag
     dap_chain_cs_dag_callback_t callback_delete;
     dap_chain_cs_dag_callback_event_create_t callback_cs_event_create;
     dap_chain_cs_dag_callback_event_t callback_cs_verify;
-    dap_chain_cs_dag_callback_get_round_cfg_t callback_cs_get_round_cfg;
-    dap_chain_cs_dag_callback_set_event_round_cfg_t callback_cs_set_event_round_cfg;
+    dap_chain_cs_dag_callback_get_round_info_t callback_cs_get_round_info;
+    dap_chain_cs_dag_callback_set_event_round_info_t callback_cs_set_event_round_info;
     dap_chain_cs_dag_callback_event_round_sync_t callback_cs_event_round_sync;
 
     void * _pvt;
diff --git a/modules/type/dag/include/dap_chain_cs_dag_event.h b/modules/type/dag/include/dap_chain_cs_dag_event.h
index 66897d0a660d2e29370ca7cee3818eaa6ec4da3f..d46c7d2fa1e98c0ce576b7b12062d8d18857a3ee 100644
--- a/modules/type/dag/include/dap_chain_cs_dag_event.h
+++ b/modules/type/dag/include/dap_chain_cs_dag_event.h
@@ -47,18 +47,20 @@ typedef struct dap_chain_cs_dag_event {
     uint8_t hashes_n_datum_n_signs[]; // Hashes, signes and datum
 } DAP_ALIGN_PACKED dap_chain_cs_dag_event_t;
 
-typedef struct dap_chain_cs_dag_event_round_cfg {
+typedef struct dap_chain_cs_dag_event_round_info {
     uint16_t confirmations_minimum; // param auth_certs_count_verify in PoA
     uint32_t confirmations_timeout; // wait confirmations over minimum value (confirmations_minimum)
     uint64_t ts_confirmations_minimum_completed;
     uint64_t ts_update;
+    uint16_t reject_count;
     dap_chain_hash_fast_t first_event_hash; // first event hash in round
-} DAP_ALIGN_PACKED dap_chain_cs_dag_event_round_cfg_t;
+} DAP_ALIGN_PACKED dap_chain_cs_dag_event_round_info_t;
 
 typedef struct dap_chain_cs_dag_event_round_item {
-    dap_chain_cs_dag_event_round_cfg_t cfg;
+    dap_chain_cs_dag_event_round_info_t round_info;// cfg;
     uint32_t event_size;
-    uint8_t event[]; // event // dap_chain_cs_dag_event_t
+    uint32_t data_size;
+    uint8_t event_n_signs[]; // event // dap_chain_cs_dag_event_t
 } DAP_ALIGN_PACKED dap_chain_cs_dag_event_round_item_t;
 
 dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_new(dap_chain_id_t a_chain_id, dap_chain_cell_id_t a_cell_id, dap_chain_datum_t * a_datum,
@@ -80,9 +82,17 @@ static inline dap_chain_datum_t* dap_chain_cs_dag_event_get_datum(dap_chain_cs_d
 dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_copy(dap_chain_cs_dag_event_t *a_event_src, size_t a_event_size);
 
 // Important: returns new deep copy of event
-dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_copy_with_sign_add( dap_chain_cs_dag_event_t * a_event, size_t a_event_size,
-                                                size_t * a_event_size_new,
-                                                dap_chain_net_t * a_net, dap_enc_key_t * a_key);
+// dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_sign_add( dap_chain_cs_dag_event_t * a_event, size_t a_event_size,
+//                                                 size_t * a_event_size_new,
+//                                                 dap_chain_net_t * a_net, dap_enc_key_t * a_key);
+size_t dap_chain_cs_dag_event_sign_add( dap_chain_cs_dag_event_t **a_event_ptr, size_t a_event_size,
+                                                            dap_chain_net_t * a_net, dap_enc_key_t * a_key);
+size_t dap_chain_cs_dag_event_round_sign_add(dap_chain_cs_dag_event_round_item_t **a_round_item_ptr, size_t a_round_item_size,
+                                        dap_chain_net_t * a_net, dap_enc_key_t * a_key);
+bool dap_chain_cs_dag_event_sign_exists(dap_chain_cs_dag_event_t *a_event, size_t a_event_size,
+                                                            dap_chain_net_t * a_net, dap_enc_key_t * a_key);
+bool dap_chain_cs_dag_event_round_sign_exists(dap_chain_cs_dag_event_round_item_t *a_round_item,
+                                                        dap_chain_net_t * a_net, dap_enc_key_t * a_key);
 dap_sign_t * dap_chain_cs_dag_event_get_sign( dap_chain_cs_dag_event_t * a_event, size_t a_event_size, uint16_t a_sign_number);
 
 /**
@@ -141,12 +151,13 @@ static inline void dap_chain_cs_dag_event_calc_hash(dap_chain_cs_dag_event_t * a
 }
 
 static inline size_t dap_chain_cs_dag_event_round_item_get_size(dap_chain_cs_dag_event_round_item_t * a_event_round_item){
-    return sizeof(dap_chain_cs_dag_event_round_item_t)+a_event_round_item->event_size;
+    return sizeof(dap_chain_cs_dag_event_round_item_t)+a_event_round_item->data_size;
 }
 
 bool dap_chain_cs_dag_event_gdb_set(char *a_event_hash_str, dap_chain_cs_dag_event_t * a_event, size_t a_event_size,
-                                        const char *a_group, dap_chain_cs_dag_event_round_cfg_t * a_event_round_cfg);
+                                    dap_chain_cs_dag_event_round_item_t * a_round_item,
+                                        const char *a_group);
 
 dap_chain_cs_dag_event_t* dap_chain_cs_dag_event_gdb_get(const char *a_event_hash_str, size_t *a_event_size,
-                                                        const char *a_group, dap_chain_cs_dag_event_round_cfg_t * a_event_round_cfg);
+                                                        const char *a_group, dap_chain_cs_dag_event_round_info_t * a_event_round_info);