diff --git a/modules/consensus/block-poa/dap_chain_cs_block_poa.c b/modules/consensus/block-poa/dap_chain_cs_block_poa.c
index 5c8bde7f51a9dac2e52fb507395585e054070624..37a9516d8091b1b2cd75d743ee336eeb795ee7c1 100644
--- a/modules/consensus/block-poa/dap_chain_cs_block_poa.c
+++ b/modules/consensus/block-poa/dap_chain_cs_block_poa.c
@@ -59,7 +59,7 @@ static int s_callback_block_verify(dap_chain_cs_blocks_t * a_blocks, dap_chain_b
 static size_t s_callback_block_sign(dap_chain_cs_blocks_t *a_blocks, dap_chain_block_t **a_block_ptr, size_t a_block_size);
 
 // CLI commands
-static int s_cli_block_poa(int argc, char ** argv, char **str_reply);
+static int s_cli_block_poa(int argc, char ** argv, void **a_str_reply);
 
 static bool s_seed_mode = false;
 /**
@@ -96,7 +96,7 @@ void dap_chain_cs_block_poa_deinit(void)
  * @param str_reply
  * @return
  */
-static int s_cli_block_poa(int argc, char ** argv, char **a_str_reply)
+static int s_cli_block_poa(int argc, char ** argv, void **a_str_reply)
 {
     int ret = -666;
     int arg_index = 1;
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 3ed6b9dd31332e1d339d6d84f0817028784a1250..76388e5da89764ed2957b9f8b604657afa648ea2 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -95,7 +95,7 @@ static bool s_round_event_ready_minimum_check(dap_chain_cs_dag_t *a_dag, dap_cha
 static void s_round_event_cs_done(dap_chain_cs_dag_t * a_dag, uint64_t a_round_id);
 
 // CLI commands
-static int s_cli_dag_poa(int argc, char ** argv, char **str_reply);
+static int s_cli_dag_poa(int argc, char ** argv, void **a_str_reply);
 
 static bool s_seed_mode = false;
 static dap_interval_timer_t s_poa_round_timer = NULL;
@@ -173,7 +173,7 @@ void dap_chain_cs_dag_poa_presign_callback_set(dap_chain_t *a_chain, dap_chain_c
  * @param str_reply
  * @return
  */
-static int s_cli_dag_poa(int argc, char ** argv, char **a_str_reply)
+static int s_cli_dag_poa(int argc, char ** argv, void **a_str_reply)
 {
     int ret = -666;
     int arg_index = 1;
diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index bbba6f9e52001623d10cd23e672ca07a7971aff5..b7e065545bbcae5d23178ea9d16f316ab7732ba8 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -84,7 +84,7 @@ static dap_enc_key_t *s_callback_get_sign_key(dap_chain_t *a_chain);
 static void s_callback_set_min_validators_count(dap_chain_t *a_chain, uint16_t a_new_value);
 static void s_db_change_notifier(dap_store_obj_t *a_obj, void * a_arg);
 
-static int s_cli_esbocs(int argc, char ** argv, char **str_reply);
+static int s_cli_esbocs(int a_argc, char **a_argv, void **a_str_reply);
 
 DAP_STATIC_INLINE const char *s_voting_msg_type_to_str(uint8_t a_type)
 {
@@ -2591,7 +2591,7 @@ static dap_chain_datum_decree_t *s_esbocs_decree_set_min_validators_count(dap_ch
  * @param str_reply
  * @return
  */
-static int s_cli_esbocs(int a_argc, char ** a_argv, char **a_str_reply)
+static int s_cli_esbocs(int a_argc, char **a_argv, void **a_str_reply)
 {
     int ret = -666;
     int l_arg_index = 2;
@@ -2600,9 +2600,8 @@ static int s_cli_esbocs(int a_argc, char ** a_argv, char **a_str_reply)
     const char *l_cert_str = NULL,
                *l_value_str = NULL;
 
-    if (dap_chain_node_cli_cmd_values_parse_net_chain(&l_arg_index,a_argc,a_argv,a_str_reply,&l_chain,&l_chain_net)) {
+    if (dap_chain_node_cli_cmd_values_parse_net_chain(&l_arg_index, a_argc, a_argv, a_str_reply, &l_chain, &l_chain_net))
         return -3;
-    }
     const char *l_chain_type = dap_chain_net_get_type(l_chain);
     if (strcmp(l_chain_type, "esbocs")) {
             dap_cli_server_cmd_set_reply_text(a_str_reply,
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index c0c3f0115cbaa8e0f44ae7becf8a699c2625cb9f..3544354dece6116438b041d23fd980ee27f9d2c3 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -253,7 +253,7 @@ static int s_net_init(const char * a_net_name, uint16_t a_acl_idx);
 
 static int s_net_load(dap_chain_net_t *a_net);
 
-static int s_cli_net(int argc, char ** argv, char **str_reply);
+static int s_cli_net(int argc, char ** argv, void **a_str_reply);
 static uint8_t *s_net_set_acl(dap_chain_hash_fast_t *a_pkey_hash);
 static void s_prepare_links_from_balancer(dap_chain_net_t *a_net);
 static bool s_new_balancer_link_request(dap_chain_net_t *a_net, int a_link_replace_tries);
@@ -1341,7 +1341,7 @@ dap_string_t* dap_cli_list_net()
     return l_string_ret;
 }
 
-void s_set_reply_text_node_status(char **a_str_reply, dap_chain_net_t * a_net){
+void s_set_reply_text_node_status(void **a_str_reply, dap_chain_net_t * a_net){
     char* l_node_address_text_block = NULL;
     dap_chain_node_addr_t l_cur_node_addr = { 0 };
     l_cur_node_addr.uint64 = dap_chain_net_get_cur_addr_int(a_net);
@@ -1490,7 +1490,7 @@ static const char *s_chain_type_convert_to_string(dap_chain_type_t a_type)
  * @param str_reply
  * @return
  */
-static int s_cli_net(int argc, char **argv, char **a_str_reply)
+static int s_cli_net(int argc, char **argv, void **a_str_reply)
 {
     int arg_index = 1;
     dap_chain_net_t * l_net = NULL;
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index d839e10623d706334c1ec40b53439faacc2f2f28..4e7fa1e8c6b61ca008e8969e70c1ab15ec73b123 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -119,7 +119,7 @@
 #define LOG_TAG "chain_node_cli_cmd"
 
 static void s_dap_chain_net_purge(dap_chain_net_t *a_net);
-int _cmd_mempool_add_ca(dap_chain_net_t *a_net, dap_chain_t *a_chain, dap_cert_t *a_cert, void ** reply);
+int _cmd_mempool_add_ca(dap_chain_net_t *a_net, dap_chain_t *a_chain, dap_cert_t *a_cert, void **a_str_reply);
 
 /**
  * @brief dap_list_t* get_aliases_by_name Get the aliases by name object
@@ -182,7 +182,7 @@ static dap_chain_node_addr_t* s_node_info_get_addr(dap_chain_net_t * a_net, dap_
  * @return dap_chain_node_info_t*
  */
 static dap_chain_node_info_t* node_info_read_and_reply(dap_chain_net_t * a_net, dap_chain_node_addr_t *a_address,
-        char **a_str_reply)
+        void **a_str_reply)
 {
     char *l_key = dap_chain_node_addr_to_hash_str(a_address);
     if(!l_key)
@@ -225,7 +225,7 @@ static dap_chain_node_info_t* node_info_read_and_reply(dap_chain_net_t * a_net,
  * @return true
  * @return false
  */
-static bool node_info_save_and_reply(dap_chain_net_t * a_net, dap_chain_node_info_t *a_node_info, char **a_str_reply)
+static bool node_info_save_and_reply(dap_chain_net_t * a_net, dap_chain_node_info_t *a_node_info, void **a_str_reply)
 {
     if(!a_node_info || !a_node_info->hdr.address.uint64) {
         dap_cli_server_cmd_set_reply_text(a_str_reply, "node addr not found");
@@ -273,7 +273,7 @@ static bool node_info_save_and_reply(dap_chain_net_t * a_net, dap_chain_node_inf
  */
 static int node_info_add_with_reply(dap_chain_net_t * a_net, dap_chain_node_info_t *a_node_info,
         const char *a_alias_str,
-        const char *a_cell_str, const char *a_ipv4_str, const char *a_ipv6_str, char **a_str_reply)
+        const char *a_cell_str, const char *a_ipv4_str, const char *a_ipv6_str, void **a_str_reply)
 {
 
     if(!a_node_info->hdr.address.uint64) {
@@ -324,7 +324,7 @@ static int node_info_add_with_reply(dap_chain_net_t * a_net, dap_chain_node_info
  * return 0 Ok, -1 error
  */
 static int node_info_del_with_reply(dap_chain_net_t * a_net, dap_chain_node_info_t *a_node_info, const char *alias_str,
-        char **a_str_reply)
+        void **a_str_reply)
 {
     if(!a_node_info->hdr.address.uint64 && !alias_str) {
         dap_cli_server_cmd_set_reply_text(a_str_reply, "addr not found");
@@ -377,7 +377,7 @@ static int node_info_del_with_reply(dap_chain_net_t * a_net, dap_chain_node_info
  * @return int 0 Ok, -1 error
  */
 static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_addr_t * a_addr, bool a_is_full,
-        const char *a_alias, char **a_str_reply)
+        const char *a_alias, void **a_str_reply)
 {
     int l_ret = 0;
     dap_string_t *l_string_reply = dap_string_new("Node dump:\n");
@@ -602,9 +602,8 @@ void s_dap_chain_net_purge(dap_chain_net_t * a_net)
  * @return int
  * return 0 OK, -1 Err
  */
-int com_global_db(int a_argc, char ** a_argv, void ** reply)
+int com_global_db(int a_argc, char ** a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     enum {
         CMD_NONE, CMD_NAME_CELL, CMD_ADD, CMD_FLUSH, CMD_RECORD, CMD_WRITE, CMD_READ, CMD_DELETE, CMD_DROP, CMD_GET_KEYS
     };
@@ -977,7 +976,7 @@ int com_global_db(int a_argc, char ** a_argv, void ** reply)
     }
 }
 
-static dap_tsd_t* s_chain_node_cli_com_node_create_tsd_addr(char **a_argv, int a_arg_start, int a_arg_end, char **a_str_reply, const char *a_specified_decree) {
+static dap_tsd_t* s_chain_node_cli_com_node_create_tsd_addr(char **a_argv, int a_arg_start, int a_arg_end, void **a_str_reply, const char *a_specified_decree) {
     const char *l_ban_addr_str = NULL;
     dap_tsd_t *l_addr_tsd = NULL;
     if (dap_cli_server_cmd_find_option_val(a_argv, a_arg_start, a_arg_end, "-ip", &l_ban_addr_str)){
@@ -1028,9 +1027,8 @@ static dap_tsd_t* s_chain_node_cli_com_node_create_tsd_addr(char **a_argv, int a
 /**
  * Node command
  */
-int com_node(int a_argc, char ** a_argv, void ** reply)
+int com_node(int a_argc, char ** a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     enum {
         CMD_NONE, CMD_ADD, CMD_DEL, CMD_ALIAS, CMD_HANDSHAKE, CMD_CONNECT, CMD_DUMP, CMD_CONNECTIONS, CMD_BALANCER,
         CMD_BAN, CMD_UNBAN, CMD_BANLIST
@@ -1613,9 +1611,8 @@ int com_node(int a_argc, char ** a_argv, void ** reply)
  * @param str_reply
  * @return int
  */
-int com_traceroute(int argc, char** argv, void **reply)
+int com_traceroute(int argc, char** argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
 #ifdef DAP_OS_LINUX
     const char *addr = NULL;
     int hops = 0, time_usec = 0;
@@ -1704,9 +1701,8 @@ int com_traceroute(int argc, char** argv, void **reply)
  * @return int
  * return 0 OK, -1 Err
  */
-int com_tracepath(int argc, char** argv, void **reply)
+int com_tracepath(int argc, char** argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
 #ifdef DAP_OS_LINUX
     const char *addr = NULL;
     int hops = 0, time_usec = 0;
@@ -1788,9 +1784,8 @@ int com_tracepath(int argc, char** argv, void **reply)
  * @param str_reply
  * @return int
  */
-int com_ping(int a_argc, char**a_argv, void **reply)
+int com_ping(int a_argc, char**a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
 #ifdef DAP_OS_LINUX
 
     int n = 4,w = 0;
@@ -1871,9 +1866,8 @@ int com_ping(int a_argc, char**a_argv, void **reply)
  * @param str_reply
  * @return
  */
-int com_version(int argc, char ** argv, void **reply)
+int com_version(int argc, char ** argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     (void) argc;
     (void) argv;
 #ifndef DAP_VERSION
@@ -1895,9 +1889,8 @@ int com_version(int argc, char ** argv, void **reply)
  * @param str_reply
  * @return int
  */
-int com_help(int a_argc, char **a_argv, void **reply)
+int com_help(int a_argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     if (a_argc > 1) {
         log_it(L_DEBUG, "Help for command %s", a_argv[1]);
         dap_cli_cmd_t *l_cmd = dap_cli_server_cmd_find(a_argv[1]);
@@ -1936,9 +1929,8 @@ int com_help(int a_argc, char **a_argv, void **reply)
  * @param str_reply
  * @return int
  */
-int com_tx_wallet(int a_argc, char **a_argv, void **reply)
+int com_tx_wallet(int a_argc, char **a_argv, void **a_str_reply)
 {
-char ** a_str_reply = (char **) reply;
 const char *c_wallets_path = dap_chain_wallet_get_path(g_config);
 enum { CMD_NONE, CMD_WALLET_NEW, CMD_WALLET_LIST, CMD_WALLET_INFO, CMD_WALLET_ACTIVATE, CMD_WALLET_DEACTIVATE, CMD_WALLET_CONVERT };
 int l_arg_index = 1, l_rc, cmd_num = CMD_NONE;
@@ -2389,7 +2381,7 @@ int dap_chain_node_cli_cmd_values_parse_net_chain_for_json(int *a_arg_index, int
  * @param l_net
  * @return
  */
-int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int a_argc, char **a_argv, char **a_str_reply,
+int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int a_argc, char **a_argv, void **a_str_reply,
         dap_chain_t **a_chain, dap_chain_net_t **a_net)
 {
     const char * l_chain_str = NULL;
@@ -2519,9 +2511,8 @@ static dap_chain_datum_token_t * s_sign_cert_in_cycle(dap_cert_t ** l_certs, dap
  * @param str_reply
  * @return
  */
-int com_token_decl_sign(int a_argc, char **a_argv, void ** reply)
+int com_token_decl_sign(int a_argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     int arg_index = 1;
 
     const char * l_hash_out_type = NULL;
@@ -2900,7 +2891,7 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
             json_object_put(l_jobj_datums);
             json_object_put(l_obj_chain);
             dap_global_db_objs_delete(l_objs, l_objs_count);
-            DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED;
+            dap_json_rpc_allocation_error;
             return;
         }
         json_object_object_add(l_jobj_ts_created, "time_stamp", l_jobj_ts_created_time_stamp);
@@ -2915,7 +2906,7 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
             json_object_put(l_jobj_datums);
             json_object_put(l_obj_chain);
             dap_global_db_objs_delete(l_objs, l_objs_count);
-            DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED;
+            dap_json_rpc_allocation_error;
             return;
         }
         if (!dap_hash_fast_compare(&l_datum_real_hash, &l_datum_hash_from_key)){
@@ -2981,7 +2972,7 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                     json_object_put(l_jobj_datums);
                     json_object_put(l_obj_chain);
                     dap_global_db_objs_delete(l_objs, l_objs_count);
-                    DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED;
+                    dap_json_rpc_allocation_error;
                     return;
                 }
                 json_object *l_jobj_addr_from = json_object_new_string(l_addr_from_str);
@@ -2991,7 +2982,7 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                     json_object_put(l_jobj_datums);
                     json_object_put(l_obj_chain);
                     dap_global_db_objs_delete(l_objs, l_objs_count);
-                    DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED;
+                    dap_json_rpc_allocation_error;
                     return;
                 }
                 json_object_object_add(l_jobj_datum, "from", l_jobj_addr_from);
@@ -3007,7 +2998,7 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                     json_object_put(l_jobj_datums);
                     json_object_put(l_obj_chain);
                     dap_global_db_objs_delete(l_objs, l_objs_count);
-                    DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED;
+                    dap_json_rpc_allocation_error;
                     return;
                 }
                 for (dap_list_t *it = l_list_out_items; it; it = it->next) {
@@ -3113,7 +3104,7 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                             DAP_DELETE(l_value_str);
                             DAP_DELETE(l_value_coins_str);
                             dap_global_db_objs_delete(l_objs, l_objs_count);
-                            DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED;
+                            dap_json_rpc_allocation_error;
                             return;
                         }
                         json_object_object_add(l_jobj_money, "token", l_jobj_token);
@@ -3253,9 +3244,9 @@ typedef enum cmd_mempool_delete_err_list{
  * @param a_str_reply
  * @return
  */
-int _cmd_mempool_delete(dap_chain_net_t *a_net, dap_chain_t *a_chain, const char *a_datum_hash, void **reply)
+int _cmd_mempool_delete(dap_chain_net_t *a_net, dap_chain_t *a_chain, const char *a_datum_hash, void **a_str_reply)
 {
-    json_object ** a_json_reply = (json_object **) reply;
+    json_object **a_json_reply = (json_object **)a_str_reply;
     if (!a_net || !a_datum_hash) {
         dap_json_rpc_error_add(COM_MEMPOOL_DELETE_ERR_DATUM_NOT_FOUND_IN_ARGUMENT, "Net or datum hash not specified");
         return COM_MEMPOOL_DELETE_ERR_DATUM_NOT_FOUND_IN_ARGUMENT;
@@ -3324,8 +3315,9 @@ typedef enum cmd_mempool_check_err_list {
  * @param a_str_reply
  * @return int
  */
-int _cmd_mempool_check(dap_chain_net_t *a_net, dap_chain_t *a_chain, const char *a_datum_hash, const char **a_hash_out_type, void ** reply) {
-    json_object ** a_json_reply = (json_object **) reply;
+int _cmd_mempool_check(dap_chain_net_t *a_net, dap_chain_t *a_chain, const char *a_datum_hash, const char *a_hash_out_type, void **a_str_reply)
+{
+    json_object **a_json_reply = (json_object **)a_str_reply;
 
     if (!a_net || !a_datum_hash) {
         dap_json_rpc_error_add(COM_MEMPOOL_CHECK_ERR_CAN_NOT_FIND_NET, "Error! Both -net <network_name> "
@@ -3474,8 +3466,9 @@ typedef enum cmd_mempool_proc_list_error{
  * @param a_str_reply
  * @return
  */
-int _cmd_mempool_proc(dap_chain_net_t *a_net, dap_chain_t *a_chain, const char *a_datum_hash, void **reply)
+int _cmd_mempool_proc(dap_chain_net_t *a_net, dap_chain_t *a_chain, const char *a_datum_hash, void **a_str_reply)
 {
+    json_object **a_json_reply = (json_object **)a_str_reply;
     // If full or light it doesnt work
     if(dap_chain_net_get_role(a_net).enums>= NODE_ROLE_FULL){
         dap_json_rpc_error_add(DAP_COM_MEMPOOL_PROC_LIST_ERROR_NODE_ROLE_NOT_FULL,
@@ -3638,7 +3631,7 @@ int _cmd_mempool_proc(dap_chain_net_t *a_net, dap_chain_t *a_chain, const char *
     }
     DAP_DELETE(l_gdb_group_mempool);
     json_object_object_add(l_jobj_res, "verify", l_jobj_verify);
-    json_object_array_add(*reply, l_jobj_res);
+    json_object_array_add(*a_json_reply, l_jobj_res);
     return ret;
 }
 
@@ -3650,8 +3643,9 @@ int _cmd_mempool_proc(dap_chain_net_t *a_net, dap_chain_t *a_chain, const char *
  * @param a_str_reply
  * @return
  */
-int _cmd_mempool_proc_all(dap_chain_net_t *a_net, dap_chain_t *a_chain, void **reply) {
-    json_object ** a_json_reply = (json_object **) reply;
+int _cmd_mempool_proc_all(dap_chain_net_t *a_net, dap_chain_t *a_chain, void **a_str_reply)
+{
+    json_object **a_json_reply = (json_object **)a_str_reply;
     if (!a_net || !a_chain) {
         dap_json_rpc_error_add(-2, "The net and chain argument is not set");
         return -2;
@@ -3710,7 +3704,8 @@ typedef enum _cmd_mempool_dump_error_list{
 }_cmd_mempool_dump_error_list_t;
 
 int _cmd_mempool_dump_from_group(dap_chain_net_id_t a_net_id, const char *a_group_gdb, const char *a_datum_hash,
-                                 const char *a_hash_out_type, json_object **reply) {
+                                 const char *a_hash_out_type, json_object **a_json_reply)
+{
     size_t l_datum_size = 0;
     dap_chain_datum_t *l_datum = (dap_chain_datum_t *)dap_global_db_get_sync(a_group_gdb, a_datum_hash,
                                                          &l_datum_size, NULL, NULL );
@@ -3724,18 +3719,19 @@ int _cmd_mempool_dump_from_group(dap_chain_net_id_t a_net_id, const char *a_grou
     if (!l_datum) {
         char *l_msg_str = dap_strdup_printf("Error! Can't find datum %s in %s", a_datum_hash, a_group_gdb);
         if (!l_msg_str) {
-            DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED;
+            dap_json_rpc_allocation_error;
             return -1;
         }
         json_object *l_jobj_message = json_object_new_string(l_msg_str);
         return COM_DUMP_ERROR_CAN_NOT_FIND_DATUM;
     }
     json_object *l_jobj_datum = dap_chain_datum_to_json(l_datum);
-    json_object_array_add(*reply, l_jobj_datum);
+    json_object_array_add(*a_json_reply, l_jobj_datum);
     return 0;
 }
 
-int _cmd_mempool_dump(dap_chain_net_t *a_net, dap_chain_t *a_chain, const char *a_datum_hash, const char *a_hash_out_type, json_object **reply) {
+int _cmd_mempool_dump(dap_chain_net_t *a_net, dap_chain_t *a_chain, const char *a_datum_hash, const char *a_hash_out_type, json_object **a_json_reply)
+{
     if (!a_net || !a_datum_hash || !a_hash_out_type) {
         dap_json_rpc_error_add(COM_DUMP_ERROR_NULL_IS_ARGUMENT_FUNCTION, "The following arguments are not set: network,"
                                                                          " datum hash, and output hash type. "
@@ -3744,13 +3740,13 @@ int _cmd_mempool_dump(dap_chain_net_t *a_net, dap_chain_t *a_chain, const char *
     }
     if (a_chain) {
         char *l_group_mempool = dap_chain_net_get_gdb_group_mempool_new(a_chain);
-        _cmd_mempool_dump_from_group(a_net->pub.id, l_group_mempool, a_datum_hash, a_hash_out_type, reply);
+        _cmd_mempool_dump_from_group(a_net->pub.id, l_group_mempool, a_datum_hash, a_hash_out_type, a_json_reply);
         DAP_DELETE(l_group_mempool);
     } else {
         dap_chain_t *l_chain = NULL;
         DL_FOREACH(a_net->pub.chains, l_chain){
             char *l_group_mempool = dap_chain_net_get_gdb_group_mempool_new(a_chain);
-            if (!_cmd_mempool_dump_from_group(a_net->pub.id, l_group_mempool, a_datum_hash, a_hash_out_type, reply)){
+            if (!_cmd_mempool_dump_from_group(a_net->pub.id, l_group_mempool, a_datum_hash, a_hash_out_type, a_json_reply)){
                 DAP_DELETE(l_group_mempool);
                 break;
             }
@@ -3760,13 +3756,14 @@ int _cmd_mempool_dump(dap_chain_net_t *a_net, dap_chain_t *a_chain, const char *
     return 0;
 }
 
-int com_mempool(int a_argc, char **a_argv, void **reply){
+int com_mempool(int a_argc, char **a_argv, void **a_str_reply)
+{
+    json_object **a_json_reply = (json_object **)a_str_reply;
     int arg_index = 1;
     dap_chain_net_t *l_net = NULL;
     dap_chain_t *l_chain = NULL;
-    const char *l_addr_b58 = NULL;
     enum _subcmd {SUBCMD_LIST, SUBCMD_PROC, SUBCMD_PROC_ALL, SUBCMD_DELETE, SUBCMD_ADD_CA, SUBCMD_CHECK, SUBCMD_DUMP};
-    enum _subcmd l_cmd;
+    enum _subcmd l_cmd = 0;
     if (a_argv[1]) {
         if (!dap_strcmp(a_argv[1], "list")) {
             l_cmd = SUBCMD_LIST;
@@ -3786,16 +3783,16 @@ int com_mempool(int a_argc, char **a_argv, void **reply){
             char *l_str_err = dap_strdup_printf("Invalid sub command specified. Ыub command %s "
                                                            "is not supported.", a_argv[1]);
             if (!l_str_err) {
-                DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED;
+                dap_json_rpc_allocation_error;
                 return -1;
             }
             json_object *l_jobj_str_err = json_object_new_string(l_str_err);
             DAP_DELETE(l_str_err);
             if (!l_jobj_str_err) {
-                DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED;
+                dap_json_rpc_allocation_error;
                 return -1;
             }
-            json_object_array_add(*reply, l_jobj_str_err);
+            json_object_array_add(*a_json_reply, l_jobj_str_err);
             return -2;
         }
     }
@@ -3824,7 +3821,7 @@ int com_mempool(int a_argc, char **a_argv, void **reply){
             if (!obj_ret || !obj_net) {
                 json_object_put(obj_ret);
                 json_object_put(obj_net);
-                DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED;
+                dap_json_rpc_allocation_error;
                 return -1;
             }
             json_object_object_add(obj_ret, "net", obj_net);
@@ -3832,16 +3829,16 @@ int com_mempool(int a_argc, char **a_argv, void **reply){
             if (dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-addr", &l_wallet_addr) && !l_wallet_addr) {
                 json_object *l_jobj_err = json_object_new_string("Parameter '-addr' require <addr>");
                 if (!l_jobj_err) {
-                    DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED;
+                    dap_json_rpc_allocation_error;
                     return -1;
                 }
-                json_object_array_add(*reply, l_jobj_err);
+                json_object_array_add(*a_json_reply, l_jobj_err);
                 return -3;
             }
             json_object *l_jobj_chains = json_object_new_array();
             if (!l_jobj_chains) {
                 json_object_put(obj_ret);
-                DAP_JSON_RPC_ERR_CODE_MEMORY_ALLOCATED;
+                dap_json_rpc_allocation_error;
                 return -1;
             }
             if(l_chain) {
@@ -3852,14 +3849,14 @@ int com_mempool(int a_argc, char **a_argv, void **reply){
                 }
             }
             json_object_object_add(obj_ret, "chains", l_jobj_chains);
-            json_object_array_add(*reply, obj_ret);
+            json_object_array_add(*a_json_reply, obj_ret);
             ret = 0;
         } break;
         case SUBCMD_PROC: {
-            ret = _cmd_mempool_proc(l_net, l_chain, l_datum_hash, reply);
+            ret = _cmd_mempool_proc(l_net, l_chain, l_datum_hash, a_str_reply);
         } break;
         case SUBCMD_PROC_ALL: {
-            ret = _cmd_mempool_proc_all(l_net, l_chain, reply);
+            ret = _cmd_mempool_proc_all(l_net, l_chain, a_str_reply);
         } break;
         case SUBCMD_DELETE: {
             if (!l_chain) {
@@ -3867,7 +3864,7 @@ int com_mempool(int a_argc, char **a_argv, void **reply){
                 ret = -2;
             }
             if (l_datum_hash) {
-                ret = _cmd_mempool_delete(l_net, l_chain, l_datum_hash, reply);
+                ret = _cmd_mempool_delete(l_net, l_chain, l_datum_hash, a_str_reply);
             } else {
                 dap_json_rpc_error_add(-3, "Error! %s requires -datum <datum hash> option", a_argv[0]);
                 ret = -3;
@@ -3885,14 +3882,14 @@ int com_mempool(int a_argc, char **a_argv, void **reply){
                 dap_json_rpc_error_add(-4, "Cert with name '%s' not found.", l_ca_name);
                 ret = -4;
             }
-            ret = _cmd_mempool_add_ca(l_net, l_chain, l_cert, reply);
+            ret = _cmd_mempool_add_ca(l_net, l_chain, l_cert, a_str_reply);
             DAP_DELETE(l_cert);
         } break;
         case SUBCMD_CHECK: {
-            ret = _cmd_mempool_check(l_net, l_chain, l_datum_hash, l_hash_out_type, reply);
+            ret = _cmd_mempool_check(l_net, l_chain, l_datum_hash, l_hash_out_type, a_str_reply);
         } break;
         case SUBCMD_DUMP: {
-            ret = _cmd_mempool_dump(l_net, l_chain, l_datum_hash, l_hash_out_type, reply);
+            ret = _cmd_mempool_dump(l_net, l_chain, l_datum_hash, l_hash_out_type, a_json_reply);
         } break;
     }
     DAP_DEL_Z(l_datum_hash);
@@ -3973,7 +3970,7 @@ typedef struct _dap_sdk_cli_params {
     dap_cli_token_additional_params ext;
 } dap_sdk_cli_params, *pdap_sdk_cli_params;
 
-static int s_parse_common_token_decl_arg(int a_argc, char ** a_argv, char ** a_str_reply, dap_sdk_cli_params* a_params, bool a_update_token)
+static int s_parse_common_token_decl_arg(int a_argc, char ** a_argv, void **a_str_reply, dap_sdk_cli_params* a_params, bool a_update_token)
 {
     a_params->type = DAP_CHAIN_DATUM_TOKEN_TYPE_DECL;
     dap_cli_server_cmd_find_option_val(a_argv, 0, a_argc, "-H", &a_params->hash_out_type);
@@ -4085,7 +4082,7 @@ static int s_parse_common_token_decl_arg(int a_argc, char ** a_argv, char ** a_s
     return 0;
 }
 
-static int s_parse_additional_token_decl_arg(int a_argc, char ** a_argv, char ** a_str_reply, dap_sdk_cli_params* a_params)
+static int s_parse_additional_token_decl_arg(int a_argc, char ** a_argv, void **a_str_reply, dap_sdk_cli_params* a_params)
 {
     dap_cli_server_cmd_find_option_val(a_argv, 0, a_argc, "-flags", &a_params->ext.flags);
     dap_cli_server_cmd_find_option_val(a_argv, 0, a_argc, "-total_signs_valid", &a_params->ext.total_signs_valid);
@@ -4194,7 +4191,7 @@ static int s_parse_additional_token_decl_arg(int a_argc, char ** a_argv, char **
     return 0;
 }
 
-static int s_token_decl_check_params(int a_argc, char **a_argv, char **a_str_reply, dap_sdk_cli_params *a_params, bool a_update_token)
+static int s_token_decl_check_params(int a_argc, char **a_argv, void **a_str_reply, dap_sdk_cli_params *a_params, bool a_update_token)
 {
     int l_parse_params = s_parse_common_token_decl_arg(a_argc,a_argv,a_str_reply,a_params, a_update_token);
     if (l_parse_params)
@@ -4293,9 +4290,8 @@ static int s_token_decl_check_params(int a_argc, char **a_argv, char **a_str_rep
     "\t -tx_sender_blocked <value>:\t Blocked tx sender(s)\n"
     "\n"
  */
-int com_token_decl(int a_argc, char ** a_argv, void ** reply)
+int com_token_decl(int a_argc, char ** a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     const char * l_ticker = NULL;
     uint256_t l_total_supply = {}; // 256
     uint16_t l_signs_emission = 0;
@@ -4630,9 +4626,8 @@ int com_token_decl(int a_argc, char ** a_argv, void ** reply)
     "\t -tx_sender_blocked_remove <value>:\t Remove tx sender(s) from blocked\n"
     "\n"
  */
-int com_token_update(int a_argc, char ** a_argv, void ** reply)
+int com_token_update(int a_argc, char ** a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     const char * l_ticker = NULL;
     uint256_t l_total_supply = {}; // 256
     uint16_t l_signs_emission = 0;
@@ -4797,9 +4792,8 @@ int com_token_update(int a_argc, char ** a_argv, void ** reply)
  * @param str_reply
  * @return
  */
-int com_token_emit(int a_argc, char **a_argv, void **reply)
+int com_token_emit(int a_argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     int arg_index = 1;
     const char *str_tmp = NULL;
     //const char *str_fee = NULL;
@@ -4996,9 +4990,8 @@ int com_token_emit(int a_argc, char **a_argv, void **reply)
  * @param a_str_reply
  * @return int
  */
-int com_tx_cond_create(int a_argc, char ** a_argv, void **reply)
+int com_tx_cond_create(int a_argc, char ** a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     (void) a_argc;
     int arg_index = 1;
     const char *c_wallets_path = dap_chain_wallet_get_path(g_config);
@@ -5164,9 +5157,9 @@ typedef enum cmd_mempool_add_ca_error_list{
  * @param a_str_reply
  * @return
  */
-int _cmd_mempool_add_ca(dap_chain_net_t *a_net, dap_chain_t *a_chain, dap_cert_t *a_cert, void ** reply)
+int _cmd_mempool_add_ca(dap_chain_net_t *a_net, dap_chain_t *a_chain, dap_cert_t *a_cert, void **a_str_reply)
 {
-    json_object ** a_json_reply = (json_object **) reply;
+    json_object **a_json_reply = (json_object **)a_str_reply;
     if (!a_net || !a_chain || !a_cert){
         dap_json_rpc_error_add(COM_MEMPOOL_ADD_CA_ERROR_NET_NOT_FOUND, "The network or certificate attribute was not passed.");
         return COM_MEMPOOL_ADD_CA_ERROR_NET_NOT_FOUND;
@@ -5256,7 +5249,7 @@ int _cmd_mempool_add_ca(dap_chain_net_t *a_net, dap_chain_t *a_chain, dap_cert_t
  * @param a_str_reply
  * @return
  */
-int com_chain_ca_copy( int a_argc,  char ** a_argv, void ** reply)
+int com_chain_ca_copy( int a_argc,  char ** a_argv, void **a_str_reply)
 {
     int l_argc = a_argc + 1;
     char **l_argv = DAP_NEW_Z_COUNT(char*, l_argc);
@@ -5264,7 +5257,7 @@ int com_chain_ca_copy( int a_argc,  char ** a_argv, void ** reply)
     l_argv[1] = "add_ca";
     for (int i = 1; i < a_argc; i++)
         l_argv[i + 1] = a_argv[i];
-    int ret = com_mempool(l_argc, l_argv, reply);
+    int ret = com_mempool(l_argc, l_argv, a_str_reply);
     DAP_DEL_Z(l_argv);
     return ret;
 }
@@ -5279,9 +5272,8 @@ int com_chain_ca_copy( int a_argc,  char ** a_argv, void ** reply)
  * @param a_str_reply
  * @return
  */
-int com_chain_ca_pub( int a_argc,  char ** a_argv, void ** reply)
+int com_chain_ca_pub( int a_argc,  char ** a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     int arg_index = 1;
     // Read params
     const char * l_ca_name = NULL;
@@ -5489,9 +5481,8 @@ static dap_pkey_t* s_json_get_pkey(struct json_object *a_json)
  * @param str_reply
  * @return int
  */
-int com_tx_create_json(int a_argc, char ** a_argv, void ** reply)
+int com_tx_create_json(int a_argc, char ** a_argv, void **a_str_reply)
 {
-    char** a_str_reply = (char **) reply;
     int l_arg_index = 1;
     int l_err_code = 0;
     const char *l_net_name = NULL; // optional parameter
@@ -6139,9 +6130,8 @@ int com_tx_create_json(int a_argc, char ** a_argv, void ** reply)
  * @param str_reply
  * @return int
  */
-int com_tx_create(int a_argc, char **a_argv, void **reply)
+int com_tx_create(int a_argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     int arg_index = 1;
 //    int cmd_num = 1;
 //    const char *value_str = NULL;
@@ -6396,9 +6386,8 @@ int com_tx_create(int a_argc, char **a_argv, void **reply)
  * @param str_reply
  * @return int
  */
-int com_tx_verify(int a_argc, char **a_argv, void ** reply)
+int com_tx_verify(int a_argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     const char * l_tx_hash_str = NULL;
     dap_chain_net_t * l_net = NULL;
     dap_chain_t * l_chain = NULL;
@@ -6453,9 +6442,9 @@ int com_tx_verify(int a_argc, char **a_argv, void ** reply)
  * @param a_str_reply
  * @return int
  */
-int com_tx_history(int a_argc, char ** a_argv, void ** reply)
+int com_tx_history(int a_argc, char ** a_argv, void **a_str_reply)
 {
-    json_object ** json_arr_reply = (json_object **) reply;
+    json_object **json_arr_reply = (json_object **)a_str_reply;
     int arg_index = 1;
     const char *l_addr_base58 = NULL;
     const char *l_wallet_name = NULL;
@@ -6535,12 +6524,12 @@ int com_tx_history(int a_argc, char ** a_argv, void ** reply)
         } else
             l_net = dap_chain_net_by_id(l_addr->net_id);
     }
-    const char* l_sign_str = "";
     if (l_wallet_name) {
         const char *c_wallets_path = dap_chain_wallet_get_path(g_config);
         dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_wallet_name, c_wallets_path);
         if (l_wallet) {
-            l_sign_str = dap_chain_wallet_check_sign(l_wallet);
+            const char *l_sign_str = dap_chain_wallet_check_sign(l_wallet);
+            //TODO add warning about deprecated signs
             dap_chain_addr_t *l_addr_tmp = dap_chain_wallet_get_addr(l_wallet, l_net->pub.id);
             if (l_addr) {
                 if (!dap_chain_addr_compare(l_addr, l_addr_tmp)) {
@@ -6635,9 +6624,8 @@ int com_tx_history(int a_argc, char ** a_argv, void ** reply)
  * @param str_reply
  * @return int
  */
-int com_stats(int argc, char **a_argv, void ** reply)
+int com_stats(int argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     enum {
         CMD_NONE, CMD_STATS_CPU
     };
@@ -6694,9 +6682,8 @@ int com_stats(int argc, char **a_argv, void ** reply)
  * @param str_reply
  * @return int
  */
-int com_exit(int a_argc, char **a_argv, void ** reply)
+int com_exit(int a_argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     UNUSED(a_argc);
     UNUSED(a_argv);
     UNUSED(a_str_reply);
@@ -6715,9 +6702,8 @@ int com_exit(int a_argc, char **a_argv, void ** reply)
  * @param str_reply
  * @return int
  */
-int com_print_log(int a_argc, char **a_argv, void ** reply)
+int com_print_log(int a_argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     int arg_index = 1;
     const char * l_str_ts_after = NULL;
     const char * l_str_limit = NULL;
@@ -6758,9 +6744,8 @@ int com_print_log(int a_argc, char **a_argv, void ** reply)
  * @param a_str_reply
  * @return
  */
-int cmd_gdb_export(int a_argc, char **a_argv, void ** reply)
+int cmd_gdb_export(int a_argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     int arg_index = 1;
     const char *l_filename = NULL;
     dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "filename", &l_filename);
@@ -6866,9 +6851,8 @@ int cmd_gdb_export(int a_argc, char **a_argv, void ** reply)
  * @param a_str_reply
  * @return
  */
-int cmd_gdb_import(int a_argc, char **a_argv, void ** reply)
+int cmd_gdb_import(int a_argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     int arg_index = 1;
     const char *l_filename = NULL;
     dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "filename", &l_filename);
@@ -6970,9 +6954,8 @@ typedef struct _pvt_net_aliases_list{
     size_t count_nodes;
 }_pvt_net_aliases_list_t;
 
-int cmd_remove(int a_argc, char **a_argv, void ** reply)
+int cmd_remove(int a_argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     //default init
     const char		*return_message	=	NULL;
     const char		*l_gdb_path		=	NULL;
@@ -7137,8 +7120,8 @@ typedef enum {
 
 static int s_sign_file(const char *a_filename, dap_sign_signer_file_t a_flags, const char *a_cert_name,
                        dap_sign_t **a_signed, dap_chain_hash_fast_t *a_hash);
-static int s_signer_cmd(int a_arg_index, int a_argc, char **a_argv, char **a_str_reply);
-static int s_check_cmd(int a_arg_index, int a_argc, char **a_argv, char **a_str_reply);
+static int s_signer_cmd(int a_arg_index, int a_argc, char **a_argv, void **a_str_reply);
+static int s_check_cmd(int a_arg_index, int a_argc, char **a_argv, void **a_str_reply);
 struct opts {
     char *name;
     uint32_t cmd;
@@ -7146,9 +7129,8 @@ struct opts {
 
 #define BUILD_BUG(condition) ((void)sizeof(char[1-2*!!(condition)]))
 
-int com_signer(int a_argc, char **a_argv, void **reply)
+int com_signer(int a_argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     enum {
         CMD_NONE, CMD_SIGN, CMD_CHECK
     };
@@ -7187,7 +7169,7 @@ int com_signer(int a_argc, char **a_argv, void **reply)
 
 static int s_get_key_from_file(const char *a_file, const char *a_mime, const char *a_cert_name, dap_sign_t **a_sign);
 
-static int s_check_cmd(int a_arg_index, int a_argc, char **a_argv, char **a_str_reply)
+static int s_check_cmd(int a_arg_index, int a_argc, char **a_argv, void **a_str_reply)
 {
     int l_ret = 0;
 
@@ -7421,7 +7403,7 @@ static int s_get_key_from_file(const char *a_file, const char *a_mime, const cha
     return l_ret;
 }
 
-static int s_signer_cmd(int a_arg_index, int a_argc, char **a_argv, char **a_str_reply)
+static int s_signer_cmd(int a_arg_index, int a_argc, char **a_argv, void **a_str_reply)
 {
     enum {
         OPT_FILE, OPT_MIME, OPT_NET, OPT_CHAIN, OPT_CERT,
diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c
index 1dc83f5d40ebe2143d65d27b04238200dd79c76f..3e4975beb4b06b9be7340881d8a073bc797c6823 100644
--- a/modules/net/dap_chain_node_cli_cmd_tx.c
+++ b/modules/net/dap_chain_node_cli_cmd_tx.c
@@ -317,6 +317,13 @@ json_object* dap_db_history_addr(dap_chain_addr_t *a_addr, dap_chain_t *a_chain,
         json_object_put(json_obj_datum);
         return NULL;
     }
+
+    dap_chain_addr_t  l_net_fee_addr = {};
+    bool l_net_fee_used = dap_chain_net_tx_get_fee(l_net->pub.id, NULL, &l_net_fee_addr);
+    bool l_is_need_correction = false;
+    uint256_t l_corr_value = {}, l_unstake_value = {};
+    json_object *l_corr_object = NULL;
+    bool l_is_unstake = false;
     // load transactions
     dap_chain_datum_iter_t *l_datum_iter = a_chain->callback_datum_iter_create(a_chain);
 
@@ -384,12 +391,19 @@ json_object* dap_db_history_addr(dap_chain_addr_t *a_addr, dap_chain_t *a_chain,
                 case TX_ITEM_TYPE_OUT_EXT:
                     l_src_addr = &((dap_chain_tx_out_ext_t *)l_prev_out_union)->addr;
                     break;
-                case TX_ITEM_TYPE_OUT_COND:
-                    l_src_subtype = ((dap_chain_tx_out_cond_t *)l_prev_out_union)->header.subtype;
-                    if (l_src_subtype == DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE)
+                case TX_ITEM_TYPE_OUT_COND: {
+                    dap_chain_tx_out_cond_t *l_cond_prev = (dap_chain_tx_out_cond_t *)l_prev_out_union;
+                    if (l_cond_prev->header.subtype == DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE)
                         l_noaddr_token = l_native_ticker;
-                    else
+                    else {
+                        if (l_cond_prev->header.subtype == DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK) {
+                            l_is_unstake = true;
+                            l_unstake_value = l_cond_prev->header.value;
+                        }
+                        l_src_subtype = l_cond_prev->header.subtype;
                         l_noaddr_token = l_src_token;
+                    }
+                } break;
                 default:
                     break;
                 }
@@ -411,6 +425,28 @@ json_object* dap_db_history_addr(dap_chain_addr_t *a_addr, dap_chain_t *a_chain,
             json_object_put(j_arr_data);
             return NULL;
         }
+        if (!l_src_addr) {
+            bool l_dst_addr_present = false;
+            for (dap_list_t *it = l_list_out_items; it; it = it->next) {
+                uint8_t l_type = *(uint8_t *)it->data;
+                dap_chain_addr_t *l_dst_addr = NULL;
+                switch (l_type) {
+                case TX_ITEM_TYPE_OUT:
+                    l_dst_addr = &((dap_chain_tx_out_t *)it->data)->addr;
+                    break;
+                case TX_ITEM_TYPE_OUT_EXT:
+                    l_dst_addr = &((dap_chain_tx_out_ext_t *)it->data)->addr;
+                default:
+                    break;
+                }
+                if (l_dst_addr && dap_chain_addr_compare(l_dst_addr, a_addr)) {
+                    l_dst_addr_present = true;
+                    break;
+                }
+            }
+            if (!l_dst_addr_present)
+                continue;
+        }
         for (dap_list_t *it = l_list_out_items; it; it = it->next) {
             dap_chain_addr_t *l_dst_addr = NULL;
             uint8_t l_type = *(uint8_t *)it->data;
@@ -437,55 +473,68 @@ json_object* dap_db_history_addr(dap_chain_addr_t *a_addr, dap_chain_t *a_chain,
             default:
                 break;
             }
-            if (l_src_addr && l_dst_addr && dap_chain_addr_compare(l_dst_addr, l_src_addr) &&
-                    dap_strcmp(l_dst_token, l_noaddr_token))
+
+            if (l_src_addr && l_dst_addr &&
+                    dap_chain_addr_compare(l_dst_addr, l_src_addr) &&
+                    dap_strcmp(l_noaddr_token, l_dst_token))
                 continue;   // sent to self (coinback)
-            if (l_src_addr && dap_chain_addr_compare(l_src_addr, a_addr) &&
-                    dap_strcmp(l_dst_token, l_noaddr_token)) {
 
+            if (l_dst_addr && l_net_fee_used && dap_chain_addr_compare(&l_net_fee_addr, l_dst_addr))
+                SUM_256_256(l_fee_sum, l_value, &l_fee_sum);
+            if (l_dst_addr && dap_chain_addr_compare(l_dst_addr, a_addr)) {
                 if (!l_header_printed) {
                     s_tx_header_print(j_obj_tx, &l_tx_data_ht, l_tx, l_datum_iter->cur_atom_hash,
                                       a_hash_out_type, l_ledger, &l_tx_hash, l_datum_iter->ret_code);
                     l_header_printed = true;
                 }
-                const char *l_dst_addr_str = l_dst_addr ? dap_chain_addr_to_str(l_dst_addr)
-                                                        : dap_chain_tx_out_cond_subtype_to_str(
-                                                              ((dap_chain_tx_out_cond_t *)it->data)->header.subtype);
+                const char *l_src_addr_str = NULL, *l_src_str;
+                if (l_base_tx)
+                    l_src_str = l_reward_collect ? "reward collecting" : "emission";
+                else if (l_src_addr && dap_strcmp(l_dst_token, l_noaddr_token))
+                    l_src_str = l_src_addr_str = dap_chain_addr_to_str(l_src_addr);
+                else
+                    l_src_str = dap_chain_tx_out_cond_subtype_to_str(l_src_subtype);
+
+                if (l_is_unstake)
+                    l_value = l_unstake_value;
+                else if (!dap_strcmp(l_native_ticker, l_noaddr_token)) {
+                    l_is_need_correction = true;
+                    l_corr_value = l_value;
+                }
                 char *l_value_str = dap_chain_balance_print(l_value);
                 char *l_coins_str = dap_chain_balance_to_coins(l_value);
-                json_object * j_obj_data = json_object_new_object();
+                json_object *j_obj_data = json_object_new_object();
                 if (!j_obj_data) {
                     dap_json_rpc_allocation_error;
                     json_object_put(j_arr_data);
                     json_object_put(j_obj_tx);
                     return NULL;
                 }
-                json_object_object_add(j_obj_data, "tx_type", json_object_new_string("send"));
-                json_object_object_add(j_obj_data, "send_coins", json_object_new_string(l_coins_str));
-                json_object_object_add(j_obj_data, "send_datoshi", json_object_new_string(l_value_str));
-                json_object_object_add(j_obj_data, "token", l_dst_token ? json_object_new_string(l_dst_token) 
+                json_object_object_add(j_obj_data, "tx_type", json_object_new_string("recv"));
+                json_object_object_add(j_obj_data, "recv_coins", json_object_new_string(l_coins_str));
+                json_object_object_add(j_obj_data, "recv_datoshi", json_object_new_string(l_value_str));
+                json_object_object_add(j_obj_data, "token", l_dst_token ? json_object_new_string(l_dst_token)
                                                                             : json_object_new_string("UNKNOWN"));
-                json_object_object_add(j_obj_data, "destination_address", json_object_new_string(l_dst_addr_str));
-
-                json_object_array_add(j_arr_data, j_obj_data);
-                if (l_dst_addr)
-                    DAP_DELETE(l_dst_addr_str);
+                json_object_object_add(j_obj_data, "source_address", json_object_new_string(l_src_str));
+                if (l_is_need_correction)
+                    l_corr_object = j_obj_data;
+                else
+                    json_object_array_add(j_arr_data, j_obj_data);
+                DAP_DEL_Z(l_src_addr_str);
                 DAP_DELETE(l_value_str);
                 DAP_DELETE(l_coins_str);
-            }
-            if (l_dst_addr && dap_chain_addr_compare(l_dst_addr, a_addr)) {
+            } else if (!l_src_addr || dap_chain_addr_compare(l_src_addr, a_addr)) {
+                if (!l_dst_addr && ((dap_chain_tx_out_cond_t *)it->data)->header.subtype == l_src_subtype)\
+                    continue;
                 if (!l_header_printed) {
                     s_tx_header_print(j_obj_tx, &l_tx_data_ht, l_tx, l_datum_iter->cur_atom_hash,
                                       a_hash_out_type, l_ledger, &l_tx_hash, l_datum_iter->ret_code);
                     l_header_printed = true;
                 }
-                const char *l_src_addr_str = NULL, *l_src_str;
-                if (l_base_tx)
-                    l_src_str = l_reward_collect ? "reward collecting" : "emission";
-                else if (l_src_addr && dap_strcmp(l_dst_token, l_noaddr_token))
-                    l_src_str = l_src_addr_str = dap_chain_addr_to_str(l_src_addr);
-                else
-                    l_src_str = dap_chain_tx_out_cond_subtype_to_str(l_src_subtype);
+
+                const char *l_dst_addr_str = l_dst_addr ? dap_chain_addr_to_str(l_dst_addr)
+                                                        : dap_chain_tx_out_cond_subtype_to_str(
+                                                              ((dap_chain_tx_out_cond_t *)it->data)->header.subtype);
                 char *l_value_str = dap_chain_balance_print(l_value);
                 char *l_coins_str = dap_chain_balance_to_coins(l_value);
                 json_object * j_obj_data = json_object_new_object();
@@ -495,43 +544,34 @@ json_object* dap_db_history_addr(dap_chain_addr_t *a_addr, dap_chain_t *a_chain,
                     json_object_put(j_obj_tx);
                     return NULL;
                 }
-                json_object_object_add(j_obj_data, "tx_type", json_object_new_string("recv"));
-                json_object_object_add(j_obj_data, "recv_coins", json_object_new_string(l_coins_str));
-                json_object_object_add(j_obj_data, "recv_datoshi", json_object_new_string(l_value_str));
-                json_object_object_add(j_obj_data, "token", l_dst_token ? json_object_new_string(l_dst_token) 
+                json_object_object_add(j_obj_data, "tx_type", json_object_new_string("send"));
+                json_object_object_add(j_obj_data, "send_coins", json_object_new_string(l_coins_str));
+                json_object_object_add(j_obj_data, "send_datoshi", json_object_new_string(l_value_str));
+                json_object_object_add(j_obj_data, "token", l_dst_token ? json_object_new_string(l_dst_token)
                                                                             : json_object_new_string("UNKNOWN"));
-                json_object_object_add(j_obj_data, "source_address", json_object_new_string(l_src_str));
+                json_object_object_add(j_obj_data, "destination_address", json_object_new_string(l_dst_addr_str));
+
                 json_object_array_add(j_arr_data, j_obj_data);
-                DAP_DEL_Z(l_src_addr_str);
+                if (l_dst_addr)
+                    DAP_DELETE(l_dst_addr_str);
                 DAP_DELETE(l_value_str);
                 DAP_DELETE(l_coins_str);
             }
         }
-        if (json_object_array_length(j_arr_data) > 0) {
-            json_object_object_add(j_obj_tx, "data", j_arr_data);
-        }
         dap_list_free(l_list_out_items);
-        // fee for base TX in native token
-        if (l_header_printed && l_base_tx && !dap_strcmp(l_native_ticker, l_src_token)) {
-            json_object * j_obj_fee = json_object_new_object();
-            json_object * j_arr_fee = json_object_new_array();
-            if (!j_arr_fee || !j_obj_fee) {
-                dap_json_rpc_allocation_error;
-                json_object_put(j_arr_data);
-                json_object_put(j_obj_tx);
-                return NULL;
-            }
-            char *l_fee_value_str = dap_chain_balance_print(l_fee_sum);
-            char *l_fee_coins_str = dap_chain_balance_to_coins(l_fee_sum);
-            json_object_object_add(j_obj_fee, "fee", json_object_new_string(l_fee_coins_str));;
-            json_object_object_add(j_obj_fee, "fee_datoshi", json_object_new_string(l_fee_value_str));
-            json_object_array_add(j_arr_fee, j_obj_fee);
-            json_object_object_add(j_obj_tx, "fee", j_arr_fee);
-            DAP_DELETE(l_fee_value_str);
-            DAP_DELETE(l_fee_coins_str);
+        if (l_is_need_correction) {
+            SUM_256_256(l_corr_value, l_fee_sum, &l_corr_value);
+            char *l_value_str = dap_chain_balance_print(l_corr_value);
+            char *l_coins_str = dap_chain_balance_to_coins(l_corr_value);
+            json_object_object_add(l_corr_object, "recv_coins", json_object_new_string(l_coins_str));
+            json_object_object_add(l_corr_object, "recv_datoshi", json_object_new_string(l_value_str));
+            json_object_array_add(j_arr_data, l_corr_object);
+            DAP_DELETE(l_value_str);
+            DAP_DELETE(l_coins_str);
+            l_is_need_correction = false;
         }
-        if (json_object_object_length(j_obj_tx) > 0) {
-            json_object_array_add(json_obj_datum, j_obj_tx);
+        if (json_object_array_length(j_arr_data) > 0) {
+            json_object_object_add(j_obj_tx, "data", j_arr_data);
         }
     }
     a_chain->callback_datum_iter_delete(l_datum_iter);
@@ -847,9 +887,8 @@ static char* dap_db_history_filter(dap_chain_t * a_chain, dap_ledger_t *a_ledger
  * @param a_str_reply
  * @return int
  */
-int com_ledger(int a_argc, char ** a_argv, void **reply)
+int com_ledger(int a_argc, char ** a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     enum { CMD_NONE, CMD_LIST, CMD_LEDGER_HISTORY, CMD_TX_INFO };
     int arg_index = 1;
     const char *l_addr_base58 = NULL;
@@ -1115,9 +1154,8 @@ int com_ledger(int a_argc, char ** a_argv, void **reply)
  * @param a_str_reply
  * @return int
  */
-int com_token(int a_argc, char ** a_argv, void **reply)
+int com_token(int a_argc, char ** a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     enum { CMD_NONE, CMD_LIST, CMD_INFO, CMD_TX };
     int arg_index = 1;
     const char *l_net_str = NULL;
@@ -1364,9 +1402,8 @@ static dap_chain_datum_anchor_t * s_sign_anchor_in_cycle(dap_cert_t ** a_certs,
 }
 
 // Decree commands handlers
-int cmd_decree(int a_argc, char **a_argv, void ** reply)
+int cmd_decree(int a_argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     enum { CMD_NONE=0, CMD_CREATE, CMD_SIGN, CMD_ANCHOR, CMD_FIND, CMD_INFO };
     enum { TYPE_NONE=0, TYPE_COMMON, TYPE_SERVICE};
     enum { SUBTYPE_NONE=0, SUBTYPE_FEE, SUBTYPE_OWNERS, SUBTYPE_MIN_OWNERS, SUBTYPE_IP_BAN};
diff --git a/modules/net/include/dap_chain_node_cli_cmd.h b/modules/net/include/dap_chain_node_cli_cmd.h
index 040e4b3b5549dbd6652a930a06f166b391c5b77c..9d0d7252cfe9df7ce12e3ca49a81db5a81c5698f 100644
--- a/modules/net/include/dap_chain_node_cli_cmd.h
+++ b/modules/net/include/dap_chain_node_cli_cmd.h
@@ -36,18 +36,18 @@ int dap_chain_node_cli_cmd_values_parse_net_chain_for_json(int *a_arg_index, int
                                                            dap_chain_t **a_chain, dap_chain_net_t **a_net);
 
 
-int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index,int a_argc, char **a_argv, char ** a_str_reply,
+int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int a_argc, char **a_argv, void **a_str_reply,
                              dap_chain_t ** a_chain, dap_chain_net_t ** a_net);
 
 /**
  * global_db command
  */
-int com_global_db(int a_argc,  char **a_argv, void **reply);
+int com_global_db(int a_argc,  char **a_argv, void **a_str_reply);
 
 /**
  * Node command
  */
-int com_node(int a_argc,  char **a_argv, void **reply);
+int com_node(int a_argc,  char **a_argv, void **a_str_reply);
 
 #ifndef DAP_OS_ANDROID
 /**
@@ -55,50 +55,50 @@ int com_node(int a_argc,  char **a_argv, void **reply);
  *
  * return 0 OK, -1 Err
  */
-int com_traceroute(int a_argc,  char** argv, void **reply);
+int com_traceroute(int a_argc,  char** argv, void **a_str_reply);
 
 /**
  * Tracepath command
  *
  * return 0 OK, -1 Err
  */
-int com_tracepath(int a_argc,  char** argv, void **reply);
+int com_tracepath(int a_argc,  char** argv, void **a_str_reply);
 
 /**
  * Ping command
  *
  * return 0 OK, -1 Err
  */
-int com_ping(int a_argc,  char** argv, void **reply);
+int com_ping(int a_argc,  char** argv, void **a_str_reply);
 #endif
 /**
  * Help command
  */
-int com_help(int a_argc,  char **a_argv, void **reply);
+int com_help(int a_argc,  char **a_argv, void **a_str_reply);
 
-int com_version(int a_argc, char **a_argv, void **reply);
+int com_version(int a_argc, char **a_argv, void **a_str_reply);
 
 /**
  * Token declaration
  */
-int com_token_decl(int a_argc,  char **a_argv, void **reply);
+int com_token_decl(int a_argc,  char **a_argv, void **a_str_reply);
 
-int com_token_update(int a_argc, char **a_argv, void ** reply);
+int com_token_update(int a_argc, char **a_argv, void **a_str_reply);
 
 /**
  * Token declaration add sign
  */
-int com_token_decl_sign ( int a_argc,  char **a_argv, void **reply);
+int com_token_decl_sign ( int a_argc,  char **a_argv, void **a_str_reply);
 
 /*
  * Token update sign
  */
-int com_token_update_sign(int argc, char ** argv, void ** reply);
+int com_token_update_sign(int argc, char ** argv, void **a_str_reply);
 
 /**
  * Token emission
  */
-int com_token_emit (int a_argc,  char **a_argv, void **reply);
+int com_token_emit (int a_argc,  char **a_argv, void **a_str_reply);
 
 
 /**
@@ -106,23 +106,23 @@ int com_token_emit (int a_argc,  char **a_argv, void **reply);
  *
  * Wallet info
  */
-int com_tx_wallet(int a_argc, char **a_argv, void **reply);
+int com_tx_wallet(int a_argc, char **a_argv, void **a_str_reply);
 
 /**
  * com_tx_create command
  *
  * Create transaction
  */
-int com_tx_create(int a_argc, char **a_argv, void **reply);
-int com_tx_create_json(int a_argc, char **a_argv, void **reply);
-int com_tx_cond_create(int a_argc, char **a_argv, void **reply);
+int com_tx_create(int a_argc, char **a_argv, void **a_str_reply);
+int com_tx_create_json(int a_argc, char **a_argv, void **a_str_reply);
+int com_tx_cond_create(int a_argc, char **a_argv, void **a_str_reply);
 
 /**
  * tx_verify command
  *
  * Verifing transaction
  */
-int com_tx_verify(int a_argc, char ** a_argv, void **reply);
+int com_tx_verify(int a_argc, char ** a_argv, void **a_str_reply);
 
 typedef enum s_com_tx_history_err{
     DAP_CHAIN_NODE_CLI_COM_TX_HISTORY_OK = 0,
@@ -153,19 +153,19 @@ char *dap_chain_node_cli_com_tx_history_err(int a_code);
  *
  * Transaction history for an address
  */
-int com_tx_history(int a_argc, char ** a_argv, void ** reply);
+int com_tx_history(int a_argc, char ** a_argv, void **a_str_reply);
 
 
 // Print log info
-int com_print_log(int a_argc, char **a_argv, void **reply);
+int com_print_log(int a_argc, char **a_argv, void **a_str_reply);
 
 // Print statistics
-int com_stats(int a_argc, char **a_argv, void **reply);
+int com_stats(int a_argc, char **a_argv, void **a_str_reply);
 
-int com_exit(int a_argc, char **a_argv, void **reply);
+int com_exit(int a_argc, char **a_argv, void **a_str_reply);
 
-int cmd_gdb_import(int a_argc, char **a_argv, void **reply);
-int cmd_gdb_export(int a_argc, char **a_argv, void **reply);
+int cmd_gdb_import(int a_argc, char **a_argv, void **a_str_reply);
+int cmd_gdb_export(int a_argc, char **a_argv, void **a_str_reply);
 
 typedef enum cmd_mempool_list_err{
     DAP_CHAIN_NODE_CLI_COM_MEMPOOL_LIST_OK = 0,
@@ -176,13 +176,13 @@ typedef enum cmd_mempool_list_err{
 
     DAP_CHAIN_NODE_CLI_COM_MEMPOOL_LIST_UNKNOWN /* MAX */
 } cmd_mempool_list_err_t;
-int com_mempool(int a_argc, char **a_argv, void **reply);
+int com_mempool(int a_argc, char **a_argv, void **a_str_reply);
 /**
  * Place public CA into the mempool
  */
-int com_chain_ca_pub( int a_argc,  char **a_argv, void ** reply);
-int com_chain_ca_copy( int a_argc,  char **a_argv, void ** reply);
-int com_signer(int a_argc, char **a_argv, void ** reply);
+int com_chain_ca_pub( int a_argc,  char **a_argv, void **a_str_reply);
+int com_chain_ca_copy( int a_argc,  char **a_argv, void **a_str_reply);
+int com_signer(int a_argc, char **a_argv, void **a_str_reply);
 //remove func
-int cmd_remove(int a_argc, char **a_argv, void ** reply);
+int cmd_remove(int a_argc, char **a_argv, void **a_str_reply);
 
diff --git a/modules/net/include/dap_chain_node_cli_cmd_tx.h b/modules/net/include/dap_chain_node_cli_cmd_tx.h
index 3b196a652b3078796d152edcde6bd5d20a247b61..76a3cd8c912b61599be45f489dc5f8da96cf6333 100644
--- a/modules/net/include/dap_chain_node_cli_cmd_tx.h
+++ b/modules/net/include/dap_chain_node_cli_cmd_tx.h
@@ -55,17 +55,17 @@ json_object* dap_db_history_tx_all(dap_chain_t *l_chain, dap_chain_net_t* l_net,
  * ledger command
  *
  */
-int com_ledger(int a_argc, char ** a_argv, void **reply);
+int com_ledger(int a_argc, char ** a_argv, void **a_str_reply);
 
 /**
  * token command
  *
  */
-int com_token(int a_argc, char ** a_argv, void **reply);
+int com_token(int a_argc, char ** a_argv, void **a_str_reply);
 
 /**
  * decree command
  *
  */
-int cmd_decree(int a_argc, char **a_argv, void ** reply);
+int cmd_decree(int a_argc, char **a_argv, void **a_str_reply);
 
diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c
index 51576fa3b5eea15fcf62fad139cc248038da6f7f..37da291861be7f4fc2666710d09e156ecf387ae6 100644
--- a/modules/net/srv/dap_chain_net_srv.c
+++ b/modules/net/srv/dap_chain_net_srv.c
@@ -77,7 +77,7 @@ static pthread_mutex_t s_srv_list_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 
 
-static int s_cli_net_srv(int argc, char **argv, char **a_str_reply);
+static int s_cli_net_srv(int argc, char **argv, void **a_str_reply);
 static void s_load(const char * a_path);
 static void s_load_all();
 
@@ -188,7 +188,7 @@ void dap_chain_net_srv_deinit(void)
  * @param a_str_reply
  * @return
  */
-static int s_cli_net_srv( int argc, char **argv, char **a_str_reply)
+static int s_cli_net_srv( int argc, char **argv, void **a_str_reply)
 {
     int arg_index = 1;
     dap_chain_net_t * l_net = NULL;
diff --git a/modules/service/datum/dap_chain_net_srv_datum.c b/modules/service/datum/dap_chain_net_srv_datum.c
index afdc23e0639a9c6054be2016d2502546f9dc0229..5d6bed3683d1561a28b16e7aee4a0087c9e5d4fa 100644
--- a/modules/service/datum/dap_chain_net_srv_datum.c
+++ b/modules/service/datum/dap_chain_net_srv_datum.c
@@ -34,7 +34,7 @@
 #define LOG_TAG "chain_net_srv_datum"
 
 static dap_chain_net_srv_t *s_srv_datum = NULL;
-static int s_srv_datum_cli(int argc, char ** argv, void **reply);
+static int s_srv_datum_cli(int argc, char ** argv, void **a_str_reply);
 
 void s_order_notficator(dap_store_obj_t *a_obj, void *a_arg);
 
@@ -102,9 +102,8 @@ char* dap_chain_net_srv_datum_custom_add(dap_chain_t * a_chain, const uint8_t *a
     return l_hash_str;
 }
 
-static int s_srv_datum_cli(int argc, char ** argv, void **reply) {
-    char ** a_str_reply = (char **) reply;
-    int ret = -666;
+static int s_srv_datum_cli(int argc, char ** argv, void **a_str_reply)
+{
     int arg_index = 1;
     dap_chain_net_t * l_chain_net = NULL;
     dap_chain_t * l_chain = NULL;
@@ -131,7 +130,6 @@ static int s_srv_datum_cli(int argc, char ** argv, void **reply) {
     if ( l_datum_cmd_str != NULL ) {
         if ( strcmp(l_datum_cmd_str, "save") == 0) {
             char * l_gdb_group = dap_chain_net_get_gdb_group_mempool_new(l_chain);
-            size_t l_datum_size = 0;
 
             size_t l_path_length = strlen(l_system_datum_folder)+8+strlen(l_datum_hash_str);
             char *l_path = DAP_NEW_Z_SIZE(char, l_path_length);
diff --git a/modules/service/stake/dap_chain_net_srv_stake_lock.c b/modules/service/stake/dap_chain_net_srv_stake_lock.c
index 292d88b50a2e55c883b845ed3f967ea7c8c3d946..4d1fae52e1a61df8d1435f543a717793489dd3e8 100644
--- a/modules/service/stake/dap_chain_net_srv_stake_lock.c
+++ b/modules/service/stake/dap_chain_net_srv_stake_lock.c
@@ -91,7 +91,7 @@ typedef struct dap_ledger_token_emission_for_stake_lock_item {
 #define MONTH_INDEX	8
 #define YEAR_INDEX	12
 
-static int s_cli_stake_lock(int a_argc, char **a_argv, void ** reply);
+static int s_cli_stake_lock(int a_argc, char **a_argv, void **a_str_reply);
 
 // Create stake lock datum
 static dap_chain_datum_t *s_stake_lock_datum_create(dap_chain_net_t *a_net, dap_enc_key_t *a_key_from,
@@ -690,10 +690,9 @@ static void s_error_handler(enum error_code errorCode, dap_string_t *output_line
  * @param a_str_reply
  * @return
  */
-static int s_cli_stake_lock(int a_argc, char **a_argv, void **reply)
+static int s_cli_stake_lock(int a_argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
-    enum{
+    enum {
         CMD_NONE, CMD_HOLD, CMD_TAKE
     };
 
diff --git a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
index 507e830b0ca63e9ff4f17d7e39f6a10d2d24b446..e05e0d3b4871e8d2aeac9a8a4a878e53853de71e 100644
--- a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
+++ b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
@@ -43,7 +43,7 @@
 
 #define DAP_CHAIN_NET_SRV_STAKE_POS_DELEGATE_GDB_GROUP "delegate_keys"
 
-static int s_cli_srv_stake(int a_argc, char **a_argv, void **reply);
+static int s_cli_srv_stake(int a_argc, char **a_argv, void **a_str_reply);
 
 static bool s_stake_verificator_callback(dap_ledger_t *a_ledger, dap_chain_tx_out_cond_t *a_cond,
                                                       dap_chain_datum_tx_t *a_tx_in, bool a_owner);
@@ -1082,7 +1082,7 @@ char *s_staker_order_create(dap_chain_net_t *a_net, uint256_t a_value, uint256_t
     return l_order_hash_str;
 }
 
-static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, char **a_str_reply, const char *a_hash_out_type)
+static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, void **a_str_reply, const char *a_hash_out_type)
 {
     enum {
         CMD_NONE, CMD_CREATE_FEE, CMD_CREATE_VALIDATOR, CMD_CREATE_STAKER, CMD_UPDATE, CMD_LIST, CMD_REMOVE
@@ -1625,9 +1625,8 @@ uint256_t dap_chain_net_srv_stake_get_total_weight(dap_chain_net_id_t a_net_id)
     return l_total_weight;
 }
 
-static int s_cli_srv_stake(int a_argc, char **a_argv, void **reply)
+static int s_cli_srv_stake(int a_argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     enum {
         CMD_NONE, CMD_ORDER, CMD_DELEGATE, CMD_APPROVE, CMD_LIST, CMD_INVALIDATE, CMD_MIN_VALUE, CMD_CHECK
     };
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 19a5edaa4ef2dc77aa92d43a3d6b14aaee701f78..c2603e2c35e31fb9be3eaf2e931b087db5a3dc9f 100644
--- a/modules/service/vpn/dap_chain_net_srv_vpn_cmd.c
+++ b/modules/service/vpn/dap_chain_net_srv_vpn_cmd.c
@@ -31,9 +31,8 @@ static void add_value_text(dap_string_t *l_str, char *l_addstr, uintmax_t a_valu
  *
  * VPN statistics
  */
-int com_vpn_statistics(int a_argc, char ** a_argv, void **reply)
+int com_vpn_statistics(int a_argc, char ** a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     // get statistics for all actual sessions
     dap_list_t *l_sessions_list = dap_stream_session_get_list_sessions(), *l_item;
     dap_string_t *l_str = dap_string_new(NULL);
@@ -92,9 +91,8 @@ int com_vpn_statistics(int a_argc, char ** a_argv, void **reply)
  *
  * VPN client control
  */
-int com_vpn_client(int a_argc, char ** a_argv, void **reply)
+int com_vpn_client(int a_argc, char ** a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
 #ifndef _WIN32
     enum {
         CMD_NONE, CMD_INIT, CMD_START, CMD_STOP, CMD_STATUS, CMD_CHECK, CMD_CHECK_RESULT
diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c
index 1b8092ffa840bbc09dfcaf11cb1c8933437e4ba0..013ccb5d87049bccf779faed40353ff5a920c989 100644
--- a/modules/service/xchange/dap_chain_net_srv_xchange.c
+++ b/modules/service/xchange/dap_chain_net_srv_xchange.c
@@ -72,7 +72,7 @@ static bool s_xchange_verificator_callback(dap_ledger_t * a_ledger, dap_chain_tx
 const dap_chain_net_srv_uid_t c_dap_chain_net_srv_xchange_uid = {.uint64= DAP_CHAIN_NET_SRV_XCHANGE_ID};
 
 
-static int s_cli_srv_xchange(int a_argc, char **a_argv, void **reply);
+static int s_cli_srv_xchange(int a_argc, char **a_argv, void **a_str_reply);
 static int s_callback_requested(dap_chain_net_srv_t *a_srv, uint32_t a_usage_id, dap_chain_net_srv_client_remote_t *a_srv_client, const void *a_data, size_t a_data_size);
 static int s_callback_response_success(dap_chain_net_srv_t *a_srv, uint32_t a_usage_id, dap_chain_net_srv_client_remote_t *a_srv_client, const void *a_data, size_t a_data_size);
 static int s_callback_response_error(dap_chain_net_srv_t *a_srv, uint32_t a_usage_id, dap_chain_net_srv_client_remote_t *a_srv_client, const void *a_data, size_t a_data_size);
@@ -716,7 +716,8 @@ static dap_chain_datum_tx_t *s_xchange_tx_create_exchange(dap_chain_net_srv_xcha
             log_it(L_ERROR, "Can't add net fee output");
             return NULL;
         }
-        debug_if(s_debug_more, L_NOTICE, "l_service_fee = %s %s", dap_chain_balance_to_coins(l_net_fee), l_service_ticker);
+        debug_if(s_debug_more, L_NOTICE, "l_service_fee = %s %s", dap_chain_balance_to_coins(l_net_fee),
+                                                       l_service_ticker ? l_service_ticker : "UNKNOWN");
     }
     // coin back
     SUBTRACT_256_256(l_value_transfer, l_value_need, &l_value_back);
@@ -982,7 +983,7 @@ dap_chain_net_srv_xchange_price_t *s_xchange_price_from_order(dap_chain_net_t *a
  * @param a_str_reply
  * @return
  */
-static int s_cli_srv_xchange_order(int a_argc, char **a_argv, int a_arg_index, char **a_str_reply)
+static int s_cli_srv_xchange_order(int a_argc, char **a_argv, int a_arg_index, void **a_str_reply)
 {
     enum {
         CMD_NONE, CMD_CREATE, CMD_REMOVE, CMD_UPDATE, CMD_HISTORY, CMD_STATUS
@@ -1692,14 +1693,8 @@ static bool s_string_append_tx_cond_info( dap_string_t * a_reply_str,
 }
 
 
-static int s_cli_srv_xchange_tx_list_addr (
-                    dap_chain_net_t     *a_net,
-                        dap_time_t      a_after,
-                        dap_time_t      a_before,
-                    dap_chain_addr_t    *a_addr,
-                            int         a_opt_status,
-                                char    **a_str_reply
-                                          )
+static int s_cli_srv_xchange_tx_list_addr(dap_chain_net_t *a_net, dap_time_t a_after, dap_time_t a_before,
+                                          dap_chain_addr_t *a_addr, int a_opt_status, void **a_str_reply)
 {
 dap_chain_hash_fast_t l_tx_first_hash = {0};
 dap_chain_datum_tx_t    *l_datum_tx;
@@ -1738,12 +1733,10 @@ void s_tx_is_order_check(dap_chain_net_t *a_net, dap_chain_datum_tx_t *a_tx, voi
        *l_tx_list_ptr = dap_list_append(*l_tx_list_ptr, a_tx);
 }
 
-static int s_cli_srv_xchange(int a_argc, char **a_argv, void **reply)
+static int s_cli_srv_xchange(int a_argc, char **a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     enum {CMD_NONE = 0, CMD_ORDER, CMD_ORDERS, CMD_PURCHASE, CMD_ENABLE, CMD_DISABLE, CMD_TX_LIST, CMD_TOKEN_PAIR };
     int l_arg_index = 1, l_cmd_num = CMD_NONE;
-    bool l_rc;
 
     if(dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, dap_min(a_argc, l_arg_index + 1), "order", NULL)) {
         l_cmd_num = CMD_ORDER;
diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index 02f96dc2f8a2125cdb20c8cfd73b2dfe909fdce5..38fce2f0eaa7474f5ccb8e6aa791aa882caecb45 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -82,9 +82,9 @@ typedef struct dap_chain_cs_blocks_pvt
 
 #define PVT(a) ((dap_chain_cs_blocks_pvt_t *)(a)->_pvt )
 
-static int s_cli_parse_cmd_hash(char ** a_argv, int a_arg_index, int a_argc, char **a_str_reply,const char * a_param, dap_chain_hash_fast_t * a_datum_hash);
+static int s_cli_parse_cmd_hash(char ** a_argv, int a_arg_index, int a_argc, void **a_str_reply,const char * a_param, dap_chain_hash_fast_t * a_datum_hash);
 static void s_cli_meta_hash_print(  dap_string_t * a_str_tmp, const char * a_meta_title, dap_chain_block_meta_t * a_meta);
-static int s_cli_blocks(int a_argc, char ** a_argv, void **reply);
+static int s_cli_blocks(int a_argc, char ** a_argv, void **a_str_reply);
 
 // Setup BFT consensus and select the longest chunk
 static void s_bft_consensus_setup(dap_chain_cs_blocks_t * a_blocks);
@@ -407,7 +407,7 @@ static char *s_blocks_decree_set_reward(dap_chain_net_t *a_net, dap_chain_t *a_c
  * @param a_datum_hash
  * @return
  */
-static int s_cli_parse_cmd_hash(char ** a_argv, int a_arg_index, int a_argc, char **a_str_reply,const char * a_param,
+static int s_cli_parse_cmd_hash(char ** a_argv, int a_arg_index, int a_argc, void **a_str_reply,const char * a_param,
                                 dap_chain_hash_fast_t * a_datum_hash)
 {
     assert(a_datum_hash);
@@ -504,9 +504,8 @@ static void s_print_autocollect_table(dap_chain_net_t *a_net, dap_string_t *a_re
  * @param a_str_reply
  * @return
  */
-static int s_cli_blocks(int a_argc, char ** a_argv, void **reply)
+static int s_cli_blocks(int a_argc, char ** a_argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     enum {
         SUBCMD_UNDEFINED =0,
         SUBCMD_NEW_FLUSH,
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index 6ab3260bcf88b4e4b579407cc7806cd690804cfe..112828434c6d826cc41dcda9e7d762590f677952 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -131,7 +131,7 @@ static void s_chain_callback_datum_iter_delete(dap_chain_datum_iter_t *a_datum_i
 static dap_chain_datum_t *s_chain_callback_datum_iter_get_first(dap_chain_datum_iter_t *a_datum_iter); // Get the fisrt datum from dag
 static dap_chain_datum_t *s_chain_callback_datum_iter_get_next(dap_chain_datum_iter_t *a_datum_iter); // Get the next datum from dag
 
-static int s_cli_dag(int argc, char ** argv, void **reply);
+static int s_cli_dag(int argc, char ** argv, void **a_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 size_t s_dap_chain_callback_get_count_tx(dap_chain_t *a_chain);
@@ -1436,9 +1436,8 @@ static dap_chain_datum_t *s_chain_callback_datum_iter_get_next(dap_chain_datum_i
  * @param str_reply
  * @return
  */
-static int s_cli_dag(int argc, char ** argv, void **reply)
+static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
 {
-    char ** a_str_reply = (char **) reply;
     enum {
         SUBCMD_EVENT_CREATE,
         SUBCMD_EVENT_CANCEL,