From 137af6ea30657e91bfabbf27e58e27deb03e03fa Mon Sep 17 00:00:00 2001
From: cellframe <roman.khlopkov@demlabs.net>
Date: Mon, 2 Jan 2023 13:29:34 +0300
Subject: [PATCH] [*] Port master hotfix, format chanhges

---
 modules/chain/dap_chain_ledger.c              |  4 +-
 .../dap_stream_ch_chain_net_srv_pkt.c         | 15 +++--
 .../include/dap_stream_ch_chain_net_srv_pkt.h |  7 ++-
 .../chain-net/dap_stream_ch_chain_net_pkt.c   | 14 +++--
 .../include/dap_stream_ch_chain_net_pkt.h     |  2 +-
 modules/channel/chain/dap_stream_ch_chain.c   | 56 +++++++++--------
 .../chain/include/dap_stream_ch_chain.h       |  2 +-
 .../chain/include/dap_stream_ch_chain_pkt.h   |  4 +-
 .../consensus/dag-poa/dap_chain_cs_dag_poa.c  |  4 +-
 modules/consensus/none/dap_chain_cs_none.c    |  6 +-
 modules/mempool/dap_chain_mempool.c           |  2 +-
 modules/net/dap_chain_net.c                   | 49 +++++++--------
 modules/net/dap_chain_node_cli_cmd.c          | 60 ++++++++++---------
 modules/net/dap_chain_node_client.c           |  4 +-
 modules/net/include/dap_chain_net.h           |  2 +-
 modules/net/iputils/iputils.h                 |  4 +-
 modules/net/iputils/ping.h                    |  2 +-
 .../dap_chain_net_srv_stake_pos_delegate.c    |  6 +-
 .../service/vpn/dap_chain_net_srv_vpn_cmd.c   | 29 ++++-----
 .../service/vpn/dap_chain_net_vpn_client.c    |  5 +-
 modules/type/dag/dap_chain_cs_dag.c           | 22 +++----
 21 files changed, 159 insertions(+), 140 deletions(-)

diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index 120a86c53d..db96847502 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -1621,7 +1621,7 @@ dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger)
                                             "TSD and Signs:\n"
                                             "%s"
                                             "\tTotal emissions %u\n___\n",
-                                            &l_token_item->ticker, l_type_str, s_flag_str_from_code(l_token_item->datum_token->header_native_decl.flags),
+                                            l_token_item->ticker, l_type_str, s_flag_str_from_code(l_token_item->datum_token->header_native_decl.flags),
                                             l_balance_cur, l_balance_total,
                                             l_token_item->auth_signs_valid, l_token_item->auth_signs_total,
                                             l_str_tmp->str,
@@ -1640,7 +1640,7 @@ dap_list_t *dap_chain_ledger_token_info(dap_ledger_t *a_ledger)
                                                 "\tAuth signs (valid/total) %zu/%zu\n"
                                                 "%s"
                                                 "\tTotal emissions %u\n___\n",
-                                                &l_token_item->ticker, l_type_str, "SIMPLE token has no flags",
+                                                l_token_item->ticker, l_type_str, "SIMPLE token has no flags",
                                                 l_balance_cur, l_balance_total,
                                                 l_token_item->auth_signs_valid, l_token_item->auth_signs_total,
                                                 l_str_tmp->str,
diff --git a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv_pkt.c b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv_pkt.c
index e630e2df12..fca08955e0 100644
--- a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv_pkt.c
+++ b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv_pkt.c
@@ -63,17 +63,20 @@ size_t dap_stream_ch_chain_net_srv_pkt_data_write(dap_stream_ch_t *a_ch,
  * @param a_str
  * @return
  */
-size_t dap_stream_ch_chain_net_pkt_write_f(dap_stream_ch_t *a_ch, dap_chain_net_srv_uid_t a_srv_uid, uint32_t a_usage_id, const char *a_str, ...)
+size_t dap_stream_ch_chain_net_srv_pkt_data_write_f(dap_stream_ch_t *a_ch, dap_chain_net_srv_uid_t a_srv_uid, uint32_t a_usage_id, const char *a_str, ...)
 {
 
-    va_list ap;
+    va_list ap, ap_copy;
     va_start(ap, a_str);
-
+    va_copy(ap_copy, ap);
     size_t l_buf_size = dap_vsnprintf(NULL, 0, a_str, ap);
-    char* l_buf = DAP_NEW_Z_SIZE(char, l_buf_size);
-    dap_vsnprintf(l_buf, l_buf_size, a_str, ap);
     va_end(ap);
-    size_t ret = dap_stream_ch_chain_net_srv_pkt_data_write(a_ch, a_srv_uid, a_usage_id, l_buf, strlen(l_buf));
+
+    l_buf_size++; // include trailing 0
+    char *l_buf = DAP_NEW_Z_SIZE(char, l_buf_size);
+    dap_vsprintf(l_buf, a_str, ap_copy);
+    va_end(ap_copy);
+    size_t ret = dap_stream_ch_chain_net_srv_pkt_data_write(a_ch, a_srv_uid, a_usage_id, l_buf, l_buf_size);
     DAP_DELETE(l_buf);
     return ret;
 }
diff --git a/modules/channel/chain-net-srv/include/dap_stream_ch_chain_net_srv_pkt.h b/modules/channel/chain-net-srv/include/dap_stream_ch_chain_net_srv_pkt.h
index 0b78c06d44..9da89fdedb 100644
--- a/modules/channel/chain-net-srv/include/dap_stream_ch_chain_net_srv_pkt.h
+++ b/modules/channel/chain-net-srv/include/dap_stream_ch_chain_net_srv_pkt.h
@@ -38,5 +38,8 @@ size_t dap_stream_ch_chain_net_srv_pkt_data_write(dap_stream_ch_t *a_ch,
                                                   dap_chain_net_srv_uid_t a_srv_uid, uint32_t a_usage_id  ,
                                                   const void * a_data, size_t a_data_size);
 
-size_t dap_stream_ch_chain_net_srv_pkt_data_write_f(dap_stream_ch_t *a_ch, dap_chain_net_srv_uid_t a_srv_uid, uint32_t a_usage_id,
-                                                    const char *a_str, ...);
+DAP_PRINTF_ATTR(4, 5) size_t dap_stream_ch_chain_net_srv_pkt_data_write_f(dap_stream_ch_t *a_ch,
+                                                                          dap_chain_net_srv_uid_t a_srv_uid,
+                                                                          uint32_t a_usage_id,
+                                                                          const char *a_str,
+                                                                          ...);
diff --git a/modules/channel/chain-net/dap_stream_ch_chain_net_pkt.c b/modules/channel/chain-net/dap_stream_ch_chain_net_pkt.c
index 717fc1d715..34a45f8167 100644
--- a/modules/channel/chain-net/dap_stream_ch_chain_net_pkt.c
+++ b/modules/channel/chain-net/dap_stream_ch_chain_net_pkt.c
@@ -56,11 +56,17 @@ size_t dap_stream_ch_chain_net_pkt_write(dap_stream_ch_t *a_ch, uint8_t a_type,d
  */
 size_t dap_stream_ch_chain_net_pkt_write_f(dap_stream_ch_t *a_ch, uint8_t a_type,dap_chain_net_id_t a_net_id, const char *a_str, ...)
 {
-    char l_buf[4096];
-    va_list ap;
+    va_list ap, ap_copy;
     va_start(ap, a_str);
-    dap_vsnprintf(l_buf, sizeof(l_buf), a_str, ap);
+    va_copy(ap_copy, ap);
+    size_t l_buf_size = dap_vsnprintf(NULL, 0, a_str, ap);
     va_end(ap);
-    size_t ret = dap_stream_ch_chain_net_pkt_write(a_ch, a_type, a_net_id, l_buf, strlen(l_buf));
+
+    l_buf_size++; // include trailing 0
+    char *l_buf = DAP_NEW_Z_SIZE(char, l_buf_size);
+    dap_vsprintf(l_buf, a_str, ap_copy);
+    va_end(ap_copy);
+    size_t ret = dap_stream_ch_chain_net_pkt_write(a_ch, a_type, a_net_id, l_buf, l_buf_size);
+    DAP_DELETE(l_buf);
     return ret;
 }
diff --git a/modules/channel/chain-net/include/dap_stream_ch_chain_net_pkt.h b/modules/channel/chain-net/include/dap_stream_ch_chain_net_pkt.h
index cad56b1a88..00272aa590 100644
--- a/modules/channel/chain-net/include/dap_stream_ch_chain_net_pkt.h
+++ b/modules/channel/chain-net/include/dap_stream_ch_chain_net_pkt.h
@@ -54,5 +54,5 @@ typedef struct dap_stream_ch_chain_net_pkt{
 } DAP_ALIGN_PACKED dap_stream_ch_chain_net_pkt_t;
 
 size_t dap_stream_ch_chain_net_pkt_write(dap_stream_ch_t *a_ch, uint8_t a_type, dap_chain_net_id_t a_net_id, const void * a_data, size_t a_data_size);
-size_t dap_stream_ch_chain_net_pkt_write_f(dap_stream_ch_t *a_ch, uint8_t a_type, dap_chain_net_id_t a_net_id, const char *a_str, ...);
+DAP_PRINTF_ATTR(4, 5) size_t dap_stream_ch_chain_net_pkt_write_f(dap_stream_ch_t *a_ch, uint8_t a_type, dap_chain_net_id_t a_net_id, const char *a_str, ...);
 
diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c
index 39bc5eee2a..19119769bf 100644
--- a/modules/channel/chain/dap_stream_ch_chain.c
+++ b/modules/channel/chain/dap_stream_ch_chain.c
@@ -458,10 +458,9 @@ static bool s_sync_out_gdb_proc_callback(dap_proc_thread_t *a_thread, void *a_ar
         l_flags |= F_DB_LOG_ADD_EXTRA_GROUPS;
     if (!l_sync_request->request.id_start)
         l_flags |= F_DB_LOG_SYNC_FROM_ZERO;
-    if (l_ch_chain->request_db_log == NULL)
-        l_ch_chain->request_db_log  = dap_db_log_list_start(l_net, l_sync_request->request.node_addr, l_flags);
-    else
-        dap_db_log_list_rewind(l_ch_chain->request_db_log);
+    if (l_ch_chain->request_db_log != NULL)
+        dap_db_log_list_delete(l_ch_chain->request_db_log);
+    l_ch_chain->request_db_log = dap_db_log_list_start(l_net, l_sync_request->request.node_addr, l_flags);
 
     if (l_ch_chain->request_db_log) {
         if (s_debug_more)
@@ -518,10 +517,9 @@ static bool s_sync_update_gdb_proc_callback(dap_proc_thread_t *a_thread, void *a
         l_flags |= F_DB_LOG_ADD_EXTRA_GROUPS;
     if (!l_sync_request->request.id_start)
         l_flags |= F_DB_LOG_SYNC_FROM_ZERO;
-    if (l_ch_chain->request_db_log == NULL)
-        l_ch_chain->request_db_log = dap_db_log_list_start(l_net, l_sync_request->request.node_addr, l_flags);
-    else
-        dap_db_log_list_rewind(l_ch_chain->request_db_log);
+    if (l_ch_chain->request_db_log != NULL)
+        dap_db_log_list_delete(l_ch_chain->request_db_log);
+    l_ch_chain->request_db_log = dap_db_log_list_start(l_net, l_sync_request->request.node_addr, l_flags);
     l_ch_chain->state = CHAIN_STATE_UPDATE_GLOBAL_DB;
     l_sync_request->gdb.db_log = l_ch_chain->request_db_log;
     l_sync_request->request.node_addr.uint64 = dap_chain_net_get_cur_addr_int(l_net);
@@ -860,7 +858,7 @@ static bool s_gdb_in_pkt_proc_callback(dap_proc_thread_t *a_thread, void *a_arg)
             }
             l_group_changed = strcmp(l_last_group, l_obj->group) || l_last_type != l_obj->type;
             // Send remote side notification about received obj
-            if (l_sync_request->request.node_addr.uint64 &&
+            /*if (l_sync_request->request.node_addr.uint64 &&
                     (l_group_changed || i == l_data_obj_count - 1)) {
                 struct sync_request *l_sync_req_tsd = DAP_DUP(l_sync_request);
                 l_sync_req_tsd->request.id_end = l_last_id;
@@ -868,7 +866,7 @@ static bool s_gdb_in_pkt_proc_callback(dap_proc_thread_t *a_thread, void *a_arg)
                                                                       dap_strdup_printf("%s.del", l_last_group);
                 dap_proc_thread_worker_exec_callback_inter(a_thread, l_sync_request->worker->id,
                                                      s_gdb_sync_tsd_worker_callback, l_sync_req_tsd);
-            }
+            }*/
             l_last_id = l_obj->id;
             l_last_group = l_obj->group;
             l_last_type = l_obj->type;
@@ -963,8 +961,7 @@ static bool s_chain_timer_callback(void *a_arg)
                 l_ch_chain->callback_notify_packet_out(l_ch_chain, DAP_STREAM_CH_CHAIN_PKT_TYPE_TIMEOUT, NULL, 0,
                                                       l_ch_chain->callback_notify_arg);
         }
-        if (l_ch_chain->request_db_log)
-            s_free_log_list_gdb(l_ch_chain);
+        s_free_log_list_gdb(l_ch_chain);
         DAP_DELETE(a_arg);
         l_ch_chain->activity_timer = NULL;
         return false;
@@ -1589,17 +1586,24 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
  */
 static void s_free_log_list_gdb ( dap_stream_ch_chain_t * a_ch_chain)
 {
-    // free log list
-    dap_db_log_list_delete(a_ch_chain->request_db_log);
-    a_ch_chain->request_db_log = NULL;
-    dap_stream_ch_chain_hash_item_t *l_hash_item = NULL, *l_tmp = NULL;
-    HASH_ITER(hh, a_ch_chain->remote_gdbs, l_hash_item, l_tmp) {
-        // Clang bug at this, l_hash_item should change at every loop cycle
-        HASH_DEL(a_ch_chain->remote_gdbs, l_hash_item);
-        DAP_DELETE(l_hash_item);
+    if (a_ch_chain->request_db_log) {
+        // free log list
+        debug_if(s_debug_more, L_INFO, "[stm_ch_chain:%p] a_ch_chain->request_db_log:%p --- cleanuping ...", a_ch_chain, a_ch_chain->request_db_log);
+        dap_db_log_list_delete(a_ch_chain->request_db_log);
+        a_ch_chain->request_db_log = NULL;
+    }
+
+    if (a_ch_chain->remote_gdbs) {
+        dap_stream_ch_chain_hash_item_t *l_hash_item = NULL, *l_tmp = NULL;
+        HASH_ITER(hh, a_ch_chain->remote_gdbs, l_hash_item, l_tmp) {
+            // Clang bug at this, l_hash_item should change at every loop cycle
+            HASH_DEL(a_ch_chain->remote_gdbs, l_hash_item);
+            DAP_DELETE(l_hash_item);
+        }
+        a_ch_chain->remote_gdbs = NULL;
     }
-    a_ch_chain->remote_gdbs = NULL;
 }
+
 /**
  * @brief s_ch_chain_go_idle
  * @param a_ch_chain
@@ -1632,6 +1636,7 @@ static void s_ch_chain_go_idle(dap_stream_ch_chain_t *a_ch_chain)
     }
     a_ch_chain->remote_atoms = NULL;
     a_ch_chain->sent_breaks = 0;
+    s_free_log_list_gdb(a_ch_chain);
 }
 
 struct chain_io_complete {
@@ -1726,6 +1731,8 @@ void s_stream_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg)
                     break;
                 l_data[i].hash = l_obj->hash;
                 l_data[i].size = l_obj->pkt->data_size;
+                DAP_DELETE(l_obj->pkt);
+                DAP_DELETE(l_obj);
             }
             if (i) {
                 l_was_sent_smth = true;
@@ -1776,7 +1783,6 @@ void s_stream_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg)
                                         l_request_atom_hash_str);
                     }*/
                     l_skip_count++;
-                    l_ch_chain->timer_shots = -1;
                 } else {
                     l_hash_item = DAP_NEW_Z(dap_stream_ch_chain_hash_item_t);
                     l_hash_item->hash = l_obj->hash;
@@ -1786,9 +1792,11 @@ void s_stream_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg)
                     l_pkt = dap_store_packet_multiple(l_pkt, l_obj->pkt);
                     l_ch_chain->stats_request_gdb_processed++;
                     l_pkt_size = sizeof(dap_global_db_pkt_t) + l_pkt->data_size;
-                    if (l_pkt_size >= DAP_CHAIN_PKT_EXPECT_SIZE)
-                        break;
                 }
+                DAP_DELETE(l_obj->pkt);
+                DAP_DELETE(l_obj);
+                if (l_pkt_size >= DAP_CHAIN_PKT_EXPECT_SIZE)
+                    break;
             }
             if (l_pkt_size) {
                 l_was_sent_smth = true;
diff --git a/modules/channel/chain/include/dap_stream_ch_chain.h b/modules/channel/chain/include/dap_stream_ch_chain.h
index df8e1ea843..13580f1ae0 100644
--- a/modules/channel/chain/include/dap_stream_ch_chain.h
+++ b/modules/channel/chain/include/dap_stream_ch_chain.h
@@ -35,7 +35,7 @@
 #include "dap_global_db_remote.h"
 
 #define DAP_CHAIN_NODE_SYNC_TIMEOUT 30  // sec
-#define DAP_SYNC_TICKS_PER_SECOND   50
+#define DAP_SYNC_TICKS_PER_SECOND   10
 
 typedef struct dap_stream_ch_chain dap_stream_ch_chain_t;
 typedef void (*dap_stream_ch_chain_callback_packet_t)(dap_stream_ch_chain_t*, uint8_t a_pkt_type,
diff --git a/modules/channel/chain/include/dap_stream_ch_chain_pkt.h b/modules/channel/chain/include/dap_stream_ch_chain_pkt.h
index 69f2528f4e..531f54d3f6 100644
--- a/modules/channel/chain/include/dap_stream_ch_chain_pkt.h
+++ b/modules/channel/chain/include/dap_stream_ch_chain_pkt.h
@@ -160,8 +160,8 @@ size_t dap_stream_ch_chain_pkt_write_inter(dap_events_socket_t * a_es_input, dap
  * @param a_err_string_format
  * @return
  */
-inline static size_t dap_stream_ch_chain_pkt_write_error_unsafe(dap_stream_ch_t *a_ch, uint64_t a_net_id,
-                                                  uint64_t a_chain_id, uint64_t a_cell_id, const char * a_err_string_format,... )
+inline static DAP_PRINTF_ATTR(5, 6) size_t dap_stream_ch_chain_pkt_write_error_unsafe(dap_stream_ch_t *a_ch, uint64_t a_net_id,
+                                                  uint64_t a_chain_id, uint64_t a_cell_id, const char * a_err_string_format, ...)
 {
     va_list l_va;
     char * l_str;
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 7680cddbc3..66e2c52ab2 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -249,7 +249,7 @@ static int s_cli_dag_poa(int argc, char ** argv, char **a_str_reply)
                                                     l_event_hash_hex_str, &l_round_item_size, NULL, NULL );
             if ( l_round_item == NULL ) {
                 dap_cli_server_cmd_set_reply_text(a_str_reply,
-                                                  "Can't find event in round.new - only place where could be signed the new event\n",
+                                                  "Can't find event %s in round.new - only place where could be signed the new event\n",
                                                   l_event_hash_str);
                 ret = -30;
             }else {
@@ -298,7 +298,7 @@ static int s_cli_dag_poa(int argc, char ** argv, char **a_str_reply)
                     DAP_DELETE(l_event_new_hash_base58_str);
                 } else {
                     dap_cli_server_cmd_set_reply_text(a_str_reply,
-                                                  "Can't sign event in round.new\n",
+                                                  "Can't sign event %s in round.new\n",
                                                   l_event_hash_str);
                     ret=-1;
                 }
diff --git a/modules/consensus/none/dap_chain_cs_none.c b/modules/consensus/none/dap_chain_cs_none.c
index a13f1b1f82..4688ae7953 100644
--- a/modules/consensus/none/dap_chain_cs_none.c
+++ b/modules/consensus/none/dap_chain_cs_none.c
@@ -174,12 +174,12 @@ int dap_chain_gdb_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
     l_gdb_priv->chain = a_chain;
 
     if(!l_gdb_priv->celled){
-        l_gdb_priv->group_datums = dap_strdup_printf( "chain-gdb.%s.chain-%016llX",l_net->pub.name,
+        l_gdb_priv->group_datums = dap_strdup_printf( "chain-gdb.%s.chain-%016"DAP_UINT64_FORMAT_X,l_net->pub.name,
                                                   a_chain->id.uint64);
     }else {
         // here is not work because dap_chain_net_load() not yet fully performed
-        l_gdb_priv->group_datums = dap_strdup_printf( "chain-gdb.%s.chain-%016llX.cell-%016llX",l_net->pub.name,
-                                                  a_chain->id.uint64, a_chain->cells->id.uint64);
+        l_gdb_priv->group_datums = dap_strdup_printf("chain-gdb.%s.chain-%016"DAP_UINT64_FORMAT_X".cell-%016"DAP_UINT64_FORMAT_X,
+                                                      l_net->pub.name, a_chain->id.uint64, a_chain->cells->id.uint64);
     }
 
     // Add group prefix that will be tracking all changes
diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c
index 5a8b7e0b3c..ee44cac4de 100644
--- a/modules/mempool/dap_chain_mempool.c
+++ b/modules/mempool/dap_chain_mempool.c
@@ -1060,7 +1060,7 @@ void dap_chain_mempool_filter(dap_chain_t *a_chain, int *a_removed){
     size_t l_objs_size = 0;
     dap_time_t l_cut_off_time = dap_time_now() - 2592000; // 2592000 sec = 30 days
     char l_cut_off_time_str[80] = {'\0'};
-    dap_time_to_str_rfc822(&l_cut_off_time_str, 80, l_cut_off_time);
+    dap_time_to_str_rfc822(l_cut_off_time_str, 80, l_cut_off_time);
     dap_global_db_obj_t * l_objs = dap_global_db_get_all_sync(l_gdb_group, &l_objs_size);
     for (size_t i = 0; i < l_objs_size; i++) {
         dap_chain_datum_t *l_datum = (dap_chain_datum_t*)l_objs[i].value;
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 843ab84cf2..dde08b463e 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -233,8 +233,6 @@ static const char * c_net_states[]={
     [NET_STATE_ONLINE]= "NET_STATE_ONLINE"
 };
 
-static dap_chain_net_t * s_net_new(const char * a_id, const char * a_name , const char * a_node_role);
-
 // Node link callbacks
 static void s_node_link_callback_connected(dap_chain_node_client_t * a_node_client, void * a_arg);
 static void s_node_link_callback_disconnected(dap_chain_node_client_t * a_node_client, void * a_arg);
@@ -1344,13 +1342,14 @@ dap_chain_node_role_t dap_chain_net_get_role(dap_chain_net_t * a_net)
  * @param a_node_role
  * @return dap_chain_net_t*
  */
-static dap_chain_net_t *s_net_new(const char * a_id, const char * a_name ,
-                                    const char * a_node_role)
+static dap_chain_net_t *s_net_new(const char *a_id, const char *a_name,
+                                  const char *a_native_ticker, const char *a_node_role)
 {
-    if (!a_id || !a_name || !a_node_role)
+    if (!a_id || !a_name || !a_native_ticker || !a_node_role)
         return NULL;
     dap_chain_net_t *ret = DAP_NEW_Z_SIZE( dap_chain_net_t, sizeof(ret->pub) + sizeof(dap_chain_net_pvt_t) );
     ret->pub.name = strdup( a_name );
+    ret->pub.native_ticker = strdup( a_native_ticker );
     pthread_rwlock_init(&PVT(ret)->uplinks_lock, NULL);
     pthread_rwlock_init(&PVT(ret)->downlinks_lock, NULL);
     pthread_rwlock_init(&PVT(ret)->balancer_lock, NULL);
@@ -1482,7 +1481,7 @@ void s_set_reply_text_node_status(char **a_str_reply, dap_chain_net_t * a_net){
 
     char* l_sync_current_link_text_block = NULL;
     if (PVT(a_net)->state != NET_STATE_OFFLINE)
-        l_sync_current_link_text_block = dap_strdup_printf(", active links %u from %u",
+        l_sync_current_link_text_block = dap_strdup_printf(", active links %zu from %u",
                                                            s_net_get_active_links_count(a_net),
                                                            HASH_COUNT(PVT(a_net)->net_links));
     dap_cli_server_cmd_set_reply_text(a_str_reply,
@@ -1758,7 +1757,7 @@ static int s_cli_net(int argc, char **argv, char **a_str_reply)
                                                      (long double) l_tx_count / (long double) ( l_to_ts - l_from_ts );
                 dap_string_append_printf( l_ret_str, "\tSpeed:  %.3Lf TPS\n", l_tps );
                 dap_string_append_printf( l_ret_str, "\tTotal:  %"DAP_UINT64_FORMAT_U"\n", l_tx_count );
-                dap_cli_server_cmd_set_reply_text( a_str_reply, l_ret_str->str );
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_ret_str->str);
                 dap_string_free( l_ret_str, false );
             } else if (strcmp(l_stats_str, "tps") == 0) {
                 struct timespec l_from_time_acc = {}, l_to_time_acc = {};
@@ -2091,6 +2090,7 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx)
         dap_chain_net_t * l_net = s_net_new(
                                             dap_config_get_item_str(l_cfg , "general" , "id" ),
                                             dap_config_get_item_str(l_cfg , "general" , "name" ),
+                                            dap_config_get_item_str(l_cfg , "general" , "native_ticker"),
                                             dap_config_get_item_str(l_cfg , "general" , "node-role" )
                                            );
         if(!l_net) {
@@ -2190,12 +2190,18 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx)
         // init LEDGER model
         l_net->pub.ledger = dap_chain_ledger_create(l_ledger_flags, l_net->pub.name);
         // Check if seed nodes are present in local db alias
-        char **l_seed_aliases = dap_config_get_array_str( l_cfg , "general" ,"seed_nodes_aliases"
-                                                             ,&l_net_pvt->seed_aliases_count);
-        l_net_pvt->seed_aliases = l_net_pvt->seed_aliases_count>0 ?
-                                   (char **)DAP_NEW_SIZE(char**, sizeof(char*)*PVT(l_net)->seed_aliases_count) : NULL;
-        for(size_t i = 0; i < PVT(l_net)->seed_aliases_count; i++) {
+        char **l_seed_aliases = dap_config_get_array_str(l_cfg, "general", "seed_nodes_aliases",
+                                                         &l_net_pvt->seed_aliases_count);
+        if (l_net_pvt->seed_aliases_count)
+            l_net_pvt->seed_aliases = (char **)DAP_NEW_SIZE(char *, sizeof(char *) * l_net_pvt->seed_aliases_count);
+        for(size_t i = 0; i < l_net_pvt->seed_aliases_count; i++)
             l_net_pvt->seed_aliases[i] = dap_strdup(l_seed_aliases[i]);
+        // randomize seed nodes list
+        for (int j = l_net_pvt->seed_aliases_count - 1; j > 0; j--) {
+            int n = rand() % j;
+            char *tmp = l_net_pvt->seed_aliases[n];
+            l_net_pvt->seed_aliases[n] = l_net_pvt->seed_aliases[j];
+            l_net_pvt->seed_aliases[j] = tmp;
         }
 
         uint16_t l_seed_nodes_addrs_len =0;
@@ -2385,27 +2391,19 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx)
             dap_chain_node_addr_t * l_node_addr;
             if ( l_node_addr_str == NULL)
                 l_node_addr = dap_chain_node_alias_find(l_net, l_node_alias_str);
-            else{
+            else {
                 l_node_addr = DAP_NEW_Z(dap_chain_node_addr_t);
-                bool parse_succesfully = false;
-                if (dap_sscanf(l_node_addr_str, "0x%016"DAP_UINT64_FORMAT_x, &l_node_addr->uint64 ) == 1 ){
+                if (dap_sscanf(l_node_addr_str, "0x%016"DAP_UINT64_FORMAT_x, &l_node_addr->uint64) == 1)
                     log_it(L_DEBUG, "Parse node address with format 0x016llx");
-                    parse_succesfully = true;
-                }
-                if ( !parse_succesfully && dap_chain_node_addr_from_str(l_node_addr, l_node_addr_str) == 0) {
+                else if (dap_chain_node_addr_from_str(l_node_addr, l_node_addr_str) == 0)
                     log_it(L_DEBUG, "Parse node address with format 04hX::04hX::04hX::04hX");
-                    parse_succesfully = true;
-                }
-
-                if (!parse_succesfully){
+                else {
                     log_it(L_ERROR,"Can't parse node address %s", l_node_addr_str);
-                    DAP_DELETE(l_node_addr);
-                    l_node_addr = NULL;
+                    DAP_DEL_Z(l_node_addr);
                 }
                 if(l_node_addr)
                     log_it(L_NOTICE, "Parse node addr " NODE_ADDR_FP_STR " successfully", NODE_ADDR_FP_ARGS(l_node_addr));
                 l_net_pvt->node_addr = l_node_addr;
-
             }
             if ( l_node_addr ) {
                 char *l_addr_hash_str = dap_chain_node_addr_to_hash_str(l_node_addr);
@@ -2549,7 +2547,6 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx)
                     }
                 }
             } while (l_processed);
-            l_net->pub.native_ticker = dap_strdup(dap_config_get_item_str(l_cfg , "general" , "native_ticker"));
         } else {
             log_it(L_ERROR, "Can't find any chains for network %s", l_net->pub.name);
             l_net_pvt->load_mode = false;
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 9d71832568..3e363090f8 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -219,7 +219,7 @@ static dap_chain_node_info_t* node_info_read_and_reply(dap_chain_net_t * a_net,
         node_info->hdr.ext_port = 8079; */
     size_t node_info_size_must_be = dap_chain_node_info_get_size(node_info);
     if(node_info_size_must_be != node_info_size) {
-        dap_cli_server_cmd_set_reply_text(a_str_reply, "node has bad size in base=%u (must be %u)", node_info_size,
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "node has bad size in base=%zu (must be %zu)", node_info_size,
                 node_info_size_must_be);
         DAP_DELETE(node_info);
         DAP_DELETE(l_key);
@@ -314,7 +314,7 @@ static int node_info_add_with_reply(dap_chain_net_t * a_net, dap_chain_node_info
         // add alias
         if(!dap_chain_node_alias_register(a_net, a_alias_str, &a_node_info->hdr.address)) {
             log_it(L_WARNING, "can't save alias %s", a_alias_str);
-            dap_cli_server_cmd_set_reply_text(a_str_reply, "alias '%s' can't be mapped to addr=0x%lld",
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "alias '%s' can't be mapped to addr=0x%"DAP_UINT64_FORMAT_U,
                     a_alias_str, a_node_info->hdr.address.uint64);
             return -1;
         }
@@ -620,7 +620,7 @@ static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_add
 
         if(!l_nodes_count || !l_objs) {
             dap_string_append_printf(l_string_reply, "No records\n");
-            dap_cli_server_cmd_set_reply_text(a_str_reply, l_string_reply->str);
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_string_reply->str);
             dap_string_free(l_string_reply, true);
             dap_global_db_objs_delete(l_objs, l_nodes_count);
             return -1;
@@ -708,7 +708,7 @@ static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_add
         }
         dap_global_db_objs_delete(l_objs, l_nodes_count);
     }
-    dap_cli_server_cmd_set_reply_text(a_str_reply, l_string_reply->str);
+    dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_string_reply->str);
     dap_string_free(l_string_reply, true);
     return l_ret;
 }
@@ -788,7 +788,7 @@ int com_global_db(int a_argc, char ** a_argv, char **a_str_reply)
                     if(l_ret > 0)
                         dap_cli_server_cmd_set_reply_text(a_str_reply, "cell added successfully");
                     else
-                        dap_cli_server_cmd_set_reply_text(a_str_reply, "can't create file for cell 0x%016X ( %s )",
+                        dap_cli_server_cmd_set_reply_text(a_str_reply, "can't create file for cell 0x%016"DAP_UINT64_FORMAT_X" ( %s )",
                                 l_cell->id.uint64,l_cell->file_storage_path);
                     dap_chain_cell_close(l_cell);
                     return l_ret;
@@ -881,7 +881,7 @@ int com_global_db(int a_argc, char ** a_argv, char **a_str_reply)
                 char *l_value_str = DAP_NEW_Z_SIZE(char, l_value_len * 2 + 2);
                 //size_t ret = dap_bin2hex(l_value_str, l_value, l_value_len);
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Record found\n"
-                        "lenght:\t%u byte\n"
+                        "lenght:\t%zu byte\n"
                         "hash:\t%s\n"
                         "pinned:\t%s\n"
                         "value:\t0x%s\n\n", l_value_len, l_hash_str, l_is_pinned ? "Yes" : "No", l_value_str);
@@ -1944,8 +1944,8 @@ char    l_buf[1024];
                 l_ledger = l_net->pub.ledger;
                     l_net_name = l_net->pub.name;
                 }else{
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't find network id 0x%08X from address %s", l_addr->net_id.uint64,
-                                                      l_addr_str);
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't find network id 0x%016"DAP_UINT64_FORMAT_X" from address %s",
+                                                      l_addr->net_id.uint64, l_addr_str);
                     return -1;
 
                 }
@@ -2041,7 +2041,7 @@ int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int a_argc,
         l_str_to_reply = dap_strcat2(l_str_to_reply,l_str_to_reply_chain);
         dap_string_t* l_net_str = dap_cli_list_net();
         l_str_to_reply = dap_strcat2(l_str_to_reply,l_net_str->str);
-        dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_to_reply);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_to_reply);
         return -102;
     }
 
@@ -2065,7 +2065,7 @@ int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int a_argc,
                         l_str_to_reply = dap_strcat2(l_str_to_reply,l_chain->name);
                         l_str_to_reply = dap_strcat2(l_str_to_reply,"\n");
                 }
-                dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_to_reply);
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_to_reply);
                 return -103;
             }
         }
@@ -2436,7 +2436,6 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                     l_token_ticker = obj_token->header.ticker;
                 } else {
                     dap_list_t* l_tickers = NULL;
-                    const char *l_native_ticker = a_net->pub.native_ticker;
                     dap_chain_datum_tx_t *l_tx_parent = NULL;
                     int l_item_in_size = 0;
                     void *l_item_in = dap_chain_datum_tx_item_get((dap_chain_datum_tx_t*)l_datum->data, NULL, TX_ITEM_TYPE_IN_ALL, &l_item_in_size);
@@ -2552,7 +2551,7 @@ int com_mempool_list(int a_argc, char **a_argv, char **a_str_reply)
     else
         DL_FOREACH(l_net->pub.chains, l_chain)
                 s_com_mempool_list_print_for_chain(l_net, l_chain, l_addr_base58, l_str_tmp, l_hash_out_type);
-    dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_tmp->str);
+    dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_tmp->str);
     dap_string_free(l_str_tmp, true);
     return 0;
 }
@@ -2796,7 +2795,7 @@ int com_mempool_proc(int a_argc, char **a_argv, char **a_str_reply)
                     }
                 }
                 dap_string_append_printf(l_str_tmp, "\n");
-                dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_tmp->str);
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_tmp->str);
                 dap_string_free(l_str_tmp, true);
             } else {
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Error! Can't find datum %s", l_datum_hash_str);
@@ -3784,7 +3783,7 @@ int com_token_emit(int a_argc, char **a_argv, char **a_str_reply)
                                                     l_str_reply_tmp);
         DAP_DEL_Z(l_tx_hash_str);
     } else{ // if transaction was not specified when emission was added we need output only emission result
-        dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_reply_tmp);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_reply_tmp);
     }
     DAP_DEL_Z(l_certs);
     DAP_DEL_Z(l_str_reply_tmp);
@@ -3897,7 +3896,7 @@ int com_tx_cond_create(int a_argc, char ** a_argv, char **a_str_reply)
     }
     dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_str, c_wallets_path);
     if(!l_wallet) {
-        dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't open wallet '%s'", l_wallet);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't open wallet '%s'", l_wallet->name);
         return -12;
     }
 
@@ -4489,10 +4488,11 @@ int com_tx_create_json(int a_argc, char ** a_argv, char **a_str_reply)
                 if(!s_json_get_uint256(l_json_item_obj, "value", &l_value) || IS_ZERO_256(l_value)) {
                     break;
                 }
-                const char *l_params_str = s_json_get_text(l_json_item_obj, "params");
+                /*const char *l_params_str = s_json_get_text(l_json_item_obj, "params");
                 size_t l_params_size = dap_strlen(l_params_str);
-                dap_chain_tx_out_cond_t *l_out_cond_item = NULL;//dap_chain_datum_tx_item_out_cond_create_srv_xchange(l_srv_uid, l_net->pub.id, l_token, l_value, l_params_str, l_params_size);
-                l_item = (const uint8_t*) l_out_cond_item;
+                dap_chain_tx_out_cond_t *l_out_cond_item = dap_chain_datum_tx_item_out_cond_create_srv_xchange(l_srv_uid, l_net->pub.id, l_token, l_value, l_params_str, l_params_size);
+                l_item = (const uint8_t*) l_out_cond_item;*/
+                l_item = NULL;
             }
                 break;
             case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE:{
@@ -4661,7 +4661,7 @@ int com_tx_create_json(int a_argc, char ** a_argv, char **a_str_reply)
         return -90;
     }
     // Completed successfully
-    dap_cli_server_cmd_set_reply_text(a_str_reply, "Transaction %s with %d items created and added to mempool successfully", l_tx_hash_str, l_items_ready);
+    dap_cli_server_cmd_set_reply_text(a_str_reply, "Transaction %s with %zu items created and added to mempool successfully", l_tx_hash_str, l_items_ready);
     DAP_DELETE(l_tx_hash_str);
     return l_err_code;
 }
@@ -4821,7 +4821,7 @@ int com_tx_create(int a_argc, char **a_argv, char **a_str_reply)
             dap_string_append_printf(l_string_ret, "transfer=False\n");
             res = -15;
         }
-        dap_cli_server_cmd_set_reply_text(a_str_reply, l_string_ret->str);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_string_ret->str);
         dap_string_free(l_string_ret, true);
         DAP_DELETE(l_addr_to);
         return res;
@@ -4843,8 +4843,10 @@ int com_tx_create(int a_argc, char **a_argv, char **a_str_reply)
 
     // Check, if network ID is same as ID in destination wallet address. If not - operation is cancelled.
     if (!dap_chain_addr_is_blank(l_addr_to) && l_addr_to->net_id.uint64 != l_net->pub.id.uint64) {
-        dap_cli_server_cmd_set_reply_text(a_str_reply, "destination wallet network ID=0x%llx and network ID=0x%llx is not equal. Please, change network name or wallet address",
-                                            l_addr_to->net_id.uint64, l_net->pub.id.uint64);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "destination wallet network ID=0x%"DAP_UINT64_FORMAT_x
+                                                       " and network ID=0x%"DAP_UINT64_FORMAT_x" is not equal."
+                                                       " Please, change network name or wallet address",
+                                                       l_addr_to->net_id.uint64, l_net->pub.id.uint64);
         return -13;
     }
 
@@ -4865,7 +4867,7 @@ int com_tx_create(int a_argc, char **a_argv, char **a_str_reply)
             res = -14;
         }
     }
-    dap_cli_server_cmd_set_reply_text(a_str_reply, l_string_ret->str);
+    dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_string_ret->str);
     dap_string_free(l_string_ret, true);
 
     DAP_DELETE(l_addr_to);
@@ -5058,7 +5060,7 @@ int com_tx_history(int a_argc, char ** a_argv, char **a_str_reply)
                 l_str_out ? l_str_out : " empty");
         DAP_DELETE(l_addr_str);
     }
-    dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_ret);
+    dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_ret);
     DAP_DELETE(l_str_out);
     DAP_DELETE(l_str_ret);
     return 0;
@@ -5095,14 +5097,14 @@ int com_stats(int argc, char **a_argv, char **a_str_reply)
     {
         dap_cpu_monitor_init();
         dap_usleep(500000);
-        char *l_str_reply_prev = dap_strdup_printf("");
+        char *l_str_reply_prev = DAP_NEW_Z_SIZE(char, 1);
         char *l_str_delimiter;
         dap_cpu_stats_t s_cpu_stats = dap_cpu_get_stats();
         for (uint32_t n_cpu_num = 0; n_cpu_num < s_cpu_stats.cpu_cores_count; n_cpu_num++) {
             if ((n_cpu_num % 4 == 0) && (n_cpu_num != 0)) {
                 l_str_delimiter = dap_strdup_printf("\n");
             } else if (n_cpu_num == s_cpu_stats.cpu_cores_count - 1) {
-                l_str_delimiter = dap_strdup_printf("");
+                l_str_delimiter = DAP_NEW_Z_SIZE(char, 1);
             } else {
                 l_str_delimiter = dap_strdup_printf(" ");
             }
@@ -5180,7 +5182,7 @@ int com_print_log(int a_argc, char **a_argv, char **a_str_reply)
         dap_cli_server_cmd_set_reply_text(a_str_reply, "no logs");
         return -1;
     }
-    dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_ret);
+    dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_ret);
     DAP_DELETE(l_str_ret);
     return 0;
 }
@@ -5270,7 +5272,7 @@ int cmd_gdb_export(int a_argc, char **a_argv, char **a_str_reply)
         dap_cli_server_cmd_set_reply_text (a_str_reply, "Couldn't export JSON to file, error code %d", errno );
 #else
         log_it(L_CRITICAL, "Couldn't export JSON to file, err '%s'", json_util_get_last_err());
-        dap_cli_server_cmd_set_reply_text(a_str_reply, json_util_get_last_err());
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", json_util_get_last_err());
 #endif
          json_object_put(l_json);
          return -1;
@@ -5307,7 +5309,7 @@ int cmd_gdb_import(int a_argc, char **a_argv, char ** a_str_reply)
         dap_cli_server_cmd_set_reply_text(a_str_reply, "Import error occured: code %d",errno);
 #else
         log_it(L_CRITICAL, "Import error occured: %s", json_util_get_last_err());
-        dap_cli_server_cmd_set_reply_text(a_str_reply, json_util_get_last_err());
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", json_util_get_last_err());
 #endif
         return -1;
     }
diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c
index 5ea1d1d8c8..6692e7dec3 100644
--- a/modules/net/dap_chain_node_client.c
+++ b/modules/net/dap_chain_node_client.c
@@ -634,12 +634,12 @@ static void s_save_stat_to_database_callback_set_stat (dap_global_db_context_t *
 static void s_save_stat_to_database_callback_get_last_stat (dap_global_db_context_t * a_global_db_context,int a_rc, const char * a_group, const char * a_key, const void * a_value, const size_t a_value_len, dap_nanotime_t a_value_ts, bool a_is_pinned, void * a_arg)
 {
     char * l_json_str = (char *) a_arg;
-    int64_t l_key = 0;
+    uint64_t l_key = 0;
     if(a_rc == DAP_GLOBAL_DB_RC_SUCCESS) {
         l_key = strtoll(a_key, NULL, 16);
     }
 
-    char *l_key_str = dap_strdup_printf("%06x", ++l_key);
+    char *l_key_str = dap_strdup_printf("%06"DAP_UINT64_FORMAT_x, ++l_key);
     dap_global_db_set(a_group, l_key_str, l_json_str, strlen(l_json_str) + 1,false, s_save_stat_to_database_callback_set_stat, l_json_str);
 
     DAP_DELETE(l_key_str);
diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h
index ac11bd752b..0387edc7d4 100644
--- a/modules/net/include/dap_chain_net.h
+++ b/modules/net/include/dap_chain_net.h
@@ -170,7 +170,7 @@ DAP_STATIC_INLINE char *dap_chain_net_get_gdb_group_from_chain_new(dap_chain_t *
 {
     dap_chain_net_t *l_net = a_chain ? dap_chain_net_by_id(a_chain->net_id) : NULL;
     if ( l_net )
-        return dap_strdup_printf("chain-gdb.%s.chain-%016llX",l_net->pub.name, a_chain->id.uint64);
+        return dap_strdup_printf("chain-gdb.%s.chain-%016"DAP_UINT64_FORMAT_X,l_net->pub.name, a_chain->id.uint64);
     return NULL;
 }
 
diff --git a/modules/net/iputils/iputils.h b/modules/net/iputils/iputils.h
index 0330b548f1..e75981cb37 100644
--- a/modules/net/iputils/iputils.h
+++ b/modules/net/iputils/iputils.h
@@ -22,6 +22,8 @@
 #include <setjmp.h>
 #include <sys/time.h>
 
+#include "dap_common.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -175,7 +177,7 @@ void iputils_reset_verbose(void);
 
 
 // analog printf()
-int log_printf(const char *format, ...);
+DAP_PRINTF_ATTR(1, 2) int log_printf(const char *format, ...);
 
 #define PACKAGE_NAME "iputils"
 #define PACKAGE_VERSION "0.1"
diff --git a/modules/net/iputils/ping.h b/modules/net/iputils/ping.h
index 651455289f..cf638f152e 100644
--- a/modules/net/iputils/ping.h
+++ b/modules/net/iputils/ping.h
@@ -163,7 +163,7 @@ static inline bitmap_t rcvd_test(ping_handle_t *a_ping_handle, uint16_t seq)
 }
 
 #ifndef HAVE_ERROR_H
-static void error(int status, int errnum, const char *format, ...)
+static DAP_PRINTF_ATTR(3, 4) void error(int status, int errnum, const char *format, ...)
 {
   va_list ap;
 
diff --git a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c
index 4b0b1aa4af..05cdd0fffb 100644
--- a/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c
+++ b/modules/service/stake_pos_delegate/dap_chain_net_srv_stake_pos_delegate.c
@@ -826,7 +826,7 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
             }
             uint256_t l_fee = dap_chain_coins_to_balance(l_fee_str);
             if (IS_ZERO_256(l_fee)) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -fee_percent <long double>(%)");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -fee_percent <long double>(%%)");
                 return -12;
             }
             // Create the stake item
@@ -902,7 +902,7 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
             }
             uint256_t l_fee = dap_chain_coins_to_balance(l_fee_str);
             if (IS_ZERO_256(l_fee)) {
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -fee_percent <long double>(%)");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -fee_percent <long double>(%%)");
                 return -12;
             }
             uint256_t l_balance = dap_chain_wallet_get_balance(l_wallet, l_net->pub.id, l_token_str);
@@ -1036,7 +1036,7 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha
             if (l_fee_str) {
                 long double l_fee = strtold(l_fee_str, NULL);
                 if (!l_fee) {
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -fee_percent <long double> %");
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Format -fee_percent <long double>(%%)");
                     DAP_DELETE(l_stake);
                     return -12;
                 }
diff --git a/modules/service/vpn/dap_chain_net_srv_vpn_cmd.c b/modules/service/vpn/dap_chain_net_srv_vpn_cmd.c
index df0d6ab08c..2856713bd1 100644
--- a/modules/service/vpn/dap_chain_net_srv_vpn_cmd.c
+++ b/modules/service/vpn/dap_chain_net_srv_vpn_cmd.c
@@ -9,7 +9,7 @@
 static char* get_value_text(uintmax_t a_value)
 {
     if(a_value < 2048)
-        return dap_strdup_printf("%d bytes", a_value);
+        return dap_strdup_printf("%d bytes", (int)a_value);
     else if(a_value < 2048 * 1024)
         return dap_strdup_printf("%.2lf Kb", (double) a_value / 1024);
     else if(a_value < 2048ll * 1024 * 1024)
@@ -33,9 +33,6 @@ static void add_value_text(dap_string_t *l_str, char *l_addstr, uintmax_t a_valu
  */
 int com_vpn_statistics(int a_argc, char ** a_argv, char **a_str_reply)
 {
-    dap_stream_ch_t* a_ch;
-    dap_stream_t * stream;
-    dap_stream_session_t * session;
     // get statistics for all actual sessions
     dap_list_t *l_list = dap_stream_session_get_list_sessions();
     dap_string_t *l_str = dap_string_new(NULL);
@@ -83,7 +80,7 @@ int com_vpn_statistics(int a_argc, char ** a_argv, char **a_str_reply)
     // unlock sessions list
     dap_stream_session_get_list_sessions_unlock();
     if(l_conn>0)
-        dap_cli_server_cmd_set_reply_text(a_str_reply, l_str->str);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str->str);
     else
         dap_cli_server_cmd_set_reply_text(a_str_reply, "No VPN connections");
     // free tmp memory
@@ -149,7 +146,7 @@ int com_vpn_client(int a_argc, char ** a_argv, char **a_str_reply)
     {
     case CMD_CHECK_RESULT: {
         char *l_str = dap_chain_net_vpn_client_check_result(l_net, l_hash_out_type);
-        dap_cli_server_cmd_set_reply_text(a_str_reply, l_str);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str);
         DAP_DELETE(l_str);
     }
     break;
@@ -179,7 +176,7 @@ int com_vpn_client(int a_argc, char ** a_argv, char **a_str_reply)
             l_data_size_to_send = 0;// no send data, only recv
             size_t l_data_size_to_recv = 10240;
             int l_timeout_test_ms = -1;// default timeout
-            int l_res = dap_chain_net_vpn_client_check(l_net, l_str_addr, NULL, l_srv_port, l_data_size_to_send, l_data_size_to_recv, l_timeout_test_ms);
+            l_res = dap_chain_net_vpn_client_check(l_net, l_str_addr, NULL, l_srv_port, l_data_size_to_send, l_data_size_to_recv, l_timeout_test_ms);
         }
         switch (l_res) {
         case 0:
@@ -219,14 +216,12 @@ int com_vpn_client(int a_argc, char ** a_argv, char **a_str_reply)
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Value of datoshi not defined, use -value <value of datoshi> parameter");
                 break;
             }
-            uint64_t l_a_value_datoshi = strtoull(l_str_value_datoshi, NULL, 10);
-            if(!l_a_value_datoshi)
-                l_a_value_datoshi = strtoull(l_str_value_datoshi, NULL, 16);
-            if(!l_a_value_datoshi) {
+            uint256_t l_a_value_datoshi = dap_chain_balance_scan(l_str_value_datoshi);
+            if(IS_ZERO_256(l_a_value_datoshi)) {
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Value of datoshi have to be more then 0");
                 break;
             }
-            int l_res = dap_chain_net_vpn_client_update(l_net, l_str_wallet, l_str_token, l_a_value_datoshi);
+            int l_res = 0;//dap_chain_net_vpn_client_update(l_net, l_str_wallet, l_str_token, l_a_value_datoshi);
             if(!l_res)
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "VPN client init successfully");
             else{
@@ -285,8 +280,8 @@ int com_vpn_client(int a_argc, char ** a_argv, char **a_str_reply)
     case CMD_STATUS:
         {
         char *l_wallet_name = NULL, *l_str_token = NULL;
-        uint64_t l_value_datoshi = 0;
-        dap_chain_net_vpn_client_get_wallet_info(l_net, &l_wallet_name, &l_str_token, &l_value_datoshi);
+        uint256_t l_value_datoshi = uint256_0;
+        //dap_chain_net_vpn_client_get_wallet_info(l_net, &l_wallet_name, &l_str_token, &l_value_datoshi);
 
         const char *l_status_txt = "";
         switch (dap_chain_net_vpn_client_status()) {
@@ -306,8 +301,10 @@ int com_vpn_client(int a_argc, char ** a_argv, char **a_str_reply)
             l_status_txt = "VPN client status unknown";
             break;
         }
-        dap_cli_server_cmd_set_reply_text(a_str_reply, "%s\nused:\nwallet:%s\nreceipt:%u*1e-9 %s", l_status_txt,
-                l_wallet_name, l_value_datoshi, l_str_token);
+        char *l_value_str = dap_chain_balance_to_coins(l_value_datoshi);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "%s\nused:\nwallet:%s\nreceipt:%s %s", l_status_txt,
+                l_wallet_name, l_value_str, l_str_token);
+        DAP_DELETE(l_value_str);
         break;
     }
     }
diff --git a/modules/service/vpn/dap_chain_net_vpn_client.c b/modules/service/vpn/dap_chain_net_vpn_client.c
index fd71bd40a0..031f517523 100644
--- a/modules/service/vpn/dap_chain_net_vpn_client.c
+++ b/modules/service/vpn/dap_chain_net_vpn_client.c
@@ -352,7 +352,7 @@ static dap_chain_hash_fast_t* dap_chain_net_vpn_client_tx_cond_hash(dap_chain_ne
  *
  * return: 0 Ok, 1 Ok, <0 Error
  */
-
+// TODO replace it with 256 bit value
 int dap_chain_net_vpn_client_update(dap_chain_net_t *a_net, const char *a_wallet_name, const char *a_str_token,
         uint64_t a_value_datoshi)
 {
@@ -383,11 +383,10 @@ int dap_chain_net_vpn_client_update(dap_chain_net_t *a_net, const char *a_wallet
  *
  * return: 0 Ok, 1 Ok, <0 Error
  */
-
+// TODO replace it with 256 bit value
 int dap_chain_net_vpn_client_get_wallet_info(dap_chain_net_t *a_net, char **a_wallet_name, char **a_str_token,
         uint64_t *a_value_datoshi)
 {
-    size_t l_gdb_group_size = 0;
     char *l_gdb_group = dap_strdup_printf("local.%s", DAP_CHAIN_NET_SRV_VPN_CDB_GDB_PREFIX);
     if(a_wallet_name)
         *a_wallet_name = (char*) dap_global_db_get_sync(l_gdb_group, "wallet_name", NULL, NULL, NULL);
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index b26732edd0..acc61e5f06 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -290,8 +290,10 @@ int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
     char *l_gdb_group;
     if (!l_dag->is_celled)
         l_gdb_group = dap_strdup_printf( "dag-%s-%s-round", l_net->pub.gdb_groups_prefix, a_chain->name);
-    else
-        l_gdb_group = dap_strdup_printf( "dag-%s-%s-%016llx-round", l_net->pub.gdb_groups_prefix, a_chain->name, 0);//a_chain->cells->id.uint64);
+    else {
+        uint64_t l_cell_id = 0; //a_chain->cells->id.uint64;
+        l_gdb_group = dap_strdup_printf( "dag-%s-%s-%016"DAP_UINT64_FORMAT_x"-round", l_net->pub.gdb_groups_prefix, a_chain->name, l_cell_id);
+    }
     l_dag->gdb_group_events_round_new = dap_strdup_printf("%s.%s", l_gdb_group, l_round_new_str);
     DAP_DELETE(l_gdb_group);
     DAP_DELETE(l_round_new_str);
@@ -1384,7 +1386,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
 
             // Cleaning up
             dap_global_db_objs_delete(l_objs, l_objs_size);
-            dap_cli_server_cmd_set_reply_text(a_str_reply,l_str_ret_tmp->str);
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_ret_tmp->str);
             dap_string_free(l_str_ret_tmp,false);
 
             // Spread new  mempool changes and  dag events in network - going to SYNC_ALL
@@ -1689,7 +1691,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
                     }
                     dap_chain_datum_dump(l_str_tmp, l_datum, l_hash_out_type);
 
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_tmp->str);
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_tmp->str);
                     dap_string_free(l_str_tmp,false);
                     ret=0;
                 }else {
@@ -1727,7 +1729,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
                         ret = -2;
 
                     }
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_tmp->str);
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_tmp->str);
                     dap_string_free(l_str_tmp,false);
                 } else if (!l_from_events_str || (strcmp(l_from_events_str,"events") == 0)) {
                     dap_string_t * l_str_tmp = dap_string_new(NULL);
@@ -1745,7 +1747,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
                     pthread_rwlock_unlock(&PVT(l_dag)->events_rwlock);
                     dap_string_append_printf(l_str_tmp,"%s.%s have total %zu events :\n",
                                              l_net->pub.name, l_chain->name, l_events_count);
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_tmp->str);
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_tmp->str);
                     dap_string_free(l_str_tmp,false);
                  }else if (l_from_events_str && (strcmp(l_from_events_str,"threshold") == 0) ){
                     dap_string_t * l_str_tmp = dap_string_new(NULL);
@@ -1764,7 +1766,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
                     pthread_rwlock_unlock(&PVT(l_dag)->events_rwlock);
                     dap_string_append_printf(l_str_tmp,"%s.%s have total %zu events in threshold :\n",
                                              l_net->pub.name, l_chain->name, l_events_count);
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_tmp->str);
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_tmp->str);
                     dap_string_free(l_str_tmp,false);
 
                 }else {
@@ -1810,20 +1812,20 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
                             DAP_DEL_Z(l_event_new_hash_base58_str);
                         } else {
                             dap_cli_server_cmd_set_reply_text(a_str_reply,
-                                                          "Can't sign event in round.new\n",
+                                                          "Can't sign event %s in round.new\n",
                                                           l_event_hash_str);
                             ret=-1;
                         }
                     } else {
                         dap_cli_server_cmd_set_reply_text(a_str_reply,
-                                                          "No valid certificate provided for event signing\n",
+                                                          "No valid certificate provided for event %s signing\n",
                                                           l_event_hash_str);
                         ret = -50;
                     }
                     DAP_DELETE(l_round_item);
                 } else {
                     dap_cli_server_cmd_set_reply_text(a_str_reply,
-                                                      "Can't find event in round.new - only place where could be signed the new event\n",
+                                                      "Can't find event %s in round.new - only place where could be signed the new event\n",
                                                       l_event_hash_str);
                     ret = -30;
                 }
-- 
GitLab