diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c
index a7fa58dd6add801fbafe8ace9a87cb7d66e91514..77b79789f4661b0fc874abcac74c42c9fb2d1047 100644
--- a/modules/chain/dap_chain_ledger.c
+++ b/modules/chain/dap_chain_ledger.c
@@ -570,7 +570,7 @@ void s_ledger_token_cache_update(dap_ledger_t *a_ledger, dap_chain_ledger_token_
     uint8_t *l_cache = DAP_NEW_STACK_SIZE(uint8_t, l_cache_size);
     memcpy(l_cache, &l_token_item->current_supply, sizeof(uint256_t));
     memcpy(l_cache + sizeof(uint256_t), l_token_item->datum_token, l_token_item->datum_token_size);
-    if (!dap_global_db_set(l_gdb_group, l_token_item->ticker, l_cache, l_cache_size, false, NULL, NULL)) {
+    if (dap_global_db_set(l_gdb_group, l_token_item->ticker, l_cache, l_cache_size, false, NULL, NULL)) {
         char *l_supply = dap_chain_balance_print(l_token_item->current_supply);
         log_it(L_WARNING, "Ledger cache mismatch, can't add token [%s] with supply %s", l_token_item->ticker, l_supply);
         DAP_FREE(l_supply);
@@ -2006,7 +2006,7 @@ static void s_ledger_emission_cache_update(dap_ledger_t *a_ledger, dap_chain_led
     memcpy(l_cache, &a_emission_item->tx_used_out, sizeof(dap_hash_fast_t));
     memcpy(l_cache + sizeof(dap_hash_fast_t), a_emission_item->datum_token_emission, a_emission_item->datum_token_emission_size);
     char *l_hash_str = dap_hash_fast_to_str_new(&a_emission_item->datum_token_emission_hash);
-    if (!dap_global_db_set(l_gdb_group, l_hash_str, l_cache, l_cache_size, false, NULL, NULL)) {
+    if (dap_global_db_set(l_gdb_group, l_hash_str, l_cache, l_cache_size, false, NULL, NULL)) {
         log_it(L_WARNING, "Ledger cache mismatch");
     }
     DAP_DELETE(l_gdb_group);
@@ -2173,7 +2173,7 @@ void s_ledger_stake_lock_cache_update(dap_ledger_t *a_ledger, dap_chain_ledger_s
 {
     char *l_hash_str = dap_chain_hash_fast_to_str_new(&a_stake_lock_item->tx_for_stake_lock_hash);
     char *l_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_STAKE_LOCK_STR);
-    if (!dap_global_db_set(l_group, l_hash_str, &a_stake_lock_item->tx_used_out, sizeof(dap_hash_fast_t), false, NULL, NULL))
+    if (dap_global_db_set(l_group, l_hash_str, &a_stake_lock_item->tx_used_out, sizeof(dap_hash_fast_t), false, NULL, NULL))
         log_it(L_WARNING, "Ledger cache mismatch");
     DAP_DEL_Z(l_hash_str);
     DAP_DEL_Z(l_group);
@@ -3359,7 +3359,7 @@ static int s_balance_cache_update(dap_ledger_t *a_ledger, dap_ledger_wallet_bala
 {
     if (PVT(a_ledger)->cached) {
         char *l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_BALANCES_STR);
-        if (!dap_global_db_set(l_gdb_group, a_balance->key, &a_balance->balance, sizeof(uint256_t), false, NULL, NULL)) {
+        if (dap_global_db_set(l_gdb_group, a_balance->key, &a_balance->balance, sizeof(uint256_t), false, NULL, NULL)) {
             debug_if(s_debug_more, L_WARNING, "Ledger cache mismatch");
             return -1;
         }
diff --git a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
index d85b2cbc10618ee3ec4fefc0ddf4641a30025d76..554f953ab4ac7f04eb42a87c3d2c9838eb8937cc 100644
--- a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
+++ b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
@@ -541,16 +541,14 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch , void* a_arg)
         DAP_DELETE(l_receipt_hash_str);
 
         size_t l_success_size;
-        dap_chain_hash_fast_t *l_tx_in_hash  = NULL;
         if (!l_usage->is_grace) {
             // Form input transaction
             dap_chain_addr_t *l_wallet_addr = dap_chain_wallet_get_addr(l_usage->price->wallet, l_usage->net->pub.id);
-            l_tx_in_hash = dap_chain_mempool_tx_create_cond_input(l_usage->net, &l_usage->tx_cond_hash, l_wallet_addr,
-                                                                  dap_chain_wallet_get_key(l_usage->price->wallet, 0),
-                                                                  l_receipt);
-            if (l_tx_in_hash) {
-                l_usage->tx_cond_hash = *l_tx_in_hash;
-                char *l_tx_in_hash_str = dap_chain_hash_fast_to_str_new(l_tx_in_hash);
+            char *l_tx_in_hash_str = dap_chain_mempool_tx_create_cond_input(l_usage->net, &l_usage->tx_cond_hash, l_wallet_addr,
+                                                                            dap_chain_wallet_get_key(l_usage->price->wallet, 0),
+                                                                            l_receipt, "hex");
+            if (l_tx_in_hash_str) {
+                dap_chain_hash_fast_from_str(l_tx_in_hash_str, &l_usage->tx_cond_hash);
                 log_it(L_NOTICE, "Formed tx %s for input with active receipt", l_tx_in_hash_str);
                 DAP_DELETE(l_tx_in_hash_str);
             }else
@@ -568,16 +566,13 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch , void* a_arg)
         l_success->hdr.net_id.uint64    = l_usage->net->pub.id.uint64;
         l_success->hdr.srv_uid.uint64   = l_usage->service->uid.uint64;
 
-        if (l_tx_in_hash) {
-            memcpy(l_success->custom_data, l_tx_in_hash, sizeof(dap_chain_hash_fast_t));
-            DAP_DELETE(l_tx_in_hash);
-        }
-
         if (l_usage->is_grace)
             log_it(L_NOTICE, "Receipt is OK, but transaction can't be found. Start the grace period for %d seconds",
                    l_srv->grace_period);
-        else
+        else {
+            memcpy(l_success->custom_data, &l_usage->tx_cond_hash, sizeof(dap_chain_hash_fast_t));
             log_it(L_NOTICE, "Receipt with remote client sign is acceptible for. Now start the service's usage");
+        }
 
         dap_stream_ch_pkt_write_unsafe( a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_SUCCESS ,
                                        l_success, l_success_size);
diff --git a/modules/common/include/dap_chain_datum.h b/modules/common/include/dap_chain_datum.h
index 6a61ea4b0eb4a032b7719d42f171dcdf4d336325..0bfecc72ec5e7364d8d7f143a79cbe8373049275 100644
--- a/modules/common/include/dap_chain_datum.h
+++ b/modules/common/include/dap_chain_datum.h
@@ -146,7 +146,7 @@ typedef void (*dap_chain_datum_callback_iter_delete_t)(dap_chain_datum_iter_t *
  * @param a_datum
  * @return
  */
-static inline size_t dap_chain_datum_size(const dap_chain_datum_t *a_datum)
+DAP_STATIC_INLINE size_t dap_chain_datum_size(const dap_chain_datum_t *a_datum)
 {
     if (!a_datum)
         return 0;
@@ -156,7 +156,7 @@ static inline size_t dap_chain_datum_size(const dap_chain_datum_t *a_datum)
 dap_chain_datum_t * dap_chain_datum_create(uint16_t a_type_id, const void * a_data, size_t a_data_size);
 
 
-static inline const char *dap_chain_datum_type_id_to_str(uint16_t a_type_id)
+DAP_STATIC_INLINE const char *dap_chain_datum_type_id_to_str(uint16_t a_type_id)
 {
     const char * l_ret;
     DAP_DATUM_TYPE_STR(a_type_id,l_ret);
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 074c3ef6718fe20c60c109cca4e4b6f5dcf827d6..b6cc245028ca446d059e564fe30a3f2953e16741 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -415,10 +415,10 @@ static void s_poa_round_check_callback_round_clean(dap_global_db_context_t *a_gl
             uint64_t l_time_diff = dap_nanotime_now() - l_event_round_item->round_info.ts_update;
             uint64_t l_timeuot = dap_nanotime_from_sec(l_poa_pvt->confirmations_timeout + l_poa_pvt->wait_sync_before_complete + 10);
             uint64_t l_round_id = ((dap_chain_cs_dag_event_t *)l_event_round_item->event_n_signs)->header.round_id;
-            if (l_time_diff > l_timeuot && l_round_id <= l_dag->round_completed) {
+            if (l_time_diff > l_timeuot || l_round_id <= l_dag->round_completed) {
                 dap_global_db_del_unsafe(a_global_db_context, a_group, a_values[i].key);
-                log_it(L_DEBUG, "DAG-PoA: Remove event %s from round %"DAP_UINT64_FORMAT_U" by timer.",
-                                a_values[i].key, l_round_id);
+                log_it(L_DEBUG, "DAG-PoA: Remove event %s from round %"DAP_UINT64_FORMAT_U" %s.",
+                                a_values[i].key, l_round_id, l_time_diff > l_timeuot ? "by timer" : "owing to round completion");
             }
         }
     }
@@ -552,7 +552,7 @@ static void s_callback_round_event_to_chain_callback_get_round_item(dap_global_d
     dap_chain_cs_dag_event_t *l_new_atom = NULL;
     if (l_chosen_item) {
         size_t l_event_size = l_chosen_item->event_size;
-        l_new_atom = dap_chain_cs_dag_event_copy((dap_chain_cs_dag_event_t *)l_chosen_item->event_n_signs, l_event_size);
+        l_new_atom = DAP_DUP_SIZE(l_chosen_item->event_n_signs, l_event_size);
         dap_hash_fast_t l_event_hash = {};
         dap_hash_fast(l_new_atom, l_event_size, &l_event_hash);
         char l_event_hash_hex_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
@@ -560,22 +560,21 @@ static void s_callback_round_event_to_chain_callback_get_round_item(dap_global_d
         dap_chain_atom_verify_res_t l_res = l_dag->chain->callback_atom_add(l_dag->chain, l_new_atom, l_event_size);
         if (l_res == ATOM_PASS || l_res == ATOM_REJECT) { // Add new atom in chain
             DAP_DEL_Z(l_new_atom);
-            log_it(L_NOTICE, "Event %s from round %"DAP_UINT64_FORMAT_U" not added in chain", l_event_hash_hex_str, l_arg->round_id);
+            log_it(L_DEBUG, "Event %s from round %"DAP_UINT64_FORMAT_U" not added in chain", l_event_hash_hex_str, l_arg->round_id);
         } else {
             log_it(L_NOTICE, "Event %s from round %"DAP_UINT64_FORMAT_U" added in %s successfully", l_event_hash_hex_str, l_arg->round_id,
                                                                   l_res == ATOM_ACCEPT ? "chain" : "threshold");
-            if (l_res == ATOM_ACCEPT)
+            if (l_res == ATOM_ACCEPT) {
                 dap_chain_atom_save(l_dag->chain, (dap_chain_atom_ptr_t)l_new_atom, l_event_size, l_dag->chain->cells->id);
+                pthread_rwlock_wrlock(&l_poa_pvt->rounds_rwlock);
+                HASH_DEL(l_poa_pvt->active_rounds, l_arg);
+                pthread_rwlock_unlock(&l_poa_pvt->rounds_rwlock);
+                s_poa_round_clean(l_dag->chain);
+            }
         }
     } else
         log_it(L_WARNING, "No round candidates for round ID %"DAP_UINT64_FORMAT_U, l_arg->round_id);
-    pthread_rwlock_wrlock(&l_poa_pvt->rounds_rwlock);
-    HASH_DEL(l_poa_pvt->active_rounds, l_arg);
-    if (!l_new_atom || !l_new_atom->header.round_id)
-        l_dag->round_completed++;
-    pthread_rwlock_unlock(&l_poa_pvt->rounds_rwlock);
     dap_list_free(l_dups_list);
-    dap_store_obj_free(l_events_round, l_events_round_size);
     DAP_DELETE(a_arg);
 }
 
diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c
index e03870d6e6d40b8a0bc81450dbf215849b939d0c..bc0b35ef84a0aca25e607a9d5e4a8bd5e04a78f0 100644
--- a/modules/mempool/dap_chain_mempool.c
+++ b/modules/mempool/dap_chain_mempool.c
@@ -82,7 +82,7 @@ int dap_datum_mempool_init(void)
  * @param a_datum
  * @return
  */
-char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t *a_chain)
+char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t *a_chain, const char *a_hash_out_type)
 {
     if( a_datum == NULL){
         log_it(L_ERROR, "NULL datum trying to add in mempool");
@@ -90,19 +90,37 @@ char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t
     }
 
     dap_chain_hash_fast_t l_key_hash;
-
     dap_hash_fast(a_datum->data, a_datum->header.data_size, &l_key_hash);
-    char * l_key_str = dap_chain_hash_fast_to_str_new(&l_key_hash);
-    char * l_gdb_group = dap_chain_net_get_gdb_group_mempool_new(a_chain);
-
-    if (dap_global_db_set(l_gdb_group, l_key_str, a_datum, dap_chain_datum_size(a_datum),true, NULL, NULL )==0) {
-        log_it(L_NOTICE, "Datum with hash %s was placed in mempool", l_key_str);
-    } else {
-        log_it(L_WARNING, "Can't place datum with hash %s in mempool", l_key_str);
-        DAP_DEL_Z(l_key_str);
+    char *l_key_str;
+    if (dap_strcmp(a_hash_out_type, "hex"))
+        l_key_str = dap_chain_hash_fast_to_str_new(&l_key_hash);
+    else
+        l_key_str = dap_enc_base58_encode_hash_to_str(&l_key_hash);
+
+    const char *l_type_str;
+    switch (a_datum->header.type_id) {
+    case DAP_CHAIN_DATUM_TOKEN_DECL:
+        l_type_str = "token";
+        break;
+    case DAP_CHAIN_DATUM_TOKEN_EMISSION:
+        l_type_str = "emission";
+        break;
+    case DAP_CHAIN_DATUM_TX:
+        l_type_str = "transaction";
+        break;
+    default:
+        DAP_DATUM_TYPE_STR(a_datum->header.type_id, l_type_str);
     }
+
+    char *l_gdb_group = dap_chain_net_get_gdb_group_mempool_new(a_chain);
+    int l_res = dap_global_db_set(l_gdb_group, l_key_str, a_datum, dap_chain_datum_size(a_datum), true, NULL, NULL);
+    if (l_res == DAP_GLOBAL_DB_RC_SUCCESS)
+        log_it(L_NOTICE, "Datum %s with hash %s was placed in mempool group %s", l_type_str, l_key_str, l_gdb_group);
+    else
+        log_it(L_WARNING, "Can't place datum %s with hash %s in mempool group %s", l_type_str, l_key_str, l_gdb_group);
     DAP_DELETE(l_gdb_group);
-    return l_key_str;
+
+    return (l_res == DAP_GLOBAL_DB_RC_SUCCESS) ? l_key_str : NULL;
 }
 
 /**
@@ -110,10 +128,10 @@ char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t
  *
  * return 0 Ok, -2 not enough funds to transfer, -1 other Error
  */
-dap_hash_fast_t* dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_t *a_key_from,
+char *dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_t *a_key_from,
         const dap_chain_addr_t* a_addr_from, const dap_chain_addr_t* a_addr_to,
         const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
-        uint256_t a_value, uint256_t a_value_fee)
+        uint256_t a_value, uint256_t a_value_fee, const char *a_hash_out_type)
 {
     // check valid param
     if(!a_chain | !a_key_from || ! a_addr_from || !a_key_from->priv_key_data || !a_key_from->priv_key_data_size ||
@@ -240,21 +258,13 @@ dap_hash_fast_t* dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_
     }
 
     size_t l_tx_size = dap_chain_datum_tx_get_size(l_tx);
+    dap_hash_fast_t l_tx_hash;
+    dap_hash_fast(l_tx, l_tx_size, &l_tx_hash);
     dap_chain_datum_t *l_datum = dap_chain_datum_create(DAP_CHAIN_DATUM_TX, l_tx, l_tx_size);
-    dap_hash_fast_t * l_ret = DAP_NEW_Z(dap_hash_fast_t);
-    dap_hash_fast(l_tx, l_tx_size, l_ret);
     DAP_DELETE(l_tx);
-    char *l_hash_str = dap_chain_mempool_datum_add(l_datum, a_chain);
-
-    DAP_DELETE( l_datum );
-
-    if (l_hash_str) {
-        DAP_DELETE(l_hash_str);
-        return l_ret;
-    }else{
-        DAP_DELETE(l_ret);
-        return NULL;
-    }
+    char *l_ret = dap_chain_mempool_datum_add(l_datum, a_chain, a_hash_out_type);
+    DAP_DELETE(l_datum);
+    return l_ret;
 }
 
 /**
@@ -264,8 +274,8 @@ dap_hash_fast_t* dap_chain_mempool_tx_create(dap_chain_t * a_chain, dap_enc_key_
  */
 int dap_chain_mempool_tx_create_massive( dap_chain_t * a_chain, dap_enc_key_t *a_key_from,
         const dap_chain_addr_t* a_addr_from, const dap_chain_addr_t* a_addr_to,
-        const char a_token_ticker[10],
-        uint256_t a_value, uint256_t a_value_fee,size_t a_tx_num)
+        const char a_token_ticker[10], uint256_t a_value, uint256_t a_value_fee,
+        size_t a_tx_num)
 {
     // check valid param
     if(!a_chain | !a_key_from || !a_addr_from || !a_key_from->priv_key_data || !a_key_from->priv_key_data_size ||
@@ -476,9 +486,14 @@ static void s_tx_create_massive_gdb_save_callback(dap_global_db_context_t *a_glo
 }
 
 
-dap_chain_datum_t *dap_chain_tx_create_cond_input(dap_chain_net_t * a_net, dap_chain_hash_fast_t *a_tx_prev_hash,
-                                                  const dap_chain_addr_t* a_addr_to, dap_enc_key_t *a_key_tx_sign,
-                                                  dap_chain_datum_tx_receipt_t * a_receipt)
+/**
+ * Make transfer transaction & insert to cache
+ *
+ * return 0 Ok, -2 not enough funds to transfer, -1 other Error
+ */
+char *dap_chain_mempool_tx_create_cond_input(dap_chain_net_t *a_net, dap_chain_hash_fast_t *a_tx_prev_hash,
+                                                          const dap_chain_addr_t *a_addr_to, dap_enc_key_t *a_key_tx_sign,
+                                                          dap_chain_datum_tx_receipt_t *a_receipt, const char *a_hash_out_type)
 {
     dap_ledger_t * l_ledger = a_net ? dap_chain_ledger_by_net_name( a_net->pub.name ) : NULL;
     if ( ! a_net || ! l_ledger || ! a_addr_to )
@@ -564,43 +579,24 @@ dap_chain_datum_t *dap_chain_tx_create_cond_input(dap_chain_net_t * a_net, dap_c
     size_t l_tx_size = dap_chain_datum_tx_get_size( l_tx );
     dap_chain_datum_t *l_datum = dap_chain_datum_create( DAP_CHAIN_DATUM_TX, l_tx, l_tx_size );
     dap_chain_datum_tx_delete(l_tx);
-    return l_datum;
-}
-
-dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond_input(dap_chain_net_t * a_net, dap_chain_hash_fast_t *a_tx_prev_hash,
-                                                              const dap_chain_addr_t* a_addr_to, dap_enc_key_t *a_key_tx_sign,
-                                                              dap_chain_datum_tx_receipt_t * a_receipt)
-{
-    dap_chain_datum_t *l_datum = dap_chain_tx_create_cond_input(a_net, a_tx_prev_hash, a_addr_to, a_key_tx_sign, a_receipt);
-    dap_chain_hash_fast_t *l_key_hash = DAP_NEW_Z( dap_chain_hash_fast_t );
-    dap_hash_fast(l_datum->data, l_datum->header.data_size, l_key_hash);
-
-    char * l_key_str = dap_chain_hash_fast_to_str_new( l_key_hash );
-
-    char * l_gdb_group = dap_chain_net_get_gdb_group_mempool_by_chain_type(a_net, CHAIN_TYPE_TX);
-
-    if( dap_global_db_set(l_gdb_group, l_key_str, l_datum, dap_chain_datum_size(l_datum), true, NULL, NULL )  == 0 ) {
-        log_it(L_NOTICE, "Transaction %s placed in mempool", l_key_str);
-        DAP_DELETE(l_datum);
-    }
-
-    DAP_DELETE(l_gdb_group);
-    DAP_DELETE(l_key_str);
-
-    return l_key_hash;
+    dap_chain_t *l_chain = dap_chain_net_get_default_chain_by_chain_type(a_net, CHAIN_TYPE_TX);
+    char *l_ret = dap_chain_mempool_datum_add(l_datum, l_chain, a_hash_out_type);
+    DAP_DELETE(l_datum);
+    return l_ret;
 }
 
-
 /**
  * Make transfer transaction
  *
  * return dap_chain_datum_t, NULL if Error
  */
-static dap_chain_datum_t* dap_chain_tx_create_cond(dap_chain_net_t *a_net,
+char *dap_chain_mempool_tx_create_cond(dap_chain_net_t *a_net,
         dap_enc_key_t *a_key_from, dap_pkey_t *a_key_cond,
         const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
-        uint256_t a_value, uint256_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
-        dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value_fee, const void *a_cond, size_t a_cond_size)
+        uint256_t a_value, uint256_t a_value_per_unit_max,
+        dap_chain_net_srv_price_unit_uid_t a_unit, dap_chain_net_srv_uid_t a_srv_uid,
+        uint256_t a_value_fee, const void *a_cond,
+        size_t a_cond_size, const char *a_hash_out_type)
 {
     dap_ledger_t * l_ledger = a_net ? dap_chain_ledger_by_net_name( a_net->pub.name ) : NULL;
     // check valid param
@@ -689,53 +685,17 @@ static dap_chain_datum_t* dap_chain_tx_create_cond(dap_chain_net_t *a_net,
 
     size_t l_tx_size = dap_chain_datum_tx_get_size( l_tx );
     dap_chain_datum_t *l_datum = dap_chain_datum_create( DAP_CHAIN_DATUM_TX, l_tx, l_tx_size );
-
-    return l_datum;
-}
-
-
-/**
- * Make transfer transaction & insert to cache
- *
- * return 0 Ok, -2 not enough funds to transfer, -1 other Error
- */
-dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond(dap_chain_net_t * a_net,
-        dap_enc_key_t *a_key_from, dap_pkey_t *a_key_cond,
-        const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
-        uint256_t a_value, uint256_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
-        dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value_fee, const void *a_cond, size_t a_cond_size)
-{
-    // Make transfer transaction
-    dap_chain_datum_t *l_datum = dap_chain_tx_create_cond(a_net, a_key_from, a_key_cond,
-                                                          a_token_ticker, a_value, a_value_per_unit_max,
-                                                          a_unit, a_srv_uid, a_value_fee, a_cond, a_cond_size);
-
-    if(!l_datum)
-        return NULL;
-
-    dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*)&(l_datum->data);
-    size_t l_tx_size = l_datum->header.data_size;//dap_chain_datum_tx_get_size( l_tx );
-
-    dap_chain_hash_fast_t *l_key_hash = DAP_NEW_Z( dap_chain_hash_fast_t );
-    dap_hash_fast( l_tx, l_tx_size, l_key_hash );
-    //DAP_DELETE( l_tx );
-
-    char * l_key_str = dap_chain_hash_fast_to_str_new( l_key_hash );
-    char * l_gdb_group = dap_chain_net_get_gdb_group_mempool_by_chain_type( a_net ,CHAIN_TYPE_TX);
-
-    if( dap_global_db_set(l_gdb_group, l_key_str, l_datum, dap_chain_datum_size(l_datum), true, NULL, NULL ) == 0 ) {
-                log_it(L_NOTICE, "Transaction %s placed in mempool group %s", l_key_str, l_gdb_group);
-    }
-
-    DAP_DELETE(l_gdb_group);
-    DAP_DELETE(l_key_str);
-
-    return l_key_hash;
+    dap_chain_datum_tx_delete(l_tx);
+    dap_chain_t *l_chain = dap_chain_net_get_default_chain_by_chain_type(a_net, CHAIN_TYPE_TX);
+    char *l_ret = dap_chain_mempool_datum_add(l_datum, l_chain, a_hash_out_type);
+    DAP_DELETE(l_datum);
+    return l_ret;
 }
 
-dap_chain_hash_fast_t *dap_chain_mempool_base_tx_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash,
-                                                        dap_chain_id_t a_emission_chain_id, uint256_t a_emission_value, const char *a_ticker,
-                                                        dap_chain_addr_t *a_addr_to, dap_cert_t **a_certs, size_t a_certs_count)
+char *dap_chain_mempool_base_tx_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash,
+                                       dap_chain_id_t a_emission_chain_id, uint256_t a_emission_value, const char *a_ticker,
+                                       dap_chain_addr_t *a_addr_to, dap_cert_t **a_certs, size_t a_certs_count,
+                                       const char *a_hash_out_type)
 {
     char *l_gdb_group_mempool_base_tx = dap_chain_net_get_gdb_group_mempool_new(a_chain);
     // create first transaction (with tx_token)
@@ -771,21 +731,10 @@ dap_chain_hash_fast_t *dap_chain_mempool_base_tx_create(dap_chain_t *a_chain, da
 
     // Pack transaction into the datum
     dap_chain_datum_t * l_datum_tx = dap_chain_datum_create(DAP_CHAIN_DATUM_TX, l_tx, l_tx_size);
-    size_t l_datum_tx_size = dap_chain_datum_size(l_datum_tx);
-    DAP_DEL_Z(l_tx);
-    // calc datum hash
-    dap_chain_hash_fast_t *l_datum_tx_hash = DAP_NEW(dap_hash_fast_t);
-    dap_hash_fast(l_datum_tx, l_datum_tx_size, l_datum_tx_hash);
-    char *l_tx_hash_str = dap_chain_hash_fast_to_str_new(l_datum_tx_hash);
-    // Add to mempool tx token
-    bool l_placed = dap_global_db_set(l_gdb_group_mempool_base_tx, l_tx_hash_str, l_datum_tx,
-                                               l_datum_tx_size, true, NULL, NULL) == 0;
-    DAP_DEL_Z(l_tx_hash_str);
+    dap_chain_datum_tx_delete(l_tx);
+    char *l_ret = dap_chain_mempool_datum_add(l_datum_tx, a_chain, a_hash_out_type);
     DAP_DELETE(l_datum_tx);
-    if (!l_placed) {
-        return NULL;
-    }
-    return l_datum_tx_hash;
+    return l_ret;
 }
 
 dap_chain_datum_token_emission_t *dap_chain_mempool_emission_get(dap_chain_t *a_chain, const char *a_emission_hash_str)
diff --git a/modules/mempool/include/dap_chain_mempool.h b/modules/mempool/include/dap_chain_mempool.h
index cdcbdeb4df236e33cd49132cf10e94999ce35fbc..ee5670144bf7ff8728ec57f0375b5d3d621e04b8 100644
--- a/modules/mempool/include/dap_chain_mempool.h
+++ b/modules/mempool/include/dap_chain_mempool.h
@@ -44,32 +44,32 @@ void dap_datum_mempool_free(dap_datum_mempool_t *datum);
 
 void dap_chain_mempool_add_proc(dap_http_t * a_http_server, const char * a_url);
 
-char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t *a_chain);
-dap_hash_fast_t*  dap_chain_mempool_tx_create(dap_chain_t *a_chain, dap_enc_key_t *a_key_from,
+char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t *a_chain, const char *a_hash_out_type);
+
+char *dap_chain_mempool_tx_create(dap_chain_t *a_chain, dap_enc_key_t *a_key_from,
         const dap_chain_addr_t *a_addr_from, const dap_chain_addr_t *a_addr_to,
         const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
-        uint256_t a_value, uint256_t a_value_fee);
+        uint256_t a_value, uint256_t a_value_fee, const char *a_hash_out_type);
 
 // Make transfer transaction & insert to cache
-dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond(dap_chain_net_t * a_net,
+char *dap_chain_mempool_tx_create_cond(dap_chain_net_t * a_net,
         dap_enc_key_t *a_key_from, dap_pkey_t *a_key_cond,
         const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
         uint256_t a_value, uint256_t a_value_per_unit_max, dap_chain_net_srv_price_unit_uid_t a_unit,
-        dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value_fee, const void *a_cond, size_t a_cond_size);
+        dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value_fee, const void *a_cond,
+        size_t a_cond_size, const char *a_hash_out_type);
 
-dap_chain_datum_t *dap_chain_tx_create_cond_input(dap_chain_net_t * a_net, dap_chain_hash_fast_t *a_tx_prev_hash,
-                                                  const dap_chain_addr_t* a_addr_to, dap_enc_key_t *a_key_tx_sign,
-                                                  dap_chain_datum_tx_receipt_t * a_receipt);
-dap_chain_hash_fast_t* dap_chain_mempool_tx_create_cond_input(dap_chain_net_t * a_net, dap_chain_hash_fast_t *a_tx_prev_hash,
-        const dap_chain_addr_t *a_addr_to, dap_enc_key_t *a_key_tx_sign, dap_chain_datum_tx_receipt_t *a_receipt);
+char *dap_chain_mempool_tx_create_cond_input(dap_chain_net_t *a_net, dap_chain_hash_fast_t *a_tx_prev_hash,
+        const dap_chain_addr_t *a_addr_to, dap_enc_key_t *a_key_tx_sign, dap_chain_datum_tx_receipt_t *a_receipt, const char *a_hash_out_type);
 
 int dap_chain_mempool_tx_create_massive(dap_chain_t * a_chain, dap_enc_key_t *a_key_from,
         const dap_chain_addr_t* a_addr_from, const dap_chain_addr_t* a_addr_to,
         const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
         uint256_t a_value, uint256_t a_value_fee, size_t a_tx_num);
 
-dap_chain_hash_fast_t *dap_chain_mempool_base_tx_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash,
-                                                        dap_chain_id_t a_emission_chain_id, uint256_t a_emission_value, const char *a_ticker,
-                                                        dap_chain_addr_t *a_addr_to, dap_cert_t **a_certs, size_t a_certs_count);
+char *dap_chain_mempool_base_tx_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash,
+                                       dap_chain_id_t a_emission_chain_id, uint256_t a_emission_value, const char *a_ticker,
+                                       dap_chain_addr_t *a_addr_to, dap_cert_t **a_certs, size_t a_certs_count, const char *a_hash_out_type);
+
 dap_chain_datum_token_emission_t *dap_chain_mempool_emission_get(dap_chain_t *a_chain, const char *a_emission_hash_str);
 dap_chain_datum_token_emission_t *dap_chain_mempool_datum_emission_extract(dap_chain_t *a_chain, byte_t *a_data, size_t a_size);
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index daef86b3808c1bb4ff561589b5bc7d0407fc4834..8c905b25104817dd41f2e260fb7d0b7ff207c4c8 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -1967,7 +1967,7 @@ static int s_cli_net(int argc, char **argv, char **a_str_reply)
                     l_ret = dap_global_db_set_sync(l_gdb_group_str, l_hash_hex_str, &c, sizeof(c), false );
                     DAP_DELETE(l_gdb_group_str);
                     DAP_DELETE(l_hash_hex_str);
-                    if (!l_ret) {
+                    if (l_ret) {
                         dap_cli_server_cmd_set_reply_text(a_str_reply,
                                                           "Can't save public key hash %s in database", l_hash_hex_str);
                         return -10;
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 3d0b23899956f9a6f8468280872aa800276e7ff2..ce0d6cc333e5a78141939062d0bb8e1d8b4d8a04 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -240,16 +240,16 @@ 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 **str_reply)
+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)
 {
     if(!a_node_info || !a_node_info->hdr.address.uint64) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "node addr not found");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "node addr not found");
         return false;
     }
     char *a_key = dap_chain_node_addr_to_hash_str(&a_node_info->hdr.address);
     if(!a_key)
     {
-        dap_cli_server_cmd_set_reply_text(str_reply, "can't calculate hash for addr");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "can't calculate hash for addr");
         return NULL;
     }
     //char *a_value = dap_chain_node_info_serialize(node_info, NULL);
@@ -307,7 +307,7 @@ static int node_info_add_with_reply(dap_chain_net_t * a_net, dap_chain_node_info
     // check match addr to cell or no
     /*dap_chain_node_addr_t *addr = dap_chain_node_gen_addr(&node_info->hdr.cell_id);
      if(!dap_chain_node_check_addr(&node_info->hdr.address, &node_info->hdr.cell_id)) {
-     set_reply_text(str_reply, "cell does not match addr");
+     set_reply_text(a_str_reply, "cell does not match addr");
      return -1;
      }*/
     if(a_alias_str) {
@@ -343,23 +343,23 @@ 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 **str_reply)
+        char **a_str_reply)
 {
     if(!a_node_info->hdr.address.uint64 && !alias_str) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "addr not found");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "addr not found");
         return -1;
     }
     // check, current node have this addr or no
     uint64_t l_cur_addr = dap_chain_net_get_cur_node_addr_gdb_sync(a_net->pub.name);
     if(l_cur_addr && l_cur_addr == a_node_info->hdr.address.uint64) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "current node cannot be deleted");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "current node cannot be deleted");
         return -1;
     }
 
     // find addr by alias or addr_str
     dap_chain_node_addr_t *address = s_node_info_get_addr(a_net, &a_node_info->hdr.address, alias_str);
     if(!address) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "alias not found");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "alias not found");
         return -1;
     }
     char *a_key = dap_chain_node_addr_to_hash_str(address);
@@ -380,15 +380,15 @@ static int node_info_del_with_reply(dap_chain_net_t * a_net, dap_chain_node_info
                 dap_list_free_full(list_aliases, NULL);
             }
             // set text response
-            dap_cli_server_cmd_set_reply_text(str_reply, "node deleted");
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "node deleted");
         }
         else
-            dap_cli_server_cmd_set_reply_text(str_reply, "node not deleted");
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "node not deleted");
         DAP_DELETE(a_key);
         DAP_DELETE(address);
         return l_res;
     }
-    dap_cli_server_cmd_set_reply_text(str_reply, "addr to delete can't be defined");
+    dap_cli_server_cmd_set_reply_text(a_str_reply, "addr to delete can't be defined");
     DAP_DELETE(address);
     return -1;
 }
@@ -860,7 +860,6 @@ int com_global_db(int a_argc, char ** a_argv, char **a_str_reply)
         dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key);
         dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group);
         size_t l_value_len = 0;
-        uint8_t l_flags = 0;
         bool l_is_pinned = false;
         dap_nanotime_t l_ts =0;
         uint8_t *l_value =dap_global_db_get_sync(l_group, l_key, &l_value_len, &l_is_pinned, &l_ts);
@@ -880,7 +879,7 @@ int com_global_db(int a_argc, char ** a_argv, char **a_str_reply)
                     l_hash_str = dap_chain_hash_fast_to_str_new(&l_hash);
                 }
                 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);
+                //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"
                         "hash:\t%s\n"
@@ -1389,7 +1388,7 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply)
  * @param str_reply
  * @return int
  */
-int com_traceroute(int argc, char** argv, char **str_reply)
+int com_traceroute(int argc, char** argv, char **a_str_reply)
 {
 #ifdef DAP_OS_LINUX
     const char *addr = NULL;
@@ -1399,61 +1398,61 @@ int com_traceroute(int argc, char** argv, char **str_reply)
     iputils_set_verbose();
     int res = (addr) ? traceroute_util(addr, &hops, &time_usec) : -EADDRNOTAVAIL;
     if(res >= 0) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s hops=%d time=%.1lf ms", addr, hops,
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s hops=%d time=%.1lf ms", addr, hops,
                 time_usec * 1. / 1000);
     }
     else {
-        if(str_reply) {
+        if(a_str_reply) {
             switch (-res)
             {
             case EADDRNOTAVAIL:
-                dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", (addr) ? addr : "",
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", (addr) ? addr : "",
                         (addr) ? "Name or service not known" : "Host not defined");
                 break;
             case 2:
-                dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr,
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr,
                         "Unknown traceroute module");
                 break;
             case 3:
-                dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, "first hop out of range");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "first hop out of range");
                 break;
             case 4:
-                dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr,
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr,
                         "max hops cannot be more than 255");
                 break;
             case 5:
-                dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr,
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr,
                         "no more than 10 probes per hop");
                 break;
             case 6:
-                dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr,
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr,
                         "bad wait specifications");
                 break;
             case 7:
-                dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, "too big packetlen ");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "too big packetlen ");
                 break;
             case 8:
-                dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr,
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr,
                         "IP version mismatch in addresses specified");
                 break;
             case 9:
-                dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, "bad sendtime");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "bad sendtime");
                 break;
             case 10:
-                dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, "init_ip_options");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "init_ip_options");
                 break;
             case 11:
-                dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, "calloc");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "calloc");
                 break;
             case 12:
-                dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr, "parse cmdline");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr, "parse cmdline");
                 break;
             case 13:
-                dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error: %s", addr,
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error: %s", addr,
                         "trace method's init failed");
                 break;
             default:
-                dap_cli_server_cmd_set_reply_text(str_reply, "traceroute %s error(%d) %s", addr, res,
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "traceroute %s error(%d) %s", addr, res,
                         "trace not found");
             }
         }
@@ -1461,8 +1460,8 @@ int com_traceroute(int argc, char** argv, char **str_reply)
     return res;
 #else
     UNUSED(argc);
-    UNUSED(argv);
-    dap_cli_server_cmd_set_reply_text(str_reply, "Not realized for your platform");
+    UNUSED(a_argv);
+    dap_cli_server_cmd_set_reply_text(a_str_reply, "Not realized for your platform");
     return -1;
 #endif
 }
@@ -1478,7 +1477,7 @@ int com_traceroute(int argc, char** argv, char **str_reply)
  * @return int
  * return 0 OK, -1 Err
  */
-int com_tracepath(int argc, char** argv, char **str_reply)
+int com_tracepath(int argc, char** argv, char **a_str_reply)
 {
 #ifdef DAP_OS_LINUX
     const char *addr = NULL;
@@ -1488,65 +1487,65 @@ int com_tracepath(int argc, char** argv, char **str_reply)
     iputils_set_verbose();
     int res = (addr) ? tracepath_util(addr, &hops, &time_usec) : -EADDRNOTAVAIL;
     if(res >= 0) {
-        if(str_reply)
-            dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s hops=%d time=%.1lf ms", addr, hops,
+        if(a_str_reply)
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s hops=%d time=%.1lf ms", addr, hops,
                     time_usec * 1. / 1000);
     }
     else {
-        if(str_reply) {
+        if(a_str_reply) {
             switch (-res)
             {
             case EADDRNOTAVAIL:
-                dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", (addr) ? addr : "",
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", (addr) ? addr : "",
                         (addr) ? "Name or service not known" : "Host not defined");
                 break;
             case ESOCKTNOSUPPORT:
-                dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr, "Can't create socket");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr, "Can't create socket");
                 break;
             case 2:
-                dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr,
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr,
                         "Can't setsockopt IPV6_MTU_DISCOVER");
                 break;
             case 3:
-                dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr,
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr,
                         "Can't setsockopt IPV6_RECVERR");
                 break;
             case 4:
-                dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr,
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr,
                         "Can't setsockopt IPV6_HOPLIMIT");
                 break;
             case 5:
-                dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr,
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr,
                         "Can't setsockopt IP_MTU_DISCOVER");
                 break;
             case 6:
-                dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr,
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr,
                         "Can't setsockopt IP_RECVERR");
                 break;
             case 7:
-                dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr,
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr,
                         "Can't setsockopt IP_RECVTTL");
                 break;
             case 8:
-                dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr, "malloc");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr, "malloc");
                 break;
             case 9:
-                dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr,
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr,
                         "Can't setsockopt IPV6_UNICAST_HOPS");
                 break;
             case 10:
-                dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error: %s", addr, "Can't setsockopt IP_TTL");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error: %s", addr, "Can't setsockopt IP_TTL");
                 break;
             default:
-                dap_cli_server_cmd_set_reply_text(str_reply, "tracepath %s error(%d) %s", addr, res, "trace not found");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "tracepath %s error(%d) %s", addr, res, "trace not found");
             }
         }
     }
     return res;
 #else
     UNUSED(argc);
-    UNUSED(argv);
-    dap_cli_server_cmd_set_reply_text(str_reply, "Not realized for your platform");
+    UNUSED(a_argv);
+    dap_cli_server_cmd_set_reply_text(a_str_reply, "Not realized for your platform");
     return -1;
 #endif
 }
@@ -1561,25 +1560,25 @@ int com_tracepath(int argc, char** argv, char **str_reply)
  * @param str_reply
  * @return int
  */
-int com_ping(int argc, char** argv, char **str_reply)
+int com_ping(int a_argc, char**a_argv, char **a_str_reply)
 {
 #ifdef DAP_OS_LINUX
 
     int n = 4;
-    if(argc < 2) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "Host not specified");
+    if (a_argc < 2) {
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "Host not specified");
         return -1;
     }
     const char *n_str = NULL;
     int argc_host = 1;
     int argc_start = 1;
-    argc_start = dap_cli_server_cmd_find_option_val(argv, argc_start, argc, "-n", &n_str);
+    argc_start = dap_cli_server_cmd_find_option_val(a_argv, argc_start, a_argc, "-n", &n_str);
     if(argc_start) {
         argc_host = argc_start + 1;
         n = (n_str) ? atoi(n_str) : 4;
     }
     else {
-        argc_start = dap_cli_server_cmd_find_option_val(argv, argc_start, argc, "-c", &n_str);
+        argc_start = dap_cli_server_cmd_find_option_val(a_argv, argc_start, a_argc, "-c", &n_str);
         if(argc_start) {
             argc_host = argc_start + 1;
             n = (n_str) ? atoi(n_str) : 4;
@@ -1587,39 +1586,39 @@ int com_ping(int argc, char** argv, char **str_reply)
     }
     if(n <= 1)
         n = 1;
-    const char *addr = argv[argc_host];
+    const char *addr = a_argv[argc_host];
     iputils_set_verbose();
     ping_handle_t *l_ping_handle = ping_handle_create();
     int res = (addr) ? ping_util(l_ping_handle, addr, n) : -EADDRNOTAVAIL;
     DAP_DELETE(l_ping_handle);
     if(res >= 0) {
-        if(str_reply)
-            dap_cli_server_cmd_set_reply_text(str_reply, "Ping %s time=%.1lf ms", addr, res * 1. / 1000);
+        if(a_str_reply)
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "Ping %s time=%.1lf ms", addr, res * 1. / 1000);
     }
     else {
-        if(str_reply) {
+        if(a_str_reply) {
             switch (-res)
             {
             case EDESTADDRREQ:
-                dap_cli_server_cmd_set_reply_text(str_reply, "Ping %s error: %s", addr, "Destination address required");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Ping %s error: %s", addr, "Destination address required");
                 break;
             case EADDRNOTAVAIL:
-                dap_cli_server_cmd_set_reply_text(str_reply, "Ping %s error: %s", (addr) ? addr : "",
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Ping %s error: %s", (addr) ? addr : "",
                         (addr) ? "Host not found" : "Host not defined");
                 break;
             case EPFNOSUPPORT:
-                dap_cli_server_cmd_set_reply_text(str_reply, "Ping %s error: %s", addr, "Unknown protocol family");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Ping %s error: %s", addr, "Unknown protocol family");
                 break;
             default:
-                dap_cli_server_cmd_set_reply_text(str_reply, "Ping %s error(%d)", addr, -res);
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Ping %s error(%d)", addr, -res);
             }
         }
     }
     return res;
 #else
     UNUSED(argc);
-    UNUSED(argv);
-    dap_cli_server_cmd_set_reply_text(str_reply, "Not realized for your platform");
+    UNUSED(a_argv);
+    dap_cli_server_cmd_set_reply_text(a_str_reply, "Not realized for your platform");
     return -1;
 #endif
 }
@@ -1632,7 +1631,7 @@ int com_ping(int argc, char** argv, char **str_reply)
  * @param str_reply
  * @return
  */
-int com_version(int argc, char ** argv, char **str_reply)
+int com_version(int argc, char ** argv, char **a_str_reply)
 {
     (void) argc;
     (void) argv;
@@ -1640,7 +1639,7 @@ int com_version(int argc, char ** argv, char **str_reply)
 #pragma message "[!WRN!] DAP_VERSION IS NOT DEFINED. Manual override engaged."
 #define DAP_VERSION 0.9-15
 #endif
-    dap_cli_server_cmd_set_reply_text(str_reply,
+    dap_cli_server_cmd_set_reply_text(a_str_reply,
             "%s version %s\n", dap_get_appname(), DAP_VERSION );
     return 0;
 }
@@ -1655,16 +1654,16 @@ int com_version(int argc, char ** argv, char **str_reply)
  * @param str_reply
  * @return int
  */
-int com_help(int argc, char ** argv, char **str_reply)
+int com_help(int a_argc, char **a_argv, char **a_str_reply)
 {
-    if(argc > 1) {
-        log_it(L_DEBUG, "Help for command %s", argv[1]);
-        dap_cli_cmd_t *l_cmd = dap_cli_server_cmd_find(argv[1]);
+    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]);
         if(l_cmd) {
-            dap_cli_server_cmd_set_reply_text(str_reply, "%s:\n%s", l_cmd->doc, l_cmd->doc_ex);
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s:\n%s", l_cmd->doc, l_cmd->doc_ex);
             return 0;
         } else {
-            dap_cli_server_cmd_set_reply_text(str_reply, "command \"%s\" not recognized", argv[1]);
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "command \"%s\" not recognized", a_argv[1]);
         }
         return -1;
     } else {
@@ -1677,7 +1676,7 @@ int com_help(int argc, char ** argv, char **str_reply)
                     l_cmd->name, l_cmd->doc ? l_cmd->doc : "(undocumented command)");
             l_cmd = (dap_cli_cmd_t*) l_cmd->hh.next;
         }
-        dap_cli_server_cmd_set_reply_text(str_reply,
+        dap_cli_server_cmd_set_reply_text(a_str_reply,
                 "Available commands:\n\n%s\n",
                 l_help_list_str->len ? l_help_list_str->str : "NO ANY COMMAND WERE DEFINED");
         return 0;
@@ -1695,246 +1694,7 @@ int com_help(int argc, char ** argv, char **str_reply)
  * @param str_reply
  * @return int
  */
-#if 0
-int com_tx_wallet(int argc, char ** argv, char **str_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 };
-int l_arg_index = 1, l_rc, cmd_num = CMD_NONE;
-char    l_buf[1024];
-
-
-    // find  add parameter ('alias' or 'handshake')
-    if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "new", NULL))
-        cmd_num = CMD_WALLET_NEW;
-    else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "list", NULL))
-        cmd_num = CMD_WALLET_LIST;
-    else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "info", NULL))
-        cmd_num = CMD_WALLET_INFO;
-    else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "activate", NULL))
-        cmd_num = CMD_WALLET_ACTIVATE;
-    else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "deactivate", NULL))
-        cmd_num = CMD_WALLET_DEACTIVATE;
-
-    l_arg_index++;
-
-    if(cmd_num == CMD_NONE) {
-        dap_cli_server_cmd_set_reply_text(str_reply,
-                "Format of command: wallet [new -w <wallet_name> | list | info [<-addr <addr>]|[-w <wallet_name> -net <net_name>]");
-        return -1;
-    }
-
-    dap_chain_node_addr_t address;
-    memset(&address, 0, sizeof(dap_chain_node_addr_t));
-    const char *l_addr_str = NULL, *l_wallet_name = NULL, *l_net_name = NULL, *l_sign_type_str = NULL, *l_restore_str = NULL;
-    // find wallet addr
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-addr", &l_addr_str);
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-w", &l_wallet_name);
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-net", &l_net_name);
-
-    dap_chain_net_t * l_net = l_net_name ? dap_chain_net_by_name( l_net_name) : NULL;
-
-    dap_string_t *l_string_ret = dap_string_new(NULL);
-    switch (cmd_num) {
-    // new wallet
-    case CMD_WALLET_NEW: {
-        dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-sign", &l_sign_type_str);
-        dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-restore", &l_restore_str);
-        // rewrite existing wallet
-        int l_is_force = dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-force", NULL);
-
-        if(!l_wallet_name) {
-            dap_cli_server_cmd_set_reply_text(str_reply, "Wallet name option <-w>  not defined");
-            return -1;
-        }
-        // Check if wallet name has only digits and English letter
-        if (!dap_isstralnum(l_wallet_name)){
-            dap_cli_server_cmd_set_reply_text(str_reply, "Wallet name must contains digits and aplhabetical symbols");
-            return -1;
-        }
-
-        // check wallet existence
-        if (!l_is_force) {
-            char *l_file_name = dap_strdup_printf("%s/%s.dwallet", c_wallets_path, l_wallet_name);
-            FILE *l_exists = fopen(l_file_name, "rb");
-            DAP_DELETE(l_file_name);
-            if (l_exists) {
-                dap_cli_server_cmd_set_reply_text(str_reply, "Wallet %s already exists", l_wallet_name);
-                fclose(l_exists);
-                return -1;
-            }
-        }
-
-        dap_sign_type_t l_sign_type;
-        if (!l_sign_type_str) {
-            l_sign_type.type = SIG_TYPE_DILITHIUM;
-            l_sign_type_str = dap_sign_type_to_str(l_sign_type);
-        } else {
-            l_sign_type = dap_sign_type_from_str(l_sign_type_str);
-            if (l_sign_type.type == SIG_TYPE_NULL){
-                dap_cli_server_cmd_set_reply_text(str_reply, "Unknown signature type");
-                return -1;
-            }
-        }
-
-        //
-        // Check unsupported tesla algorithm
-        //
-
-        if (l_sign_type.type == SIG_TYPE_TESLA)
-        {
-                dap_cli_server_cmd_set_reply_text(str_reply, "Tesla algorithm is no longer supported, please, use another variant");
-                return -1;
-        }
-
-        uint8_t *l_seed = NULL;
-        size_t l_seed_size = 0;
-        size_t l_restore_str_size = dap_strlen(l_restore_str);
-        if(l_restore_str && l_restore_str_size > 2 && !dap_strncmp(l_restore_str, "0x", 2)) {
-            l_seed_size = (l_restore_str_size - 2) / 2;
-            l_seed = DAP_NEW_SIZE(uint8_t, l_seed_size);
-            if(!dap_hex2bin(l_seed, l_restore_str + 2, l_restore_str_size - 2)){
-                DAP_DELETE(l_seed);
-                l_seed = NULL;
-                l_seed_size = 0;
-                dap_cli_server_cmd_set_reply_text(str_reply, "Resrote hash is invalid, wallet is not created");
-                return -1;
-            }
-        }
-        // Creates new wallet
-        dap_chain_wallet_t *l_wallet = dap_chain_wallet_create_with_seed(l_wallet_name, c_wallets_path, l_sign_type,
-                l_seed, l_seed_size);
-        dap_chain_addr_t *l_addr = l_net? dap_chain_wallet_get_addr(l_wallet,l_net->pub.id ) : NULL;
-        if(!l_wallet) {
-            dap_cli_server_cmd_set_reply_text(str_reply, "Wallet is not created besause of internal error");
-            return -1;
-        }
-        char *l_addr_str = l_addr? dap_chain_addr_to_str(l_addr) : NULL;
-        dap_string_append_printf(l_string_ret, "Wallet '%s' (type=%s) successfully created\n", l_wallet->name, l_sign_type_str);
-        if ( l_addr_str ) {
-            dap_string_append_printf(l_string_ret, "new address %s", l_addr_str);
-            DAP_DELETE(l_addr_str);
-        }
-        dap_chain_wallet_close(l_wallet);
-    }
-        break;
-        // wallet list
-    case CMD_WALLET_LIST: {
-        DIR * l_dir = opendir(c_wallets_path);
-        if(l_dir) {
-            struct dirent * l_dir_entry;
-            while((l_dir_entry = readdir(l_dir)) != NULL) {
-                const char *l_file_name = l_dir_entry->d_name;
-                size_t l_file_name_len = (l_file_name) ? strlen(l_file_name) : 0;
-                if((l_file_name_len > 8) && (strcmp(l_file_name + l_file_name_len - 8, ".dwallet") == 0)) {
-                    char *l_file_path_tmp = dap_strdup_printf("%s/%s", c_wallets_path, l_file_name);
-                    dap_chain_wallet_t *l_wallet = dap_chain_wallet_open_file(l_file_path_tmp);
-                    if(l_wallet) {
-                        dap_chain_addr_t *l_addr = l_net? dap_chain_wallet_get_addr(l_wallet, l_net->pub.id) : NULL;
-                        char *l_addr_str = dap_chain_addr_to_str(l_addr);
-                        dap_string_append_printf(l_string_ret, "\nwallet: %s\n", l_wallet->name);
-                        if (l_addr_str){
-                            dap_string_append_printf(l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-");
-                            DAP_DELETE(l_addr_str);
-                        }
-                        dap_chain_wallet_close(l_wallet);
-                    }
-                    DAP_DELETE(l_file_path_tmp);
-                }
-            }
-            closedir(l_dir);
-        }
-    }
-        break;
-
-        // wallet info
-    case CMD_WALLET_INFO: {
-        dap_chain_wallet_t *l_wallet = NULL;
-        dap_chain_addr_t *l_addr = NULL;
-
-        if(l_wallet_name) {
-            l_wallet = dap_chain_wallet_open(l_wallet_name, c_wallets_path);
-            if ( l_net )
-                l_addr = (dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet, l_net->pub.id );
-        }
-        if(!l_addr && l_addr_str)
-            l_addr = dap_chain_addr_from_str(l_addr_str);
-
-        dap_ledger_t *l_ledger = dap_chain_ledger_by_net_name((const char *) l_net_name);
-        if(!l_net_name && !l_addr ) {
-            dap_cli_server_cmd_set_reply_text(str_reply, "Subcommand info requires parameter '-net'");
-            return -1;
-        }
-        else if (! l_addr){
-            if((l_ledger = dap_chain_ledger_by_net_name(l_net_name)) == NULL) {
-                dap_cli_server_cmd_set_reply_text(str_reply, "Not found net by name '%s'", l_net_name);
-                return -1;
-            }
-        }else{
-            l_net = dap_chain_net_by_id(l_addr->net_id);
-            if (l_net){
-            l_ledger = l_net->pub.ledger;
-                l_net_name = l_net->pub.name;
-            }else{
-                dap_cli_server_cmd_set_reply_text(str_reply, "Can't find network id 0x%08X from address %s", l_addr->net_id.uint64,
-                                                  l_addr_str);
-                return -1;
-
-            }
-        }
-
-        if(l_addr) {
-            char *l_addr_str = dap_chain_addr_to_str((dap_chain_addr_t*) l_addr);
-            if(l_wallet)
-                dap_string_append_printf(l_string_ret, "wallet: %s\n", l_wallet->name);
-            dap_string_append_printf(l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-");
-            dap_string_append_printf(l_string_ret, "network: %s\n", (l_net_name ) ? l_net_name : "-");
-
-            size_t l_l_addr_tokens_size = 0;
-            char **l_l_addr_tokens = NULL;
-            dap_chain_ledger_addr_get_token_ticker_all(l_ledger, l_addr, &l_l_addr_tokens, &l_l_addr_tokens_size);
-            if(l_l_addr_tokens_size > 0)
-                dap_string_append_printf(l_string_ret, "balance:\n");
-            else
-                dap_string_append_printf(l_string_ret, "balance: 0");
-
-            for(size_t i = 0; i < l_l_addr_tokens_size; i++) {
-                if(l_l_addr_tokens[i]) {
-                    uint256_t l_balance = dap_chain_ledger_calc_balance(l_ledger, l_addr, l_l_addr_tokens[i]);
-                    char *l_balance_coins = dap_chain_balance_to_coins(l_balance);
-                    char *l_balance_datoshi = dap_chain_balance_print(l_balance);
-                    dap_string_append_printf(l_string_ret, "\t%s (%s) %s\n", l_balance_coins,
-                            l_balance_datoshi, l_l_addr_tokens[i]);
-                    if(i < l_l_addr_tokens_size - 1)
-                        dap_string_append_printf(l_string_ret, "\n");
-                    DAP_DELETE(l_balance_coins);
-                    DAP_DELETE(l_balance_datoshi);
-
-                }
-                DAP_DELETE(l_l_addr_tokens[i]);
-            }
-            DAP_DELETE(l_l_addr_tokens);
-            DAP_DELETE(l_addr_str);
-            if(l_wallet)
-                dap_chain_wallet_close(l_wallet);
-        }
-        else {
-            if(l_wallet)
-                dap_chain_wallet_close(l_wallet);
-            dap_string_free(l_string_ret, true);
-            dap_cli_server_cmd_set_reply_text(str_reply, "Wallet not found");
-            return -1;
-        }
-    }
-        break;
-    }
-
-    *str_reply = dap_string_free(l_string_ret, false);
-    return 0;
-}
-#endif
-
-int com_tx_wallet(int argc, char ** argv, char **str_reply)
+int com_tx_wallet(int a_argc, char **a_argv, char **a_str_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 };
@@ -1943,21 +1703,21 @@ char    l_buf[1024];
 
 
     // find  add parameter ('alias' or 'handshake')
-    if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "new", NULL))
+    if(dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, min(a_argc, l_arg_index + 1), "new", NULL))
         cmd_num = CMD_WALLET_NEW;
-    else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "list", NULL))
+    else if(dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, min(a_argc, l_arg_index + 1), "list", NULL))
         cmd_num = CMD_WALLET_LIST;
-    else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "info", NULL))
+    else if(dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, min(a_argc, l_arg_index + 1), "info", NULL))
         cmd_num = CMD_WALLET_INFO;
-    else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "activate", NULL))
+    else if(dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, min(a_argc, l_arg_index + 1), "activate", NULL))
         cmd_num = CMD_WALLET_ACTIVATE;
-    else if(dap_cli_server_cmd_find_option_val(argv, l_arg_index, min(argc, l_arg_index + 1), "deactivate", NULL))
+    else if(dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, min(a_argc, l_arg_index + 1), "deactivate", NULL))
         cmd_num = CMD_WALLET_DEACTIVATE;
 
     l_arg_index++;
 
     if(cmd_num == CMD_NONE) {
-        dap_cli_server_cmd_set_reply_text (str_reply,
+        dap_cli_server_cmd_set_reply_text (a_str_reply,
                 "Format of command: wallet {new -w <wallet_name> | list | info [-addr <addr>]|[-w <wallet_name> -net <net_name>]}");
         return -1;
     }
@@ -1966,30 +1726,30 @@ char    l_buf[1024];
             *l_pass_str = NULL, *l_ttl_str = NULL;
 
     // find wallet addr
-    dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-addr", &l_addr_str);
-    dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-w", &l_wallet_name);
-    dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-net", &l_net_name);
+    dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-addr", &l_addr_str);
+    dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-w", &l_wallet_name);
+    dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-net", &l_net_name);
 
 
 
     dap_chain_net_t * l_net = l_net_name ? dap_chain_net_by_name( l_net_name) : NULL;
 
-    dap_string_t *l_string_ret = dap_string_new(NULL);
+    dap_string_t *l_l_string_ret = dap_string_new(NULL);
 
 
     switch (cmd_num)
     {
         case CMD_WALLET_ACTIVATE:
         case CMD_WALLET_DEACTIVATE:
-            dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-password", &l_pass_str);
-            dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-ttl", &l_ttl_str);
+            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-password", &l_pass_str);
+            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-ttl", &l_ttl_str);
 
 
             if( !l_wallet_name )
-                return  dap_cli_server_cmd_set_reply_text(str_reply, "Wallet name option <-w>  not defined"), -EINVAL;
+                return  dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet name option <-w>  not defined"), -EINVAL;
 
             if( !l_pass_str )
-                return  dap_cli_server_cmd_set_reply_text(str_reply, "Wallet password option <-password>  not defined"), -EINVAL;
+                return  dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet password option <-password>  not defined"), -EINVAL;
 
             if ( l_ttl_str )
                 l_rc = strtoul(l_ttl_str, NULL, 10);
@@ -2001,7 +1761,7 @@ char    l_buf[1024];
             else    l_rc = dap_chain_wallet_deactivate (l_wallet_name, strlen(l_wallet_name), l_pass_str, strlen(l_pass_str) );
 
             if ( !l_rc )
-                    dap_string_append_printf(l_string_ret, "Wallet: %s is %sactivated\n",
+                    dap_string_append_printf(l_l_string_ret, "Wallet: %s is %sactivated\n",
                         l_wallet_name, cmd_num == CMD_WALLET_ACTIVATE ? "" : "de");
             else
             {
@@ -2021,7 +1781,7 @@ char    l_buf[1024];
                         break;
                 }
 
-                dap_string_append_printf(l_string_ret, "Wallet: %s  %sactivation error, errno=%d (%s)\n",
+                dap_string_append_printf(l_l_string_ret, "Wallet: %s  %sactivation error, errno=%d (%s)\n",
                         l_wallet_name, cmd_num == CMD_WALLET_ACTIVATE ? "" : "de", l_rc, l_buf );
             }
 
@@ -2030,19 +1790,19 @@ char    l_buf[1024];
 
         // new wallet
         case CMD_WALLET_NEW: {
-            dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-password", &l_pass_str);
-            dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-sign", &l_sign_type_str);
-            dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-restore", &l_restore_str);
+            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-password", &l_pass_str);
+            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-sign", &l_sign_type_str);
+            dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-restore", &l_restore_str);
             // rewrite existing wallet
-            int l_is_force = dap_cli_server_cmd_find_option_val(argv, l_arg_index, argc, "-force", NULL);
+            int l_is_force = dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-force", NULL);
 
             if(!l_wallet_name) {
-                dap_cli_server_cmd_set_reply_text(str_reply, "Wallet name option <-w>  not defined");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet name option <-w>  not defined");
                 return -1;
             }
             // Check if wallet name has only digits and English letter
             if (!dap_isstralnum(l_wallet_name)){
-                dap_cli_server_cmd_set_reply_text(str_reply, "Wallet name must contains digits and aplhabetical symbols");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet name must contains digits and aplhabetical symbols");
                 return -1;
             }
 
@@ -2052,7 +1812,7 @@ char    l_buf[1024];
                 FILE *l_exists = fopen(l_file_name, "rb");
                 DAP_DELETE(l_file_name);
                 if (l_exists) {
-                    dap_cli_server_cmd_set_reply_text(str_reply, "Wallet %s already exists", l_wallet_name);
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet %s already exists", l_wallet_name);
                     fclose(l_exists);
                     return -1;
                 }
@@ -2065,7 +1825,7 @@ char    l_buf[1024];
             } else {
                 l_sign_type = dap_sign_type_from_str(l_sign_type_str);
                 if (l_sign_type.type == SIG_TYPE_NULL){
-                    dap_cli_server_cmd_set_reply_text(str_reply, "Unknown signature type");
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Unknown signature type");
                     return -1;
                 }
             }
@@ -2075,7 +1835,7 @@ char    l_buf[1024];
             //
 
             if (l_sign_type.type == SIG_TYPE_TESLA)
-                return  dap_cli_server_cmd_set_reply_text(str_reply, "Tesla algorithm is no longer supported, please, use another variant"), -1;
+                return  dap_cli_server_cmd_set_reply_text(a_str_reply, "Tesla algorithm is no longer supported, please, use another variant"), -1;
 
             uint8_t *l_seed = NULL;
             size_t l_seed_size = 0, l_restore_str_size = dap_strlen(l_restore_str);
@@ -2087,7 +1847,7 @@ char    l_buf[1024];
                     DAP_DELETE(l_seed);
                     l_seed = NULL;
                     l_seed_size = 0;
-                    dap_cli_server_cmd_set_reply_text(str_reply, "Restored hash is invalid, wallet is not created");
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Restored hash is invalid, wallet is not created");
                     return -1;
                 }
             }
@@ -2096,14 +1856,14 @@ char    l_buf[1024];
                     l_seed, l_seed_size, l_pass_str);
 
             if (!l_wallet)
-                return  dap_cli_server_cmd_set_reply_text(str_reply, "Wallet is not created because of internal error"), -1;
+                return  dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet is not created because of internal error"), -1;
 
             dap_chain_addr_t *l_addr = l_net? dap_chain_wallet_get_addr(l_wallet,l_net->pub.id ) : NULL;
 
             char *l_addr_str = l_addr? dap_chain_addr_to_str(l_addr) : NULL;
-            dap_string_append_printf(l_string_ret, "Wallet: %s (type=%s) successfully created\n", l_wallet->name, l_sign_type_str);
+            dap_string_append_printf(l_l_string_ret, "Wallet: %s (type=%s) successfully created\n", l_wallet->name, l_sign_type_str);
             if ( l_addr_str ) {
-                dap_string_append_printf(l_string_ret, "new address %s", l_addr_str);
+                dap_string_append_printf(l_l_string_ret, "new address %s", l_addr_str);
                 DAP_DELETE(l_addr_str);
             }
             dap_chain_wallet_close(l_wallet);
@@ -2136,18 +1896,18 @@ char    l_buf[1024];
                             dap_chain_addr_t *l_addr = l_net? dap_chain_wallet_get_addr(l_wallet, l_net->pub.id) : NULL;
                             char *l_addr_str = dap_chain_addr_to_str(l_addr);
 
-                            dap_string_append_printf(l_string_ret, "Wallet: %s%s\n", l_wallet->name,
+                            dap_string_append_printf(l_l_string_ret, "Wallet: %s%s\n", l_wallet->name,
                                 (l_wallet->flags & DAP_WALLET$M_FL_ACTIVE) ? " (Active)" : "");
 
                             if (l_addr_str)
                             {
-                                dap_string_append_printf(l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-");
+                                dap_string_append_printf(l_l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-");
                                 DAP_DELETE(l_addr_str);
                             }
 
                             dap_chain_wallet_close(l_wallet);
 
-                        } else dap_string_append_printf(l_string_ret, "Wallet: %.*s (non-Active)\n", (int) l_file_name_len - 8, l_file_name);
+                        } else dap_string_append_printf(l_l_string_ret, "Wallet: %.*s (non-Active)\n", (int) l_file_name_len - 8, l_file_name);
                     }
                 }
                 closedir(l_dir);
@@ -2170,12 +1930,12 @@ char    l_buf[1024];
 
             dap_ledger_t *l_ledger = dap_chain_ledger_by_net_name((const char *) l_net_name);
             if(!l_net_name && !l_addr ) {
-                dap_cli_server_cmd_set_reply_text(str_reply, "Subcommand info requires parameter '-net'");
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Subcommand info requires parameter '-net'");
                 return -1;
             }
             else if (! l_addr){
                 if((l_ledger = dap_chain_ledger_by_net_name(l_net_name)) == NULL) {
-                    dap_cli_server_cmd_set_reply_text(str_reply, "Not found net by name '%s'", l_net_name);
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Not found net by name '%s'", l_net_name);
                     return -1;
                 }
             }else{
@@ -2184,7 +1944,7 @@ 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(str_reply, "Can't find network id 0x%08X from address %s", l_addr->net_id.uint64,
+                    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);
                     return -1;
 
@@ -2194,27 +1954,27 @@ char    l_buf[1024];
             if(l_addr) {
                 char *l_addr_str = dap_chain_addr_to_str((dap_chain_addr_t*) l_addr);
                 if(l_wallet)
-                    dap_string_append_printf(l_string_ret, "wallet: %s\n", l_wallet->name);
-                dap_string_append_printf(l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-");
-                dap_string_append_printf(l_string_ret, "network: %s\n", (l_net_name ) ? l_net_name : "-");
+                    dap_string_append_printf(l_l_string_ret, "wallet: %s\n", l_wallet->name);
+                dap_string_append_printf(l_l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-");
+                dap_string_append_printf(l_l_string_ret, "network: %s\n", (l_net_name ) ? l_net_name : "-");
 
                 size_t l_l_addr_tokens_size = 0;
                 char **l_l_addr_tokens = NULL;
                 dap_chain_ledger_addr_get_token_ticker_all(l_ledger, l_addr, &l_l_addr_tokens, &l_l_addr_tokens_size);
                 if(l_l_addr_tokens_size > 0)
-                    dap_string_append_printf(l_string_ret, "balance:\n");
+                    dap_string_append_printf(l_l_string_ret, "balance:\n");
                 else
-                    dap_string_append_printf(l_string_ret, "balance: 0");
+                    dap_string_append_printf(l_l_string_ret, "balance: 0");
 
                 for(size_t i = 0; i < l_l_addr_tokens_size; i++) {
                     if(l_l_addr_tokens[i]) {
                         uint256_t l_balance = dap_chain_ledger_calc_balance(l_ledger, l_addr, l_l_addr_tokens[i]);
                         char *l_balance_coins = dap_chain_balance_to_coins(l_balance);
                         char *l_balance_datoshi = dap_chain_balance_print(l_balance);
-                        dap_string_append_printf(l_string_ret, "\t%s (%s) %s\n", l_balance_coins,
+                        dap_string_append_printf(l_l_string_ret, "\t%s (%s) %s\n", l_balance_coins,
                                 l_balance_datoshi, l_l_addr_tokens[i]);
                         if(i < l_l_addr_tokens_size - 1)
-                            dap_string_append_printf(l_string_ret, "\n");
+                            dap_string_append_printf(l_l_string_ret, "\n");
                         DAP_DELETE(l_balance_coins);
                         DAP_DELETE(l_balance_datoshi);
 
@@ -2230,15 +1990,15 @@ char    l_buf[1024];
                 if(l_wallet)
                     dap_chain_wallet_close(l_wallet);
 
-                dap_string_free(l_string_ret, true);
-                dap_cli_server_cmd_set_reply_text(str_reply, "Wallet not found");
+                dap_string_free(l_l_string_ret, true);
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Wallet not found");
                 return -1;
             }
         }
         break;
     }
 
-    *str_reply = dap_string_free(l_string_ret, false);
+    *a_str_reply = dap_string_free(l_l_string_ret, false);
     return 0;
 }
 
@@ -2255,29 +2015,29 @@ char    l_buf[1024];
  * @param l_net
  * @return
  */
-int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int argc, char ** argv, char ** a_str_reply,
-        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,
+        dap_chain_t **a_chain, dap_chain_net_t **a_net)
 {
     const char * l_chain_str = NULL;
     const char * l_net_str = NULL;
 
     // Net name
     if(a_net)
-        dap_cli_server_cmd_find_option_val(argv, *a_arg_index, argc, "-net", &l_net_str);
+        dap_cli_server_cmd_find_option_val(a_argv, *a_arg_index, a_argc, "-net", &l_net_str);
     else
         return -100;
 
     // Select network
     if(!l_net_str) {
-        dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter '-net'", argv[0]);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter '-net'", a_argv[0]);
         return -101;
     }
 
     if((*a_net = dap_chain_net_by_name(l_net_str)) == NULL) { // Can't find such network
-        dap_cli_server_cmd_set_reply_text(a_str_reply, "%s can't find network \"%s\"", argv[0], l_net_str);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "%s can't find network \"%s\"", a_argv[0], l_net_str);
         char l_str_to_reply_chain[500] = {0};
         char *l_str_to_reply = NULL;
-        dap_sprintf(l_str_to_reply_chain, "%s can't find network \"%s\"\n", argv[0], l_net_str);
+        dap_sprintf(l_str_to_reply_chain, "%s can't find network \"%s\"\n", a_argv[0], l_net_str);
         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);
@@ -2287,7 +2047,7 @@ int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int argc, ch
 
     // Chain name
     if(a_chain) {
-        dap_cli_server_cmd_find_option_val(argv, *a_arg_index, argc, "-chain", &l_chain_str);
+        dap_cli_server_cmd_find_option_val(a_argv, *a_arg_index, a_argc, "-chain", &l_chain_str);
 
         // Select chain
         if(l_chain_str) {
@@ -2295,7 +2055,7 @@ int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int argc, ch
                 char l_str_to_reply_chain[500] = {0};
                 char *l_str_to_reply = NULL;
                 dap_sprintf(l_str_to_reply_chain, "%s requires parameter '-chain' to be valid chain name in chain net %s. Current chain %s is not valid\n",
-                        argv[0], l_net_str, l_chain_str);
+                        a_argv[0], l_net_str, l_chain_str);
                 l_str_to_reply = dap_strcat2(l_str_to_reply,l_str_to_reply_chain);
                 dap_chain_t * l_chain;
                 dap_chain_net_t * l_chain_net = *a_net;
@@ -2309,17 +2069,17 @@ int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int argc, ch
                 return -103;
             }
         }
-        else if (	!strcmp(argv[0], "token_decl")
-        ||			!strcmp(argv[0], "token_decl_sign")) {
+        else if (	!strcmp(a_argv[0], "token_decl")
+        ||			!strcmp(a_argv[0], "token_decl_sign")) {
             if (	(*a_chain = dap_chain_net_get_default_chain_by_chain_type(*a_net, CHAIN_TYPE_TOKEN)) == NULL )
             {
                 dap_cli_server_cmd_set_reply_text(a_str_reply,
                                                   "%s requires parameter '-chain' or set default datum type in chain configuration file",
-                                                  argv[0]);
+                                                  a_argv[0]);
                 return -105;
             }
         } else {
-            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter '-chain'", argv[0]);
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter '-chain'", a_argv[0]);
             return -104;
         }
     }
@@ -2377,12 +2137,12 @@ 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 argc, char ** argv, char ** a_str_reply)
+int com_token_decl_sign(int a_argc, char **a_argv, char ** a_str_reply)
 {
     int arg_index = 1;
 
     const char * l_hash_out_type = NULL;
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-H", &l_hash_out_type);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-H", &l_hash_out_type);
     if(!l_hash_out_type)
         l_hash_out_type = "hex";
     if(dap_strcmp(l_hash_out_type,"hex") && dap_strcmp(l_hash_out_type,"base58")) {
@@ -2392,7 +2152,7 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply)
 
     const char * l_datum_hash_str = NULL;
     // Chain name
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-datum", &l_datum_hash_str);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-datum", &l_datum_hash_str);
     if(l_datum_hash_str) {
         char * l_datum_hash_hex_str = NULL;
         char * l_datum_hash_base58_str = NULL;
@@ -2402,7 +2162,7 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply)
         dap_chain_t * l_chain = NULL;
         dap_chain_net_t * l_net = NULL;
 
-        dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, argc, argv, a_str_reply, &l_chain, &l_net);
+        dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, a_argc, a_argv, a_str_reply, &l_chain, &l_net);
         if(!l_net)
             return -1;
         else {
@@ -2413,7 +2173,7 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply)
         }
 
         // Certificates thats will be used to sign currend datum token
-        dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-certs", &l_certs_str);
+        dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-certs", &l_certs_str);
 
         // Load certs lists
         if (l_certs_str)
@@ -2676,7 +2436,7 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
  * @param str_reply
  * @return
  */
-int com_mempool_list(int argc, char ** argv, char ** a_str_reply)
+int com_mempool_list(int a_argc, char **a_argv, char **a_str_reply)
 {
     int arg_index = 1;
     dap_chain_t * l_chain = NULL;
@@ -2684,9 +2444,9 @@ int com_mempool_list(int argc, char ** argv, char ** a_str_reply)
     const char *l_addr_base58 = NULL;
 
     const char * l_hash_out_type = "hex";
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-H", &l_hash_out_type);
-    dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, argc, argv, a_str_reply, &l_chain, &l_net);
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-addr", &l_addr_base58);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-H", &l_hash_out_type);
+    dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, a_argc, a_argv, a_str_reply, &l_chain, &l_net);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-addr", &l_addr_base58);
     if(!l_net)
         return -1;
     else {
@@ -2715,17 +2475,17 @@ int com_mempool_list(int argc, char ** argv, char ** a_str_reply)
  * @param a_str_reply
  * @return
  */
-int com_mempool_delete(int argc, char ** argv, char ** a_str_reply)
+int com_mempool_delete(int a_argc, char **a_argv, char **a_str_reply)
 {
     int arg_index = 1;
     dap_chain_t * l_chain = NULL;
     dap_chain_net_t * l_net = NULL;
 
-    if(dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, argc, argv, a_str_reply, &l_chain, &l_net) != 0) {
+    if(dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, a_argc, a_argv, a_str_reply, &l_chain, &l_net) != 0) {
         return -1;
     }
     const char * l_datum_hash_str = NULL;
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-datum", &l_datum_hash_str);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-datum", &l_datum_hash_str);
     if (l_datum_hash_str) {
         char *l_datum_hash_hex_str = NULL;
         // datum hash may be in hex or base58 format
@@ -2746,7 +2506,7 @@ int com_mempool_delete(int argc, char ** argv, char ** a_str_reply)
         DAP_DELETE(l_data_tmp);
         DAP_DEL_Z(l_datum_hash_hex_str);
     } else {
-        dap_cli_server_cmd_set_reply_text(a_str_reply, "Error! %s requires -datum <datum hash> option", argv[0]);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "Error! %s requires -datum <datum hash> option", a_argv[0]);
         return -3;
     }
 }
@@ -2759,17 +2519,17 @@ int com_mempool_delete(int argc, char ** argv, char ** a_str_reply)
  * @param a_str_reply
  * @return
  */
-int com_mempool_check(int argc, char ** argv, char ** a_str_reply)
+int com_mempool_check(int a_argc, char **a_argv, char ** a_str_reply)
 {
     int arg_index = 1;
     dap_chain_t * l_chain = NULL;
     dap_chain_net_t * l_net = NULL;
 
-    if (dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, argc, argv, a_str_reply, &l_chain, &l_net))
+    if (dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, a_argc, a_argv, a_str_reply, &l_chain, &l_net))
         return -1;
 
     const char * l_datum_hash_str = NULL;
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-datum", &l_datum_hash_str);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-datum", &l_datum_hash_str);
     if(l_datum_hash_str) {
         char *l_datum_hash_hex_str = NULL;
         // datum hash may be in hex or base58 format
@@ -2789,7 +2549,7 @@ int com_mempool_check(int argc, char ** argv, char ** a_str_reply)
         DAP_DELETE(l_data_tmp);
         DAP_DEL_Z(l_datum_hash_hex_str);
     } else {
-        dap_cli_server_cmd_set_reply_text(a_str_reply, "Error! %s requires -datum <datum hash> option", argv[0]);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "Error! %s requires -datum <datum hash> option", a_argv[0]);
         return -3;
     }
 }
@@ -2803,14 +2563,14 @@ int com_mempool_check(int argc, char ** argv, char ** a_str_reply)
  * @param a_str_reply
  * @return
  */
-int com_mempool_proc(int argc, char ** argv, char ** a_str_reply)
+int com_mempool_proc(int a_argc, char **a_argv, char **a_str_reply)
 {
     int arg_index = 1;
     dap_chain_t * l_chain = NULL;
     dap_chain_net_t * l_net = NULL;
 
     const char * l_hash_out_type = NULL;
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-H", &l_hash_out_type);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-H", &l_hash_out_type);
     if(!l_hash_out_type)
         l_hash_out_type = "hex";
     if(dap_strcmp(l_hash_out_type,"hex") && dap_strcmp(l_hash_out_type,"base58")) {
@@ -2818,7 +2578,7 @@ int com_mempool_proc(int argc, char ** argv, char ** a_str_reply)
         return -1;
     }
 
-    dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, argc, argv, a_str_reply, &l_chain, &l_net);
+    dap_chain_node_cli_cmd_values_parse_net_chain(&arg_index, a_argc, a_argv, a_str_reply, &l_chain, &l_net);
     if (!l_net || !l_chain)
         return -1;
 
@@ -2839,7 +2599,7 @@ int com_mempool_proc(int argc, char ** argv, char ** a_str_reply)
 
     const char * l_datum_hash_str = NULL;
     int ret = 0;
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-datum", &l_datum_hash_str);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-datum", &l_datum_hash_str);
     if(l_datum_hash_str) {
         char * l_gdb_group_mempool = dap_chain_net_get_gdb_group_mempool_new(l_chain);
         dap_string_t * l_str_tmp = dap_string_new(NULL);
@@ -2911,7 +2671,7 @@ int com_mempool_proc(int argc, char ** argv, char ** a_str_reply)
         DAP_DELETE(l_datum_hash_hex_str);
         DAP_DELETE(l_datum_hash_base58_str);
     } else {
-        dap_cli_server_cmd_set_reply_text(a_str_reply, "Error! %s requires -datum <datum hash> option", argv[0]);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "Error! %s requires -datum <datum hash> option", a_argv[0]);
         ret = -5;
     }
     return  ret;
@@ -3330,7 +3090,6 @@ static int s_token_decl_check_params(int a_argc, char **a_argv, char **a_str_rep
  */
 int com_token_decl(int a_argc, char ** a_argv, char ** a_str_reply)
 {
-    int l_arg_index = 1;
     const char * l_ticker = NULL;
     uint256_t l_total_supply = {}; // 256
     uint16_t l_signs_emission = 0;
@@ -3655,7 +3414,7 @@ int com_token_update(int a_argc, char ** a_argv, char ** a_str_reply)
         return -10;
     }
     int l_ret = 0;
-    bool l_placed = dap_global_db_set_sync(l_gdb_group_mempool, l_key_str, (uint8_t *)l_datum, l_datum_size, false);
+    bool l_placed = !dap_global_db_set_sync(l_gdb_group_mempool, l_key_str, (uint8_t *)l_datum, l_datum_size, false);
     dap_cli_server_cmd_set_reply_text(a_str_reply, "Datum %s with 256bit token %s is%s placed in datum pool",
                                       l_key_str_out, l_ticker, l_placed ? "" : " not");
     //additional checking for incorrect key format
@@ -3679,11 +3438,11 @@ int com_token_update(int a_argc, char ** a_argv, char ** a_str_reply)
  * @param str_reply
  * @return
  */
-int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
+int com_token_emit(int a_argc, char **a_argv, char **a_str_reply)
 {
     int arg_index = 1;
     const char *str_tmp = NULL;
-    char *str_reply_tmp = NULL;
+    char *l_str_reply_tmp = NULL;
     uint256_t l_emission_value = {};
 
     const char * l_ticker = NULL;
@@ -3692,7 +3451,7 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
 
     const char * l_emission_hash_str = NULL;
     const char * l_emission_hash_str_remove = NULL;
-    dap_chain_hash_fast_t l_emission_hash, l_datum_emission_hash;
+    dap_chain_hash_fast_t l_emission_hash;
     dap_chain_datum_token_emission_t *l_emission = NULL;
     size_t l_emission_size;
 
@@ -3862,52 +3621,38 @@ int com_token_emit(int a_argc, char ** a_argv, char ** a_str_reply)
             l_emission_size);
     // Delete token emission
     DAP_DEL_Z(l_emission);
-
-    char *l_gdb_group_mempool_emission = dap_chain_net_get_gdb_group_mempool_new(l_chain_emission);
-
-    size_t l_datum_emission_size = sizeof(l_datum_emission->header) + l_datum_emission->header.data_size;
-
-    // Calc datum emission's hash
-    dap_hash_fast(l_datum_emission->data, l_datum_emission->header.data_size,
-                  &l_datum_emission_hash);
-    // return 0 (false) if strings are equivalent
-    bool l_hex_format = dap_strcmp(l_hash_out_type, "hex") ? false
-                                                           : true;
-    l_emission_hash_str = l_hex_format ? dap_chain_hash_fast_to_str_new(&l_datum_emission_hash)
-                                       : dap_enc_base58_encode_hash_to_str(&l_datum_emission_hash);
-    // Add token emission datum to mempool
-
-    bool l_placed = dap_global_db_set_sync( l_gdb_group_mempool_emission, l_emission_hash_str,
-                                       l_datum_emission, l_datum_emission_size, true) == 0;
-
-    str_reply_tmp = dap_strdup_printf("Datum %s with emission is%s placed in datum pool",
-                                      l_emission_hash_str, l_placed ? "" : " not");
+    l_emission_hash_str = dap_chain_mempool_datum_add(l_datum_emission, l_chain_emission, l_hash_out_type);
+    if (l_emission_hash_str)
+        l_str_reply_tmp = dap_strdup_printf("Datum %s with 256bit emission is placed in datum pool", l_emission_hash_str);
+    else
+        l_str_reply_tmp = dap_strdup("Can't place emission datum in mempool, examine log files");
     DAP_DEL_Z(l_emission_hash_str);
-    if (!l_placed) {
-        DAP_DEL_Z(l_datum_emission);
-        DAP_DEL_Z(l_certs);
-        return -1;
-    }
+    DAP_DEL_Z(l_datum_emission);
+    DAP_DEL_Z(l_certs);
+
     //remove previous emission datum from mempool if have new signed emission datum
-    if (l_emission_hash_str_remove)
+    if (l_emission_hash_str_remove) {
+        char *l_gdb_group_mempool_emission = dap_chain_net_get_gdb_group_mempool_new(l_chain_emission);
         dap_global_db_del_sync(l_gdb_group_mempool_emission, l_emission_hash_str_remove);
+        DAP_DEL_Z(l_gdb_group_mempool_emission);
+    }
 
     if(l_chain_base_tx) {
-        dap_chain_hash_fast_t *l_datum_tx_hash = dap_chain_mempool_base_tx_create(l_chain_base_tx, &l_emission_hash,
-                                                                l_chain_emission->id, l_emission_value, l_ticker,
-                                                                l_addr, l_certs, l_certs_size);
-        char *l_tx_hash_str = l_hex_format ? dap_chain_hash_fast_to_str_new(l_datum_tx_hash)
-                                           : dap_enc_base58_encode_hash_to_str(l_datum_tx_hash);
-        dap_cli_server_cmd_set_reply_text(a_str_reply, "%s\nDatum %s with 256bit TX is%s placed in datum pool",
-                                          str_reply_tmp, l_tx_hash_str, l_placed ? "" : " not");
+        char *l_tx_hash_str = dap_chain_mempool_base_tx_create(l_chain_base_tx, &l_emission_hash,
+                                                               l_chain_emission->id, l_emission_value, l_ticker,
+                                                               l_addr, l_certs, l_certs_size, l_hash_out_type);
+        if (l_tx_hash_str)
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s\nDatum %s with 256bit TX is placed in datum pool",
+                                                    l_str_reply_tmp, l_tx_hash_str);
+        else
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "%s\nCan't place TX datum in mempool, examine log files",
+                                                    l_str_reply_tmp);
         DAP_DEL_Z(l_tx_hash_str);
-        DAP_DEL_Z(str_reply_tmp);
     } 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, str_reply_tmp);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_reply_tmp);
     }
-    DAP_DEL_Z(str_reply_tmp);
+    DAP_DEL_Z(l_str_reply_tmp);
     DAP_DEL_Z(l_addr);
-    DAP_DEL_Z(l_certs);
     return 0;
 }
 
@@ -4037,36 +3782,19 @@ int com_tx_cond_create(int a_argc, char ** a_argv, char **a_str_reply)
 
     uint256_t l_value_per_unit_max = {};
     uint256_t l_value_fee = {};
-    dap_chain_hash_fast_t *l_tx_cond_hash = dap_chain_mempool_tx_create_cond(l_net, l_key_from, l_key_cond, l_token_ticker,
-                                        l_value_datoshi, l_value_per_unit_max, l_price_unit, l_srv_uid, l_value_fee, NULL, 0);
+    char *l_hash_str = dap_chain_mempool_tx_create_cond(l_net, l_key_from, l_key_cond, l_token_ticker,
+                                                        l_value_datoshi, l_value_per_unit_max, l_price_unit,
+                                                        l_srv_uid, l_value_fee, NULL, 0, l_hash_out_type);
     dap_chain_wallet_close(l_wallet);
     DAP_DELETE(l_key_cond);
 
-    char *l_hash_str;
-    if(!dap_strcmp(l_hash_out_type, "hex")) {
-        l_hash_str = l_tx_cond_hash ? dap_chain_hash_fast_to_str_new(l_tx_cond_hash) : NULL;
-    }
-    else {
-        l_hash_str = l_tx_cond_hash ? dap_enc_base58_encode_hash_to_str(l_tx_cond_hash) : NULL;
-    }
-
-    /*dap_cli_server_cmd_set_reply_text(str_reply, "cond create=%s\n",
-            (res == 0) ? "Ok" : (res == -2) ? "False, not enough funds for service fee" : "False");
-    return res;*/
-
-    int l_ret;
-    // example: cond create succefully hash=0x4AA303EB7C10430C0AAC42F399D265BC7DD09E3983E088E02B8CED38DA22EDA9
-    if(l_hash_str){
-        dap_cli_server_cmd_set_reply_text(a_str_reply, "cond create succefully hash=%s\n", l_hash_str);
-        l_ret = 0;
-    }
-    else{
-        dap_cli_server_cmd_set_reply_text(a_str_reply, "cond can't create\n");
-        l_ret = -1;
+    if (l_hash_str) {
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "Conditional 256bit TX created succefully, hash=%s\n", l_hash_str);
+        DAP_DELETE(l_hash_str);
+        return 0;
     }
-
-    DAP_DELETE(l_hash_str);
-    return  l_ret;
+    dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't create conditional 256bit TX\n");
+    return -1;
 }
 
 /**
@@ -4150,7 +3878,8 @@ int com_mempool_add_ca(int a_argc,  char ** a_argv, char ** a_str_reply)
     }
 
     // Finaly add datum to mempool
-    char *l_hash_str = dap_chain_mempool_datum_add(l_datum,l_chain);
+    char *l_hash_str = dap_chain_mempool_datum_add(l_datum, l_chain, "hex");
+    DAP_DELETE(l_datum);
     if (l_hash_str) {
         dap_cli_server_cmd_set_reply_text(a_str_reply,
                 "Datum %s was successfully placed to mempool", l_hash_str);
@@ -4159,7 +3888,6 @@ int com_mempool_add_ca(int a_argc,  char ** a_argv, char ** a_str_reply)
     } else {
         dap_cli_server_cmd_set_reply_text(a_str_reply,
                 "Can't place certificate \"%s\" to mempool", l_ca_name);
-        DAP_DELETE( l_datum );
         return -8;
     }
 }
@@ -4246,7 +3974,8 @@ int com_chain_ca_pub( int a_argc,  char ** a_argv, char ** a_str_reply)
     }
 
     // Finaly add datum to mempool
-    char *l_hash_str = dap_chain_mempool_datum_add(l_datum,l_chain);
+    char *l_hash_str = dap_chain_mempool_datum_add(l_datum, l_chain, "hex");
+    DAP_DELETE(l_datum);
     if (l_hash_str) {
         dap_cli_server_cmd_set_reply_text(a_str_reply,
                 "Datum %s was successfully placed to mempool", l_hash_str);
@@ -4255,7 +3984,6 @@ int com_chain_ca_pub( int a_argc,  char ** a_argv, char ** a_str_reply)
     } else {
         dap_cli_server_cmd_set_reply_text(a_str_reply,
                 "Can't place certificate \"%s\" to mempool", l_ca_name);
-        DAP_DELETE( l_datum );
         return -8;
     }
 }
@@ -4339,7 +4067,6 @@ static bool s_json_get_srv_uid(struct json_object *a_json, const char *a_key_ser
 
 static dap_chain_wallet_t* s_json_get_wallet(struct json_object *a_json, const char *a_key)
 {
-    dap_enc_key_t *l_enc_key = NULL;
     // From wallet
     const char *l_wallet_str = s_json_get_text(a_json, a_key);
     if(l_wallet_str) {
@@ -4458,7 +4185,7 @@ int com_tx_create_json(int a_argc, char ** a_argv, char **a_str_reply)
     // Read items from json file
     struct json_object *l_json_items = json_object_object_get(l_json, "items");
     size_t l_items_count = json_object_array_length(l_json_items);
-    bool a = (l_items_count = json_object_array_length(l_json_items));
+    l_items_count = json_object_array_length(l_json_items);
     if(!l_json_items || !json_object_is_type(l_json_items, json_type_array) || !(l_items_count = json_object_array_length(l_json_items))) {
         dap_cli_server_cmd_set_reply_text(a_str_reply, "Wrong json format: not found array 'items' or array is empty");
         json_object_put(l_json);
@@ -4667,7 +4394,7 @@ int com_tx_create_json(int a_argc, char ** a_argv, char **a_str_reply)
                 break;
             case DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE: {
                 uint256_t l_value = { };
-                bool l_is_value = s_json_get_uint256(l_json_item_obj, "value", &l_value);
+                s_json_get_uint256(l_json_item_obj, "value", &l_value);
                 if(!IS_ZERO_256(l_value)) {
                     dap_chain_tx_out_cond_t *l_out_cond_item = dap_chain_datum_tx_item_out_cond_create_fee(l_value);
                     l_item = (const uint8_t*) l_out_cond_item;
@@ -4775,7 +4502,7 @@ int com_tx_create_json(int a_argc, char ** a_argv, char **a_str_reply)
     dap_chain_hash_fast_t *l_datum_tx_hash = DAP_NEW(dap_hash_fast_t);
     dap_hash_fast(l_datum_tx->data, l_datum_tx->header.data_size, l_datum_tx_hash);// Calculate datum hash
     char *l_tx_hash_str = dap_chain_hash_fast_to_str_new(l_datum_tx_hash);
-    bool l_placed = dap_global_db_set(l_gdb_group_mempool_base_tx,l_tx_hash_str, l_datum_tx, l_datum_tx_size, true, NULL,NULL );
+    bool l_placed = !dap_global_db_set(l_gdb_group_mempool_base_tx,l_tx_hash_str, l_datum_tx, l_datum_tx_size, true, NULL, NULL);
 
     DAP_DELETE(l_tx_hash_str);
     DAP_DELETE(l_datum_tx);
@@ -4798,7 +4525,7 @@ int com_tx_create_json(int a_argc, char ** a_argv, char **a_str_reply)
  * @param str_reply
  * @return int
  */
-int com_tx_create(int argc, char ** argv, char **str_reply)
+int com_tx_create(int a_argc, char **a_argv, char **a_str_reply)
 {
     int arg_index = 1;
 //    int cmd_num = 1;
@@ -4818,66 +4545,75 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
     dap_chain_hash_fast_t l_emission_hash = {};
     size_t l_tx_num = 0;
 
+    const char * l_hash_out_type = NULL;
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-H", &l_hash_out_type);
+    if(!l_hash_out_type)
+        l_hash_out_type = "hex";
+    if(dap_strcmp(l_hash_out_type,"hex") && dap_strcmp(l_hash_out_type,"base58")) {
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "Invalid parameter -H, valid values: -H <hex | base58>");
+        return -1;
+    }
+
     uint256_t l_value = {};
     uint256_t l_value_fee = {};
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-from_wallet", &l_from_wallet_name);
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-from_emission", &l_emission_hash_str);
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-emission_chain", &l_emission_chain_name);
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-to_addr", &addr_base58_to);
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-token", &l_token_ticker);
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-net", &l_net_name);
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-chain", &l_chain_name);
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-tx_num", &l_tx_num_str);
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-certs", &l_certs_str);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-from_wallet", &l_from_wallet_name);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-from_emission", &l_emission_hash_str);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-emission_chain", &l_emission_chain_name);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-to_addr", &addr_base58_to);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-token", &l_token_ticker);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-net", &l_net_name);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-chain", &l_chain_name);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-tx_num", &l_tx_num_str);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-certs", &l_certs_str);
 
     if(l_tx_num_str)
         l_tx_num = strtoul(l_tx_num_str, NULL, 10);
 
-    if(dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-value", &str_tmp))
+    if(dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-value", &str_tmp))
         l_value = dap_chain_balance_scan(str_tmp);
     if(IS_ZERO_256(l_value)) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires parameter '-value' to be valid uint256 value");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-value' to be valid uint256 value");
         return -4;
     }
 
     // Validator's fee
-    if(dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-fee", &str_tmp))
+    if(dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-fee", &str_tmp))
         l_value_fee = dap_chain_balance_scan(str_tmp);
     if (IS_ZERO_256(l_value_fee)) {
-        dap_cli_server_cmd_set_reply_text(str_reply,
+        dap_cli_server_cmd_set_reply_text(a_str_reply,
                 "tx_create requires parameter '-fee' to be valid uint256");
         return -5;
     }
 
     if(!l_from_wallet_name && !l_emission_hash_str) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires one of parameters '-from_wallet' or '-from_emission'");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires one of parameters '-from_wallet' or '-from_emission'");
         return -1;
     }
     if(!addr_base58_to) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires parameter '-to_addr'");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-to_addr'");
         return -2;
     }
 
     if(!l_net_name) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires parameter '-net'");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-net'");
         return -6;
     }
 
     if(!l_token_ticker) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires parameter '-token'");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-token'");
         return -6;
     }
     dap_chain_net_t * l_net = dap_chain_net_by_name(l_net_name);
     dap_ledger_t *l_ledger = l_net ? l_net->pub.ledger : NULL;
     if(l_net == NULL || (l_ledger = dap_chain_ledger_by_net_name(l_net_name)) == NULL) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "not found net by name '%s'", l_net_name);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "not found net by name '%s'", l_net_name);
         return -7;
     }
 
     dap_chain_t *l_emission_chain = NULL;
     if (l_emission_hash_str) {
         if (dap_chain_hash_fast_from_str(l_emission_hash_str, &l_emission_hash)) {
-            dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires parameter '-from_emission' "
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-from_emission' "
                                                          "to be valid string containing hash in hex or base58 format");
             return -3;
         }
@@ -4887,17 +4623,17 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
             l_emission_chain = dap_chain_net_get_default_chain_by_chain_type(l_net,CHAIN_TYPE_EMISSION);
         }
         if (!l_emission_chain) {
-            dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires parameter '-emission_chain' "
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-emission_chain' "
                                                          "to be a valid chain name or set default datum type in chain configuration file");
             return -9;
         }
         if(!l_certs_str) {
-            dap_cli_server_cmd_set_reply_text(str_reply, "tx_create requires parameter '-certs'");
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "tx_create requires parameter '-certs'");
             return -4;
         }
         dap_cert_parse_str_list(l_certs_str, &l_certs, &l_certs_count);
         if(!l_certs_count) {
-            dap_cli_server_cmd_set_reply_text(str_reply,
+            dap_cli_server_cmd_set_reply_text(a_str_reply,
                     "tx_create requires at least one valid certificate to sign the basic transaction of emission");
             return -5;
         }
@@ -4911,33 +4647,32 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
 	}
 
     if(!l_chain) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "not found chain name '%s', try use parameter '-chain' or set default datum type in chain configuration file",
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "not found chain name '%s', try use parameter '-chain' or set default datum type in chain configuration file",
                 l_chain_name);
         return -8;
     }
 
     dap_chain_addr_t *l_addr_to = dap_chain_addr_from_str(addr_base58_to);
     if(!l_addr_to) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "destination address is invalid");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "destination address is invalid");
         return -11;
     }
 
-    dap_string_t *string_ret = dap_string_new(NULL);
+    dap_string_t *l_string_ret = dap_string_new(NULL);
     int res = 0;
     if (l_emission_hash_str) {
-        dap_hash_fast_t *l_tx_hash = dap_chain_mempool_base_tx_create(l_chain, &l_emission_hash, l_emission_chain->id,
-                                                                      l_value, l_token_ticker, l_addr_to, l_certs, l_certs_count);
-        if (l_tx_hash){
-            char l_tx_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
-            dap_chain_hash_fast_to_str(l_tx_hash,l_tx_hash_str,sizeof (l_tx_hash_str));
-            dap_string_append_printf(string_ret, "transfer=Ok\ntx_hash=%s\n",l_tx_hash_str);
-            DAP_DELETE(l_tx_hash);
-        }else{
-            dap_string_append_printf(string_ret, "transfer=False\n");
+        char *l_tx_hash_str = dap_chain_mempool_base_tx_create(l_chain, &l_emission_hash, l_emission_chain->id,
+                                                               l_value, l_token_ticker, l_addr_to, l_certs,
+                                                               l_certs_count, l_hash_out_type);
+        if (l_tx_hash_str) {
+            dap_string_append_printf(l_string_ret, "transfer=Ok\ntx_hash=%s\n", l_tx_hash_str);
+            DAP_DELETE(l_tx_hash_str);
+        } else {
+            dap_string_append_printf(l_string_ret, "transfer=False\n");
             res = -15;
         }
-        dap_cli_server_cmd_set_reply_text(str_reply, string_ret->str);
-        dap_string_free(string_ret, false);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, l_string_ret->str);
+        dap_string_free(l_string_ret, true);
         DAP_DELETE(l_addr_to);
         return res;
     }
@@ -4946,19 +4681,19 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
     dap_chain_wallet_t * l_wallet = dap_chain_wallet_open(l_from_wallet_name, c_wallets_path);
 
     if(!l_wallet) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "wallet %s does not exist", l_from_wallet_name);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "wallet %s does not exist", l_from_wallet_name);
         return -9;
     }
     const dap_chain_addr_t *addr_from = (const dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet, l_net->pub.id);
 
     if(!addr_from) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "source address is invalid");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "source address is invalid");
         return -10;
     }
 
     // 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(str_reply, "destination wallet network ID=0x%llx and network ID=0x%llx is not equal. Please, change network name or wallet address",
+        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);
         return -13;
     }
@@ -4967,25 +4702,21 @@ int com_tx_create(int argc, char ** argv, char **str_reply)
         res = dap_chain_mempool_tx_create_massive(l_chain, dap_chain_wallet_get_key(l_wallet, 0), addr_from,
                                                   l_addr_to, l_token_ticker, l_value, l_value_fee, l_tx_num);
 
-        dap_string_append_printf(string_ret, "transfer=%s\n",
+        dap_string_append_printf(l_string_ret, "transfer=%s\n",
                 (res == 0) ? "Ok" : (res == -2) ? "False, not enough funds for transfer" : "False");
     }else{
-        dap_hash_fast_t * l_tx_hash = dap_chain_mempool_tx_create(l_chain, dap_chain_wallet_get_key(l_wallet, 0), addr_from, l_addr_to,
-                                                                  l_token_ticker, l_value, l_value_fee);
-        if (l_tx_hash){
-            char l_tx_hash_str[80]={[0]='\0'};
-            dap_chain_hash_fast_to_str(l_tx_hash,l_tx_hash_str,sizeof (l_tx_hash_str)-1);
-            dap_string_append_printf(string_ret, "transfer=Ok\ntx_hash=%s\n",l_tx_hash_str);
-            DAP_DELETE(l_tx_hash);
+        char *l_tx_hash_str = dap_chain_mempool_tx_create(l_chain, dap_chain_wallet_get_key(l_wallet, 0), addr_from, l_addr_to,
+                                                                  l_token_ticker, l_value, l_value_fee, l_hash_out_type);
+        if (l_tx_hash_str) {
+            dap_string_append_printf(l_string_ret, "transfer=Ok\ntx_hash=%s\n",l_tx_hash_str);
+            DAP_DELETE(l_tx_hash_str);
         }else{
-            dap_string_append_printf(string_ret, "transfer=False\n");
+            dap_string_append_printf(l_string_ret, "transfer=False\n");
             res = -14;
         }
-
     }
-
-    dap_cli_server_cmd_set_reply_text(str_reply, string_ret->str);
-    dap_string_free(string_ret, false);
+    dap_cli_server_cmd_set_reply_text(a_str_reply, l_string_ret->str);
+    dap_string_free(l_string_ret, true);
 
     DAP_DELETE(l_addr_to);
     dap_chain_wallet_close(l_wallet);
@@ -5193,7 +4924,7 @@ int com_tx_history(int a_argc, char ** a_argv, char **a_str_reply)
  * @param str_reply
  * @return int
  */
-int com_stats(int argc, char ** argv, char **str_reply)
+int com_stats(int argc, char **a_argv, char **a_str_reply)
 {
     enum {
         CMD_NONE, CMD_STATS_CPU
@@ -5201,41 +4932,41 @@ int com_stats(int argc, char ** argv, char **str_reply)
     int arg_index = 1;
     int cmd_num = CMD_NONE;
     // find  add parameter ('cpu')
-    if (dap_cli_server_cmd_find_option_val(argv, arg_index, min(argc, arg_index + 1), "cpu", NULL)) {
+    if (dap_cli_server_cmd_find_option_val(a_argv, arg_index, min(argc, arg_index + 1), "cpu", NULL)) {
         cmd_num = CMD_STATS_CPU;
     }
     switch (cmd_num) {
     case CMD_NONE:
     default:
-        dap_cli_server_cmd_set_reply_text(str_reply, "format of command: stats cpu");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "format of command: stats cpu");
         return -1;
     case CMD_STATS_CPU:
 #if (defined DAP_OS_UNIX) || (defined __WIN32)
     {
         dap_cpu_monitor_init();
         dap_usleep(500000);
-        char *str_reply_prev = dap_strdup_printf("");
-        char *str_delimiter;
+        char *l_str_reply_prev = dap_strdup_printf("");
+        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)) {
-                str_delimiter = dap_strdup_printf("\n");
+                l_str_delimiter = dap_strdup_printf("\n");
             } else if (n_cpu_num == s_cpu_stats.cpu_cores_count - 1) {
-                str_delimiter = dap_strdup_printf("");
+                l_str_delimiter = dap_strdup_printf("");
             } else {
-                str_delimiter = dap_strdup_printf(" ");
+                l_str_delimiter = dap_strdup_printf(" ");
             }
-            *str_reply = dap_strdup_printf("%sCPU-%d: %f%%%s", str_reply_prev, n_cpu_num, s_cpu_stats.cpus[n_cpu_num].load, str_delimiter);
-            DAP_DELETE(str_reply_prev);
-            DAP_DELETE(str_delimiter);
-            str_reply_prev = *str_reply;
+            *a_str_reply = dap_strdup_printf("%sCPU-%d: %f%%%s", l_str_reply_prev, n_cpu_num, s_cpu_stats.cpus[n_cpu_num].load, l_str_delimiter);
+            DAP_DELETE(l_str_reply_prev);
+            DAP_DELETE(l_str_delimiter);
+            l_str_reply_prev = *a_str_reply;
         }
-        *str_reply = dap_strdup_printf("%s\nTotal: %f%%", str_reply_prev, s_cpu_stats.cpu_summary.load);
-        DAP_DELETE(str_reply_prev);
+        *a_str_reply = dap_strdup_printf("%s\nTotal: %f%%", l_str_reply_prev, s_cpu_stats.cpu_summary.load);
+        DAP_DELETE(l_str_reply_prev);
         break;
     }
 #else
-        dap_cli_server_cmd_set_reply_text(str_reply, "only Linux or Windows environment supported");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "only Linux or Windows environment supported");
         return -1;
 #endif // DAP_OS_UNIX
     }
@@ -5251,11 +4982,11 @@ int com_stats(int argc, char ** argv, char **str_reply)
  * @param str_reply
  * @return int
  */
-int com_exit(int argc, char ** argv, char **str_reply)
+int com_exit(int a_argc, char **a_argv, char **a_str_reply)
 {
-    UNUSED(argc);
-    UNUSED(argv);
-    UNUSED(str_reply);
+    UNUSED(a_argc);
+    UNUSED(a_argv);
+    UNUSED(a_str_reply);
     //dap_events_stop_all();
     exit(0);
     return 0;
@@ -5271,35 +5002,35 @@ int com_exit(int argc, char ** argv, char **str_reply)
  * @param str_reply
  * @return int
  */
-int com_print_log(int argc, char ** argv, char **str_reply)
+int com_print_log(int a_argc, char **a_argv, char **a_str_reply)
 {
     int arg_index = 1;
     const char * l_str_ts_after = NULL;
     const char * l_str_limit = NULL;
     int64_t l_ts_after = 0;
     long l_limit = 0;
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "ts_after", &l_str_ts_after);
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "limit", &l_str_limit);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "ts_after", &l_str_ts_after);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "limit", &l_str_limit);
 
     l_ts_after = (l_str_ts_after) ? strtoll(l_str_ts_after, 0, 10) : -1;
     l_limit = (l_str_limit) ? strtol(l_str_limit, 0, 10) : -1;
 
     if(l_ts_after < 0 || !l_str_ts_after) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "requires valid parameter 'l_ts_after'");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "requires valid parameter 'l_ts_after'");
         return -1;
     }
     if(!l_limit) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "requires valid parameter 'limit'");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "requires valid parameter 'limit'");
         return -1;
     }
 
     // get logs from list
     char *l_str_ret = dap_log_get_item(l_ts_after, (int) l_limit);
     if(!l_str_ret) {
-        dap_cli_server_cmd_set_reply_text(str_reply, "no logs");
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "no logs");
         return -1;
     }
-    dap_cli_server_cmd_set_reply_text(str_reply, l_str_ret);
+    dap_cli_server_cmd_set_reply_text(a_str_reply, l_str_ret);
     DAP_DELETE(l_str_ret);
     return 0;
 }
@@ -5313,11 +5044,11 @@ int com_print_log(int argc, char ** argv, char **str_reply)
  * @param a_str_reply
  * @return
  */
-int cmd_gdb_export(int argc, char ** argv, char ** a_str_reply)
+int cmd_gdb_export(int a_argc, char **a_argv, char **a_str_reply)
 {
     int arg_index = 1;
     const char *l_filename = NULL;
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "filename", &l_filename);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "filename", &l_filename);
     if (!l_filename) {
         dap_cli_server_cmd_set_reply_text(a_str_reply, "gdb_export requires parameter 'filename'");
         return -1;
@@ -5334,7 +5065,7 @@ int cmd_gdb_export(int argc, char ** argv, char ** a_str_reply)
     dap_snprintf(l_path, sizeof(l_path), "%s/%s.json", l_db_path, l_filename);
 
     const char *l_groups_str = NULL;
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-groups", &l_groups_str);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-groups", &l_groups_str);
     char *l_group_str = NULL, *l_ctx = NULL;
     dap_list_t *l_parsed_groups_list = NULL;
     if (l_groups_str) {
@@ -5406,11 +5137,11 @@ int cmd_gdb_export(int argc, char ** argv, char ** a_str_reply)
  * @param a_str_reply
  * @return
  */
-int cmd_gdb_import(int argc, char ** argv, char ** a_str_reply)
+int cmd_gdb_import(int a_argc, char **a_argv, char ** a_str_reply)
 {
     int arg_index = 1;
     const char *l_filename = NULL;
-    dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "filename", &l_filename);
+    dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "filename", &l_filename);
     if (!l_filename) {
         dap_cli_server_cmd_set_reply_text(a_str_reply, "gdb_import requires parameter 'filename'");
         return -1;
@@ -5487,7 +5218,7 @@ dap_list_t *s_go_all_nets_offline()
     return l_net_returns;
 }
 
-int cmd_remove(int argc, char ** argv, char ** a_str_reply)
+int cmd_remove(int a_argc, char **a_argv, char ** a_str_reply)
 {
     //default init
     const char		*return_message	=	NULL;
@@ -5516,11 +5247,11 @@ int cmd_remove(int argc, char ** argv, char ** a_str_reply)
     };
 
     //check path's from config file
-    if (dap_cli_server_cmd_check_option(argv, 1, argc, "-gdb") >= 0
+    if (dap_cli_server_cmd_check_option(a_argv, 1, a_argc, "-gdb") >= 0
     &&	(NULL == (l_gdb_path = dap_config_get_item_str(g_config, "resources", "dap_global_db_path")))){
         error |= GDB_FAIL_PATH;
     }
-    if (dap_cli_server_cmd_check_option(argv, 1, argc, "-chains") >= 0
+    if (dap_cli_server_cmd_check_option(a_argv, 1, a_argc, "-chains") >= 0
     &&	(NULL == (l_chains_path = dap_config_get_item_str(g_config, "resources", "dap_chains_path")))) {
         error |= CHAINS_FAIL_PATH;
     }
@@ -5538,8 +5269,8 @@ int cmd_remove(int argc, char ** argv, char ** a_str_reply)
     }
 
     if (l_chains_path) {
-        dap_cli_server_cmd_find_option_val(argv, 1, argc, "-net", &l_net_str);
-        all = dap_cli_server_cmd_check_option(argv, 1, argc, "-all");
+        dap_cli_server_cmd_find_option_val(a_argv, 1, a_argc, "-net", &l_net_str);
+        all = dap_cli_server_cmd_check_option(a_argv, 1, a_argc, "-all");
 
         if	(NULL == l_net_str && all >= 0) {
             if (NULL == l_gdb_path)
diff --git a/modules/net/include/dap_chain_node_cli_cmd.h b/modules/net/include/dap_chain_node_cli_cmd.h
index bf07fa891ccdc2ff08650e7882ac0f30cc5c4cd8..3fb2307f1e29e71213e2577c8a581e2ead51e391 100644
--- a/modules/net/include/dap_chain_node_cli_cmd.h
+++ b/modules/net/include/dap_chain_node_cli_cmd.h
@@ -38,63 +38,63 @@
 dap_chain_node_addr_t* dap_chain_node_addr_get_by_alias(dap_chain_net_t * a_net, const char *alias);
 
 
-int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index,int argc, char ** 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, char ** a_str_reply,
                              dap_chain_t ** a_chain, dap_chain_net_t ** a_net);
 
 /**
  * global_db command
  */
-int com_global_db(int argc,  char ** argv, char **str_reply);
+int com_global_db(int a_argc,  char **a_argv, char **a_str_reply);
 
 /**
  * Node command
  */
-int com_node(int argc,  char ** argv, char **str_reply);
+int com_node(int a_argc,  char **a_argv, char **a_str_reply);
 
 /**
  * Traceroute command
  *
  * return 0 OK, -1 Err
  */
-int com_traceroute(int argc,  char** argv, char **str_reply);
+int com_traceroute(int a_argc,  char** argv, char **a_str_reply);
 
 /**
  * Tracepath command
  *
  * return 0 OK, -1 Err
  */
-int com_tracepath(int argc,  char** argv, char **str_reply);
+int com_tracepath(int a_argc,  char** argv, char **a_str_reply);
 
 /**
  * Ping command
  *
  * return 0 OK, -1 Err
  */
-int com_ping(int argc,  char** argv, char **str_reply);
+int com_ping(int a_argc,  char** argv, char **a_str_reply);
 
 /**
  * Help command
  */
-int com_help(int argc,  char ** argv, char **str_reply);
+int com_help(int a_argc,  char **a_argv, char **a_str_reply);
 
-int com_version(int argc, char ** argv, char **str_reply);
+int com_version(int a_argc, char **a_argv, char **a_str_reply);
 
 /**
  * Token declaration
  */
-int com_token_decl ( int argc,  char ** argv, char ** str_reply);
+int com_token_decl(int a_argc,  char **a_argv, char ** str_reply);
 
-int com_token_update(int argc, char ** argv, char ** a_str_reply);
+int com_token_update(int a_argc, char **a_argv, char ** a_str_reply);
 
 /**
  * Token declaration add sign
  */
-int com_token_decl_sign ( int argc,  char ** argv, char ** str_reply);
+int com_token_decl_sign ( int a_argc,  char **a_argv, char ** str_reply);
 
 /**
  * Token emission
  */
-int com_token_emit (int argc,  char ** argv, char ** str_reply);
+int com_token_emit (int a_argc,  char **a_argv, char ** str_reply);
 
 
 /**
@@ -102,16 +102,16 @@ int com_token_emit (int argc,  char ** argv, char ** str_reply);
  *
  * Wallet info
  */
-int com_tx_wallet(int argc, char ** argv, char **str_reply);
+int com_tx_wallet(int a_argc, char **a_argv, char **a_str_reply);
 
 /**
  * com_tx_create command
  *
  * Create transaction
  */
-int com_tx_create(int argc, char ** argv, char **str_reply);
-int com_tx_create_json(int argc, char ** argv, char **str_reply);
-int com_tx_cond_create(int argc, char ** argv, char **str_reply);
+int com_tx_create(int a_argc, char **a_argv, char **a_str_reply);
+int com_tx_create_json(int a_argc, char **a_argv, char **a_str_reply);
+int com_tx_cond_create(int a_argc, char **a_argv, char **a_str_reply);
 
 /**
  * tx_verify command
@@ -125,29 +125,29 @@ int com_tx_verify(int a_argc, char ** a_argv, char **a_str_reply);
  *
  * Transaction history for an address
  */
-int com_tx_history(int argc, char ** argv, char **str_reply);
+int com_tx_history(int a_argc, char **a_argv, char **a_str_reply);
 
 // Print log info
-int com_print_log(int argc, char ** argv, char **str_reply);
+int com_print_log(int a_argc, char **a_argv, char **a_str_reply);
 
 // Print statistics
-int com_stats(int argc, char ** argv, char **str_reply);
+int com_stats(int a_argc, char **a_argv, char **a_str_reply);
 
-int com_exit(int argc, char ** argv, char **str_reply);
+int com_exit(int a_argc, char **a_argv, char **a_str_reply);
 
-int cmd_gdb_import(int argc, char ** argv, char ** a_str_reply);
-int cmd_gdb_export(int argc, char ** argv, char ** a_str_reply);
+int cmd_gdb_import(int a_argc, char **a_argv, char **a_str_reply);
+int cmd_gdb_export(int a_argc, char **a_argv, char **a_str_reply);
 
-int com_mempool_delete(int argc, char ** argv, char ** a_str_reply);
-int com_mempool_list(int argc, char ** argv, char ** a_str_reply);
-int com_mempool_proc(int argc, char ** argv, char ** a_str_reply);
-int com_mempool_check(int argc, char ** argv, char ** a_str_reply);
+int com_mempool_delete(int a_argc, char **a_argv, char **a_str_reply);
+int com_mempool_list(int a_argc, char **a_argv, char **a_str_reply);
+int com_mempool_proc(int a_argc, char **a_argv, char **a_str_reply);
+int com_mempool_check(int a_argc, char **a_argv, char **a_str_reply);
 /**
  * Place public CA into the mempool
  */
-int com_mempool_add_ca( int a_argc,  char ** a_argv, char ** a_str_reply);
-int com_chain_ca_pub( int a_argc,  char ** a_argv, char ** a_str_reply);
-int com_chain_ca_copy( int a_argc,  char ** a_argv, char ** a_str_reply);
+int com_mempool_add_ca( int a_argc,  char **a_argv, char **a_str_reply);
+int com_chain_ca_pub( int a_argc,  char **a_argv, char **a_str_reply);
+int com_chain_ca_copy( int a_argc,  char **a_argv, char **a_str_reply);
 int com_signer(int a_argc, char **a_argv, char **a_str_reply);
 //remove func
-int cmd_remove(int argc, char ** argv, char ** a_str_reply);
+int cmd_remove(int a_argc, char **a_argv, char ** a_str_reply);
diff --git a/modules/service/datum/dap_chain_net_srv_datum.c b/modules/service/datum/dap_chain_net_srv_datum.c
index e2b79c9b36a1b13ca124257cb825ebd452016fde..65da564e581fa443e3d440b954fbd206b9272e68 100644
--- a/modules/service/datum/dap_chain_net_srv_datum.c
+++ b/modules/service/datum/dap_chain_net_srv_datum.c
@@ -96,7 +96,7 @@ char* dap_chain_net_srv_datum_custom_add(dap_chain_t * a_chain, const uint8_t *a
     }
 
     // Finaly add datum to mempool
-    char *l_hash_str = dap_chain_mempool_datum_add(l_datum, a_chain);
+    char *l_hash_str = dap_chain_mempool_datum_add(l_datum, a_chain, "hex");
     return l_hash_str;
 }
 
diff --git a/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c b/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c
index 53eab8f82d2ad55e4b5d430cd9859520378cb4bc..aee53bea2a1cb9d6863af86e0aed1f51207ff9a5 100644
--- a/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c
+++ b/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c
@@ -74,7 +74,8 @@ enum error_code {
     BASE_TX_CREATE_ERROR		= 37,
     WRONG_PARAM_SIZE			= 38,
     NOT_ENOUGH_TIME				= 39,
-    REINVEST_ARG_ERROR			= 40
+    REINVEST_ARG_ERROR			= 40,
+    HASH_TYPE_ARG_ERROR         = 41
 };
 
 typedef struct dap_chain_ledger_token_emission_for_stake_lock_item {
@@ -89,9 +90,9 @@ typedef struct dap_chain_ledger_token_emission_for_stake_lock_item {
 #define YEAR_INDEX	12
 
 static int												s_cli_stake_lock(int a_argc, char **a_argv, char **a_str_reply);
-static dap_chain_hash_fast_t							*dap_chain_mempool_base_tx_for_stake_lock_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash,
+static char                                             *dap_chain_mempool_base_tx_for_stake_lock_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash,
                                                                               dap_chain_id_t a_emission_chain_id, uint256_t a_emission_value, const char *a_ticker,
-                                                                              dap_chain_addr_t *a_addr_to, dap_enc_key_t *a_key_from);
+                                                                              dap_chain_addr_t *a_addr_to, dap_enc_key_t *a_key_from, const char *a_hash_out_type);
 // Callbacks
 static void												s_callback_decree (dap_chain_net_srv_t * a_srv, dap_chain_net_t *a_net, dap_chain_t * a_chain,
                                                                               dap_chain_datum_decree_t * a_decree, size_t a_decree_size);
@@ -191,10 +192,9 @@ static enum error_code s_cli_hold(int a_argc, char **a_argv, int a_arg_index, da
     char 	delegate_ticker_str[DAP_CHAIN_TICKER_SIZE_MAX] 	=	{[0] = 'm'};
     dap_chain_net_t						*l_net				=	NULL;
     dap_chain_t							*l_chain			=	NULL;
-//	dap_chain_t							*l_chain_emission	=	NULL;
+    dap_hash_fast_t                     l_tx_cond_hash;
     dap_cert_t							*l_cert				=	NULL;
     dap_pkey_t							*l_key_cond			=	NULL;
-    dap_hash_fast_t 					*l_base_tx_hash		=	NULL;
     dap_chain_net_srv_uid_t				l_uid				=	{ .uint64 = DAP_CHAIN_NET_SRV_STAKE_LOCK_ID };
     dap_time_t              			l_time_staking		=	0;
     uint256_t						    l_reinvest_percent	=	{};
@@ -203,7 +203,6 @@ static enum error_code s_cli_hold(int a_argc, char **a_argv, int a_arg_index, da
     uint256_t 							l_value;
     dap_ledger_t						*l_ledger;
     char								*l_hash_str;
-    dap_hash_fast_t						*l_tx_cond_hash;
     dap_enc_key_t						*l_key_from;
     dap_chain_wallet_t					*l_wallet;
     dap_chain_addr_t					*l_addr_holder;
@@ -213,6 +212,13 @@ static enum error_code s_cli_hold(int a_argc, char **a_argv, int a_arg_index, da
 
     dap_string_append_printf(output_line, "---> HOLD <---\n");
 
+    const char *l_hash_out_type = NULL;
+    dap_cli_server_cmd_find_option_val(a_argv, 1, a_argc, "-H", &l_hash_out_type);
+    if(!l_hash_out_type)
+        l_hash_out_type = "hex";
+    if(dap_strcmp(l_hash_out_type,"hex") && dap_strcmp(l_hash_out_type, "base58"))
+        return HASH_TYPE_ARG_ERROR;
+
     if (!dap_cli_server_cmd_find_option_val(a_argv, a_arg_index, a_argc, "-net", &l_net_str)
     ||	NULL == l_net_str)
         return NET_ARG_ERROR;
@@ -284,14 +290,6 @@ static enum error_code s_cli_hold(int a_argc, char **a_argv, int a_arg_index, da
     if(!l_chain)
         return CHAIN_ERROR;
 
-/*	if (dap_chain_node_cli_find_option_val(a_argv, a_arg_index, a_argc, "-chain_emission", &l_chain_emission_str)
-    &&	l_chain_emission_str)
-        l_chain_emission = dap_chain_net_get_chain_by_name(l_net, l_chain_str);
-    else
-        l_chain_emission = dap_chain_net_get_default_chain_by_chain_type(l_net, CHAIN_TYPE_EMISSION);
-    if(!l_chain_emission)
-        return CHAIN_EMISSION_ERROR;*/
-
     if (!dap_cli_server_cmd_find_option_val(a_argv, a_arg_index, a_argc, "-wallet", &l_wallet_str)
     ||	NULL == l_wallet_str)
         return WALLET_ARG_ERROR;
@@ -351,14 +349,15 @@ static enum error_code s_cli_hold(int a_argc, char **a_argv, int a_arg_index, da
         return CERT_KEY_ERROR;
     }
 
-    l_tx_cond_hash = dap_chain_net_srv_stake_lock_mempool_create(l_net, l_key_from, l_key_cond,
+    // Make transfer transaction
+    dap_chain_datum_t *l_datum = dap_chain_net_srv_stake_lock_datum_create(l_net, l_key_from, l_key_cond,
                                                                  l_ticker_str,l_value, l_uid,
-                                                                 l_addr_holder, l_chain, l_time_staking,
-                                                                 l_reinvest_percent, create_base_tx);
-
+                                                                 l_time_staking, l_reinvest_percent, create_base_tx);
     DAP_DEL_Z(l_key_cond);
-
-    l_hash_str = (l_tx_cond_hash) ? dap_chain_hash_fast_to_str_new(l_tx_cond_hash) : NULL;
+    if (create_base_tx)
+        dap_hash_fast(l_datum->data, l_datum->header.data_size, &l_tx_cond_hash);
+    l_hash_str = dap_chain_mempool_datum_add(l_datum, l_chain, l_hash_out_type);
+    DAP_DEL_Z(l_datum);
 
     if (l_hash_str)
         dap_string_append_printf(output_line, "TX STAKE LOCK CREATED\nSuccessfully hash=%s\nSave to take!\n", l_hash_str);
@@ -370,28 +369,23 @@ static enum error_code s_cli_hold(int a_argc, char **a_argv, int a_arg_index, da
 
     DAP_DEL_Z(l_hash_str);
 
-    if (create_base_tx) {
-        l_base_tx_hash = dap_chain_mempool_base_tx_for_stake_lock_create(l_chain, l_tx_cond_hash, l_chain->id,
-                                                      l_value_delegated, delegate_ticker_str, l_addr_holder, l_key_from);
-    }
+    if (create_base_tx)
+        l_hash_str = dap_chain_mempool_base_tx_for_stake_lock_create(l_chain, &l_tx_cond_hash, l_chain->id,
+                                                      l_value_delegated, delegate_ticker_str, l_addr_holder,
+                                                      l_key_from, l_hash_out_type);
 
     dap_chain_wallet_close(l_wallet);
 
     if (create_base_tx) {
-        l_hash_str = (l_base_tx_hash) ? dap_chain_hash_fast_to_str_new(l_base_tx_hash) : NULL;
-
         if (l_hash_str)
             dap_string_append_printf(output_line, "BASE_TX_DATUM_HASH=%s\n", l_hash_str);
         else {
             DAP_DEL_Z(l_addr_holder);
-            DAP_DEL_Z(l_tx_cond_hash);
             return BASE_TX_CREATE_ERROR;
         }
     }
 
     DAP_DEL_Z(l_addr_holder);
-    DAP_DEL_Z(l_tx_cond_hash);
-    DAP_DEL_Z(l_base_tx_hash);
     DAP_DEL_Z(l_hash_str);
 
     return STAKE_NO_ERROR;
@@ -427,6 +421,13 @@ static enum error_code s_cli_take(int a_argc, char **a_argv, int a_arg_index, da
 
     dap_string_append_printf(output_line, "---> TAKE <---\n");
 
+    const char *l_hash_out_type = NULL;
+    dap_cli_server_cmd_find_option_val(a_argv, 1, a_argc, "-H", &l_hash_out_type);
+    if(!l_hash_out_type)
+        l_hash_out_type = "hex";
+    if(dap_strcmp(l_hash_out_type,"hex") && dap_strcmp(l_hash_out_type, "base58"))
+        return HASH_TYPE_ARG_ERROR;
+
     if (!dap_cli_server_cmd_find_option_val(a_argv, a_arg_index, a_argc, "-net", &l_net_str)
     ||	NULL == l_net_str)
         return NET_ARG_ERROR;
@@ -592,7 +593,7 @@ static enum error_code s_cli_take(int a_argc, char **a_argv, int a_arg_index, da
     dap_chain_datum_tx_delete(l_tx);
 
     if (l_tx_out_cond->subtype.srv_stake_lock.flags & DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_CREATE_BASE_TX) {
-        if (NULL == (l_datum_hash_str = dap_chain_mempool_datum_add(l_datum_burning_tx, l_chain))) {
+        if (NULL == (l_datum_hash_str = dap_chain_mempool_datum_add(l_datum_burning_tx, l_chain, l_hash_out_type))) {
             DAP_DEL_Z(l_datum_burning_tx);
             DAP_DEL_Z(l_datum);
             return ADD_DATUM_BURNING_TX_ERROR;
@@ -604,7 +605,7 @@ static enum error_code s_cli_take(int a_argc, char **a_argv, int a_arg_index, da
     }
 
     // Processing will be made according to autoprocess policy
-    if (NULL == (l_datum_hash_str = dap_chain_mempool_datum_add(l_datum, l_chain))) {
+    if (NULL == (l_datum_hash_str = dap_chain_mempool_datum_add(l_datum, l_chain, l_hash_out_type))) {
         DAP_DEL_Z(l_datum);
         return ADD_DATUM_TX_TAKE_ERROR;
     }
@@ -1122,11 +1123,11 @@ static bool s_stake_lock_callback_verificator_added(dap_ledger_t *a_ledger, dap_
     int l_out_num = 0;
     dap_chain_tx_out_cond_t *l_cond = dap_chain_datum_tx_out_cond_get(a_tx, DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK, &l_out_num);
     if (l_cond->subtype.srv_stake_lock.flags & DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_CREATE_BASE_TX) {
-        dap_chain_hash_fast_t l_key_hash;
-        dap_hash_fast( a_tx, dap_chain_datum_tx_get_size(a_tx), &l_key_hash);
-        if (dap_hash_fast_is_blank(&l_key_hash))
+        dap_chain_hash_fast_t l_tx_cond_hash;
+        dap_hash_fast( a_tx, dap_chain_datum_tx_get_size(a_tx), &l_tx_cond_hash);
+        if (dap_hash_fast_is_blank(&l_tx_cond_hash))
             return false;
-        dap_chain_ledger_emission_for_stake_lock_item_add(a_ledger, &l_key_hash);
+        dap_chain_ledger_emission_for_stake_lock_item_add(a_ledger, &l_tx_cond_hash);
     }
     return true;
 }
@@ -1143,12 +1144,12 @@ static bool s_stake_lock_callback_verificator_added(dap_ledger_t *a_ledger, dap_
  * @param a_count_months
  * @return
  */
-static dap_chain_datum_t* s_mempool_create(dap_chain_net_t *a_net,
+dap_chain_datum_t *dap_chain_net_srv_stake_lock_datum_create(dap_chain_net_t *a_net,
                                                    dap_enc_key_t *a_key_from, dap_pkey_t *a_key_cond,
                                                    const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
                                                    uint256_t a_value, dap_chain_net_srv_uid_t a_srv_uid,
-                                                   dap_chain_addr_t *a_addr_holder, dap_time_t a_time_staking,
-                                                   uint256_t a_reinvest_percent, bool create_base_tx)
+                                                   dap_time_t a_time_staking, uint256_t a_reinvest_percent,
+                                                   bool a_create_base_tx)
 {
     dap_ledger_t * l_ledger = a_net ? dap_chain_ledger_by_net_name( a_net->pub.name ) : NULL;
     // check valid param
@@ -1182,7 +1183,7 @@ static dap_chain_datum_t* s_mempool_create(dap_chain_net_t *a_net,
     // add 'out_cond' and 'out' items
     {
         uint256_t l_value_pack = {}; // how much coin add to 'out' items
-        dap_chain_tx_out_cond_t* l_tx_out_cond = dap_chain_net_srv_stake_lock_create_cond_out(a_key_cond, a_srv_uid, a_value, a_time_staking, a_reinvest_percent, create_base_tx);
+        dap_chain_tx_out_cond_t* l_tx_out_cond = dap_chain_net_srv_stake_lock_create_cond_out(a_key_cond, a_srv_uid, a_value, a_time_staking, a_reinvest_percent, a_create_base_tx);
         if(l_tx_out_cond) {
             SUM_256_256(l_value_pack, a_value, &l_value_pack);
             dap_chain_datum_tx_add_item(&l_tx, (const uint8_t *)l_tx_out_cond);
@@ -1251,53 +1252,6 @@ dap_chain_tx_out_cond_t *dap_chain_net_srv_stake_lock_create_cond_out(dap_pkey_t
     return l_item;
 }
 
-
-/**
- * @brief dap_chain_net_srv_stake_lock_mempool_create
- * @param a_net
- * @param a_key_from
- * @param a_key_cond
- * @param a_token_ticker
- * @param a_value
- * @param a_srv_uid
- * @param a_addr_holder
- * @param a_time_staking
- * @return
- */
-dap_chain_hash_fast_t* dap_chain_net_srv_stake_lock_mempool_create(dap_chain_net_t *a_net,
-                                                                       dap_enc_key_t *a_key_from, dap_pkey_t *a_key_cond,
-                                                                       const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
-                                                                       uint256_t a_value, dap_chain_net_srv_uid_t a_srv_uid,
-                                                                       dap_chain_addr_t *a_addr_holder, dap_chain_t *a_chain,
-                                                                       uint64_t a_time_staking, uint256_t a_reinvest_percent,
-                                                                       bool create_base_tx)
-{
-    // Make transfer transaction
-    dap_chain_datum_t *l_datum = s_mempool_create(a_net, a_key_from, a_key_cond, a_token_ticker, a_value, a_srv_uid,
-                                                  a_addr_holder, a_time_staking, a_reinvest_percent, create_base_tx);
-
-    if(!l_datum)
-        return NULL;
-
-    dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*)&(l_datum->data);
-    size_t l_tx_size = l_datum->header.data_size;
-
-    dap_chain_hash_fast_t *l_key_hash = DAP_NEW_Z( dap_chain_hash_fast_t );
-    dap_hash_fast( l_tx, l_tx_size, l_key_hash);
-
-    char * l_key_str = dap_chain_hash_fast_to_str_new( l_key_hash );
-    char * l_gdb_group = dap_chain_net_get_gdb_group_mempool_new(a_chain);
-
-    if (dap_global_db_set_sync(l_gdb_group, l_key_str, l_datum, dap_chain_datum_size(l_datum), false) ==
-            DAP_GLOBAL_DB_RC_SUCCESS)
-        log_it(L_NOTICE, "Transaction %s placed in mempool group %s", l_key_str, l_gdb_group);
-
-    DAP_DELETE(l_gdb_group);
-    DAP_DELETE(l_key_str);
-
-    return l_key_hash;
-}
-
 dap_chain_datum_t *dap_chain_burning_tx_create(dap_chain_t *a_chain, dap_enc_key_t *a_key_from,
                                              const dap_chain_addr_t* a_addr_from, const dap_chain_addr_t* a_addr_to,
                                              const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
@@ -1353,28 +1307,12 @@ dap_chain_datum_t *dap_chain_burning_tx_create(dap_chain_t *a_chain, dap_enc_key
     DAP_DELETE(l_tx);
 
     return l_datum;
-
-//	dap_hash_fast_t * l_ret = DAP_NEW_Z(dap_hash_fast_t);
-//	dap_hash_fast(l_tx, l_tx_size, l_ret);
-//	DAP_DELETE(l_tx);
-//	char *l_hash_str = dap_chain_mempool_datum_add(l_datum, a_chain);
-
-//	DAP_DELETE( l_datum );
-//
-//	if (l_hash_str) {
-//		DAP_DELETE(l_hash_str);
-//		return l_ret;
-//	}else{
-//		DAP_DELETE(l_ret);
-//		return NULL;
-//	}
 }
 
-static dap_chain_hash_fast_t *dap_chain_mempool_base_tx_for_stake_lock_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash,
+static char *dap_chain_mempool_base_tx_for_stake_lock_create(dap_chain_t *a_chain, dap_chain_hash_fast_t *a_emission_hash,
                                                         dap_chain_id_t a_emission_chain_id, uint256_t a_emission_value, const char *a_ticker,
-                                                        dap_chain_addr_t *a_addr_to, dap_enc_key_t *a_key_from)
+                                                        dap_chain_addr_t *a_addr_to, dap_enc_key_t *a_key_from, const char *a_hash_out_type)
 {
-    char *l_gdb_group_mempool_base_tx = dap_chain_net_get_gdb_group_mempool_new(a_chain);
     // create first transaction (with tx_token)
     dap_chain_datum_tx_t *l_tx = DAP_NEW_Z_SIZE(dap_chain_datum_tx_t, sizeof(dap_chain_datum_tx_t));
     l_tx->header.ts_created = time(NULL);
@@ -1408,18 +1346,6 @@ static dap_chain_hash_fast_t *dap_chain_mempool_base_tx_for_stake_lock_create(da
 
     // Pack transaction into the datum
     dap_chain_datum_t * l_datum_tx = dap_chain_datum_create(DAP_CHAIN_DATUM_TX, l_tx, l_tx_size);
-    size_t l_datum_tx_size = dap_chain_datum_size(l_datum_tx);
     DAP_DEL_Z(l_tx);
-    // calc datum hash
-    dap_chain_hash_fast_t *l_datum_tx_hash = DAP_NEW(dap_hash_fast_t);
-    dap_hash_fast(l_datum_tx->data, l_datum_tx->header.data_size, l_datum_tx_hash);
-    char *l_tx_hash_str = dap_chain_hash_fast_to_str_new(l_datum_tx_hash);
-    // Add to mempool tx token
-    bool l_placed = dap_global_db_set_sync(l_gdb_group_mempool_base_tx, l_tx_hash_str, l_datum_tx,
-                                           l_datum_tx_size, false) == DAP_GLOBAL_DB_RC_SUCCESS;
-    DAP_DEL_Z(l_tx_hash_str);
-    DAP_DELETE(l_datum_tx);
-    if (!l_placed)
-        return NULL;
-    return l_datum_tx_hash;
+    return dap_chain_mempool_datum_add(l_datum_tx, a_chain, a_hash_out_type);
 }
diff --git a/modules/service/stake_lock/include/dap_chain_net_srv_stake_lock.h b/modules/service/stake_lock/include/dap_chain_net_srv_stake_lock.h
index b7fbb5d2523fcf7089943d260a6a03a93829e986..1f7060fc640be68b4a7e9b02e012012db7421879 100644
--- a/modules/service/stake_lock/include/dap_chain_net_srv_stake_lock.h
+++ b/modules/service/stake_lock/include/dap_chain_net_srv_stake_lock.h
@@ -54,16 +54,15 @@ void					dap_chain_net_srv_stake_lock_deinit(void);
 dap_chain_tx_out_cond_t	*dap_chain_net_srv_stake_lock_create_cond_out(dap_pkey_t *a_key, dap_chain_net_srv_uid_t a_srv_uid,
                                                                       uint256_t a_value, uint64_t a_time_staking,
                                                                       uint256_t a_reinvest_percent, bool create_base_tx);
-// Create mempool
-dap_chain_hash_fast_t	*dap_chain_net_srv_stake_lock_mempool_create(dap_chain_net_t *a_net,
-                                                                     dap_enc_key_t* a_key_from, dap_pkey_t* a_key_cond,
-                                                                     const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
-                                                                     uint256_t a_value, dap_chain_net_srv_uid_t a_srv_uid,
-                                                                     dap_chain_addr_t *a_addr_holder, dap_chain_t *a_chain,
-                                                                     uint64_t a_time_staking, uint256_t a_reinvest_percent,
-                                                                     bool create_base_tx);
+// Create stake lock datum
+dap_chain_datum_t *dap_chain_net_srv_stake_lock_datum_create(dap_chain_net_t *a_net,
+                                                   dap_enc_key_t *a_key_from, dap_pkey_t *a_key_cond,
+                                                   const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
+                                                   uint256_t a_value, dap_chain_net_srv_uid_t a_srv_uid,
+                                                   dap_time_t a_time_staking, uint256_t a_reinvest_percent,
+                                                   bool a_create_base_tx);
 // Burning_tx_create
-dap_chain_datum_t*      dap_chain_burning_tx_create(dap_chain_t* a_chain, dap_enc_key_t* a_key_from,
+dap_chain_datum_t *dap_chain_burning_tx_create(dap_chain_t* a_chain, dap_enc_key_t* a_key_from,
                                                     const dap_chain_addr_t* a_addr_from, const dap_chain_addr_t* a_addr_to,
                                                     const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
                                                     uint256_t a_value);
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 18ff05af79b5d2433869212417d365d58ebc8dcb..4b0b1aa4af21364701c528ce1926800f32920d38 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
@@ -449,7 +449,7 @@ static bool s_stake_tx_put(dap_chain_datum_tx_t *a_tx, dap_chain_net_t *a_net)
     }
     // Processing will be made according to autoprocess policy
     char *l_ret = NULL;
-    if ((l_ret = dap_chain_mempool_datum_add(l_datum, l_chain)) == NULL) {
+    if ((l_ret = dap_chain_mempool_datum_add(l_datum, l_chain, "hex")) == NULL) {
         DAP_DELETE(l_datum);
         return false;
     }
diff --git a/modules/service/vpn/dap_chain_net_vpn_client.c b/modules/service/vpn/dap_chain_net_vpn_client.c
index 72bc6fe573c676a81ec092ac0154ed434b814578..fd71bd40a0cddc4097e557d13cc0405ca11f8551 100644
--- a/modules/service/vpn/dap_chain_net_vpn_client.c
+++ b/modules/service/vpn/dap_chain_net_vpn_client.c
@@ -328,14 +328,17 @@ static dap_chain_hash_fast_t* dap_chain_net_vpn_client_tx_cond_hash(dap_chain_ne
         dap_chain_net_srv_uid_t l_srv_uid = { .uint64 = DAP_CHAIN_NET_SRV_VPN_ID };
         uint256_t l_value = dap_chain_uint256_from(a_value_datoshi);
         uint256_t l_zero = {};
-        l_tx_cond_hash = dap_chain_mempool_tx_create_cond(a_net, l_enc_key, l_client_key, a_token_ticker,
-                                                          l_value, l_zero, l_price_unit, l_srv_uid, l_zero, NULL, 0);
+        char *l_tx_cond_hash_str = dap_chain_mempool_tx_create_cond(a_net, l_enc_key, l_client_key, a_token_ticker,
+                                                          l_value, l_zero, l_price_unit, l_srv_uid, l_zero, NULL, 0, "hex");
         DAP_DELETE(l_addr_from);
-        if(!l_tx_cond_hash) {
+        if(!l_tx_cond_hash_str) {
             log_it(L_ERROR, "Can't create condition for user");
         } else {
+            l_tx_cond_hash = DAP_NEW(dap_hash_fast_t);
+            dap_chain_hash_fast_from_str(l_tx_cond_hash_str, l_tx_cond_hash);
+            DAP_DELETE(l_tx_cond_hash_str);
             // save transaction for login
-            dap_global_db_set_sync( l_gdb_group,"client_tx_cond_hash", l_tx_cond_hash, sizeof(dap_chain_hash_fast_t), true);
+            dap_global_db_set_sync(l_gdb_group, "client_tx_cond_hash", l_tx_cond_hash, sizeof(dap_chain_hash_fast_t), true);
         }
         DAP_DELETE(l_client_key);
     }
@@ -359,11 +362,11 @@ int dap_chain_net_vpn_client_update(dap_chain_net_t *a_net, const char *a_wallet
     }
 
     char *l_gdb_group = dap_strdup_printf("local.%s", DAP_CHAIN_NET_SRV_VPN_CDB_GDB_PREFIX);
-    if(!dap_global_db_set_sync(l_gdb_group, "wallet_name", a_wallet_name, -1,true))
+    if(dap_global_db_set_sync(l_gdb_group, "wallet_name", a_wallet_name, -1,true))
         return -2;
-    if(!dap_global_db_set_sync(l_gdb_group, "token_name", a_str_token, -1, true))
+    if(dap_global_db_set_sync(l_gdb_group, "token_name", a_str_token, -1, true))
         return -2;
-    if(!dap_global_db_set_sync(l_gdb_group, "value_datoshi", &a_value_datoshi, sizeof(a_value_datoshi), true))
+    if(dap_global_db_set_sync(l_gdb_group, "value_datoshi", &a_value_datoshi, sizeof(a_value_datoshi), true))
         return -2;
     DAP_DELETE(l_gdb_group);
     dap_chain_hash_fast_t *l_hash = dap_chain_net_vpn_client_tx_cond_hash(a_net, l_wallet, a_str_token,
diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c
index d0e5744a2b9fde1e3668c5e4023865bdc06594fa..bc43f524afb9e80d41c58f62895a3ff185663f29 100644
--- a/modules/service/xchange/dap_chain_net_srv_xchange.c
+++ b/modules/service/xchange/dap_chain_net_srv_xchange.c
@@ -712,20 +712,19 @@ static dap_chain_datum_tx_t *s_xchange_tx_create_exchange(dap_chain_net_srv_xcha
 
 
 
-// Put the transaction to mempool or directly to chains & write transaction's hash to the price
+// Put the transaction to mempool
 static bool s_xchange_tx_put(dap_chain_datum_tx_t *a_tx, dap_chain_net_t *a_net)
 {
-    // Put the transaction to mempool or directly to chains
     size_t l_tx_size = dap_chain_datum_tx_get_size(a_tx);
     dap_chain_datum_t *l_datum = dap_chain_datum_create(DAP_CHAIN_DATUM_TX, a_tx, l_tx_size);
     DAP_DELETE(a_tx);
-    dap_chain_t *l_chain = dap_chain_net_get_chain_by_chain_type(a_net, CHAIN_TYPE_TX);
+    dap_chain_t *l_chain = dap_chain_net_get_default_chain_by_chain_type(a_net, CHAIN_TYPE_TX);
     if (!l_chain) {
         DAP_DELETE(l_datum);
         return false;
     }
     // Processing will be made according to autoprocess policy
-    char *l_ret = dap_chain_mempool_datum_add(l_datum, l_chain);
+    char *l_ret = dap_chain_mempool_datum_add(l_datum, l_chain, "hex");
 
     DAP_DELETE(l_datum);
 
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index cfe93722f87d2429da9a08d954f745f3ac8aad46..f5316eea35bc4eda0ff85ddeea2b326528ee3b69 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -185,6 +185,22 @@ static void s_history_callback_round_notify(dap_global_db_context_t *a_context,
     }
 }
 
+static void s_dag_rounds_events_iter(dap_global_db_context_t *a_context,
+                                     int a_rc, const char *a_group,
+                                     const size_t a_values_current, const size_t a_values_count,
+                                     dap_store_obj_t *a_values, void *a_arg)
+{
+    UNUSED(a_group);
+    UNUSED(a_values_current);
+    if (a_rc != DAP_GLOBAL_DB_RC_SUCCESS)
+        return;
+    for (size_t i = 0; i < a_values_count; i++) {
+        dap_store_obj_t *l_obj_cur = a_values + i;
+        l_obj_cur->type = DAP_DB$K_OPTYPE_ADD;
+        s_history_callback_round_notify(a_context, a_values + i, a_arg);
+    }
+}
+
 /**
  * @brief dap_chain_cs_dag_new
  * @param a_chain
@@ -283,7 +299,8 @@ int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg)
     byte_t *l_current_round = dap_global_db_get_sync(l_dag->gdb_group_events_round_new, DAG_ROUND_CURRENT_KEY, NULL, NULL, NULL);
     l_dag->round_current = l_current_round ? *(uint64_t *)l_current_round : 0;
     DAP_DELETE(l_current_round);
-    PVT(l_dag)->mempool_timer = dap_interval_timer_create(5000, (dap_timer_callback_t)dap_chain_node_mempool_process_all, a_chain);
+    dap_global_db_get_all_raw(l_dag->gdb_group_events_round_new, 0, 0, s_dag_rounds_events_iter, l_dag);
+    PVT(l_dag)->mempool_timer = dap_interval_timer_create(15000, (dap_timer_callback_t)dap_chain_node_mempool_process_all, a_chain);
     if (l_dag->is_single_line)
         log_it (L_NOTICE, "DAG chain initialized (single line)");
     else
@@ -1335,7 +1352,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply)
                     dap_string_append_printf( l_str_ret_tmp, "Event %s verification passed\n", l_objs[i].key);
                     // If not verify only mode we add
                     if ( ! l_verify_only ){
-                        dap_chain_atom_ptr_t l_new_atom = (dap_chain_atom_ptr_t)dap_chain_cs_dag_event_copy(l_event, l_event_size); // produce deep copy of event;
+                        dap_chain_atom_ptr_t l_new_atom = DAP_DUP_SIZE(l_event, l_event_size); // produce deep copy of event;
                         memcpy(l_new_atom, l_event, l_event_size);
                         if(s_chain_callback_atom_add(l_chain, l_new_atom,l_event_size) < 0) { // Add new atom in chain
                             DAP_DELETE(l_new_atom);
diff --git a/modules/type/dag/dap_chain_cs_dag_event.c b/modules/type/dag/dap_chain_cs_dag_event.c
index e2ae38fe11c8e8dad3023bd9d44880813e5bf3fa..ee94654a761560067769f36694412596a65adef8 100644
--- a/modules/type/dag/dap_chain_cs_dag_event.c
+++ b/modules/type/dag/dap_chain_cs_dag_event.c
@@ -92,20 +92,6 @@ dap_chain_cs_dag_event_t *dap_chain_cs_dag_event_new(dap_chain_id_t a_chain_id,
     return l_event_new;
 }
 
-/**
- * @brief dap_chain_cs_dag_event_deep_copy
- * @param a_event_src
- * @return
- */
-dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_copy(dap_chain_cs_dag_event_t *a_event_src,size_t a_event_size)
-{
-    if(!a_event_src)
-        return NULL;
-    dap_chain_cs_dag_event_t *l_event_new = DAP_NEW_Z_SIZE(dap_chain_cs_dag_event_t, a_event_size);
-    memcpy(l_event_new, a_event_src, a_event_size);
-    return l_event_new;
-}
-
 /**
  * @brief dap_chain_cs_dag_event_sign_add
  * @param a_event