diff --git a/dap-sdk b/dap-sdk
index 3a4ba03277b237b009c4a1e01efa0dfac83cbac9..62533ab79b3ce00f9c683f2ca5d6301e928c0ba0 160000
--- a/dap-sdk
+++ b/dap-sdk
@@ -1 +1 @@
-Subproject commit 3a4ba03277b237b009c4a1e01efa0dfac83cbac9
+Subproject commit 62533ab79b3ce00f9c683f2ca5d6301e928c0ba0
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 d890a0c2509530eb4af6523e8340b948ad4f5ccc..fd65fc77799b8f83340383c5358f491f82d84e41 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
@@ -456,9 +456,8 @@ static void s_grace_period_start(dap_chain_net_srv_grace_t *a_grace)
                 }
                 a_grace->usage->price = l_price;
             } else {
-                char *l_order_hash_str = dap_chain_hash_fast_to_str_new(&a_grace->usage->static_order_hash);
-                log_it(L_MSG, "Get price from order %s.", l_order_hash_str);
-                DAP_DELETE(l_order_hash_str);
+                log_it(L_MSG, "Get price from order %s.",
+                    dap_chain_hash_fast_to_str_static(&a_grace->usage->static_order_hash));
                 if ((l_price = dap_chain_net_srv_get_price_from_order(a_grace->usage->service, "srv_vpn", &a_grace->usage->static_order_hash))){
                     switch (l_price->units_uid.enm) {
                     case SERV_UNIT_MB:
@@ -620,9 +619,8 @@ static void s_grace_period_start(dap_chain_net_srv_grace_t *a_grace)
                 }
             }
         } else {
-            char *l_order_hash_str = dap_chain_hash_fast_to_str_new(&a_grace->usage->static_order_hash);
-            log_it(L_MSG, "Get price from order %s.", l_order_hash_str);
-            DAP_DELETE(l_order_hash_str);
+            log_it(L_MSG, "Get price from order %s.",
+                dap_chain_hash_fast_to_str_static(&a_grace->usage->static_order_hash));
             if ((l_price = dap_chain_net_srv_get_price_from_order(a_grace->usage->service, "srv_vpn", &a_grace->usage->static_order_hash))){
                 if (l_price->net->pub.id.uint64  != a_grace->usage->net->pub.id.uint64){
                     log_it( L_WARNING, "Pricelist is not for net %s.", a_grace->usage->net->pub.name);
@@ -885,9 +883,8 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item)
                 }
             }
         } else {
-            char *l_order_hash_str = dap_chain_hash_fast_to_str_new(&l_grace->usage->static_order_hash);
-            log_it(L_MSG, "Get price from order %s.", l_order_hash_str);
-            DAP_DELETE(l_order_hash_str);
+            log_it(L_MSG, "Get price from order %s.",
+                dap_chain_hash_fast_to_str_static(&l_grace->usage->static_order_hash));
             if ((l_price = dap_chain_net_srv_get_price_from_order(l_grace->usage->service, "srv_vpn", &l_grace->usage->static_order_hash))){
                 if (l_price->net->pub.id.uint64  != l_grace->usage->net->pub.id.uint64){
                     log_it( L_WARNING, "Pricelist is not for net %s.", l_grace->usage->net->pub.name);
diff --git a/modules/common/dap_chain_common.c b/modules/common/dap_chain_common.c
index 294cb43cf3d393e29c826f57dc143783d4deebbd..dc36c4f7ca29df3b6264a4535e582d4983ca207d 100644
--- a/modules/common/dap_chain_common.c
+++ b/modules/common/dap_chain_common.c
@@ -84,17 +84,10 @@ size_t dap_chain_hash_slow_to_str( dap_chain_hash_slow_t *a_hash, char *a_str, s
  */
 char *dap_chain_addr_to_str(const dap_chain_addr_t *a_addr)
 {
-// sanity check
     dap_return_val_if_pass(!a_addr, NULL);
-    dap_return_val_if_pass(dap_chain_addr_is_blank(a_addr), dap_strdup("null"));
-//func work
-    size_t l_ret_size = DAP_ENC_BASE58_ENCODE_SIZE(sizeof(dap_chain_addr_t));
-    char *l_ret = DAP_NEW_SIZE(char, l_ret_size);
-    if(!dap_enc_base58_encode(a_addr, sizeof(dap_chain_addr_t), l_ret)) {
-        DAP_DELETE(l_ret);
-        return NULL;
-    }
-    return l_ret;
+    dap_return_val_if_pass(dap_chain_addr_is_blank(a_addr), "null");
+    static _Thread_local char s_buf[DAP_ENC_BASE58_ENCODE_SIZE(sizeof(dap_chain_addr_t))] = { '\0' };
+    return dap_enc_base58_encode(a_addr, sizeof(dap_chain_addr_t), s_buf) ? s_buf : NULL;
 }
 
 /**
diff --git a/modules/common/dap_chain_datum.c b/modules/common/dap_chain_datum.c
index fa7959b1a7c1b2f3af5d23b90fdfafc13e15f96d..8558939cbb6d05272c244a55d4f8a0dfc36b283b 100644
--- a/modules/common/dap_chain_datum.c
+++ b/modules/common/dap_chain_datum.c
@@ -46,16 +46,20 @@
  */
 dap_chain_datum_t *dap_chain_datum_create(uint16_t a_type_id, const void *a_data, size_t a_data_size)
 {
-   dap_chain_datum_t *l_datum = DAP_NEW_Z_SIZE(dap_chain_datum_t, sizeof(l_datum->header)+ a_data_size);
+   dap_chain_datum_t *l_datum = DAP_NEW_Z_SIZE(dap_chain_datum_t, sizeof(l_datum->header) + a_data_size);
    if(!l_datum) {
         log_it(L_CRITICAL, "Memory allocation error");
         return NULL;
    }
-   memcpy(l_datum->data, a_data, (uint32_t)a_data_size);        // Compiler warning escape
-   l_datum->header.type_id = a_type_id;
-   l_datum->header.data_size = (uint32_t) a_data_size;
-   l_datum->header.version_id = DAP_CHAIN_DATUM_VERSION;
-   l_datum->header.ts_create =(uint64_t) time(NULL);
+   *l_datum = (dap_chain_datum_t) {
+        .header = {
+            .version_id = DAP_CHAIN_DATUM_VERSION,
+            .type_id    = a_type_id,
+            .data_size  = (uint32_t)a_data_size,
+            .ts_create  = dap_time_now()
+        }
+   };
+   memcpy(l_datum->data, a_data, (uint32_t)a_data_size);
    return  l_datum;
 }
 
@@ -113,16 +117,14 @@ void dap_chain_datum_token_dump_tsd(dap_string_t *a_str_out, dap_chain_datum_tok
         }
         case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY: {     // 256
             uint256_t l_t = uint256_0;
-            char *l_balance = dap_chain_balance_print(_dap_tsd_get_scalar(l_tsd, &l_t));
-            dap_string_append_printf(a_str_out, "total_supply: %s\n", l_balance);
-            DAP_DELETE(l_balance);
+            dap_string_append_printf( a_str_out, "total_supply: %s\n",
+                                     dap_uint256_to_char(_dap_tsd_get_scalar(l_tsd, &l_t), NULL) );
             continue;
         }
         case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SUPPLY_OLD: { // 128
             uint128_t l_t = uint128_0;
-            char *l_balance = dap_chain_balance_print(GET_256_FROM_128(_dap_tsd_get_scalar(l_tsd, &l_t)));
-            dap_string_append_printf(a_str_out, "total_supply: %s\n", l_balance);
-            DAP_DELETE(l_balance);
+            dap_string_append_printf( a_str_out, "total_supply: %s\n",
+                                     dap_uint256_to_char(GET_256_FROM_128(_dap_tsd_get_scalar(l_tsd, &l_t)), NULL) );
             continue;
         }
         case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_SIGNS_VALID: {
@@ -139,11 +141,10 @@ void dap_chain_datum_token_dump_tsd(dap_string_t *a_str_out, dap_chain_datum_tok
                     dap_string_append_printf(a_str_out,"total_pkeys_add: <WRONG CALCULATION FINGERPRINT>\n");
                 } else {
                     if (!dap_strcmp(a_hash_out_type, "hex") || !dap_strcmp(a_hash_out_type, "content_hash"))
-                        l_hash_str = dap_chain_hash_fast_to_str_new(&l_hf);
+                        l_hash_str = dap_chain_hash_fast_to_str_static(&l_hf);
                     else
-                        l_hash_str = dap_enc_base58_encode_hash_to_str(&l_hf);
+                        l_hash_str = dap_enc_base58_encode_hash_to_str_static(&l_hf);
                     dap_string_append_printf(a_str_out, "total_pkeys_add: %s\n", l_hash_str);
-                    DAP_DELETE(l_hash_str);
                 }
             } else
                     dap_string_append_printf(a_str_out,"total_pkeys_add: <WRONG SIZE %u>\n", l_tsd->size);
@@ -152,19 +153,17 @@ void dap_chain_datum_token_dump_tsd(dap_string_t *a_str_out, dap_chain_datum_tok
         case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TOTAL_PKEYS_REMOVE:
                 if(l_tsd->size == sizeof(dap_chain_hash_fast_t) ){
                     char *l_hash_str = (!dap_strcmp(a_hash_out_type,"hex")|| !dap_strcmp(a_hash_out_type, "content_hash"))
-                            ? dap_chain_hash_fast_to_str_new((dap_chain_hash_fast_t*) l_tsd->data)
-                            : dap_enc_base58_encode_hash_to_str((dap_chain_hash_fast_t*) l_tsd->data);
+                            ? dap_chain_hash_fast_to_str_static((dap_chain_hash_fast_t*) l_tsd->data)
+                            : dap_enc_base58_encode_hash_to_str_static((dap_chain_hash_fast_t*) l_tsd->data);
                     dap_string_append_printf(a_str_out,"total_pkeys_remove: %s\n", l_hash_str);
-                    DAP_DELETE( l_hash_str );
                 } else
                     dap_string_append_printf(a_str_out,"total_pkeys_remove: <WRONG SIZE %u>\n", l_tsd->size);
             continue;
             case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_DELEGATE_EMISSION_FROM_STAKE_LOCK: {
-                char *balance = NULL;
                 dap_chain_datum_token_tsd_delegate_from_stake_lock_t *l_tsd_section = _dap_tsd_get_object(l_tsd, dap_chain_datum_token_tsd_delegate_from_stake_lock_t);
+                char *l_balance, *l_tmp = dap_uint256_to_char(l_tsd_section->emission_rate, &l_balance);
                 dap_string_append_printf(a_str_out, "ticker_token_from: %s\nemission_rate: %s\n",
-                                         l_tsd_section->ticker_token_from, (balance = dap_chain_balance_to_coins(l_tsd_section->emission_rate)));
-                DAP_DEL_Z(balance);
+                                         l_tsd_section->ticker_token_from, l_balance);
             }continue;
             case DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_DATUM_TYPE_ALLOWED_ADD  :
                 dap_string_append_printf(a_str_out,"datum_type_allowed_add: %s\n",
@@ -402,18 +401,15 @@ bool dap_chain_datum_dump_tx(dap_chain_datum_tx_t *a_datum,
         l_is_first = true;
     char l_tmp_buf[DAP_TIME_STR_SIZE];
     char *l_hash_str = dap_strcmp(a_hash_out_type, "hex")
-            ? dap_enc_base58_encode_hash_to_str(a_tx_hash)
-            : dap_chain_hash_fast_to_str_new(a_tx_hash);
+            ? dap_enc_base58_encode_hash_to_str_static(a_tx_hash)
+            : dap_chain_hash_fast_to_str_static(a_tx_hash);
     dap_time_to_str_rfc822(l_tmp_buf, DAP_TIME_STR_SIZE, a_datum->header.ts_created);
     dap_string_append_printf(a_str_out, "transaction:%s hash %s\n TS Created: %s%s%s\n Items:\n",
                              l_is_first ? " (emit)" : "", l_hash_str, l_tmp_buf,
                              a_ticker ? " Token ticker: " : "", a_ticker ? a_ticker : "");
-    DAP_DELETE(l_hash_str);
     uint32_t l_tx_items_count = 0;
     uint32_t l_tx_items_size = a_datum->header.tx_items_size;
-    dap_sign_t *l_sign_tmp;
     dap_hash_fast_t *l_hash_tmp = NULL;
-    dap_pkey_t *l_pkey_tmp;
     while (l_tx_items_count < l_tx_items_size) {
         uint8_t *item = a_datum->tx_items + l_tx_items_count;
         size_t l_item_tx_size = dap_chain_datum_item_tx_get_size(item);
@@ -421,50 +417,43 @@ bool dap_chain_datum_dump_tx(dap_chain_datum_tx_t *a_datum,
         case TX_ITEM_TYPE_IN:
             l_hash_tmp = &((dap_chain_tx_in_t*)item)->header.tx_prev_hash;
             if (dap_hash_fast_is_blank(l_hash_tmp)) {
-                l_hash_str = dap_strdup("BLANK");
+                l_hash_str = "BLANK";
             } else {
                 l_hash_str = dap_strcmp(a_hash_out_type, "hex")
-                        ? dap_enc_base58_encode_hash_to_str(l_hash_tmp)
-                        : dap_chain_hash_fast_to_str_new(l_hash_tmp);
+                        ? dap_enc_base58_encode_hash_to_str_static(l_hash_tmp)
+                        : dap_chain_hash_fast_to_str_static(l_hash_tmp);
             }
             dap_string_append_printf(a_str_out, "\t IN:\nTx_prev_hash: %s\n"
                                                 "\t\t Tx_out_prev_idx: %u\n",
                                         l_hash_str,
                                         ((dap_chain_tx_in_t*)item)->header.tx_out_prev_idx);
-            DAP_DELETE(l_hash_str);
             break;
         case TX_ITEM_TYPE_OUT_OLD: {
-            char *l_value_str = dap_chain_balance_to_coins(dap_chain_uint256_from(
-                                                               ((dap_chain_tx_out_old_t*)item)->header.value));
-            char *l_addr_str = dap_chain_addr_to_str(&((dap_chain_tx_out_old_t*)item)->addr);
+            char *l_value_str = dap_uint256_to_char(
+                dap_chain_uint256_from(((dap_chain_tx_out_old_t*)item)->header.value), NULL );
             dap_string_append_printf(a_str_out, "\t OUT OLD (64):\n"
                                                 "\t\t Value: %s (%"DAP_UINT64_FORMAT_U")\n"
                                                 "\t\t Address: %s\n",
                                         l_value_str,
                                         ((dap_chain_tx_out_old_t*)item)->header.value,
-                                        l_addr_str);
-            DAP_DELETE(l_value_str);
-            DAP_DELETE(l_addr_str);
+                                        dap_chain_addr_to_str(&((dap_chain_tx_out_old_t*)item)->addr));
         } break;
         case TX_ITEM_TYPE_OUT: { // 256
-            char *l_value_str = dap_chain_balance_print(((dap_chain_tx_out_t*)item)->header.value);
-            char *l_coins_str = dap_chain_balance_to_coins(((dap_chain_tx_out_t*)item)->header.value);
-            char *l_addr_str = dap_chain_addr_to_str(&((dap_chain_tx_out_t*)item)->addr);
+            char    *l_coins_str,
+                    *l_value_str = dap_uint256_to_char(((dap_chain_tx_out_t*)item)->header.value, &l_coins_str),
+                    *l_addr_str = dap_chain_addr_to_str(&((dap_chain_tx_out_t*)item)->addr);
             dap_string_append_printf(a_str_out, "\t OUT:\n"
                                                 "\t\t Value: %s (%s)\n"
                                                 "\t\t Address: %s\n",
                                         l_coins_str,
                                         l_value_str,
                                         l_addr_str);
-            DAP_DELETE(l_value_str);
-            DAP_DELETE(l_coins_str);
-            DAP_DELETE(l_addr_str);
         } break;
         case TX_ITEM_TYPE_IN_EMS: {
             l_hash_tmp = &((dap_chain_tx_in_ems_t*)item)->header.token_emission_hash;
             l_hash_str = dap_strcmp(a_hash_out_type, "hex")
-                    ? dap_enc_base58_encode_hash_to_str(l_hash_tmp)
-                    : dap_chain_hash_fast_to_str_new(l_hash_tmp);
+                    ? dap_enc_base58_encode_hash_to_str_static(l_hash_tmp)
+                    : dap_chain_hash_fast_to_str_static(l_hash_tmp);
             dap_string_append_printf(a_str_out, "\t IN_EMS:\n"
                                                 "\t\t ticker: %s \n"
                                                 "\t\t token_emission_hash: %s\n"
@@ -472,7 +461,6 @@ bool dap_chain_datum_dump_tx(dap_chain_datum_tx_t *a_datum,
                                                 ((dap_chain_tx_in_ems_t*)item)->header.ticker,
                                                 l_hash_str,
                                                 ((dap_chain_tx_in_ems_t*)item)->header.token_emission_chain_id.uint64);
-            DAP_DELETE(l_hash_str);
         } break;
             /*
         case TX_ITEM_TYPE_IN_EMS_EXT: {
@@ -499,28 +487,22 @@ bool dap_chain_datum_dump_tx(dap_chain_datum_tx_t *a_datum,
         case TX_ITEM_TYPE_IN_REWARD: {
             l_hash_tmp = &((dap_chain_tx_in_reward_t *)item)->block_hash;
             l_hash_str = dap_strcmp(a_hash_out_type, "hex")
-                    ? dap_enc_base58_encode_hash_to_str(l_hash_tmp)
-                    : dap_chain_hash_fast_to_str_new(l_hash_tmp);
+                    ? dap_enc_base58_encode_hash_to_str_static(l_hash_tmp)
+                    : dap_chain_hash_fast_to_str_static(l_hash_tmp);
             dap_string_append_printf(a_str_out, "\t IN_REWARD:\n"
                                                 "\t\t block_hash: %s\n",
                                                 l_hash_str);
-            DAP_DELETE(l_hash_str);
         } break;
 
         case TX_ITEM_TYPE_SIG: {
-            l_sign_tmp = dap_chain_datum_tx_item_sign_get_sig((dap_chain_tx_sig_t *)item);
-            dap_sign_get_information(l_sign_tmp, a_str_out, a_hash_out_type);
+            dap_sign_t *l_sign = dap_chain_datum_tx_item_sign_get_sig((dap_chain_tx_sig_t*)item);
+            dap_sign_get_information(l_sign, a_str_out, a_hash_out_type);
             dap_chain_addr_t l_sender_addr;
-            dap_chain_addr_fill_from_sign(&l_sender_addr, l_sign_tmp, a_net_id);
-            const char *l_addr_str = dap_chain_addr_to_str(&l_sender_addr);
-            dap_string_append_printf(a_str_out, "\tSender addr: %s\n", l_addr_str);
-            DAP_DELETE(l_addr_str);
+            dap_chain_addr_fill_from_sign(&l_sender_addr, l_sign, a_net_id);
+            dap_string_append_printf(a_str_out, "\tSender addr: %s\n", dap_chain_addr_to_str(&l_sender_addr));
         } break;
         case TX_ITEM_TYPE_RECEIPT: {
-            char *l_value_str = dap_chain_balance_print(
-                        ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.value_datoshi);
-            char *l_coins_str = dap_chain_balance_to_coins(
-                        ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.value_datoshi);
+            char *l_coins_str, *l_value_str = dap_uint256_to_char(((dap_chain_datum_tx_receipt_t*)item)->receipt_info.value_datoshi, &l_coins_str);
             dap_string_append_printf(a_str_out, "\t Receipt:\n"
                                                 "\t\t size: %"DAP_UINT64_FORMAT_U"\n"
                                                 "\t\t ext size: %"DAP_UINT64_FORMAT_U"\n"
@@ -536,54 +518,28 @@ bool dap_chain_datum_dump_tx(dap_chain_datum_tx_t *a_datum,
                                      dap_chain_srv_unit_enum_to_str(((dap_chain_datum_tx_receipt_t*)item)->receipt_info.units_type.enm),
                                      l_coins_str,
                                      l_value_str);
-            if (((dap_chain_datum_tx_receipt_t*)item)->exts_size == sizeof(dap_sign_t) + sizeof(dap_sign_t)){
-                dap_sign_t *l_provider = DAP_NEW_Z(dap_sign_t);
-                if (!l_provider) {
-                    log_it(L_CRITICAL, "Memory allocation error");
-                    DAP_DELETE(l_value_str);
-                    DAP_DELETE(l_coins_str);
-                    return false;
-                }
-                memcpy(l_provider, ((dap_chain_datum_tx_receipt_t*)item)->exts_n_signs, sizeof(dap_sign_t));
-                dap_sign_t *l_client = DAP_NEW_Z(dap_sign_t);
-                if (!l_client) {
-                    log_it(L_CRITICAL, "Memory allocation error");
-                    DAP_DEL_Z(l_provider);
-                    DAP_DELETE(l_value_str);
-                    DAP_DELETE(l_coins_str);
-                    return false;
-                }
-                memcpy(l_client,
-                       ((dap_chain_datum_tx_receipt_t*)item)->exts_n_signs + sizeof(dap_sign_t),
-                       sizeof(dap_sign_t));
-                dap_string_append_printf(a_str_out, "Exts:\n"
-                                                    "   Provider:\n");
-                dap_sign_get_information(l_provider, a_str_out, a_hash_out_type);
+            dap_string_append_printf(a_str_out, "Exts:\n");                         
+            switch ( ((dap_chain_datum_tx_receipt_t*)item)->exts_size ) {
+            case (sizeof(dap_sign_t) * 2): {
+                dap_sign_t *l_client = DAP_CAST_PTR( dap_sign_t, ((dap_chain_datum_tx_receipt_t*)item)->exts_n_signs + sizeof(dap_sign_t) );
                 dap_string_append_printf(a_str_out, "   Client:\n");
                 dap_sign_get_information(l_client, a_str_out, a_hash_out_type);
-            } else if (((dap_chain_datum_tx_receipt_t*)item)->exts_size == sizeof(dap_sign_t)) {
-                dap_sign_t *l_provider = DAP_NEW_Z(dap_sign_t);
-                if (!l_provider) {
-                    log_it(L_CRITICAL, "Memory allocation error");
-                    DAP_DELETE(l_value_str);
-                    DAP_DELETE(l_coins_str);
-                    return false;
-                }
-                memcpy(l_provider, ((dap_chain_datum_tx_receipt_t*)item)->exts_n_signs, sizeof(dap_sign_t));
-                dap_string_append_printf(a_str_out, "Exts:\n"
-                                                    "   Provider:\n");
+            }
+            case (sizeof(dap_sign_t)): {
+                dap_sign_t *l_provider = DAP_CAST_PTR( dap_sign_t, ((dap_chain_datum_tx_receipt_t*)item)->exts_n_signs );
+                dap_string_append_printf(a_str_out, "   Provider:\n");
                 dap_sign_get_information(l_provider, a_str_out, a_hash_out_type);
+                break;
+            }
             }
-            DAP_DELETE(l_value_str);
-            DAP_DELETE(l_coins_str);
         } break;
         case TX_ITEM_TYPE_PKEY: {
-            l_pkey_tmp = (dap_pkey_t*)((dap_chain_tx_pkey_t*)item)->pkey;
-            dap_chain_hash_fast_t l_pkey_hash_tmp;
-            dap_hash_fast(l_pkey_tmp->pkey, l_pkey_tmp->header.size, &l_pkey_hash_tmp);
+            dap_pkey_t *l_pkey = (dap_pkey_t*)((dap_chain_tx_pkey_t*)item)->pkey;
+            dap_chain_hash_fast_t l_pkey_hash;
+            dap_hash_fast(l_pkey->pkey, l_pkey->header.size, &l_pkey_hash);
             l_hash_str = dap_strcmp(a_hash_out_type, "hex")
-                    ? dap_enc_base58_encode_hash_to_str(&l_pkey_hash_tmp)
-                    : dap_chain_hash_fast_to_str_new(&l_pkey_hash_tmp);
+                    ? dap_enc_base58_encode_hash_to_str_static(&l_pkey_hash)
+                    : dap_chain_hash_fast_to_str_static(&l_pkey_hash);
             dap_string_append_printf(a_str_out, "\t PKey: \n"
                                                 "\t\t SIG type: %s\n"
                                                 "\t\t SIG size: %u\n"
@@ -595,10 +551,9 @@ bool dap_chain_datum_dump_tx(dap_chain_datum_tx_t *a_datum,
                                      dap_sign_type_to_str(((dap_chain_tx_pkey_t*)item)->header.sig_type),
                                      ((dap_chain_tx_pkey_t*)item)->header.sig_size,
                                      ((dap_chain_tx_pkey_t*)item)->seq_no,
-                                     dap_pkey_type_to_str(l_pkey_tmp->header.type),
-                                     l_pkey_tmp->header.size,
+                                     dap_pkey_type_to_str(l_pkey->header.type),
+                                     l_pkey->header.size,
                                      l_hash_str);
-            DAP_DELETE(l_hash_str);
         } break;
         case TX_ITEM_TYPE_TSD: {
             dap_string_append_printf(a_str_out, "\t TSD data: \n"
@@ -610,19 +565,17 @@ bool dap_chain_datum_dump_tx(dap_chain_datum_tx_t *a_datum,
         case TX_ITEM_TYPE_IN_COND:
             l_hash_tmp = &((dap_chain_tx_in_cond_t*)item)->header.tx_prev_hash;
             l_hash_str = dap_strcmp(a_hash_out_type, "hex")
-                    ? dap_enc_base58_encode_hash_to_str(l_hash_tmp)
-                    : dap_chain_hash_fast_to_str_new(l_hash_tmp);
+                    ? dap_enc_base58_encode_hash_to_str_static(l_hash_tmp)
+                    : dap_chain_hash_fast_to_str_static(l_hash_tmp);
             dap_string_append_printf(a_str_out, "\t IN COND:\n\t\tReceipt_idx: %u\n"
                                                 "\t\t Tx_prev_hash: %s\n"
                                                 "\t\t Tx_out_prev_idx: %u\n",
                                      ((dap_chain_tx_in_cond_t*)item)->header.receipt_idx,
                                      l_hash_str,
                                      ((dap_chain_tx_in_cond_t*)item)->header.tx_out_prev_idx);
-            DAP_DELETE(l_hash_str);
             break;
         case TX_ITEM_TYPE_OUT_COND: {
-            char *l_value_str = dap_chain_balance_print(((dap_chain_tx_out_cond_t*)item)->header.value);
-            char *l_coins_str = dap_chain_balance_to_coins(((dap_chain_tx_out_cond_t*)item)->header.value);
+            char *l_coins_str, *l_value_str = dap_uint256_to_char(((dap_chain_tx_out_cond_t*)item)->header.value, &l_coins_str);
             dap_time_t l_ts_exp = ((dap_chain_tx_out_cond_t*)item)->header.ts_expires;
             dap_time_to_str_rfc822(l_tmp_buf, DAP_TIME_STR_SIZE, l_ts_exp);
             dap_string_append_printf(a_str_out, "\t OUT COND:\n"
@@ -634,16 +587,14 @@ bool dap_chain_datum_dump_tx(dap_chain_datum_tx_t *a_datum,
                                      l_ts_exp ? l_tmp_buf : "never\n", l_coins_str, l_value_str,
                                      dap_chain_tx_out_cond_subtype_to_str(((dap_chain_tx_out_cond_t*)item)->header.subtype),
                                      ((dap_chain_tx_out_cond_t*)item)->header.srv_uid.uint64);
-            DAP_DELETE(l_value_str);
-            DAP_DELETE(l_coins_str);
             switch (((dap_chain_tx_out_cond_t*)item)->header.subtype) {
                 case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY: {
-                    char *l_value_str = dap_chain_balance_print(((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi);
-                    char *l_coins_str = dap_chain_balance_to_coins(((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi);
+                    char *l_coins_str, *l_value_str =
+                        dap_uint256_to_char( ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi, &l_coins_str );
                     l_hash_tmp = &((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.pkey_hash;
                     l_hash_str = dap_strcmp(a_hash_out_type, "hex")
-                            ? dap_enc_base58_encode_hash_to_str(l_hash_tmp)
-                            : dap_chain_hash_fast_to_str_new(l_hash_tmp);
+                            ? dap_enc_base58_encode_hash_to_str_static(l_hash_tmp)
+                            : dap_chain_hash_fast_to_str_static(l_hash_tmp);
                     dap_string_append_printf(a_str_out, "\t\t\t unit: 0x%08x\n"
                                                         "\t\t\t pkey: %s\n"
                                                         "\t\t\t max price: %s (%s)\n",
@@ -651,36 +602,30 @@ bool dap_chain_datum_dump_tx(dap_chain_datum_tx_t *a_datum,
                                              l_hash_str,
                                              l_coins_str,
                                              l_value_str);
-                    DAP_DELETE(l_hash_str);
-                    DAP_DELETE(l_value_str);
-                    DAP_DELETE(l_coins_str);
                 } break;
                 case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE: {
                     dap_chain_node_addr_t *l_signer_node_addr = &((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake_pos_delegate.signer_node_addr;
                     dap_chain_addr_t *l_signing_addr = &((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake_pos_delegate.signing_addr;
-                    char *l_addr_str = dap_chain_addr_to_str(l_signing_addr);
                     l_hash_tmp = &l_signing_addr->data.hash_fast;
                     l_hash_str = dap_strcmp(a_hash_out_type, "hex")
-                            ? dap_enc_base58_encode_hash_to_str(l_hash_tmp)
-                            : dap_chain_hash_fast_to_str_new(l_hash_tmp);
+                            ? dap_enc_base58_encode_hash_to_str_static(l_hash_tmp)
+                            : dap_chain_hash_fast_to_str_static(l_hash_tmp);
                     dap_string_append_printf(a_str_out, "\t\t\t signing_addr: %s\n"
                                                         "\t\t\t with pkey hash %s\n"
                                                         "\t\t\t signer_node_addr: "NODE_ADDR_FP_STR"\n",
-                                                        l_addr_str,
+                                                        dap_chain_addr_to_str(l_signing_addr),
                                                         l_hash_str,
                                                         NODE_ADDR_FP_ARGS(l_signer_node_addr));
-                    DAP_DELETE(l_addr_str);
-                    DAP_DELETE(l_hash_str);
                 } break;
                 case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE: {
-                    char *l_rate_str = dap_chain_balance_to_coins(((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.rate);
+                    char *l_rate_str, *l_tmp_str =
+                        dap_uint256_to_char( (((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.rate), &l_rate_str );
                     dap_string_append_printf(a_str_out, "\t\t\t net id: 0x%016"DAP_UINT64_FORMAT_x"\n"
                                                         "\t\t\t buy_token: %s\n"
                                                         "\t\t\t rate: %s\n",
                                              ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.buy_net_id.uint64,
                                              ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.buy_token,
                                              l_rate_str);
-                    DAP_DELETE(l_rate_str);
                 } break;
                 case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK: {
                     dap_time_t l_ts_unlock = ((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake_lock.time_unlock;
@@ -691,20 +636,15 @@ bool dap_chain_datum_dump_tx(dap_chain_datum_tx_t *a_datum,
             }
         } break;
         case TX_ITEM_TYPE_OUT_EXT: {
-            char *l_value_str = dap_chain_balance_print(((dap_chain_tx_out_ext_t*)item)->header.value);
-            char *l_coins_str = dap_chain_balance_to_coins(((dap_chain_tx_out_ext_t*)item)->header.value);
-            char *l_addr_str = dap_chain_addr_to_str(&((dap_chain_tx_out_ext_t*)item)->addr);
+            char *l_coins_str, *l_value_str = dap_uint256_to_char( ((dap_chain_tx_out_ext_t*)item)->header.value, &l_coins_str );
             dap_string_append_printf(a_str_out, "\t OUT EXT:\n"
                                                 "\t\t Addr: %s\n"
                                                 "\t\t Token: %s\n"
                                                 "\t\t Value: %s (%s)\n",
-                                     l_addr_str,
+                                     dap_chain_addr_to_str(&((dap_chain_tx_out_ext_t*)item)->addr),
                                      ((dap_chain_tx_out_ext_t*)item)->token,
                                      l_coins_str,
                                      l_value_str);
-            DAP_DELETE(l_addr_str);
-            DAP_DELETE(l_value_str);
-            DAP_DELETE(l_coins_str);
         } break;
         case TX_ITEM_TYPE_VOTING:{
             int l_tsd_size = 0;
@@ -737,11 +677,10 @@ bool dap_chain_datum_dump_tx(dap_chain_datum_tx_t *a_datum,
         } break;
         case TX_ITEM_TYPE_VOTE:{
             dap_chain_tx_vote_t *l_vote_item = (dap_chain_tx_vote_t *)item;
-            char *l_hash_str = dap_chain_hash_fast_to_str_new(&l_vote_item->voting_hash);
+            char *l_hash_str = dap_chain_hash_fast_to_str_static(&l_vote_item->voting_hash);
             dap_string_append_printf(a_str_out, "\t VOTE: \n"
                                                 "\t Voting hash: %s\n"
                                                 "\t Vote answer idx: %"DAP_UINT64_FORMAT_U"\n", l_hash_str, l_vote_item->answer_idx);
-            DAP_DELETE(l_hash_str);
         } break;
         default:
             dap_string_append_printf(a_str_out, " This transaction have unknown item type \n");
@@ -777,8 +716,8 @@ void dap_chain_datum_dump(dap_string_t *a_str_out, dap_chain_datum_t *a_datum, c
     dap_hash_fast_t l_datum_hash;
     dap_hash_fast(a_datum->data, a_datum->header.data_size, &l_datum_hash);
     char *l_hash_str = dap_strcmp(a_hash_out_type, "hex")
-            ? dap_enc_base58_encode_hash_to_str(&l_datum_hash)
-            : dap_chain_hash_fast_to_str_new(&l_datum_hash);
+            ? dap_enc_base58_encode_hash_to_str_static(&l_datum_hash)
+            : dap_chain_hash_fast_to_str_static(&l_datum_hash);
     switch (a_datum->header.type_id) {
         case DAP_CHAIN_DATUM_TOKEN_DECL: {
             size_t l_token_size = a_datum->header.data_size;
@@ -799,104 +738,88 @@ void dap_chain_datum_dump(dap_string_t *a_str_out, dap_chain_datum_t *a_datum, c
                     dap_string_append(a_str_out,"type: DECL\n");
                     switch (l_token->subtype) {
                         case DAP_CHAIN_DATUM_TOKEN_SUBTYPE_PRIVATE:{
-                            char *l_value_str = dap_chain_balance_print(l_token->total_supply);
                             dap_string_append(a_str_out,"subtype: PRIVATE\n");
                             dap_string_append_printf(a_str_out, "decimals: %d\n", l_token->header_private_decl.decimals);
                             dap_string_append_printf(a_str_out, "auth signs (valid/total) %u/%u\n", l_token->signs_valid, l_token->signs_total);
-                            dap_string_append_printf(a_str_out, "total_supply: %s\n", l_value_str);
+                            dap_string_append_printf(a_str_out, "total_supply: %s\n", dap_uint256_to_char(l_token->total_supply, NULL));
                             dap_string_append(a_str_out,"flags: ");
                             dap_chain_datum_token_flags_dump(a_str_out, l_token->header_private_update.flags);
                             dap_chain_datum_token_dump_tsd(a_str_out, l_token, l_token_size, a_hash_out_type);
                             size_t l_certs_field_size = l_token_size - sizeof(*l_token) - l_token->header_private_update.tsd_total_size;
                             dap_chain_datum_token_certs_dump(a_str_out, l_token->data_n_tsd + l_token->header_private_update.tsd_total_size,
                                                              l_certs_field_size, a_hash_out_type);
-                            DAP_DEL_Z(l_value_str);
-                        }break;
+                        } break;
                         case DAP_CHAIN_DATUM_TOKEN_SUBTYPE_NATIVE: {
-                            char *l_value_str = dap_chain_balance_print(l_token->total_supply);
                             dap_string_append(a_str_out, "subtype: CF20\n");
                             dap_string_append_printf(a_str_out, "decimals: %d\n", l_token->header_native_decl.decimals);
                             dap_string_append_printf(a_str_out, "auth signs (valid/total) %u/%u\n", l_token->signs_valid, l_token->signs_total);
-                            dap_string_append_printf(a_str_out, "total_supply: %s\n", l_value_str);
+                            dap_string_append_printf(a_str_out, "total_supply: %s\n", dap_uint256_to_char(l_token->total_supply, NULL));
                             dap_string_append(a_str_out, "flags: ");
                             dap_chain_datum_token_flags_dump(a_str_out, l_token->header_native_decl.flags);
                             dap_chain_datum_token_dump_tsd(a_str_out, l_token, l_token_size, a_hash_out_type);
                             size_t l_certs_field_size = l_token_size - sizeof(*l_token) - l_token->header_native_decl.tsd_total_size;
                             dap_chain_datum_token_certs_dump(a_str_out, l_token->data_n_tsd + l_token->header_native_decl.tsd_total_size,
                                                              l_certs_field_size, a_hash_out_type);
-                            DAP_DEL_Z(l_value_str);
-                        }break;
+                        } break;
                         case DAP_CHAIN_DATUM_TOKEN_SUBTYPE_PUBLIC: {
-                            char *l_premine_supply = dap_chain_balance_print(l_token->header_public.premine_supply);
                             dap_chain_addr_t l_premine_addr = l_token->header_public.premine_address;
-                            char *l_premine_addr_str = dap_chain_addr_to_str(&l_premine_addr);
                             dap_string_append(a_str_out, "subtype: PUBLIC\n");
-                            dap_string_append_printf(a_str_out, "premine_supply: %s", l_premine_supply);
-                            dap_string_append_printf(a_str_out, "premine_address: %s", l_premine_addr_str);
+                            dap_string_append_printf(a_str_out, "premine_supply: %s", dap_uint256_to_char(l_token->header_public.premine_supply, NULL));
+                            dap_string_append_printf(a_str_out, "premine_address: %s", dap_chain_addr_to_str(&l_premine_addr));
                             dap_string_append(a_str_out, "flags: ");
                             dap_chain_datum_token_flags_dump(a_str_out, l_token->header_public.flags);
-                            DAP_DELETE(l_premine_supply);
-                            DAP_DELETE(l_premine_addr_str);
-                        }break;
+                        } break;
                     }
-                }break;
+                } break;
                 case DAP_CHAIN_DATUM_TOKEN_TYPE_UPDATE: {
                     dap_string_append(a_str_out,"type: UPDATE\n");
                     switch (l_token->subtype) {
                         case DAP_CHAIN_DATUM_TOKEN_SUBTYPE_PRIVATE: {
-                            char *l_value_str = dap_chain_balance_print(l_token->total_supply);
                             dap_string_append(a_str_out,"subtype: PRIVATE\n");
                             dap_string_append_printf(a_str_out, "decimals: %d\n", l_token->header_private_decl.decimals);
                             dap_string_append_printf(a_str_out, "auth signs (valid/total) %u/%u\n", l_token->signs_valid, l_token->signs_total);
-                            dap_string_append_printf(a_str_out, "total_supply: %s\n", l_value_str);
+                            dap_string_append_printf(a_str_out, "total_supply: %s\n", dap_uint256_to_char(l_token->total_supply, NULL));
                             dap_string_append(a_str_out,"flags: ");
                             dap_chain_datum_token_flags_dump(a_str_out, l_token->header_private_update.flags);
                             dap_chain_datum_token_dump_tsd(a_str_out, l_token, l_token_size, a_hash_out_type);
                             size_t l_certs_field_size = l_token_size - sizeof(*l_token) - l_token->header_private_update.tsd_total_size;
                             dap_chain_datum_token_certs_dump(a_str_out, l_token->data_n_tsd + l_token->header_private_update.tsd_total_size,
                                                              l_certs_field_size, a_hash_out_type);
-                            DAP_DEL_Z(l_value_str);
-                        }break;
+                        } break;
                         case DAP_CHAIN_DATUM_TOKEN_SUBTYPE_NATIVE: {
-                            char *l_value_str = dap_chain_balance_print(l_token->total_supply);
                             dap_string_append_printf(a_str_out,"subtype: CF20\n");
                             dap_string_append_printf(a_str_out, "decimals: %d\n", l_token->header_native_update.decimals);
                             dap_string_append_printf(a_str_out, "auth signs (valid/total) %u/%u\n", l_token->signs_valid, l_token->signs_total);
-                            dap_string_append_printf(a_str_out, "total_supply: %s\n", l_value_str);
+                            dap_string_append_printf(a_str_out, "total_supply: %s\n", dap_uint256_to_char(l_token->total_supply, NULL));
                             dap_string_append(a_str_out, "flags: ");
                             dap_chain_datum_token_flags_dump(a_str_out, l_token->header_native_update.flags);
                             dap_chain_datum_token_dump_tsd(a_str_out, l_token, l_token_size, a_hash_out_type);
                             size_t l_certs_field_size = l_token_size - sizeof(*l_token) - l_token->header_native_update.tsd_total_size;
                             dap_chain_datum_token_certs_dump(a_str_out, l_token->data_n_tsd + l_token->header_native_update.tsd_total_size,
                                                              l_certs_field_size, a_hash_out_type);
-                            DAP_DEL_Z(l_value_str);
-                        }break;
+                        } break;
                     }
-                }break;
+                } break;
                 default:
                     dap_string_append(a_str_out,"type: UNKNOWN\n");
                     break;
             }
             if (l_token->subtype == DAP_CHAIN_DATUM_TOKEN_SUBTYPE_SIMPLE ) {
-                char *l_value_str = dap_chain_balance_print(l_token->total_supply);
                 dap_string_append(a_str_out, "subtype: SIMPLE\n");
                 dap_string_append_printf(a_str_out, "decimals: %d\n", l_token->header_simple.decimals);
                 dap_string_append_printf(a_str_out, "sign_total: %hu\n", l_token->signs_total );
                 dap_string_append_printf(a_str_out, "sign_valid: %hu\n", l_token->signs_valid );
-                dap_string_append_printf(a_str_out, "total_supply: %s\n", l_value_str);
+                dap_string_append_printf(a_str_out, "total_supply: %s\n", dap_uint256_to_char(l_token->total_supply, NULL));
                 size_t l_certs_field_size = l_token_size - sizeof(*l_token);
                 dap_chain_datum_token_certs_dump(a_str_out, l_token->data_n_tsd,
                                                  l_certs_field_size, a_hash_out_type);
-                DAP_DEL_Z(l_value_str);
             }
             DAP_DELETE(l_token);
         } break;
         case DAP_CHAIN_DATUM_TOKEN_EMISSION: {
-            size_t l_emisssion_size = a_datum->header.data_size;
-            dap_chain_datum_token_emission_t *l_emission = dap_chain_datum_emission_read(a_datum->data, &l_emisssion_size);
-            char *l_value_str = dap_chain_balance_print(l_emission->hdr.value);
-            char *l_coins_str = dap_chain_balance_to_coins(l_emission->hdr.value);
-            char *l_addr_str = dap_chain_addr_to_str(&(l_emission->hdr.address));
+            size_t l_emission_size = a_datum->header.data_size;
+            dap_chain_datum_token_emission_t *l_emission = dap_chain_datum_emission_read(a_datum->data, &l_emission_size);
+            char *l_coins_str, *l_value_str = dap_uint256_to_char(l_emission->hdr.value, &l_coins_str);
             dap_string_append_printf(a_str_out, "emission: hash %s\n\t%s(%s) %s, type: %s, version: %d\n",
                                     l_hash_str,
                                     l_coins_str,
@@ -904,10 +827,7 @@ void dap_chain_datum_dump(dap_string_t *a_str_out, dap_chain_datum_t *a_datum, c
                                     l_emission->hdr.ticker,
                                     c_dap_chain_datum_token_emission_type_str[l_emission->hdr.type],
                                     l_emission->hdr.version);
-            dap_string_append_printf(a_str_out, "  to addr: %s\n", l_addr_str);
-            DAP_DELETE(l_value_str);
-            DAP_DELETE(l_coins_str);
-            DAP_DELETE(l_addr_str);
+            dap_string_append_printf(a_str_out, "  to addr: %s\n", dap_chain_addr_to_str(&(l_emission->hdr.address)));
             switch (l_emission->hdr.type) {
                 case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_UNDEFINED:
                     break;
@@ -917,10 +837,10 @@ void dap_chain_datum_dump(dap_string_t *a_str_out, dap_chain_datum_t *a_datum, c
                                              l_emission->data.type_auth.tsd_total_size);
 
                     if (  ( (void *) l_emission->tsd_n_signs + l_emission->data.type_auth.tsd_total_size) >
-                          ((void *) l_emission + l_emisssion_size) )
+                          ((void *) l_emission + l_emission_size) )
                     {
                         log_it(L_ERROR, "Illformed DATUM type %d, TSD section is out-of-buffer (%" DAP_UINT64_FORMAT_U " vs %zu)",
-                            l_emission->hdr.type, l_emission->data.type_auth.tsd_total_size, l_emisssion_size);
+                            l_emission->hdr.type, l_emission->data.type_auth.tsd_total_size, l_emission_size);
 
                         dap_string_append_printf(a_str_out, "  Skip incorrect or illformed DATUM");
                         break;
@@ -939,21 +859,19 @@ void dap_chain_datum_dump(dap_string_t *a_str_out, dap_chain_datum_t *a_datum, c
                     );
                 break;
                 case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_SMART_CONTRACT: {
-                    char l_time_str[70];
-                    char *l_addr = dap_chain_addr_to_str(&l_emission->data.type_presale.addr);
+                    char l_time_str[32];
                     // get time of create datum
-                    if(dap_time_to_str_rfc822(l_time_str, 71, l_emission->data.type_presale.lock_time) < 1)
+                    if(dap_time_to_str_rfc822(l_time_str, sizeof(l_time_str), l_emission->data.type_presale.lock_time) < 1)
                             l_time_str[0] = '\0';
                     dap_string_append_printf(a_str_out, "  flags: 0x%x, lock_time: %s\n", l_emission->data.type_presale.flags, l_time_str);
-                    dap_string_append_printf(a_str_out, "  addr: %s\n", l_addr);
-                    DAP_DELETE(l_addr);
+                    dap_string_append_printf(a_str_out, "  addr: %s\n", dap_chain_addr_to_str(&l_emission->data.type_presale.addr));
                 }
                 break;
             }
             DAP_DELETE(l_emission);
         } break;
         case DAP_CHAIN_DATUM_TX: {
-            dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t *)a_datum->data;
+            dap_chain_datum_tx_t *l_tx = (dap_chain_datum_tx_t*)a_datum->data;
             dap_chain_datum_dump_tx(l_tx, NULL, a_str_out, a_hash_out_type, &l_datum_hash, a_net_id);
         } break;
         case DAP_CHAIN_DATUM_DECREE:{
@@ -962,7 +880,6 @@ void dap_chain_datum_dump(dap_string_t *a_str_out, dap_chain_datum_t *a_datum, c
             dap_string_append_printf(a_str_out,"=== Datum decree ===\n");
             dap_string_append_printf(a_str_out, "hash: %s\n", l_hash_str);
             dap_string_append_printf(a_str_out, "size: %zd\n", l_decree_size);
-
             dap_chain_datum_decree_dump(a_str_out, l_decree, l_decree_size, a_hash_out_type);
         } break;
         case DAP_CHAIN_DATUM_ANCHOR:{
@@ -973,12 +890,9 @@ void dap_chain_datum_dump(dap_string_t *a_str_out, dap_chain_datum_t *a_datum, c
             dap_string_append_printf(a_str_out, "size: %zd\n", l_anchor_size);
             dap_hash_fast_t l_decree_hash = { };
             dap_chain_datum_anchor_get_hash_from_data(l_anchor, &l_decree_hash);
-            //dap_chain_hash_fast_to_str(&l_decree_hash, l_decree_hash_str, 40);
-            char l_decree_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
-            dap_chain_hash_fast_to_str(&l_decree_hash, l_decree_hash_str, DAP_CHAIN_HASH_FAST_STR_SIZE);
-            dap_string_append_printf(a_str_out, "decree hash: %s\n", l_decree_hash_str);
+            l_hash_str = dap_chain_hash_fast_to_str_static(&l_decree_hash);
+            dap_string_append_printf(a_str_out, "decree hash: %s\n", l_hash_str);
             dap_chain_datum_anchor_certs_dump(a_str_out, l_anchor->data_n_sign + l_anchor->header.data_size, l_anchor->header.signs_size, a_hash_out_type);
         } break;
     }    
-    DAP_DELETE(l_hash_str);
 }
diff --git a/modules/common/dap_chain_datum_anchor.c b/modules/common/dap_chain_datum_anchor.c
index 76fa90c0af98aef46e2a93753c0cf82dce58aa36..a6110889698dd5828769a9797221dddd2d475805 100644
--- a/modules/common/dap_chain_datum_anchor.c
+++ b/modules/common/dap_chain_datum_anchor.c
@@ -84,10 +84,9 @@ void dap_chain_datum_anchor_certs_dump(dap_string_t * a_str_out, byte_t * a_sign
             continue;
         }
         char *l_hash_str = dap_strcmp(a_hash_out_type, "hex")
-                ? dap_enc_base58_encode_hash_to_str(&l_pkey_hash)
-                : dap_chain_hash_fast_to_str_new(&l_pkey_hash);
+                ? dap_enc_base58_encode_hash_to_str_static(&l_pkey_hash)
+                : dap_chain_hash_fast_to_str_static(&l_pkey_hash);
         dap_string_append_printf(a_str_out, "%d) %s, %s, %u bytes\n", i, l_hash_str,
                                  dap_sign_type_to_str(l_sign->header.type), l_sign->header.sign_size);
-        DAP_DEL_Z(l_hash_str);
     }
 }
diff --git a/modules/common/dap_chain_datum_decree.c b/modules/common/dap_chain_datum_decree.c
index a4e94e5859109e5a667d242a1406bb586a254585..6878b0af90492c084653c7d8c7f48b634a7de11f 100644
--- a/modules/common/dap_chain_datum_decree.c
+++ b/modules/common/dap_chain_datum_decree.c
@@ -193,9 +193,8 @@ void dap_chain_datum_decree_dump(dap_string_t *a_str_out, dap_chain_datum_decree
                 }
                 uint256_t l_value = uint256_0;
                 _dap_tsd_get_scalar(l_tsd, &l_value);
-                char *l_value_str = dap_chain_balance_print(l_value);
+                char *l_value_str = dap_uint256_to_char(l_value, NULL);
                 dap_string_append_printf(a_str_out, "\tValue: %s\n", l_value_str);
-                DAP_DELETE(l_value_str);
                 break;
             case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_SIGN:
             break;
@@ -206,9 +205,8 @@ void dap_chain_datum_decree_dump(dap_string_t *a_str_out, dap_chain_datum_decree
                 }
                 uint256_t l_fee_value = uint256_0;
                 _dap_tsd_get_scalar(l_tsd, &l_fee_value);
-                char *l_fee_value_str = dap_chain_balance_print(l_fee_value);
+                char *l_fee_value_str = dap_uint256_to_char(l_fee_value, NULL);
                 dap_string_append_printf(a_str_out, "\tFee: %s\n", l_fee_value_str);
-                DAP_DELETE(l_fee_value_str);
                 break;
             case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_OWNER:
                 if (l_tsd->size < sizeof(dap_pkey_t)) {
@@ -228,9 +226,8 @@ void dap_chain_datum_decree_dump(dap_string_t *a_str_out, dap_chain_datum_decree
                 }
                 uint256_t l_owner_min = uint256_0;
                 _dap_tsd_get_scalar(l_tsd, &l_owner_min);
-                char *l_owner_min_str = dap_chain_balance_print(l_owner_min);
+                char *l_owner_min_str = dap_uint256_to_char(l_owner_min, NULL);
                 dap_string_append_printf(a_str_out, "\tOwner min: %s\n", l_owner_min_str);
-                DAP_DELETE(l_owner_min_str);
                 break;
             case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_FEE_WALLET:
                 if (l_tsd->size > sizeof(dap_chain_addr_t)) {
@@ -239,9 +236,7 @@ void dap_chain_datum_decree_dump(dap_string_t *a_str_out, dap_chain_datum_decree
                 }
                 dap_chain_addr_t *l_addr_fee_wallet = /*{ };
                 _dap_tsd_get_scalar(l_tsd, &l_addr_fee_wallet);*/ _dap_tsd_get_object(l_tsd, dap_chain_addr_t);
-                char *l_addr_fee_wallet_str = dap_chain_addr_to_str(l_addr_fee_wallet);
-                dap_string_append_printf(a_str_out, "\tWallet for fee: %s\n", l_addr_fee_wallet_str);
-                DAP_DELETE(l_addr_fee_wallet_str);
+                dap_string_append_printf(a_str_out, "\tWallet for fee: %s\n", dap_chain_addr_to_str(l_addr_fee_wallet));
                 break;
             case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_TX_HASH:
                 if (l_tsd->size > sizeof(dap_hash_fast_t)) {
@@ -251,10 +246,9 @@ void dap_chain_datum_decree_dump(dap_string_t *a_str_out, dap_chain_datum_decree
                 dap_hash_fast_t *l_stake_tx = /*{ };
                 _dap_tsd_get_scalar(l_tsd, &l_stake_tx);*/ _dap_tsd_get_object(l_tsd, dap_hash_fast_t);
                 char *l_stake_tx_hash = dap_strcmp(a_hash_out_type, "hex")
-                        ? dap_enc_base58_encode_hash_to_str(l_stake_tx)
-                        : dap_chain_hash_fast_to_str_new(l_stake_tx);
+                        ? dap_enc_base58_encode_hash_to_str_static(l_stake_tx)
+                        : dap_chain_hash_fast_to_str_static(l_stake_tx);
                 dap_string_append_printf(a_str_out, "\tStake tx: %s\n", l_stake_tx_hash);
-                DAP_DELETE(l_stake_tx_hash);
                 break;
             case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_VALUE:
                 if (l_tsd->size > sizeof(uint256_t)){
@@ -263,9 +257,8 @@ void dap_chain_datum_decree_dump(dap_string_t *a_str_out, dap_chain_datum_decree
                 }
                 uint256_t l_stake_value = uint256_0;
                 _dap_tsd_get_scalar(l_tsd, &l_stake_value);
-                char *l_stake_value_str = dap_chain_balance_print(l_stake_value);
+                char *l_stake_value_str = dap_uint256_to_char(l_stake_value, NULL);
                 dap_string_append_printf(a_str_out, "\tStake value: %s\n", l_stake_value_str);
-                DAP_DELETE(l_stake_value_str);
                 break;
             case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_SIGNING_ADDR:
                 if (l_tsd->size > sizeof(dap_chain_addr_t)) {
@@ -274,15 +267,12 @@ void dap_chain_datum_decree_dump(dap_string_t *a_str_out, dap_chain_datum_decree
                 }
                 dap_chain_addr_t *l_stake_addr_signing = /*{ };
                 _dap_tsd_get_scalar(l_tsd, &l_stake_addr_signing);*/ _dap_tsd_get_object(l_tsd, dap_chain_addr_t);
-                char *l_stake_addr_signing_str = dap_chain_addr_to_str(l_stake_addr_signing);
-                dap_string_append_printf(a_str_out, "\tSigning addr: %s\n", l_stake_addr_signing_str);
+                dap_string_append_printf(a_str_out, "\tSigning addr: %s\n", dap_chain_addr_to_str(l_stake_addr_signing));
                 dap_chain_hash_fast_t l_pkey_signing = l_stake_addr_signing->data.hash_fast;
                 char *l_pkey_signing_str = dap_strcmp(a_hash_out_type, "hex")
-                        ? dap_enc_base58_encode_hash_to_str(&l_pkey_signing)
-                        : dap_chain_hash_fast_to_str_new(&l_pkey_signing);
+                        ? dap_enc_base58_encode_hash_to_str_static(&l_pkey_signing)
+                        : dap_chain_hash_fast_to_str_static(&l_pkey_signing);
                 dap_string_append_printf(a_str_out, "\tSigning pkey fingerprint: %s\n", l_pkey_signing_str);
-                DAP_DELETE(l_stake_addr_signing_str);
-                DAP_DELETE(l_pkey_signing_str);
                 break;
             case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_SIGNER_NODE_ADDR:
                 if(l_tsd->size > sizeof(dap_chain_node_addr_t)){
@@ -300,9 +290,8 @@ void dap_chain_datum_decree_dump(dap_string_t *a_str_out, dap_chain_datum_decree
                 }
                 uint256_t l_min_value = uint256_0;
                 _dap_tsd_get_scalar(l_tsd, &l_min_value);
-                char *l_min_value_str = dap_chain_balance_print(l_min_value);
+                char *l_min_value_str = dap_uint256_to_char(l_min_value, NULL);
                 dap_string_append_printf(a_str_out, "\tMin value: %s\n", l_min_value_str);
-                DAP_DELETE(l_min_value_str);
                 break;
             case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_MIN_SIGNERS_COUNT:
                 if (l_tsd->size > sizeof(uint256_t)) {
@@ -311,9 +300,8 @@ void dap_chain_datum_decree_dump(dap_string_t *a_str_out, dap_chain_datum_decree
                 }
                 uint256_t l_min_signers_count = uint256_0;
                 _dap_tsd_get_scalar(l_tsd, &l_min_signers_count);
-                char *l_min_signers_count_str = dap_chain_balance_print(l_min_signers_count);
+                char *l_min_signers_count_str = dap_uint256_to_char(l_min_signers_count, NULL);
                 dap_string_append_printf(a_str_out, "\tMin signers count: %s\n", l_min_signers_count_str);
-                DAP_DELETE(l_min_signers_count_str);
                 break;
             case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_IP_V4: {
                 struct in_addr l_ip_addr = dap_tsd_get_scalar(l_tsd, struct in_addr);
@@ -367,11 +355,10 @@ void dap_chain_datum_decree_certs_dump(dap_string_t * a_str_out, byte_t * a_sign
         }
 
         char *l_hash_str = dap_strcmp(a_hash_out_type, "hex")
-                ? dap_enc_base58_encode_hash_to_str(&l_pkey_hash)
-                : dap_chain_hash_fast_to_str_new(&l_pkey_hash);
+                ? dap_enc_base58_encode_hash_to_str_static(&l_pkey_hash)
+                : dap_chain_hash_fast_to_str_static(&l_pkey_hash);
         dap_string_append_printf(a_str_out, "%d) %s, %s, %u bytes\n", i, l_hash_str,
                                  dap_sign_type_to_str(l_sign->header.type), l_sign->header.sign_size);
-        DAP_DEL_Z(l_hash_str);
     }
 }
 
diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c
index ea631e9f33865dfbd683b6b033135861fdd19297..4d5261dd9def462cc91174de0ba346220365c6a4 100644
--- a/modules/common/dap_chain_datum_token.c
+++ b/modules/common/dap_chain_datum_token.c
@@ -283,12 +283,11 @@ void dap_chain_datum_token_certs_dump(dap_string_t * a_str_out, byte_t * a_data_
         }
 
         char *l_hash_str = dap_strcmp(a_hash_out_type, "hex")
-                ? dap_enc_base58_encode_hash_to_str(&l_pkey_hash)
-                : dap_chain_hash_fast_to_str_new(&l_pkey_hash);
+                ? dap_enc_base58_encode_hash_to_str_static(&l_pkey_hash)
+                : dap_chain_hash_fast_to_str_static(&l_pkey_hash);
 
         dap_string_append_printf(a_str_out, "%d) %s, %s, %u bytes\n", i, l_hash_str,
                                  dap_sign_type_to_str(l_sign->header.type), l_sign->header.sign_size);
-        DAP_DEL_Z(l_hash_str);
     }
 }
 
diff --git a/modules/common/dap_chain_datum_tx_items.c b/modules/common/dap_chain_datum_tx_items.c
index 253cf0495df7fe055f22e2f88640d6ab1e701bb2..3c821cf4938a66bc7a1ba495b4a6951147701afa 100644
--- a/modules/common/dap_chain_datum_tx_items.c
+++ b/modules/common/dap_chain_datum_tx_items.c
@@ -541,9 +541,7 @@ dap_chain_tx_sig_t* dap_chain_datum_tx_item_sign_create(dap_enc_key_t *a_key, co
  */
 dap_sign_t* dap_chain_datum_tx_item_sign_get_sig(dap_chain_tx_sig_t *a_tx_sig)
 {
-    if(!a_tx_sig || !a_tx_sig->header.sig_size)
-        return NULL;
-    return (dap_sign_t*) a_tx_sig->sig;
+    return a_tx_sig && a_tx_sig->header.sig_size ? (dap_sign_t*)a_tx_sig->sig : NULL;
 }
 
 /**
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 f50230daf773df246d950e0ff96140071fe9d518..0414f044ac0d4c5fc741880df66891160d4f6d8d 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -273,7 +273,7 @@ static int s_cli_dag_poa(int argc, char ** argv, void **a_str_reply)
                     dap_chain_cs_dag_event_calc_hash(l_event, l_event_size_new, &l_event_new_hash);
                     char l_event_new_hash_hex_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
                     dap_chain_hash_fast_to_str(&l_event_new_hash, l_event_new_hash_hex_str, DAP_CHAIN_HASH_FAST_STR_SIZE);
-                    char *l_event_new_hash_base58_str = dap_enc_base58_encode_hash_to_str(&l_event_new_hash);
+                    char *l_event_new_hash_base58_str = dap_enc_base58_encode_hash_to_str_static(&l_event_new_hash);
 
                     bool l_event_is_ready = s_round_event_ready_minimum_check(l_dag, l_event, l_event_size_new,
                                                                         l_event_new_hash_hex_str);
@@ -305,7 +305,6 @@ static int s_cli_dag_poa(int argc, char ** argv, void **a_str_reply)
                         ret=-31;
 
                     }
-                    DAP_DELETE(l_event_new_hash_base58_str);
                 } else {
                     dap_cli_server_cmd_set_reply_text(a_str_reply,
                                                   "Can't sign event %s in round.new\n",
diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index 56d2b9c00ecb731e94a54f767c0573cd432ba588..d1b14b4cb34a63eb297c0df3c3ef92909e6cd4bd 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -262,9 +262,8 @@ static int s_callback_new(dap_chain_t *a_chain, dap_config_t *a_chain_cfg)
         l_validator->node_addr = l_signer_node_addr;
         l_validator->weight = uint256_1;
         l_esbocs_pvt->poa_validators = dap_list_append(l_esbocs_pvt->poa_validators, l_validator);
-        char *l_signer_addr = dap_chain_hash_fast_to_str_new(&l_signing_addr.data.hash_fast);
+        char *l_signer_addr = dap_chain_hash_fast_to_str_static(&l_signing_addr.data.hash_fast);
         log_it(L_MSG, "add validator addr "NODE_ADDR_FP_STR", signing addr %s", NODE_ADDR_FP_ARGS_S(l_signer_node_addr), l_signer_addr);
-        DAP_DELETE(l_signer_addr);
 
         if (!l_esbocs_pvt->poa_mode) { // auth certs in PoA mode will be first PoS validators keys
             dap_hash_fast_t l_stake_tx_hash = {};
@@ -748,14 +747,18 @@ static dap_list_t *s_get_validators_list(dap_chain_esbocs_session_t *a_session,
             uint256_t l_raw_result;
             uint256_t l_chosen_weight = dap_pseudo_random_get(l_total_weight, &l_raw_result);
             if (false) { //PVT(a_session->esbocs)->debug) {
-                char *l_chosen_weignt_str = dap_chain_balance_print(l_chosen_weight);
-                char *l_total_weight_str = dap_chain_balance_print(l_total_weight);
-                char *l_seed_hash_str = dap_hash_fast_to_str_new(&a_session->cur_round.last_block_hash);
-                char *l_raw_result_str = dap_chain_balance_print(l_raw_result);
-                log_it(L_MSG, "Round seed %s, sync attempt %"DAP_UINT64_FORMAT_U", chosen weight %s from %s, by number %s",
-                                l_seed_hash_str, a_skip_count + 1,
-                                l_chosen_weignt_str, l_total_weight_str, l_raw_result_str);
-                DAP_DEL_MULTY(l_chosen_weignt_str, l_total_weight_str, l_raw_result_str, l_seed_hash_str);
+                unsigned l_strlen = 1024, l_off = 0;
+                char *l_chosen_weight_str, *l_total_weight_str, *l_raw_result_str, l_str[l_strlen];
+                dap_uint256_to_char(l_chosen_weight, &l_chosen_weight_str);
+                l_off = dap_snprintf(l_str, l_strlen,
+                                     "Round seed %s, sync attempt %"DAP_UINT64_FORMAT_U", chosen weight %s ",
+                                     dap_hash_fast_to_str_static(&a_session->cur_round.last_block_hash),
+                                     a_skip_count + 1, l_chosen_weight_str);
+                dap_uint256_to_char(l_total_weight, &l_total_weight_str);
+                l_off += dap_snprintf(l_str + l_off, l_strlen - l_off, "from %s, ", l_total_weight_str);
+                dap_uint256_to_char(l_raw_result, &l_raw_result_str);
+                l_off += dap_snprintf(l_str + l_off, l_strlen - l_off, "by number %s", l_raw_result_str);
+                log_it(L_MSG, "%s", l_str);
             }
             dap_list_t *l_chosen = NULL;
             uint256_t l_cur_weight = uint256_0;
@@ -871,10 +874,9 @@ static void s_session_update_penalty(dap_chain_esbocs_session_t *a_session)
         }
         if (l_item->miss_count < DAP_CHAIN_ESBOCS_PENALTY_KICK) {
             if (PVT(a_session->esbocs)->debug) {
-                char *l_addr_str = dap_chain_hash_fast_to_str_new(&l_signing_addr->data.hash_fast);
+                char *l_addr_str = dap_chain_hash_fast_to_str_static(&l_signing_addr->data.hash_fast);
                 log_it(L_DEBUG, "Increment miss count %d for addr %s. Miss count for kick is %d",
                                         l_item->miss_count, l_addr_str, DAP_CHAIN_ESBOCS_PENALTY_KICK);
-                DAP_DELETE(l_addr_str);
             }
             l_item->miss_count++;
         }
@@ -1035,9 +1037,8 @@ static uint64_t s_session_calc_current_round_id(dap_chain_esbocs_session_t *a_se
             }
         }
         if (l_id_candidate == 0) {
-            char *l_signing_addr_str = dap_chain_hash_fast_to_str_new(&l_validator->signing_addr.data.hash_fast);
+            char *l_signing_addr_str = dap_chain_hash_fast_to_str_static(&l_validator->signing_addr.data.hash_fast);
             log_it(L_ERROR, "Can't find sync message of synced validator %s", l_signing_addr_str);
-            DAP_DELETE(l_signing_addr_str);
             continue;
         }
         bool l_candidate_found = false;
@@ -1164,11 +1165,10 @@ static void s_session_state_change(dap_chain_esbocs_session_t *a_session, enum s
                 dap_hash_fast_t l_directive_hash;
                 dap_hash_fast(l_directive, l_directive->size, &l_directive_hash);
                 if (PVT(a_session->esbocs)->debug) {
-                    char *l_candidate_hash_str = dap_chain_hash_fast_to_str_new(&l_directive_hash);
+                    char *l_candidate_hash_str = dap_chain_hash_fast_to_str_static(&l_directive_hash);
                     log_it(L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu. Put on the vote my directive:%s",
                             a_session->chain->net_name, a_session->chain->name,
                                 a_session->cur_round.id, a_session->cur_round.attempt_num, l_candidate_hash_str);
-                    DAP_DELETE(l_candidate_hash_str);
                 }
                 s_message_send(a_session, DAP_CHAIN_ESBOCS_MSG_TYPE_DIRECTIVE, &l_directive_hash,
                                     l_directive, l_directive->size, a_session->cur_round.all_validators);
@@ -1206,9 +1206,8 @@ static void s_session_state_change(dap_chain_esbocs_session_t *a_session, enum s
                         );
             dap_chain_esbocs_validator_t *l_validator = l_list ? l_list->data : NULL;
             if (!l_validator || !l_validator->is_chosen) {
-                char *l_addr = dap_chain_hash_fast_to_str_new(&a_session->cur_round.attempt_submit_validator.data.hash_fast);
+                char *l_addr = dap_chain_hash_fast_to_str_static(&a_session->cur_round.attempt_submit_validator.data.hash_fast);
                 log_it(L_MSG, "Error: can't find current attmempt submit validator %s in signers list", l_addr);
-                DAP_DELETE(l_addr);
             }
             l_validator->is_chosen = false;
         } else
@@ -1334,12 +1333,11 @@ static void s_session_proc_state(dap_chain_esbocs_session_t *a_session)
             }
             if (dap_list_length(l_store->candidate_signs) >= PVT(a_session->esbocs)->min_validators_count) {
                 if(l_cs_debug) {
-                    char *l_candidate_hash_str = dap_chain_hash_fast_to_str_new(&a_session->cur_round.attempt_candidate_hash);
+                    char *l_candidate_hash_str = dap_chain_hash_fast_to_str_static(&a_session->cur_round.attempt_candidate_hash);
                     log_it(L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu"
                                             " Candidate %s collected sings of minimum number of validators, so to sent PRE_COMMIT",
                                                 a_session->chain->net_name, a_session->chain->name, a_session->cur_round.id,
                                                     a_session->cur_round.attempt_num, l_candidate_hash_str);
-                    DAP_DELETE(l_candidate_hash_str);
                 }
                 s_session_state_change(a_session, DAP_CHAIN_ESBOCS_SESSION_STATE_WAIT_FINISH, l_time);
                 break;
@@ -1362,13 +1360,12 @@ static void s_session_proc_state(dap_chain_esbocs_session_t *a_session)
         break;
     case DAP_CHAIN_ESBOCS_SESSION_STATE_WAIT_VOTING:
         if (l_time - a_session->ts_stage_entry >= PVT(a_session->esbocs)->round_attempt_timeout * 2) {
-            const char *l_hash_str = dap_chain_hash_fast_to_str_new(&a_session->cur_round.directive_hash);
+            const char *l_hash_str = dap_chain_hash_fast_to_str_static(&a_session->cur_round.directive_hash);
             debug_if(l_cs_debug, L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu."
                                         " Voting finished by reason: cant't collect minimum number of validator's votes for directive %s",
                                             a_session->chain->net_name, a_session->chain->name,
                                                 a_session->cur_round.id, a_session->cur_round.attempt_num,
                                                     l_hash_str);
-            DAP_DELETE(l_hash_str);
             s_session_state_change(a_session, DAP_CHAIN_ESBOCS_SESSION_STATE_PREVIOUS, l_time);
         }
         break;
@@ -1422,11 +1419,10 @@ static void s_session_candidate_submit(dap_chain_esbocs_session_t *a_session)
     if (l_candidate_size) {
         dap_hash_fast(l_candidate, l_candidate_size, &l_candidate_hash);
         if (PVT(a_session->esbocs)->debug) {
-            char *l_candidate_hash_str = dap_chain_hash_fast_to_str_new(&l_candidate_hash);
+            char *l_candidate_hash_str = dap_chain_hash_fast_to_str_static(&l_candidate_hash);
             log_it(L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu. Submit my candidate %s",
                     a_session->chain->net_name, a_session->chain->name,
                         a_session->cur_round.id, a_session->cur_round.attempt_num, l_candidate_hash_str);
-            DAP_DELETE(l_candidate_hash_str);
         }
     } else { // there is no my candidate, send null hash
         if (PVT(a_session->esbocs)->debug)
@@ -1468,22 +1464,20 @@ static void s_session_candidate_verify(dap_chain_esbocs_session_t *a_session, da
         s_message_send(a_session, DAP_CHAIN_ESBOCS_MSG_TYPE_APPROVE, a_candidate_hash,
                        NULL, 0, a_session->cur_round.validators_list);
         if (PVT(a_session->esbocs)->debug) {
-            char *l_candidate_hash_str = dap_chain_hash_fast_to_str_new(a_candidate_hash);
+            char *l_candidate_hash_str = dap_chain_hash_fast_to_str_static(a_candidate_hash);
             log_it(L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu Sent APPROVE candidate %s",
                                 a_session->chain->net_name, a_session->chain->name, a_session->cur_round.id,
                                         a_session->cur_round.attempt_num, l_candidate_hash_str);
-            DAP_DELETE(l_candidate_hash_str);
         }
     } else {
         // validation - fail, gen event Reject
         s_message_send(a_session, DAP_CHAIN_ESBOCS_MSG_TYPE_REJECT, a_candidate_hash,
                        NULL, 0, a_session->cur_round.validators_list);
         if (PVT(a_session->esbocs)->debug) {
-            char *l_candidate_hash_str = dap_chain_hash_fast_to_str_new(a_candidate_hash);
+            char *l_candidate_hash_str = dap_chain_hash_fast_to_str_static(a_candidate_hash);
             log_it(L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu Sent REJECT candidate %s",
                                 a_session->chain->net_name, a_session->chain->name, a_session->cur_round.id,
                                         a_session->cur_round.attempt_num, l_candidate_hash_str);
-            DAP_DELETE(l_candidate_hash_str);
         }
     }
     a_session->processing_candidate = NULL;
@@ -1503,13 +1497,12 @@ static void s_session_candidate_precommit(dap_chain_esbocs_session_t *a_session,
     char *l_candidate_hash_str = NULL;
     HASH_FIND(hh, a_session->cur_round.store_items, l_candidate_hash, sizeof(dap_chain_hash_fast_t), l_store);
     if (!l_store) {
-        l_candidate_hash_str = dap_chain_hash_fast_to_str_new(l_candidate_hash);
+        l_candidate_hash_str = dap_chain_hash_fast_to_str_static(l_candidate_hash);
         log_it(L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu."
                           " Receive PRE_COMMIT message for unknown candidate %s",
                             a_session->chain->net_name, a_session->chain->name,
                                 a_session->cur_round.id, a_message->hdr.attempt_num,
                                     l_candidate_hash_str);
-        DAP_DELETE(l_candidate_hash_str);
         return;
     }
 
@@ -1534,7 +1527,7 @@ static void s_session_candidate_precommit(dap_chain_esbocs_session_t *a_session,
     }
 
     if (l_cs_debug) {
-        l_candidate_hash_str = dap_chain_hash_fast_to_str_new(l_candidate_hash);
+        l_candidate_hash_str = dap_chain_hash_fast_to_str_static(l_candidate_hash);
         log_it(L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu."
                         " Receive PRE_COMMIT: candidate %s",
                             a_session->chain->net_name, a_session->chain->name, a_session->cur_round.id,
@@ -1544,13 +1537,12 @@ static void s_session_candidate_precommit(dap_chain_esbocs_session_t *a_session,
             dap_hash_fast_compare(&a_session->cur_round.attempt_candidate_hash, l_candidate_hash)) {
         l_store->decide_commit = true;
         debug_if(l_cs_debug, L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu."
-                                    " Candidate %s precommted by minimum number of validators, try to finish this round",
+                                    " Candidate %s precommited by minimum number of validators, try to finish this round",
                                         a_session->chain->net_name, a_session->chain->name, a_session->cur_round.id,
                                             a_message->hdr.attempt_num, l_candidate_hash_str);
         s_session_round_finish(a_session, l_store);
         // ATTENTION: New round will be started by incoming atom notifier event
     }
-    DAP_DEL_Z(l_candidate_hash_str);
 }
 
 static bool s_session_candidate_to_chain(dap_chain_esbocs_session_t *a_session, dap_chain_hash_fast_t *a_candidate_hash,
@@ -1562,7 +1554,7 @@ static bool s_session_candidate_to_chain(dap_chain_esbocs_session_t *a_session,
     }
     bool res = false;
     dap_chain_atom_verify_res_t l_res = a_session->chain->callback_atom_add(a_session->chain, a_candidate, a_candidate_size);
-    char *l_candidate_hash_str = dap_chain_hash_fast_to_str_new(a_candidate_hash);
+    char *l_candidate_hash_str = dap_chain_hash_fast_to_str_static(a_candidate_hash);
     switch (l_res) {
     case ATOM_ACCEPT:
         // block save to chain
@@ -1586,7 +1578,6 @@ static bool s_session_candidate_to_chain(dap_chain_esbocs_session_t *a_session,
     default:
          log_it(L_CRITICAL, "Wtf is this ret code ? Atom hash %s code %d", l_candidate_hash_str, l_res);
     }
-    DAP_DELETE(l_candidate_hash_str);
     return res;
 }
 
@@ -1605,30 +1596,26 @@ static void s_session_round_finish(dap_chain_esbocs_session_t *a_session, dap_ch
     }
 
     if (l_store->reject_count >= l_cs_level) {
-        char *l_finish_candidate_hash_str = dap_chain_hash_fast_to_str_new(&l_store->candidate_hash);
+        char *l_finish_candidate_hash_str = dap_chain_hash_fast_to_str_static(&l_store->candidate_hash);
         debug_if(l_cs_debug, L_WARNING, "Trying to finish rejected candidate %s", l_finish_candidate_hash_str);
-        DAP_DELETE(l_finish_candidate_hash_str);
         return;
     }
 
     if (l_store->approve_count < l_cs_level) {
-        char *l_finish_candidate_hash_str = dap_chain_hash_fast_to_str_new(&l_store->candidate_hash);
+        char *l_finish_candidate_hash_str = dap_chain_hash_fast_to_str_static(&l_store->candidate_hash);
         debug_if(l_cs_debug, L_WARNING, "Trying to finish not properly approved candidate %s", l_finish_candidate_hash_str);
-        DAP_DELETE(l_finish_candidate_hash_str);
         return;
     }
 
     if (dap_list_length(l_store->candidate_signs) < l_cs_level) {
-        char *l_finish_candidate_hash_str = dap_chain_hash_fast_to_str_new(&l_store->candidate_hash);
+        char *l_finish_candidate_hash_str = dap_chain_hash_fast_to_str_static(&l_store->candidate_hash);
         debug_if(l_cs_debug, L_WARNING, "Trying to finish not properly signed candidate %s", l_finish_candidate_hash_str);
-        DAP_DELETE(l_finish_candidate_hash_str);
         return;
     }
 
     if (l_store->precommit_count < l_cs_level) {
-        char *l_finish_candidate_hash_str = dap_chain_hash_fast_to_str_new(&l_store->candidate_hash);
+        char *l_finish_candidate_hash_str = dap_chain_hash_fast_to_str_static(&l_store->candidate_hash);
         debug_if(l_cs_debug, L_WARNING, "Trying to finish not properly precommited candidate %s", l_finish_candidate_hash_str);
-        DAP_DELETE(l_finish_candidate_hash_str);
         return;
     }
 
@@ -1669,23 +1656,20 @@ void s_session_validator_mark_online(dap_chain_esbocs_session_t *a_session, dap_
         if (!l_was_synced)
             a_session->cur_round.total_validators_synced++;
         if (PVT(a_session->esbocs)->debug) {
-            const char *l_addr_str = dap_chain_hash_fast_to_str_new(&a_signing_addr->data.hash_fast);
+            const char *l_addr_str = dap_chain_hash_fast_to_str_static(&a_signing_addr->data.hash_fast);
             log_it(L_DEBUG, "Mark validator %s as online", l_addr_str);
-            DAP_DELETE(l_addr_str);
         }
     } else {
-        const char *l_addr_str = dap_chain_hash_fast_to_str_new(&a_signing_addr->data.hash_fast);
+        const char *l_addr_str = dap_chain_hash_fast_to_str_static(&a_signing_addr->data.hash_fast);
         log_it(L_ERROR, "Can't find validator %s in validators list", l_addr_str);
-        DAP_DELETE(l_addr_str);
     }
 
     dap_chain_esbocs_penalty_item_t *l_item = NULL;
     HASH_FIND(hh, a_session->penalty, a_signing_addr, sizeof(*a_signing_addr), l_item);
     bool l_inactive = dap_chain_net_srv_stake_key_delegated(a_signing_addr) == -1;
     if (l_inactive && !l_item) {
-        const char *l_addr_str = dap_chain_hash_fast_to_str_new(&a_signing_addr->data.hash_fast);
+        const char *l_addr_str = dap_chain_hash_fast_to_str_static(&a_signing_addr->data.hash_fast);
         log_it(L_DEBUG, "Validator %s not in penalty list, but currently disabled", l_addr_str);
-        DAP_DELETE(l_addr_str);
         DAP_NEW_Z_RET(l_item, dap_chain_esbocs_penalty_item_t, NULL);
         l_item->signing_addr = *a_signing_addr;
         l_item->miss_count = DAP_CHAIN_ESBOCS_PENALTY_KICK;
@@ -1695,10 +1679,9 @@ void s_session_validator_mark_online(dap_chain_esbocs_session_t *a_session, dap_
         if (l_item->miss_count > DAP_CHAIN_ESBOCS_PENALTY_KICK)
             l_item->miss_count = DAP_CHAIN_ESBOCS_PENALTY_KICK;
         if (PVT(a_session->esbocs)->debug) {
-            const char *l_addr_str = dap_chain_hash_fast_to_str_new(&a_signing_addr->data.hash_fast);
+            const char *l_addr_str = dap_chain_hash_fast_to_str_static(&a_signing_addr->data.hash_fast);
             log_it(L_DEBUG, "Decrement miss count %d for addr %s. Miss count for kick is %d",
                             l_item->miss_count, l_addr_str, DAP_CHAIN_ESBOCS_PENALTY_KICK);
-            DAP_DELETE(l_addr_str);
         }
         if (l_item->miss_count)
             l_item->miss_count--;
@@ -1740,11 +1723,10 @@ static void s_session_directive_process(dap_chain_esbocs_session_t *a_session, d
         }
         int l_status = dap_chain_net_srv_stake_key_delegated(l_voting_addr);
         if (l_status == 0) {
-            const char *l_addr_str = dap_chain_hash_fast_to_str_new(&l_voting_addr->data.hash_fast);
+            const char *l_addr_str = dap_chain_hash_fast_to_str_static(&l_voting_addr->data.hash_fast);
             log_it(L_WARNING, "Trying to put to the vote directive type %s for non delegated key %s",
                                     a_directive->type == DAP_CHAIN_ESBOCS_DIRECTIVE_KICK ? "KICK" : "LIFT",
                                         l_addr_str);
-            DAP_DELETE(l_addr_str);
             return;
         }
         dap_chain_esbocs_penalty_item_t *l_item = NULL;
@@ -1771,12 +1753,11 @@ static void s_session_directive_process(dap_chain_esbocs_session_t *a_session, d
     }
 
     if (PVT(a_session->esbocs)->debug) {
-        char *l_directive_hash_str = dap_chain_hash_fast_to_str_new(a_directive_hash);
+        char *l_directive_hash_str = dap_chain_hash_fast_to_str_static(a_directive_hash);
         log_it(L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu Send VOTE %s directive %s",
                             a_session->chain->net_name, a_session->chain->name, a_session->cur_round.id,
                                     a_session->cur_round.attempt_num, l_vote_for ? "FOR" : "AGAINST",
                                             l_directive_hash_str);
-        DAP_DELETE(l_directive_hash_str);
     }
     a_session->cur_round.directive_hash = *a_directive_hash;
     a_session->cur_round.directive = DAP_DUP_SIZE(a_directive, a_directive->size);
@@ -2137,20 +2118,18 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
         }
 
         if (l_cs_debug) {
-            char *l_candidate_hash_str = dap_chain_hash_fast_to_str_new(l_candidate_hash);
+            char *l_candidate_hash_str = dap_chain_hash_fast_to_str_static(l_candidate_hash);
             log_it(L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu."
                             " Receive SUBMIT candidate %s, size %zu",
                                 l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id,
                                     l_message->hdr.attempt_num, l_candidate_hash_str, l_candidate_size);
-            DAP_DELETE(l_candidate_hash_str);
         }
 
         dap_chain_esbocs_store_t *l_store;
         HASH_FIND(hh, l_session->cur_round.store_items, l_candidate_hash, sizeof(dap_chain_hash_fast_t), l_store);
         if (l_store) {
-            char *l_candidate_hash_str = dap_chain_hash_fast_to_str_new(l_candidate_hash);
+            char *l_candidate_hash_str = dap_chain_hash_fast_to_str_static(l_candidate_hash);
             log_it(L_WARNING, "Duplicate candidate: %s", l_candidate_hash_str);
-            DAP_DELETE(l_candidate_hash_str);
             break;
         }
 
@@ -2181,7 +2160,7 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
         bool l_approve = l_message->hdr.type == DAP_CHAIN_ESBOCS_MSG_TYPE_APPROVE;
         HASH_FIND(hh, l_session->cur_round.store_items, l_candidate_hash, sizeof(dap_chain_hash_fast_t), l_store);
         if (!l_store) {
-            l_candidate_hash_str = dap_chain_hash_fast_to_str_new(l_candidate_hash);
+            l_candidate_hash_str = dap_chain_hash_fast_to_str_static(l_candidate_hash);
             log_it(L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu."
                                 " Receive %s message for unknown candidate %s, process it later",
                                    l_session->chain->net_name, l_session->chain->name,
@@ -2191,12 +2170,11 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
             HASH_FIND(hh, l_round->message_items, a_data_hash, sizeof(dap_chain_hash_fast_t), l_unprocessed_item);
             if (l_unprocessed_item)
                 l_unprocessed_item->unprocessed = true;
-            DAP_DELETE(l_candidate_hash_str);
             break;
         }
 
         if (l_cs_debug) {
-            l_candidate_hash_str = dap_chain_hash_fast_to_str_new(l_candidate_hash);
+            l_candidate_hash_str = dap_chain_hash_fast_to_str_static(l_candidate_hash);
             log_it(L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu."
                             " Receive %s: candidate %s",
                                 l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id,
@@ -2226,7 +2204,6 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
                             l_message->hdr.attempt_num, l_candidate_hash_str);
             s_session_attempt_new(l_session);
         }
-        DAP_DEL_Z(l_candidate_hash_str);
     } break;
 
     case DAP_CHAIN_ESBOCS_MSG_TYPE_COMMIT_SIGN: {
@@ -2249,18 +2226,17 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
         char *l_candidate_hash_str = NULL;
         HASH_FIND(hh, l_session->cur_round.store_items, l_candidate_hash, sizeof(dap_chain_hash_fast_t), l_store);
         if (!l_store) {
-            l_candidate_hash_str = dap_chain_hash_fast_to_str_new(l_candidate_hash);
+            l_candidate_hash_str = dap_chain_hash_fast_to_str_static(l_candidate_hash);
             log_it(L_WARNING, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu."
                                 " Receive COMMIT_SIGN message for unknown candidate %s",
                                     l_session->chain->net_name, l_session->chain->name,
                                         l_session->cur_round.id, l_message->hdr.attempt_num,
                                             l_candidate_hash_str);
-            DAP_DELETE(l_candidate_hash_str);
             break;
         }
 
         if (l_cs_debug) {
-            l_candidate_hash_str = dap_chain_hash_fast_to_str_new(l_candidate_hash);
+            l_candidate_hash_str = dap_chain_hash_fast_to_str_static(l_candidate_hash);
             log_it(L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu."
                             " Receive COMMIT_SIGN: candidate %s",
                                 l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id,
@@ -2284,10 +2260,9 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
             }
         } else {
             if (!l_candidate_hash_str)
-                l_candidate_hash_str = dap_chain_hash_fast_to_str_new(l_candidate_hash);
+                l_candidate_hash_str = dap_chain_hash_fast_to_str_static(l_candidate_hash);
             log_it(L_WARNING, "Candidate: %s sign is incorrect: code %d", l_candidate_hash_str, l_sign_verified);
         }
-        DAP_DEL_Z(l_candidate_hash_str);
     } break;
 
     case DAP_CHAIN_ESBOCS_MSG_TYPE_DIRECTIVE: {
@@ -2316,12 +2291,11 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
             break;
         }
         if (l_cs_debug) {
-            char *l_dirtective_hash_str = dap_chain_hash_fast_to_str_new(l_candidate_hash);
+            char *l_dirtective_hash_str = dap_chain_hash_fast_to_str_static(l_candidate_hash);
             log_it(L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu."
                             " Receive DIRECTIVE hash %s, size %zu",
                                 l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id,
                                     l_message->hdr.attempt_num, l_dirtective_hash_str, l_directive_size);
-            DAP_DELETE(l_dirtective_hash_str);
         }
         s_session_directive_process(l_session, l_directive, &l_directive_hash);
     } break;
@@ -2348,13 +2322,12 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod
             break;
         }
         if (l_cs_debug) {
-            char *l_directive_hash_str = dap_chain_hash_fast_to_str_new(l_candidate_hash);
+            char *l_directive_hash_str = dap_chain_hash_fast_to_str_static(l_candidate_hash);
             log_it(L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hhu."
                             " Receive VOTE %s directive %s",
                                 l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id,
                                     l_message->hdr.attempt_num, l_message->hdr.type == DAP_CHAIN_ESBOCS_MSG_TYPE_VOTE_FOR ?
                                     "FOR" : "AGAINST", l_directive_hash_str);
-            DAP_DELETE(l_directive_hash_str);
         }
         if (l_message->hdr.type == DAP_CHAIN_ESBOCS_MSG_TYPE_VOTE_FOR) {
             if (!l_session->cur_round.directive_applied &&
@@ -2501,17 +2474,15 @@ static int s_callback_block_verify(dap_chain_cs_blocks_t *a_blocks, dap_chain_bl
         if (!l_esbocs_pvt->poa_mode) {
              // Compare signature with delegated keys
             if (!dap_chain_net_srv_stake_key_delegated(&l_signing_addr)) {
-                char *l_bad_addr = dap_chain_hash_fast_to_str_new(&l_signing_addr.data.hash_fast);
-                log_it(L_ATT, "Unknown PoS signer %s", l_bad_addr);
-                DAP_DELETE(l_bad_addr);
+                log_it(L_ATT, "Unknown PoS signer %s",
+                    dap_chain_hash_fast_to_str_static(&l_signing_addr.data.hash_fast));
                 continue;
             }
         } else {
             // Compare signature with auth_certs
             if (!s_validator_check(&l_signing_addr, l_esbocs_pvt->poa_validators)) {
-                char *l_bad_addr = dap_chain_hash_fast_to_str_new(&l_signing_addr.data.hash_fast);
-                log_it(L_ATT, "Unknown PoA signer %s", l_bad_addr);
-                DAP_DELETE(l_bad_addr);
+                log_it(L_ATT, "Unknown PoA signer %s",
+                    dap_chain_hash_fast_to_str_static(&l_signing_addr.data.hash_fast));
                 continue;
             }
         }
diff --git a/modules/json_rpc/common/dap_json_rpc_chain_common.c b/modules/json_rpc/common/dap_json_rpc_chain_common.c
index fbf2ed3eea23a0a840350eef8496c2b150a72a1e..c26cbe73306f547ec442cb84a3a77d0b2f520b5c 100644
--- a/modules/json_rpc/common/dap_json_rpc_chain_common.c
+++ b/modules/json_rpc/common/dap_json_rpc_chain_common.c
@@ -8,17 +8,6 @@
  * @param a_addr
  * @return
  */
-json_object *dap_chain_addr_to_json(const dap_chain_addr_t *a_addr){
-    char *l_addr_str = dap_chain_addr_to_str(a_addr);
-    if (!l_addr_str) {
-        dap_json_rpc_allocation_error;
-        return NULL;
-    }
-    json_object *l_obj = json_object_new_string(l_addr_str);
-    DAP_DELETE(l_addr_str);
-    if (!l_obj) {
-        dap_json_rpc_allocation_error;
-        return NULL;
-    }
-    return l_obj;
+json_object *dap_chain_addr_to_json(const dap_chain_addr_t *a_addr) {
+    return json_object_new_string(dap_chain_addr_to_str(a_addr));
 }
diff --git a/modules/json_rpc/common/dap_json_rpc_chain_datum.c b/modules/json_rpc/common/dap_json_rpc_chain_datum.c
index 155980ec218ee9c3602090f461c91505edcd2481..ddae920df14da127e5bf8ba08ab69aec93dabd07 100644
--- a/modules/json_rpc/common/dap_json_rpc_chain_datum.c
+++ b/modules/json_rpc/common/dap_json_rpc_chain_datum.c
@@ -182,16 +182,7 @@ json_object *s_dap_chain_datum_token_tsd_to_json(dap_chain_datum_token_t *a_toke
                 }
                 uint256_t l_balance_native = uint256_0;
                 _dap_tsd_get_scalar(l_tsd, &l_balance_native);
-                char *l_balance = dap_chain_balance_print(l_balance_native);
-                if (!l_balance) {
-                    json_object_put(l_jobj_tsd);
-                    json_object_put(l_jobj_tsd_type);
-                    json_object_put(l_tsd_array);
-                    dap_json_rpc_allocation_error;
-                    return NULL;
-                }
-                json_object *l_jobj_tsd_value = json_object_new_string(l_balance);
-                DAP_DELETE(l_balance);
+                json_object *l_jobj_tsd_value = json_object_new_string(dap_uint256_to_char(l_balance_native, NULL));
                 if (!l_jobj_tsd_value) {
                     json_object_put(l_jobj_tsd);
                     json_object_put(l_jobj_tsd_type);
@@ -219,16 +210,8 @@ json_object *s_dap_chain_datum_token_tsd_to_json(dap_chain_datum_token_t *a_toke
                 }
                 uint128_t l_balance_native_old = uint128_0;
                 _dap_tsd_get_scalar(l_tsd, &l_balance_native_old);
-                char *l_balance = dap_chain_balance_print(GET_256_FROM_128(l_balance_native_old));
-                if (!l_balance) {
-                    json_object_put(l_jobj_tsd);
-                    json_object_put(l_jobj_tsd_type);
-                    json_object_put(l_tsd_array);
-                    dap_json_rpc_allocation_error;
-                    return NULL;
-                }
-                json_object *l_jobj_tsd_value = json_object_new_string(l_balance);
-                DAP_DELETE(l_balance);
+                json_object *l_jobj_tsd_value =
+                    json_object_new_string(dap_uint256_to_char(GET_256_FROM_128(l_balance_native_old), NULL));
                 if (!l_jobj_tsd_value) {
                     json_object_put(l_jobj_tsd_type);
                     json_object_put(l_jobj_tsd);
@@ -278,22 +261,8 @@ json_object *s_dap_chain_datum_token_tsd_to_json(dap_chain_datum_token_t *a_toke
                         }
                         json_object_object_add(l_jobj_tsd, "warning", l_wgn_text);
                     } else {
-                        char *l_hash_str = dap_chain_hash_fast_to_str_new(&l_hf);
-                        if (!l_hash_str) {
-                            json_object_put(l_jobj_tsd);
-                            json_object_put(l_tsd_array);
-                            dap_json_rpc_allocation_error;
-                            return NULL;
-                        }
-                        json_object *l_jobj_hash = json_object_new_string(l_hash_str);
-                        DAP_DELETE(l_hash_str);
-                        if (l_jobj_hash) {
-                            json_object_put(l_jobj_tsd);
-                            json_object_put(l_tsd_array);
-                            dap_json_rpc_allocation_error;
-                            return NULL;
-                        }
-                        json_object_object_add(l_jobj_tsd, "pkey", l_jobj_hash);
+                        json_object_object_add(l_jobj_tsd, "pkey",
+                            json_object_new_string(dap_chain_hash_fast_to_str_static(&l_hf)));
                     }
                 } else {
                     char *l_wgn_text = dap_strdup_printf("total_pkeys_add: <WRONG SIZE %u>\n", l_tsd->size);
@@ -331,22 +300,8 @@ json_object *s_dap_chain_datum_token_tsd_to_json(dap_chain_datum_token_t *a_toke
                 }
                 json_object_object_add(l_jobj_tsd, "type", l_jobj_tsd_type);
                 if (l_tsd->size == sizeof(dap_chain_hash_fast_t)) {
-                    char *l_hash_str = dap_chain_hash_fast_to_str_new((dap_chain_hash_fast_t *) l_tsd->data);
-                    if (!l_hash_str) {
-                        json_object_put(l_jobj_tsd);
-                        json_object_put(l_tsd_array);
-                        dap_json_rpc_allocation_error;
-                        return NULL;
-                    }
-                    json_object *l_jobj_hash = json_object_new_string(l_hash_str);
-                    DAP_DELETE(l_hash_str);
-                    if (!l_jobj_hash) {
-                        json_object_put(l_jobj_tsd);
-                        json_object_put(l_tsd_array);
-                        dap_json_rpc_allocation_error;
-                        return NULL;
-                    }
-                    json_object_object_add(l_jobj_tsd, "pkey", l_jobj_hash);
+                    json_object_object_add(l_jobj_tsd, "pkey",
+                        json_object_new_string(dap_chain_hash_fast_to_str_static((dap_chain_hash_fast_t*) l_tsd->data)));
                 } else {
                     char *l_wgn_text = dap_strdup_printf("total_pkeys_remove: <WRONG SIZE %u>\n", l_tsd->size);
                     if (!l_wgn_text) {
@@ -384,18 +339,16 @@ json_object *s_dap_chain_datum_token_tsd_to_json(dap_chain_datum_token_t *a_toke
                 json_object_object_add(l_jobj_tsd, "type", l_jobj_tsd_type);
                 dap_chain_datum_token_tsd_delegate_from_stake_lock_t *l_tsd_section = _dap_tsd_get_object(l_tsd, dap_chain_datum_token_tsd_delegate_from_stake_lock_t);
                 json_object *l_jobj_ticker_token_from = json_object_new_string((char*)l_tsd_section->ticker_token_from);
-                char *balance = dap_chain_balance_to_coins(l_tsd_section->emission_rate);
-                if (!l_jobj_ticker_token_from || !balance) {
+                if (!l_jobj_ticker_token_from) {
                     json_object_put(l_jobj_ticker_token_from);
-                    DAP_DEL_Z(balance);
                     json_object_put(l_jobj_tsd);
                     json_object_put(l_tsd_array);
                     dap_json_rpc_allocation_error;
                     return NULL;
                 }
                 json_object_object_add(l_jobj_tsd, "ticker_token_from", l_jobj_ticker_token_from);
+                char *balance; dap_uint256_to_char(l_tsd_section->emission_rate, &balance);
                 json_object *l_jobj_emission_rate = json_object_new_string(balance);
-                DAP_DEL_Z(balance);
                 if (!l_jobj_emission_rate) {
                     json_object_put(l_jobj_tsd);
                     json_object_put(l_tsd_array);
diff --git a/modules/json_rpc/common/dap_json_rpc_chain_datum_anchor.c b/modules/json_rpc/common/dap_json_rpc_chain_datum_anchor.c
index 2147a1d93718c77e3bfa2209fd22249024fbdbbf..e41c242d9755b3ed00a872d8a2d97b2c868a4e73 100644
--- a/modules/json_rpc/common/dap_json_rpc_chain_datum_anchor.c
+++ b/modules/json_rpc/common/dap_json_rpc_chain_datum_anchor.c
@@ -23,14 +23,12 @@ json_object *s_dap_chain_datum_anchor_sign_to_json(byte_t * a_signs, size_t a_ce
             json_object_object_add(l_jobj_sign, "warning", l_wrn_text);
             continue;
         }
-        char *l_hash_str = dap_chain_hash_fast_to_str_new(&l_pkey_hash);
-        json_object *l_jobj_hash_str = json_object_new_string(l_hash_str);
+        json_object *l_jobj_hash_str = json_object_new_string(dap_chain_hash_fast_to_str_static(&l_pkey_hash));
         json_object *l_jobj_type_str = json_object_new_string(dap_sign_type_to_str(l_sign->header.type));
         json_object *l_jobj_sign_size = json_object_new_uint64(l_sign->header.sign_size);
         json_object_object_add(l_jobj_sign, "hash", l_jobj_hash_str);
         json_object_object_add(l_jobj_sign, "type", l_jobj_type_str);
         json_object_object_add(l_jobj_sign, "size", l_jobj_sign_size);
-        DAP_DEL_Z(l_hash_str);
         json_object_array_add(l_jobs_signs, l_jobj_sign);
     }
     return l_jobs_signs;
diff --git a/modules/json_rpc/common/dap_json_rpc_chain_datum_decree.c b/modules/json_rpc/common/dap_json_rpc_chain_datum_decree.c
index 2fba615b5ef0c5dc789355289bb6a5c62c332120..572d2606365a9dd04e3a70ea90c903a146005722 100644
--- a/modules/json_rpc/common/dap_json_rpc_chain_datum_decree.c
+++ b/modules/json_rpc/common/dap_json_rpc_chain_datum_decree.c
@@ -1,5 +1,6 @@
 
 #include "dap_json_rpc_chain_datum_decree.h"
+#include "dap_json_rpc_chain_common.h"
 #include "json.h"
 
 
@@ -46,16 +47,9 @@ json_object *s_dap_chain_datum_decree_certs_dump_json(byte_t * a_signs, size_t a
             continue;
         }
 
-        char *l_hash_str = dap_chain_hash_fast_to_str_new(&l_pkey_hash);
-        if (!l_hash_str) {
-            json_object_put(l_jobj_signature);
-            json_object_put(l_jobj_signatures);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        json_object *l_jobj_hash_str = json_object_new_string(l_hash_str);
+        json_object *l_jobj_hash_str 
+            = json_object_new_string(dap_chain_hash_fast_to_str_static(&l_pkey_hash));
         if (!l_jobj_hash_str) {
-            DAP_DEL_Z(l_hash_str);
             json_object_put(l_jobj_signature);
             json_object_put(l_jobj_signatures);
             dap_json_rpc_allocation_error;
@@ -78,7 +72,6 @@ json_object *s_dap_chain_datum_decree_certs_dump_json(byte_t * a_signs, size_t a
             dap_json_rpc_allocation_error;
             return NULL;
         }
-        DAP_DEL_Z(l_hash_str);
         json_object_object_add(l_jobj_signature, "hash", l_jobj_hash_str);
         json_object_object_add(l_jobj_signature, "type", l_jobj_type_str);
         json_object_object_add(l_jobj_signature, "size", l_jobj_sign_size);
@@ -181,18 +174,7 @@ json_object *dap_chain_datum_decree_to_json(dap_chain_datum_decree_t *a_decree){
                 }
                 uint256_t l_fee_value = uint256_0;
                 _dap_tsd_get_scalar(l_tsd, &l_fee_value);
-                char *l_fee_value_str = dap_chain_balance_print(l_fee_value);
-                if (!l_fee_value_str) {
-                    json_object_put(l_json_tsd_array);
-                    json_object_put(l_json_subtype);
-                    json_object_put(l_jobj_type);
-                    json_object_put(l_jobj_decree);
-                    json_object_put(l_jobj_tsd);
-                    dap_json_rpc_allocation_error;
-                    return NULL;
-                }
-                json_object *l_jobj_fee = json_object_new_string(l_fee_value_str);
-                DAP_DELETE(l_fee_value_str);
+                json_object *l_jobj_fee = json_object_new_string(dap_uint256_to_char(l_fee_value, NULL));
                 if (!l_jobj_fee) {
                     json_object_put(l_json_tsd_array);
                     json_object_put(l_json_subtype);
@@ -286,17 +268,7 @@ json_object *dap_chain_datum_decree_to_json(dap_chain_datum_decree_t *a_decree){
                 }
                 uint256_t l_owner_min = {0};
                 _dap_tsd_get_scalar(l_tsd, &l_owner_min);
-                char *l_owner_min_str = dap_chain_balance_print(l_owner_min);
-                if (!l_owner_min_str) {
-                    json_object_put(l_json_tsd_array);
-                    json_object_put(l_json_subtype);
-                    json_object_put(l_jobj_type);
-                    json_object_put(l_jobj_decree);
-                    json_object_put(l_jobj_tsd);
-                    dap_json_rpc_allocation_error;
-                    return NULL;
-                }
-                json_object *l_jobj_owner_min = json_object_new_string(l_owner_min_str);
+                json_object *l_jobj_owner_min = json_object_new_string(dap_uint256_to_char(l_owner_min, NULL));
                 if (!l_jobj_owner_min) {
                     json_object_put(l_json_tsd_array);
                     json_object_put(l_json_subtype);
@@ -307,7 +279,6 @@ json_object *dap_chain_datum_decree_to_json(dap_chain_datum_decree_t *a_decree){
                     return NULL;
                 }
                 json_object_object_add(l_jobj_tsd, "owner_min", l_jobj_owner_min);
-                DAP_DELETE(l_owner_min_str);
             } break;
             case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_FEE_WALLET: {
                 json_object *l_obj_tsd_type = json_object_new_string("DAP_CHAIN_DATUM_DECREE_TSD_TYPE_FEE_WALLET");
@@ -337,19 +308,7 @@ json_object *dap_chain_datum_decree_to_json(dap_chain_datum_decree_t *a_decree){
                 }
                 dap_chain_addr_t l_addr_fee_wallet = {0};
                 _dap_tsd_get_scalar(l_tsd, &l_addr_fee_wallet);
-                char *l_addr_fee_wallet_str = dap_chain_addr_to_str(&l_addr_fee_wallet);
-                if (!l_addr_fee_wallet_str) {
-                    json_object_put(l_json_tsd_array);
-                    json_object_put(l_json_subtype);
-                    json_object_put(l_jobj_type);
-                    json_object_put(l_jobj_decree);
-                    json_object_put(l_jobj_tsd);
-                    dap_json_rpc_error_add(DAP_JSON_RPC_ERR_CODE_SERIALIZATION_ADDR_TO_JSON,
-                                           "Failed to serialize address to JSON.");
-                    return NULL;
-                }
-                json_object *l_jobj_addr_fee_wallet = json_object_new_string(l_addr_fee_wallet_str);
-                DAP_DELETE(l_addr_fee_wallet_str);
+                json_object *l_jobj_addr_fee_wallet = dap_chain_addr_to_json(&l_addr_fee_wallet);
                 if (!l_jobj_addr_fee_wallet) {
                     json_object_put(l_json_tsd_array);
                     json_object_put(l_json_subtype);
@@ -371,18 +330,8 @@ json_object *dap_chain_datum_decree_to_json(dap_chain_datum_decree_t *a_decree){
                 }
                 dap_hash_fast_t l_stake_tx = {0};
                 _dap_tsd_get_scalar(l_tsd, &l_stake_tx);
-                char *l_stake_tx_hash = dap_chain_hash_fast_to_str_new(&l_stake_tx);
-                if (!l_stake_tx_hash) {
-                    json_object_put(l_json_tsd_array);
-                    json_object_put(l_json_subtype);
-                    json_object_put(l_jobj_type);
-                    json_object_put(l_jobj_decree);
-                    json_object_put(l_jobj_tsd);
-                    dap_json_rpc_allocation_error;
-                    return NULL;
-                }
-                json_object *l_jobj_tx_hash = json_object_new_string(l_stake_tx_hash);
-                DAP_DELETE(l_stake_tx_hash);
+                json_object *l_jobj_tx_hash =
+                    json_object_new_string(dap_chain_hash_fast_to_str_static(&l_stake_tx));
                 if (!l_jobj_tx_hash) {
                     json_object_put(l_json_tsd_array);
                     json_object_put(l_json_subtype);
@@ -426,18 +375,7 @@ json_object *dap_chain_datum_decree_to_json(dap_chain_datum_decree_t *a_decree){
                 }
                 uint256_t l_stake_value = uint256_0;
                 _dap_tsd_get_scalar(l_tsd, &l_stake_value);
-                char *l_stake_value_str = dap_chain_balance_print(l_stake_value);
-                if (!l_stake_value_str) {
-                    json_object_put(l_json_tsd_array);
-                    json_object_put(l_json_subtype);
-                    json_object_put(l_jobj_type);
-                    json_object_put(l_jobj_decree);
-                    json_object_put(l_jobj_tsd);
-                    dap_json_rpc_allocation_error;
-                    return NULL;
-                }
-                json_object *l_jobj_stake_value = json_object_new_string(l_stake_value_str);
-                DAP_DELETE(l_stake_value_str);
+                json_object *l_jobj_stake_value = json_object_new_string(dap_uint256_to_char(l_stake_value, NULL));
                 if (!l_jobj_stake_value){
                     json_object_put(l_json_tsd_array);
                     json_object_put(l_json_subtype);
@@ -459,59 +397,17 @@ json_object *dap_chain_datum_decree_to_json(dap_chain_datum_decree_t *a_decree){
                 }
                 dap_chain_addr_t l_stake_addr_signing = {0};
                 _dap_tsd_get_scalar(l_tsd, &l_stake_addr_signing);
-                char *l_stake_addr_signing_str = dap_chain_addr_to_str(&l_stake_addr_signing);
 //                dap_string_append_printf(a_str_out, "\tSigning addr: %s\n", l_stake_addr_signing_str);
-                dap_chain_hash_fast_t *l_pkey_signing = DAP_NEW(dap_chain_hash_fast_t);
-                if (!l_pkey_signing) {
-                    json_object_put(l_json_tsd_array);
-                    json_object_put(l_json_subtype);
-                    json_object_put(l_jobj_type);
-                    json_object_put(l_jobj_decree);
-                    json_object_put(l_jobj_tsd);
-                    dap_json_rpc_allocation_error;
-                    return NULL;
-                }
-                memcpy(l_pkey_signing, l_stake_addr_signing.data.key, sizeof(dap_chain_hash_fast_t));
-                char *l_pkey_signing_str = dap_chain_hash_fast_to_str_new(l_pkey_signing);
-                if (!l_pkey_signing_str){
-                    DAP_DELETE(l_pkey_signing);
-                    json_object_put(l_json_tsd_array);
-                    json_object_put(l_json_subtype);
-                    json_object_put(l_jobj_type);
-                    json_object_put(l_jobj_decree);
-                    json_object_put(l_jobj_tsd);
-                    dap_json_rpc_allocation_error;
-                    return NULL;
-                }
-                json_object *l_jobj_stake_addr_signing = json_object_new_string(l_stake_addr_signing_str);
-                if (!l_jobj_stake_addr_signing) {
-                    json_object_put(l_json_tsd_array);
-                    json_object_put(l_json_subtype);
-                    json_object_put(l_jobj_type);
-                    json_object_put(l_jobj_decree);
-                    json_object_put(l_jobj_tsd);
-                    dap_json_rpc_allocation_error;
-                    return NULL;
-                }
+                dap_chain_hash_fast_t l_pkey_signing = l_stake_addr_signing.data.hash_fast;
+                char *l_pkey_signing_str = dap_chain_hash_fast_to_str_static(&l_pkey_signing);
+                json_object *l_jobj_stake_addr_signing = dap_chain_addr_to_json(&l_stake_addr_signing);
                 json_object *l_jobj_pkey_signing = json_object_new_string(l_pkey_signing_str);
-                if (!l_jobj_pkey_signing) {
-                    json_object_put(l_json_tsd_array);
-                    json_object_put(l_json_subtype);
-                    json_object_put(l_jobj_type);
-                    json_object_put(l_jobj_decree);
-                    json_object_put(l_jobj_tsd);
-                    dap_json_rpc_allocation_error;
-                    return NULL;
-                }
                 json_object_object_add(l_jobj_tsd, "addr", l_jobj_stake_addr_signing);
                 json_object_object_add(l_jobj_tsd, "pkey", l_jobj_pkey_signing);
 //                char *l_pkey_signing_str = dap_strcmp(a_hash_out_type, "hex")
 //                                           ? dap_enc_base58_encode_hash_to_str(l_pkey_signing)
 //                                           : dap_chain_hash_fast_to_str_new(l_pkey_signing);
 //                dap_string_append_printf(a_str_out, "\tSigning pkey fingerprint: %s\n", l_pkey_signing_str);
-                DAP_DELETE(l_stake_addr_signing_str);
-                DAP_DELETE(l_pkey_signing_str);
-                DAP_DELETE(l_pkey_signing);
             } break;
             case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_SIGNER_NODE_ADDR: {
                 json_object *l_obj_tsd_type = json_object_new_string(
@@ -576,10 +472,7 @@ json_object *dap_chain_datum_decree_to_json(dap_chain_datum_decree_t *a_decree){
                 }
                 uint256_t l_min_value = uint256_0;
                 _dap_tsd_get_scalar(l_tsd, &l_min_value);
-                char *l_min_value_str = dap_chain_balance_print(l_min_value);
-                json_object *l_jobj_min_value = json_object_new_string(l_min_value_str);
-                json_object_object_add(l_jobj_tsd, "value", l_jobj_min_value);
-                DAP_DELETE(l_min_value_str);
+                json_object_object_add(l_jobj_tsd, "value", json_object_new_string(dap_uint256_to_char(l_min_value, NULL)));
             } break;
             case DAP_CHAIN_DATUM_DECREE_TSD_TYPE_STAKE_MIN_SIGNERS_COUNT: {
                 json_object *l_obj_tsd_type = json_object_new_string(
@@ -610,17 +503,7 @@ json_object *dap_chain_datum_decree_to_json(dap_chain_datum_decree_t *a_decree){
                 }
                 uint256_t l_min_signers_count = uint256_0;
                 _dap_tsd_get_scalar(l_tsd, &l_min_signers_count);
-                char *l_min_signers_count_str = dap_chain_balance_print(l_min_signers_count);
-                if (!l_min_signers_count_str) {
-                    json_object_put(l_json_tsd_array);
-                    json_object_put(l_json_subtype);
-                    json_object_put(l_jobj_type);
-                    json_object_put(l_jobj_decree);
-                    json_object_put(l_jobj_tsd);
-                    dap_json_rpc_allocation_error;
-                    return NULL;
-                }
-                json_object *l_jobj_min_signers_count = json_object_new_string(l_min_signers_count_str);
+                json_object *l_jobj_min_signers_count = json_object_new_string(dap_uint256_to_char(l_min_signers_count, NULL));
                 if (!l_jobj_min_signers_count) {
                     json_object_put(l_json_tsd_array);
                     json_object_put(l_json_subtype);
@@ -630,7 +513,6 @@ json_object *dap_chain_datum_decree_to_json(dap_chain_datum_decree_t *a_decree){
                     dap_json_rpc_allocation_error;
                     return NULL;
                 }
-                DAP_DELETE(l_min_signers_count_str);
                 json_object_object_add(l_jobj_tsd, "count", l_jobj_min_signers_count);
             } break;
             default: {
diff --git a/modules/json_rpc/common/dap_json_rpc_chain_datum_token.c b/modules/json_rpc/common/dap_json_rpc_chain_datum_token.c
index 4178f41b2ac58e470d4b416ce63f7fcf63b575a4..103637acd36038468f3f6a14dc9487a86d06fa42 100644
--- a/modules/json_rpc/common/dap_json_rpc_chain_datum_token.c
+++ b/modules/json_rpc/common/dap_json_rpc_chain_datum_token.c
@@ -166,16 +166,7 @@ json_object *dap_chain_datum_token_to_json(dap_chain_datum_token_t * a_token, si
                 dap_json_rpc_allocation_error;
                 return NULL;
             }
-            char *l_premine_supply_str = dap_chain_balance_print(a_token->header_public.premine_supply);
-            if (!l_premine_supply_str) {
-                json_object_put(l_jobj_flags);
-                json_object_put(l_jobj_header);
-                json_object_put(l_jobj_token);
-                dap_json_rpc_allocation_error;
-                return NULL;
-            }
-            json_object *l_jobj_premine_supply = json_object_new_string(l_premine_supply_str);
-            DAP_DELETE(l_premine_supply_str);
+            json_object *l_jobj_premine_supply = json_object_new_string(dap_uint256_to_char(a_token->header_public.premine_supply, NULL));
             if (!l_jobj_premine_supply) {
                 json_object_put(l_jobj_flags);
                 json_object_put(l_jobj_header);
diff --git a/modules/json_rpc/common/dap_json_rpc_chain_datum_tx.c b/modules/json_rpc/common/dap_json_rpc_chain_datum_tx.c
index b6377c825eaf4566d31a5d4d17008acd68712b0e..61d0f90390b568ec90778c59d937b3604bb84b6d 100644
--- a/modules/json_rpc/common/dap_json_rpc_chain_datum_tx.c
+++ b/modules/json_rpc/common/dap_json_rpc_chain_datum_tx.c
@@ -92,12 +92,12 @@ json_object *dap_chain_datum_tx_to_json(dap_chain_datum_tx_t *a_tx,dap_chain_net
                 }
                 json_object_object_add(l_obj_item_data, "ts_expires", json_object_new_string(l_time_str));
                 json_object_object_add(l_obj_item_data, "subtype", json_object_new_string(dap_chain_tx_out_cond_subtype_to_str(((dap_chain_tx_out_cond_t*)item)->header.subtype)));
-                json_object_object_add(l_obj_item_data, "value", json_object_new_string(dap_chain_balance_to_coins(((dap_chain_tx_out_cond_t*)item)->header.value)));
-                json_object_object_add(l_obj_item_data, "value_datoshi", json_object_new_string(dap_chain_balance_print(((dap_chain_tx_out_cond_t*)item)->header.value)));
-                char * uid_str = DAP_NEW_SIZE(char, 32);
+                char *l_val_str, *l_val_datoshi_str = dap_uint256_to_char(((dap_chain_tx_out_cond_t*)item)->header.value, &l_val_str);
+                json_object_object_add(l_obj_item_data, "value", json_object_new_string(l_val_str));
+                json_object_object_add(l_obj_item_data, "value_datoshi", json_object_new_string(l_val_datoshi_str));
+                char uid_str[32];
                 sprintf(uid_str, "0x%016"DAP_UINT64_FORMAT_x"", ((dap_chain_tx_out_cond_t*)item)->header.srv_uid.uint64);
                 json_object_object_add(l_obj_item_data, "uid", json_object_new_string(uid_str));
-                DAP_DEL_Z(uid_str);
                 break;
             case TX_ITEM_TYPE_OUT_EXT:
                 l_obj_item_type = json_object_new_string("TX_ITEM_TYPE_OUT_EXT");
diff --git a/modules/json_rpc/common/dap_json_rpc_chain_datum_tx_items.c b/modules/json_rpc/common/dap_json_rpc_chain_datum_tx_items.c
index 810857fb55766ca27715a3fce79ae76e62915afb..3e0c0cd28474cbaf6884ba71c76d4f13f45a9234 100644
--- a/modules/json_rpc/common/dap_json_rpc_chain_datum_tx_items.c
+++ b/modules/json_rpc/common/dap_json_rpc_chain_datum_tx_items.c
@@ -22,86 +22,31 @@
 #define LOG_TAG "dap_json_rpc_chain_datum_tx_items"
 
 json_object *dap_chain_datum_tx_item_out_cond_srv_pay_to_json(dap_chain_tx_out_cond_t *item) {
-        char * l_value_str = dap_chain_balance_print(((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi);
-        char * l_coins_str = dap_chain_balance_to_coins(((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi);
-        dap_hash_fast_t * l_hash_tmp = &((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.pkey_hash;
-        char * l_hash_str = dap_enc_base58_encode_hash_to_str(l_hash_tmp);
+        char *l_coins_str,
+             *l_value_str = dap_uint256_to_char(((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi, &l_coins_str);
+        char *l_hash_str = dap_enc_base58_encode_hash_to_str_static(&((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.pkey_hash);
         json_object *l_obj = json_object_new_object();
-        json_object *l_obj_value_str = json_object_new_string(l_value_str);
-        json_object *l_obj_coins_str = json_object_new_string(l_coins_str);
-        json_object * l_obj_hash_str = json_object_new_string(l_hash_str);
-        char * unit_str = DAP_NEW_SIZE(char, 32);
+        char unit_str[32];
         snprintf(unit_str, 32, "0x%08x", ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit.uint32);
-        if (!l_obj || !l_obj_coins_str || !l_obj_value_str || !unit_str) {
-            json_object_put(l_obj);
-            json_object_put(l_obj_coins_str);
-            json_object_put(l_obj_value_str);
-            DAP_DELETE(unit_str);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        json_object * l_obj_unit_str = json_object_new_string(unit_str);
-        json_object_object_add(l_obj, "unit", l_obj_unit_str);
-        json_object_object_add(l_obj, "pkey", l_obj_hash_str);
-        json_object_object_add(l_obj, "max_price", l_obj_coins_str);
-        json_object_object_add(l_obj, "max_price_datoshi", l_obj_value_str);
-        DAP_DELETE(unit_str);
+        json_object_object_add(l_obj, "unit", json_object_new_string(unit_str));
+        json_object_object_add(l_obj, "pkey", json_object_new_string(l_hash_str));
+        json_object_object_add(l_obj, "max_price", json_object_new_string(l_coins_str));
+        json_object_object_add(l_obj, "max_price_datoshi", json_object_new_string(l_value_str));
         return l_obj;
 }
 
 json_object* dap_chain_datum_tx_item_out_cond_srv_xchange_to_json(dap_chain_tx_out_cond_t* a_srv_xchange) {
     if (a_srv_xchange->header.subtype == DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE){
         json_object *l_object = json_object_new_object();
-        char *l_value = dap_chain_balance_print(a_srv_xchange->header.value);
-        if (!l_value || !l_object) {
-            json_object_put(l_object);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        json_object *l_obj_value = json_object_new_string(l_value);
-        if (!l_obj_value) {
-            json_object_put(l_object);
-            DAP_DEL_Z(l_value);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        DAP_DELETE(l_value);
-        json_object *l_obj_srv_uid = json_object_new_uint64(a_srv_xchange->header.srv_uid.uint64);
-        json_object *l_obj_buy_net_id = dap_chain_net_id_to_json(a_srv_xchange->subtype.srv_xchange.buy_net_id);
-        json_object *l_obj_sell_net_id = dap_chain_net_id_to_json(a_srv_xchange->subtype.srv_xchange.sell_net_id);
-        json_object *l_obj_buy_token = json_object_new_string(a_srv_xchange->subtype.srv_xchange.buy_token);
-        char *l_rate = dap_chain_balance_to_coins(a_srv_xchange->subtype.srv_xchange.rate);
-        if (!l_rate || !l_obj_srv_uid || !l_obj_buy_net_id || !l_obj_sell_net_id || !l_obj_buy_token) {
-            json_object_put(l_object);
-            json_object_put(l_obj_value);
-            json_object_put(l_obj_srv_uid);
-            json_object_put(l_obj_buy_net_id);
-            json_object_put(l_obj_sell_net_id);
-            json_object_put(l_obj_buy_token);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        json_object *l_obj_rate = json_object_new_string(l_rate);
-        DAP_DELETE(l_rate);
-        json_object *l_obj_seller_addr = dap_chain_addr_to_json(&a_srv_xchange->subtype.srv_xchange.seller_addr);
-        if (!l_obj_seller_addr || !l_obj_rate) {
-            json_object_put(l_object);
-            json_object_put(l_obj_value);
-            json_object_put(l_obj_srv_uid);
-            json_object_put(l_obj_buy_net_id);
-            json_object_put(l_obj_sell_net_id);
-            json_object_put(l_obj_buy_token);
-            json_object_put(l_obj_rate);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        json_object_object_add(l_object, "value", l_obj_value);
-        json_object_object_add(l_object, "rate", l_obj_rate);
-        json_object_object_add(l_object, "srv_uid", l_obj_srv_uid);
-        json_object_object_add(l_object, "buy_net_id", l_obj_buy_net_id);
-        json_object_object_add(l_object, "sell_net_id", l_obj_sell_net_id);
-        json_object_object_add(l_object, "buy_token", l_obj_buy_token);
-        json_object_object_add(l_object, "seller_addr", l_obj_seller_addr);
+        json_object_object_add(l_object, "value", json_object_new_string(dap_uint256_to_char(a_srv_xchange->header.value, NULL)));
+        json_object_object_add(l_object, "rate", ( { 
+            char *l_rate; dap_uint256_to_char(a_srv_xchange->subtype.srv_xchange.rate, &l_rate);
+            json_object_new_string(l_rate); } ));
+        json_object_object_add(l_object, "srv_uid", json_object_new_uint64(a_srv_xchange->header.srv_uid.uint64));
+        json_object_object_add(l_object, "buy_net_id", dap_chain_net_id_to_json(a_srv_xchange->subtype.srv_xchange.buy_net_id));
+        json_object_object_add(l_object, "sell_net_id", dap_chain_net_id_to_json(a_srv_xchange->subtype.srv_xchange.sell_net_id));
+        json_object_object_add(l_object, "buy_token", json_object_new_string(a_srv_xchange->subtype.srv_xchange.buy_token));
+        json_object_object_add(l_object, "seller_addr", dap_chain_addr_to_json(&a_srv_xchange->subtype.srv_xchange.seller_addr));
         //TODO: Parse TSD
         return l_object;
     }
@@ -111,35 +56,13 @@ json_object* dap_chain_datum_tx_item_out_cond_srv_xchange_to_json(dap_chain_tx_o
 json_object *dap_chain_datum_tx_item_out_cond_srv_stake_to_json(dap_chain_tx_out_cond_t* a_srv_stake) {
     if (a_srv_stake->header.subtype == DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE) {
         json_object *l_object = json_object_new_object();
-        char *l_value = dap_chain_balance_print(a_srv_stake->header.value);
-        if (!l_value || !l_object) {
-            json_object_put(l_object);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        json_object *l_obj_value = json_object_new_string(l_value);
+        json_object *l_obj_value = json_object_new_string(dap_uint256_to_char(a_srv_stake->header.value, NULL));
         json_object *l_obj_srv_uid = json_object_new_uint64(a_srv_stake->header.srv_uid.uint64);
         json_object *l_obj_signing_addr = dap_chain_addr_to_json(&a_srv_stake->subtype.srv_stake_pos_delegate.signing_addr);
         char *l_signer_node_addr = dap_strdup_printf(
                 NODE_ADDR_FP_STR,
                 NODE_ADDR_FP_ARGS_S(a_srv_stake->subtype.srv_stake_pos_delegate.signer_node_addr));
-        if (!l_signer_node_addr || !l_obj_signing_addr || !l_obj_srv_uid || !l_obj_value) {
-            json_object_put(l_obj_srv_uid);
-            json_object_put(l_obj_value);
-            json_object_put(l_object);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
         json_object *l_obj_signer_node_addr = json_object_new_string(l_signer_node_addr);
-        if (!l_obj_signer_node_addr) {
-            DAP_DELETE(l_signer_node_addr);
-            json_object_put(l_obj_srv_uid);
-            json_object_put(l_obj_value);
-            json_object_put(l_object);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        DAP_DELETE(l_value);
         DAP_DELETE(l_signer_node_addr);
         json_object_object_add(l_object, "value", l_obj_value);
         json_object_object_add(l_object, "srv_uid", l_obj_srv_uid);
@@ -155,69 +78,12 @@ json_object *dap_chain_net_srv_stake_lock_cond_out_to_json(dap_chain_tx_out_cond
 {
     if (a_stake_lock->header.subtype == DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK) {
         json_object *l_object = json_object_new_object();
-        if (!l_object) {
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        char *l_value = dap_chain_balance_print(a_stake_lock->header.value);
-        if (!l_value) {
-            json_object_put(l_object);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        json_object *l_obj_value = json_object_new_string(l_value);
-        if (!l_obj_value) {
-            DAP_DELETE(l_value);
-            json_object_put(l_object);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        DAP_DELETE(l_value);
-        json_object *l_obj_srv_uid = json_object_new_uint64(a_stake_lock->header.srv_uid.uint64);
-        if (!l_obj_srv_uid) {
-            json_object_put(l_object);
-            json_object_put(l_obj_value);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        char *l_reinvest_precent = dap_chain_balance_print(a_stake_lock->subtype.srv_stake_lock.reinvest_percent);
-        if (!l_reinvest_precent) {
-            json_object_put(l_object);
-            json_object_put(l_obj_value);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        json_object *l_obj_reinvest_percent = json_object_new_string(l_reinvest_precent);
-        if (!l_obj_reinvest_percent) {
-            DAP_DELETE(l_reinvest_precent);
-            json_object_put(l_object);
-            json_object_put(l_obj_value);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        DAP_DELETE(l_reinvest_precent);
-        json_object *l_obj_time_unlock = json_object_new_uint64(a_stake_lock->subtype.srv_stake_lock.time_unlock);
-        if (!l_obj_time_unlock) {
-            json_object_put(l_obj_reinvest_percent);
-            json_object_put(l_object);
-            json_object_put(l_obj_value);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        json_object *l_obj_flags = json_object_new_uint64(a_stake_lock->subtype.srv_stake_lock.flags);
-        if (!l_obj_flags) {
-            json_object_put(l_obj_time_unlock);
-            json_object_put(l_obj_reinvest_percent);
-            json_object_put(l_object);
-            json_object_put(l_obj_value);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        json_object_object_add(l_object, "value", l_obj_value);
-        json_object_object_add(l_object, "srv_uid", l_obj_srv_uid);
-        json_object_object_add(l_object, "reinvest_percent", l_obj_reinvest_percent);
-        json_object_object_add(l_object, "time_unlock", l_obj_time_unlock);
-        json_object_object_add(l_object, "flags", l_obj_flags);
+        json_object_object_add(l_object, "value", json_object_new_string(dap_uint256_to_char(a_stake_lock->header.value, NULL)));
+        json_object_object_add(l_object, "srv_uid", json_object_new_uint64(a_stake_lock->header.srv_uid.uint64));
+        json_object_object_add(l_object, "reinvest_percent",
+            json_object_new_string(dap_uint256_to_char(a_stake_lock->subtype.srv_stake_lock.reinvest_percent, NULL)));
+        json_object_object_add(l_object, "time_unlock", json_object_new_uint64(a_stake_lock->subtype.srv_stake_lock.time_unlock));
+        json_object_object_add(l_object, "flags", json_object_new_uint64(a_stake_lock->subtype.srv_stake_lock.flags));
         return l_object;
     }
     return NULL;
@@ -226,58 +92,19 @@ json_object *dap_chain_net_srv_stake_lock_cond_out_to_json(dap_chain_tx_out_cond
 
 json_object* dap_chain_datum_tx_item_out_to_json(const dap_chain_tx_out_t *a_out) {
     json_object *l_object = json_object_new_object();
-    json_object *l_value_datoshi = json_object_new_string(dap_chain_balance_print(a_out->header.value));
-    json_object *l_value = json_object_new_string(dap_chain_balance_to_coins(a_out->header.value));
-    json_object *l_addr = dap_chain_addr_to_json(&a_out->addr);
-    if (!l_addr || !l_object || !l_addr) {
-        json_object_put(l_object);
-        json_object_put(l_value);
-        dap_json_rpc_allocation_error;
-        return NULL;
-    }
-    json_object_object_add(l_object, "value", l_value);
-    json_object_object_add(l_object, "value_datoshi", l_value_datoshi);
-    json_object_object_add(l_object, "address", l_addr);
+    char *l_val_coins, *l_val_datoshi = dap_uint256_to_char(a_out->header.value, &l_val_coins);
+    json_object_object_add(l_object, "value", json_object_new_string(l_val_coins));
+    json_object_object_add(l_object, "value_datoshi", json_object_new_string(l_val_datoshi));
+    json_object_object_add(l_object, "address", dap_chain_addr_to_json(&a_out->addr));
     return l_object;
 }
 
 
 json_object* dap_chain_datum_tx_item_out_ext_to_json(const dap_chain_tx_out_ext_t *a_out_ext) {
     json_object *l_obj = json_object_new_object();
-    if (!l_obj) {
-        dap_json_rpc_allocation_error;
-        return NULL;
-    }
-    char *l_value = dap_chain_balance_print(a_out_ext->header.value);
-    if (!l_value) {
-        json_object_put(l_obj);
-        dap_json_rpc_allocation_error;
-        return NULL;
-    }
-    json_object *l_obj_value = json_object_new_string(l_value);
-    DAP_DELETE(l_value);
-    if (!l_obj_value) {
-        json_object_put(l_obj);
-        dap_json_rpc_allocation_error;
-        return NULL;
-    }
-    json_object *l_obj_addr = dap_chain_addr_to_json(&a_out_ext->addr);
-    if (!l_obj_addr) {
-        json_object_put(l_obj);
-        dap_json_rpc_error_add(DAP_JSON_RPC_ERR_CODE_SERIALIZATION_ADDR_TO_JSON,
-                               "Can't get from addr JSON");
-        return NULL;
-    }
-    json_object *l_obj_token = json_object_new_string(a_out_ext->token);
-    if (!l_obj_token) {
-        json_object_put(l_obj_addr);
-        json_object_put(l_obj);
-        dap_json_rpc_allocation_error;
-        return NULL;
-    }
-    json_object_object_add(l_obj, "value", l_obj_value);
-    json_object_object_add(l_obj, "addr", l_obj_addr);
-    json_object_object_add(l_obj, "token", l_obj_token);
+    json_object_object_add(l_obj, "value", json_object_new_string(dap_uint256_to_char(a_out_ext->header.value, NULL)));
+    json_object_object_add(l_obj, "addr", dap_chain_addr_to_json(&a_out_ext->addr));
+    json_object_object_add(l_obj, "token", json_object_new_string(a_out_ext->token));
     return l_obj;
 }
 
@@ -442,30 +269,14 @@ json_object *dap_chain_datum_tx_item_in_ems_to_json(const dap_chain_tx_in_ems_t
     return l_object;
 }
 
-json_object *dap_chain_datum_tx_item_out_cond_fee_to_json(dap_chain_tx_out_cond_t *a_fee){
-    if (a_fee->header.subtype == DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE) {
-        json_object *l_obj = json_object_new_object();
-        if (!l_obj) {
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        char *l_balance = dap_chain_balance_print(a_fee->header.value);
-        if (!l_balance) {
-            json_object_put(l_obj);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        json_object *l_obj_balance = json_object_new_string(l_balance);
-        DAP_DELETE(l_balance);
-        if (!l_obj_balance) {
-            json_object_put(l_obj);
-            dap_json_rpc_allocation_error;
-            return NULL;
-        }
-        json_object_object_add(l_obj, "balance", l_obj_balance);
-        return l_obj;
-    }
-    return NULL;
+json_object *dap_chain_datum_tx_item_out_cond_fee_to_json(dap_chain_tx_out_cond_t *a_fee) {
+    return a_fee->header.subtype == DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE
+        ? ( {
+                json_object *l_obj = json_object_new_object();
+                json_object_object_add(l_obj, "balance", json_object_new_string(dap_uint256_to_char(a_fee->header.value, NULL)));
+                l_obj;
+            } )
+        : NULL;
 }
 
 json_object* dap_chain_datum_tx_item_sig_to_json(const dap_chain_tx_sig_t *a_sig){
diff --git a/modules/json_rpc/common/dap_json_rpc_chain_datum_tx_receipt.c b/modules/json_rpc/common/dap_json_rpc_chain_datum_tx_receipt.c
index a86b12ac71d51d6293938deb0659bec973cc07cf..9e24faf6a2f7434bb39d4eec7a140310521d86a9 100644
--- a/modules/json_rpc/common/dap_json_rpc_chain_datum_tx_receipt.c
+++ b/modules/json_rpc/common/dap_json_rpc_chain_datum_tx_receipt.c
@@ -16,53 +16,16 @@ json_object* dap_chain_receipt_info_to_json(dap_chain_receipt_info_t *a_info){
         dap_json_rpc_allocation_error;
         return NULL;
     }
-    json_object *l_obj_srv_uid = json_object_new_uint64(a_info->srv_uid.uint64);
-    if (!l_obj_srv_uid) {
-        json_object_put(l_obj);
-        dap_json_rpc_allocation_error;
-        return NULL;
-    }
-    json_object_object_add(l_obj, "uid", l_obj_srv_uid);
-
+    json_object_object_add(l_obj, "uid", json_object_new_uint64(a_info->srv_uid.uint64));
 #if DAP_CHAIN_NET_SRV_UID_SIZE == 8
-    json_object *l_obj_addition = json_object_new_uint64(a_info->addition);
-    if (!l_obj_addition){
-        json_object_put(l_obj);
-        dap_json_rpc_allocation_error;
-        return NULL;
-    }
-    json_object_object_add(l_obj, "ext_size", l_obj_addition);
+    json_object_object_add(l_obj, "ext_size", json_object_new_uint64(a_info->addition));
 #endif
+    json_object_object_add(l_obj, "units", json_object_new_uint64(a_info->units));
+    json_object_object_add(l_obj, "units_type", json_object_new_string(dap_chain_srv_unit_enum_to_str(a_info->units_type.enm)));
 
-    json_object * l_obj_units = json_object_new_uint64(a_info->units);
-    json_object *l_obj_units_type = json_object_new_string(dap_chain_srv_unit_enum_to_str(a_info->units_type.enm));
-    if (!l_obj_units_type || !l_obj_units) {
-        json_object_put(l_obj);
-        json_object_put(l_obj_units);
-        json_object_put(l_obj_units_type);
-        dap_json_rpc_allocation_error;
-        return NULL;
-    }
-    json_object_object_add(l_obj, "units", l_obj_units);
-    json_object_object_add(l_obj, "units_type", l_obj_units_type);
-
-    char *l_value = dap_chain_balance_to_coins(a_info->value_datoshi);
-    char *l_datoshi_value = dap_chain_balance_print(a_info->value_datoshi);
-    json_object *l_obj_datoshi = json_object_new_string(l_datoshi_value);
-    json_object *l_obj_value = json_object_new_string(l_value);
-    if (!l_obj_datoshi || !l_obj_value) {
-        json_object_put(l_obj_value);
-        json_object_put(l_obj_datoshi);
-        DAP_DELETE(l_datoshi_value);
-        dap_json_rpc_allocation_error;
-        return NULL;
-    }
-
-    DAP_DELETE(l_datoshi_value);
-    DAP_DELETE(l_value);
-
-    json_object_object_add(l_obj, "value", l_obj_value);
-    json_object_object_add(l_obj, "value_datoshi", l_obj_datoshi);
+    char *l_value, *l_datoshi_value = dap_uint256_to_char(a_info->value_datoshi, &l_value);
+    json_object_object_add(l_obj, "value", json_object_new_string(l_value));
+    json_object_object_add(l_obj, "value_datoshi", json_object_new_string(l_datoshi_value));
     return l_obj;
 }
 
diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c
index 721c40b69964902247bfa6168b39c4192c94d7e5..da0387c2950edce37ee5f8e06d79b92f25d47aad 100644
--- a/modules/mempool/dap_chain_mempool.c
+++ b/modules/mempool/dap_chain_mempool.c
@@ -96,8 +96,8 @@ 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_strcmp(a_hash_out_type, "hex")
-            ? dap_enc_base58_encode_hash_to_str(&l_key_hash)
-            : dap_chain_hash_fast_to_str_new(&l_key_hash);
+            ? dap_enc_base58_encode_hash_to_str_static(&l_key_hash)
+            : dap_chain_hash_fast_to_str_static(&l_key_hash);
 
     const char *l_type_str;
     switch (a_datum->header.type_id) {
@@ -112,7 +112,6 @@ char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t
         if (l_net_id != a_chain->net_id.uint64) {
             log_it(L_WARNING, "Datum emission with hash %s NOT placed in mempool: wallet addr net ID %lu != %lu chain net ID",
                    l_key_str, l_net_id, a_chain->net_id.uint64);
-            DAP_DELETE(l_key_str);
             return NULL;
         }
         l_type_str = "emission";
@@ -132,7 +131,7 @@ char *dap_chain_mempool_datum_add(const dap_chain_datum_t *a_datum, dap_chain_t
     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_res == DAP_GLOBAL_DB_RC_SUCCESS) ? l_key_str : ({ DAP_DELETE(l_key_str); NULL; });
+    return (l_res == DAP_GLOBAL_DB_RC_SUCCESS) ? dap_strdup(l_key_str) : NULL;
 }
 
 /**
@@ -585,9 +584,8 @@ int dap_chain_mempool_tx_create_massive( dap_chain_t * a_chain, dap_enc_key_t *a
     uint256_t l_value_need = {};
     MULT_256_256(dap_chain_uint256_from(a_tx_num), l_single_val, &l_value_need);
     uint256_t l_value_transfer = {}; // how many coins to transfer
-    char *l_balance = dap_chain_balance_to_coins(l_value_need);
+    char *l_balance; dap_uint256_to_char(l_value_need, &l_balance);
     log_it(L_DEBUG, "Create %"DAP_UINT64_FORMAT_U" transactions, summary %s", a_tx_num, l_balance);
-    DAP_DELETE(l_balance);
     dap_ledger_t *l_ledger = dap_chain_net_by_id(a_chain->net_id)->pub.ledger;
     dap_list_t *l_list_used_out = dap_ledger_get_list_tx_outs_with_val(l_ledger, a_token_ticker,
                                                                              a_addr_from, l_value_need, &l_value_transfer);
@@ -614,25 +612,25 @@ int dap_chain_mempool_tx_create_massive( dap_chain_t * a_chain, dap_enc_key_t *a
             char l_in_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
             dap_chain_hash_fast_to_str(&l_item->tx_hash_fast, l_in_hash_str, sizeof(l_in_hash_str));
 
-            char *l_balance = dap_chain_balance_print(l_item->value);
+            l_balance = dap_uint256_to_char(l_item->value, NULL);
             if (dap_chain_datum_tx_add_in_item(&l_tx_new, &l_item->tx_hash_fast, l_item->num_idx_out)) {
                 SUM_256_256(l_value_to_items, l_item->value, &l_value_to_items);
                 log_it(L_DEBUG, "Added input %s with %s datoshi", l_in_hash_str, l_balance);
             } else {
                 log_it(L_WARNING, "Can't add input from %s with %s datoshi", l_in_hash_str, l_balance);
             }
-            DAP_DELETE(l_balance);
             DL_DELETE(l_list_used_out, l_used_out);
             DAP_DELETE(l_item);
             if (compare256(l_value_to_items, l_value_transfer) != -1)
                 break;
         }
         if (compare256(l_value_to_items, l_single_val) == -1) {
-            char *l_balance = dap_chain_balance_print(l_value_to_items);
-            char *l_balance_need = dap_chain_balance_print(l_single_val);
-            log_it(L_ERROR, "Not enough values on output to produce enough inputs: %s when need %s", l_balance, l_balance_need);
-            DAP_DELETE(l_balance);
-            DAP_DELETE(l_balance_need);
+            char l_log_str[256] = { '\0' };
+            l_balance = dap_uint256_to_char(l_value_to_items, NULL);
+            dap_snprintf(l_log_str, sizeof(l_log_str),
+                         "Not enough values on output to produce enough inputs: %s when need ", l_balance);
+            strcat(l_log_str, dap_uint256_to_char(l_single_val, NULL));
+            log_it(L_ERROR, "%s", l_log_str);
             DAP_DELETE(l_objs);
             return -5;
         }
@@ -738,7 +736,6 @@ int dap_chain_mempool_tx_create_massive( dap_chain_t * a_chain, dap_enc_key_t *a
         //dap_ledger_tx_add( a_chain->ledger, l_tx);
 
         l_objs[i].key = dap_chain_hash_fast_to_str_new(&l_tx_new_hash);
-        //continue;
         l_objs[i].value = (uint8_t *)l_datum;
         l_objs[i].value_len = dap_chain_datum_size(l_datum);
         log_it(L_DEBUG, "Prepared obj with key %s (value_len = %"DAP_UINT64_FORMAT_U")",
diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c
index 4dbb3a1a150363e0dca46c262fb28fc7af60db4d..8f0d62be82e7026d8bf94cbb46ad8d28198826cb 100644
--- a/modules/net/dap_chain_ledger.c
+++ b/modules/net/dap_chain_ledger.c
@@ -456,12 +456,9 @@ struct json_object *wallet_info_json_collect(dap_ledger_t *a_ledger, dap_ledger_
     }
     struct json_object *l_token = json_object_new_object();
     json_object_object_add(l_token, "name", json_object_new_string(a_bal->token_ticker));
-    char *l_balance_coins = dap_chain_balance_to_coins(a_bal->balance);
-    char *l_balance_datoshi = dap_chain_balance_print(a_bal->balance);
+    char *l_balance_coins, *l_balance_datoshi = dap_uint256_to_char(a_bal->balance, &l_balance_coins);
     json_object_object_add(l_token, "full_balance", json_object_new_string(l_balance_coins));
     json_object_object_add(l_token, "datoshi", json_object_new_string(l_balance_datoshi));
-    DAP_DELETE(l_balance_coins);
-    DAP_DELETE(l_balance_datoshi);
     json_object_object_add(l_network, "tokens", l_token);
     json_object_object_add(l_json, "networks", l_network);
     return l_json;
@@ -823,11 +820,10 @@ static void s_tx_header_print(json_object *a_json_out, dap_chain_datum_tx_t *a_t
     if (a_tx->header.ts_created)
         dap_time_to_str_rfc822(l_time_str, DAP_TIME_STR_SIZE, a_tx->header.ts_created);
     char *l_tx_hash_str = dap_strcmp(a_hash_out_type, "hex")
-            ? dap_enc_base58_encode_hash_to_str(a_tx_hash)
-            : dap_chain_hash_fast_to_str_new(a_tx_hash);
+            ? dap_enc_base58_encode_hash_to_str_static(a_tx_hash)
+            : dap_chain_hash_fast_to_str_static(a_tx_hash);
     json_object_object_add(a_json_out, "TX hash ", json_object_new_string(l_tx_hash_str));
     json_object_object_add(a_json_out, "time ", json_object_new_string(l_time_str));
-    DAP_DELETE(l_tx_hash_str);
 }
 
 static void s_dump_datum_tx_for_addr(dap_ledger_tx_item_t *a_item, bool a_unspent, dap_ledger_t *a_ledger, dap_chain_addr_t *a_addr, const char *a_hash_out_type, json_object *json_arr_out) {
@@ -934,14 +930,10 @@ static void s_dump_datum_tx_for_addr(dap_ledger_tx_item_t *a_item, bool a_unspen
             const char *l_dst_addr_str = l_dst_addr ? dap_chain_addr_to_str(l_dst_addr)
                                                     : dap_chain_tx_out_cond_subtype_to_str(
                                                           ((dap_chain_tx_out_cond_t *)l_list_out->data)->header.subtype);
-            char *l_value_str = dap_chain_balance_print(l_value);
-            json_object_object_add(l_json_obj_datum, "send", json_object_new_string(l_value_str));
+            json_object_object_add(l_json_obj_datum, "send", json_object_new_string(dap_uint256_to_char(l_value, NULL)));
             json_object_object_add(l_json_obj_datum, "to addr", json_object_new_string(l_dst_addr_str));
             json_object_object_add(l_json_obj_datum, "token", l_src_token ? json_object_new_string(l_src_token) : json_object_new_string("UNKNOWN"));
             json_object_array_add(json_arr_out, l_json_obj_datum);
-            if (l_dst_addr)
-                DAP_DELETE(l_dst_addr_str);
-            DAP_DELETE(l_value_str);
         }
         if (l_dst_addr && !memcmp(l_dst_addr, a_addr, sizeof(dap_chain_addr_t))) {
             json_object * l_json_obj_datum = json_object_new_object();
@@ -955,15 +947,11 @@ static void s_dump_datum_tx_for_addr(dap_ledger_tx_item_t *a_item, bool a_unspen
                                                    : (l_src_addr ? dap_chain_addr_to_str(l_src_addr)
                                                                  : dap_chain_tx_out_cond_subtype_to_str(
                                                                        l_src_subtype));
-            char *l_value_str = dap_chain_balance_print(l_value);
-            json_object_object_add(l_json_obj_datum, "recv ", json_object_new_string(l_value_str));
+            json_object_object_add(l_json_obj_datum, "recv ", json_object_new_string(dap_uint256_to_char(l_value, NULL)));
             json_object_object_add(l_json_obj_datum, "token ", l_dst_token ? json_object_new_string(l_dst_token) :
                                   (l_src_token ? json_object_new_string(l_src_token) : json_object_new_string("UNKNOWN")));
             json_object_object_add(l_json_obj_datum, "from ", json_object_new_string(l_src_addr_str));
             json_object_array_add(json_arr_out, l_json_obj_datum);
-            if (l_src_addr)
-                DAP_DELETE(l_src_addr_str);
-            DAP_DELETE(l_value_str);
         }
     }
     dap_list_free(l_list_out_items);
@@ -1032,8 +1020,7 @@ static bool s_ledger_token_supply_check_unsafe(dap_ledger_token_item_t *a_token_
     char *l_supply_str = dap_chain_balance_print(a_token_item->current_supply);
     char *l_value_str = dap_chain_balance_print(a_value);
     log_it(L_WARNING, "Token current supply %s < emission value %s", l_supply_str, l_value_str);
-    DAP_DEL_Z(l_supply_str);
-    DAP_DEL_Z(l_value_str);
+    DAP_DEL_MULTY(l_supply_str, l_value_str);
     return false;
 }
 
@@ -1054,9 +1041,8 @@ static bool s_ledger_token_supply_check_update(dap_ledger_t *a_ledger, dap_ledge
         return false;
     int l_overflow = SUBTRACT_256_256(a_token_item->current_supply, a_value, &a_token_item->current_supply);
     assert(!l_overflow);
-    char *l_balance = dap_chain_balance_to_coins(a_token_item->current_supply);
+    char *l_balance; dap_uint256_to_char(a_token_item->current_supply, &l_balance);
     log_it(L_NOTICE, "New current supply %s for token %s", l_balance, a_token_item->ticker);
-    DAP_DELETE(l_balance);
     s_ledger_token_cache_update(a_ledger, a_token_item);
     return true;
 }
@@ -1232,13 +1218,12 @@ int dap_ledger_token_add(dap_ledger_t *a_ledger, dap_chain_datum_token_t *a_toke
     }
     int l_res_token_tsd_parse = 0;
 
-    char *l_balance_dbg = s_debug_more ? dap_chain_balance_to_coins(l_token->total_supply) : NULL;
+    char *l_balance_dbg = NULL;
+    if (s_debug_more) {
+        dap_uint256_to_char(l_token->total_supply, &l_balance_dbg);
+    }
 
-#define CLEAN_UP do { DAP_DELETE(l_token); \
-    DAP_DELETE(l_token_item->auth_pkeys); \
-    DAP_DELETE(l_token_item->auth_pkeys_hash); \
-    DAP_DELETE(l_token_item); \
-    DAP_DELETE(l_balance_dbg); } while (0);
+#define CLEAN_UP DAP_DEL_MULTY(l_token, l_token_item->auth_pkeys, l_token_item->auth_pkeys_hash, l_token_item)
 
     switch (l_token->type) {
     case DAP_CHAIN_DATUM_TOKEN_TYPE_DECL:
@@ -1396,13 +1381,10 @@ static int s_token_tsd_parse(dap_ledger_t * a_ledger, dap_ledger_token_item_t *a
                     if (a_token_item->tx_recv_allow) {
                         for( size_t i=0; i < a_token_item->tx_recv_allow_size; i++){ // Check for all the list
                             if ( memcmp(&a_token_item->tx_recv_allow[i], l_tsd->data, l_tsd->size) == 0 ){ // Found
-                                char * l_addr_str= dap_chain_addr_to_str((dap_chain_addr_t*) l_tsd->data );
-                                if(s_debug_more)
-                                    log_it(L_ERROR,"TSD param DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_ADD has address %s thats already present in list",
-                                       l_addr_str);
-                                DAP_DELETE(l_addr_str);
-                                DAP_DELETE(a_token_item->tx_recv_allow);
-                                a_token_item->tx_recv_allow = NULL;
+                                debug_if(s_debug_more, L_ERROR,
+                                    "TSD param DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_ADD has address %s thats already present in list",
+                                    dap_chain_addr_to_str((dap_chain_addr_t*) l_tsd->data ));
+                                DAP_DEL_Z(a_token_item->tx_recv_allow);
                                 return -11;
                             }
                         }
@@ -1483,11 +1465,8 @@ static int s_token_tsd_parse(dap_ledger_t * a_ledger, dap_ledger_token_item_t *a
                     if(a_token_item->tx_recv_block)
                         for( size_t i=0; i < a_token_item->tx_recv_block_size; i++){ // Check for all the list
                             if ( memcmp(&a_token_item->tx_recv_block[i], l_tsd->data, l_tsd->size) == 0 ){ // Found
-                                char * l_addr_str = dap_chain_addr_to_str((dap_chain_addr_t*) l_tsd->data );
-                                if(s_debug_more)
-                                    log_it(L_ERROR,"TSD param DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_BLOCKED_ADD has address %s thats already present in list",
-                                       l_addr_str);
-                                DAP_DELETE(l_addr_str);
+                                debug_if(s_debug_more, L_ERROR,"TSD param DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_BLOCKED_ADD has address %s thats already present in list",
+                                           dap_chain_addr_to_str((dap_chain_addr_t*) l_tsd->data ));
                                 DAP_DELETE(l_addrs);
                                 DAP_DEL_Z(a_token_item->tx_recv_allow);
                                 return -11;
@@ -1567,11 +1546,8 @@ static int s_token_tsd_parse(dap_ledger_t * a_ledger, dap_ledger_token_item_t *a
                     // Check if its already present
                     for( size_t i=0; i < a_token_item->tx_send_allow_size; i++){ // Check for all the list
                         if ( memcmp(&a_token_item->tx_send_allow[i], l_tsd->data, l_tsd->size) == 0 ){ // Found
-                            char * l_addr_str= dap_chain_addr_to_str((dap_chain_addr_t*) l_tsd->data );
-                            if(s_debug_more)
-                                log_it(L_ERROR,"TSD param DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_ADD has address %s thats already present in list",
-                                   l_addr_str);
-                            DAP_DELETE(l_addr_str);
+                            debug_if(s_debug_more, L_ERROR,"TSD param DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_ADD has address %s thats already present in list",
+                                     dap_chain_addr_to_str((dap_chain_addr_t*) l_tsd->data ));
                             DAP_DELETE(l_addrs);
                             return -11;
                         }
@@ -1649,13 +1625,9 @@ static int s_token_tsd_parse(dap_ledger_t * a_ledger, dap_ledger_token_item_t *a
                     // Check if its already present
                     for( size_t i=0; i < a_token_item->tx_send_block_size; i++){ // Check for all the list
                         if ( memcmp(&a_token_item->tx_send_block[i], l_tsd->data, l_tsd->size) == 0 ){ // Found
-                            char * l_addr_str= dap_chain_addr_to_str((dap_chain_addr_t*) l_tsd->data );
-                            if(s_debug_more)
-                                log_it(L_ERROR,"TSD param DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_ADD has address %s thats already present in list",
-                                   l_addr_str);
-                            DAP_DELETE(l_addr_str);
-                            if (l_addrs)
-                                DAP_DELETE(l_addrs);
+                            debug_if(s_debug_more, L_ERROR,"TSD param DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_SENDER_ALLOWED_ADD has address %s thats already present in list",
+                                     dap_chain_addr_to_str((dap_chain_addr_t*) l_tsd->data ));
+                            DAP_DELETE(l_addrs);
                             return -11;
                         }
                     }
@@ -1931,15 +1903,13 @@ json_object *dap_ledger_balance_info(dap_ledger_t *a_ledger)
         //                        dap_chain_balance_print(l_balance_item->balance));
         json_object_object_add(json_obj_tx, "Ledger balance key", json_object_new_string(l_balance_item->key));
         json_object_object_add(json_obj_tx, "token_ticker", json_object_new_string(l_balance_item->token_ticker));
-        char *l_balance = dap_chain_balance_print(l_balance_item->balance);
-        json_object_object_add(json_obj_tx, "balance", json_object_new_string(l_balance));
-        DAP_DELETE(l_balance);
+        json_object_object_add(json_obj_tx, "balance", json_object_new_string(dap_uint256_to_char(l_balance_item->balance, NULL)));
         json_object_array_add(json_arr_out, json_obj_tx);
         l_counter +=1;
     }
     if (!l_counter){
         json_object* json_obj_tx = json_object_new_object();
-        json_object_object_add(json_obj_tx, "0 items in ledger balance_accounts", json_object_new_string("empty"));
+        json_object_object_add(json_obj_tx, "No items in ledger balance_accounts", json_object_new_string("empty"));
         json_object_array_add(json_arr_out, json_obj_tx);
     } 
     pthread_rwlock_unlock(&l_ledger_pvt->balance_accounts_rwlock);
@@ -2571,10 +2541,9 @@ int dap_ledger_token_emission_add_check(dap_ledger_t *a_ledger, byte_t *a_token_
             char l_token_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
             dap_chain_hash_fast_to_str(a_emission_hash, l_token_hash_str, sizeof(l_token_hash_str));
             if ( l_token_emission_item->datum_token_emission->hdr.version >= 2 ) {
-                char *l_balance = dap_chain_balance_print(l_token_emission_item->datum_token_emission->hdr.value);
                 log_it(L_ERROR, "Can't add token emission datum of %s %s ( %s ): already present in cache",
-                        l_balance, l_token_ticker, l_token_hash_str);
-                DAP_DELETE(l_balance);
+                        dap_uint256_to_char(l_token_emission_item->datum_token_emission->hdr.value, NULL),
+                         l_token_ticker, l_token_hash_str);
             } else
                 log_it(L_ERROR, "Can't add token emission datum of %"DAP_UINT64_FORMAT_U" %s ( %s ): already present in cache",
                     l_token_emission_item->datum_token_emission->hdr.value64, l_token_ticker, l_token_hash_str);
@@ -2662,20 +2631,18 @@ int dap_ledger_token_emission_add_check(dap_ledger_t *a_ledger, byte_t *a_token_
                     l_emission->data.type_auth.size = l_sign_auth_size;
                 }
                 if (l_aproves < l_aproves_valid ){
-                    if(s_debug_more) {
-                        char *l_balance = dap_chain_balance_print(l_emission->hdr.value);
-                        log_it(L_WARNING, "Emission of %s datoshi of %s:%s is wrong: only %u valid aproves when %u need",
-                                l_balance, a_ledger->net->pub.name, l_emission->hdr.ticker, l_aproves, l_aproves_valid);
-                        DAP_DELETE(l_balance);
-                    }
+                    debug_if(s_debug_more, L_WARNING, "Emission of %s datoshi of %s:%s is wrong: only %u valid aproves when %u need",
+                                dap_uint256_to_char(l_emission->hdr.value, NULL), a_ledger->net->pub.name, l_emission->hdr.ticker,
+                                l_aproves, l_aproves_valid);
                     l_ret = DAP_LEDGER_EMISSION_ADD_CHECK_NOT_ENOUGH_VALID_SIGNS;
                     char l_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE] = { '\0' };
                     dap_chain_hash_fast_to_str(a_emission_hash, l_hash_str, sizeof(l_hash_str));
                     log_it(L_MSG, "!!! Datum hash for HAL: %s", l_hash_str);
                 }
             }else{
-                if(s_debug_more)
-                    log_it(L_WARNING,"Can't find token declaration %s:%s thats pointed in token emission datum", a_ledger->net->pub.name, l_emission->hdr.ticker);
+                debug_if(s_debug_more, L_WARNING,"Can't find token declaration %s:%s thats pointed in token emission datum",
+                    a_ledger->net->pub.name, l_emission->hdr.ticker);
+                    
                 l_ret = DAP_LEDGER_EMISSION_ADD_CHECK_CANT_FIND_DECLARATION_TOKEN;
             }
         }break;
@@ -2840,13 +2807,11 @@ int dap_ledger_token_emission_add(dap_ledger_t *a_ledger, byte_t *a_token_emissi
             // Add it to cache
             s_ledger_emission_cache_update(a_ledger, l_token_emission_item);
             if (s_debug_more) {
-                char * l_token_emission_address_str = dap_chain_addr_to_str(&(l_token_emission_item->datum_token_emission->hdr.address));
-                char *l_balance = dap_chain_balance_to_coins(l_token_emission_item->datum_token_emission->hdr.value);
+                char *l_balance; dap_uint256_to_char(l_token_emission_item->datum_token_emission->hdr.value, &l_balance);
                 log_it(L_NOTICE, "Added token emission datum to emissions cache: type=%s value=%s token=%s to_addr=%s ",
                                c_dap_chain_datum_token_emission_type_str[l_token_emission_item->datum_token_emission->hdr.type],
-                               l_balance, c_token_ticker, l_token_emission_address_str);
-                DAP_DELETE(l_token_emission_address_str);
-                DAP_DELETE(l_balance);
+                               l_balance, c_token_ticker,
+                               dap_chain_addr_to_str(&(l_token_emission_item->datum_token_emission->hdr.address)));
             }
             s_threshold_txs_proc(a_ledger);
         } else if (HASH_COUNT(l_ledger_pvt->threshold_emissions) < s_threshold_emissions_max) {
@@ -2862,13 +2827,11 @@ int dap_ledger_token_emission_add(dap_ledger_t *a_ledger, byte_t *a_token_emissi
             pthread_rwlock_unlock(&l_ledger_pvt->threshold_emissions_rwlock);
             l_ret = -5;
             if (s_debug_more) {
-                char * l_token_emission_address_str = dap_chain_addr_to_str(&(l_token_emission_item->datum_token_emission->hdr.address));
-                char *l_balance = dap_chain_balance_to_coins(l_token_emission_item->datum_token_emission->hdr.value);
+                char *l_balance; dap_uint256_to_char(l_token_emission_item->datum_token_emission->hdr.value, &l_balance);
                 log_it(L_NOTICE, "Added token emission datum to emissions threshold: type=%s value=%s token=%s to_addr=%s ",
                                c_dap_chain_datum_token_emission_type_str[l_token_emission_item->datum_token_emission->hdr.type],
-                               l_balance, c_token_ticker, l_token_emission_address_str);
-                DAP_DELETE(l_token_emission_address_str);
-                DAP_DELETE(l_balance);
+                               l_balance, c_token_ticker,
+                               dap_chain_addr_to_str(&(l_token_emission_item->datum_token_emission->hdr.address)));
             }
         } else {
             DAP_DELETE(l_token_emission_item->datum_token_emission);
@@ -2884,9 +2847,9 @@ int dap_ledger_token_emission_add(dap_ledger_t *a_ledger, byte_t *a_token_emissi
                 char l_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
                 dap_chain_hash_fast_to_str(a_emission_hash, l_hash_str, sizeof(l_hash_str));
                 if ( ((dap_chain_datum_token_emission_t *)a_token_emission)->hdr.version == 2 ) {
-                    char *l_balance = dap_chain_balance_print(((dap_chain_datum_token_emission_t *)a_token_emission)->hdr.value);
-                    log_it(L_ERROR, "Duplicate token emission datum of %s %s ( %s )", l_balance, c_token_ticker, l_hash_str);
-                    DAP_DELETE(l_balance);
+                    log_it(L_ERROR, "Duplicate token emission datum of %s %s ( %s )",
+                        dap_uint256_to_char(((dap_chain_datum_token_emission_t *)a_token_emission)->hdr.value, NULL),
+                         c_token_ticker, l_hash_str);
                 } else
                     log_it(L_ERROR, "Duplicate token emission datum of %"DAP_UINT64_FORMAT_U" %s ( %s )",
                             ((dap_chain_datum_token_emission_t *)a_token_emission)->hdr.value64, c_token_ticker, l_hash_str);
@@ -3901,7 +3864,6 @@ int dap_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx
                                                   sizeof(*l_addr_from)) != 0 ){
                         char *l_tmp_tx_in_from = dap_chain_addr_to_str(l_addr_from);
                         debug_if(s_debug_more, L_WARNING, "No permission for addr %s", l_tmp_tx_in_from ? l_tmp_tx_in_from : "(null)");
-                        DAP_DEL_Z(l_tmp_tx_in_from);
                         l_err_num = DAP_LEDGER_PERMISSION_CHECK_FAILED;
                         break;
                     }
@@ -3912,7 +3874,6 @@ int dap_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx
                                                   sizeof(*l_addr_from)) == 0 ){
                         char *l_tmp_tx_in_from = dap_chain_addr_to_str(l_addr_from);
                         debug_if(s_debug_more, L_WARNING, "No permission for addr %s", l_tmp_tx_in_from ? l_tmp_tx_in_from : "(null)");
-                        DAP_DEL_Z(l_tmp_tx_in_from);
                         l_err_num = DAP_LEDGER_PERMISSION_CHECK_FAILED;
                         break;
                     }
@@ -4149,9 +4110,7 @@ int dap_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx
             if(!dap_chain_addr_is_blank(&l_tx_out_to) && s_ledger_permissions_check(l_token_item, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_ALLOWED_ADD,&l_tx_out_to ,
                                           sizeof (l_tx_out_to)) != 0 ){
                 char * l_tmp_tx_out_to = dap_chain_addr_to_str(&l_tx_out_to);
-                if(s_debug_more)
-                    log_it(L_WARNING, "No permission for addr %s", l_tmp_tx_out_to?l_tmp_tx_out_to:"(null)");
-                DAP_DELETE(l_tmp_tx_out_to);
+                debug_if(s_debug_more, L_WARNING, "No permission for addr %s", l_tmp_tx_out_to?l_tmp_tx_out_to:"(null)");
                 l_err_num = -20;
                 break;
             }
@@ -4162,9 +4121,7 @@ int dap_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx
             if(s_ledger_permissions_check(l_token_item, DAP_CHAIN_DATUM_TOKEN_TSD_TYPE_TX_RECEIVER_BLOCKED_ADD ,&l_tx_out_to,
                                           sizeof (l_tx_out_to)) == 0 ){
                 char * l_tmp_tx_out_to = dap_chain_addr_to_str(&l_tx_out_to);
-                if(s_debug_more)
-                    log_it(L_WARNING, "No permission for addr %s", l_tmp_tx_out_to?l_tmp_tx_out_to:"(null)");
-                DAP_DELETE(l_tmp_tx_out_to);
+                debug_if(s_debug_more, L_WARNING, "No permission for addr %s", l_tmp_tx_out_to?l_tmp_tx_out_to:"(null)");
                 l_err_num = -22;
                 break;
             }
@@ -4512,11 +4469,8 @@ int dap_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_ha
             HASH_FIND_STR(PVT(a_ledger)->balance_accounts, l_wallet_balance_key, wallet_balance);
             pthread_rwlock_unlock(&PVT(a_ledger)->balance_accounts_rwlock);
             if (wallet_balance) {
-                if(s_debug_more) {
-                    char *l_balance = dap_chain_balance_print(l_bound_item->value);
-                    log_it(L_DEBUG,"SPEND %s from addr: %s", l_balance, l_wallet_balance_key);
-                    DAP_DELETE(l_balance);
-                }
+                debug_if(s_debug_more, L_DEBUG, "SPEND %s from addr: %s",
+                    dap_uint256_to_char(l_bound_item->value, NULL), l_wallet_balance_key);
                 SUBTRACT_256_256(wallet_balance->balance, l_bound_item->value, &wallet_balance->balance);
                 // Update the cache
                 s_balance_cache_update(a_ledger, wallet_balance);
@@ -4524,7 +4478,6 @@ int dap_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_ha
                 if(s_debug_more)
                     log_it(L_ERROR,"!!! Attempt to SPEND from some non-existent balance !!!: %s %s", l_addr_str, l_cur_token_ticker);
             }
-            DAP_DELETE(l_addr_str);
             DAP_DELETE(l_wallet_balance_key);
         } break;
 
@@ -4627,11 +4580,8 @@ int dap_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_ha
         char *l_addr_str = dap_chain_addr_to_str(l_addr);
         dap_ledger_wallet_balance_t *wallet_balance = NULL;
         char *l_wallet_balance_key = dap_strjoin(" ", l_addr_str, l_cur_token_ticker, (char*)NULL);
-        if(s_debug_more) {
-            char *l_balance = dap_chain_balance_print(l_value);
-            log_it(L_DEBUG, "GOT %s to addr: %s", l_balance, l_wallet_balance_key);
-            DAP_DELETE(l_balance);
-        }
+        debug_if(s_debug_more, L_DEBUG, "GOT %s to addr: %s",
+            dap_uint256_to_char(l_value, NULL), l_wallet_balance_key);
         pthread_rwlock_rdlock(&l_ledger_pvt->balance_accounts_rwlock);
         HASH_FIND_STR(PVT(a_ledger)->balance_accounts, l_wallet_balance_key, wallet_balance);
         pthread_rwlock_unlock(&l_ledger_pvt->balance_accounts_rwlock);
@@ -4661,7 +4611,6 @@ int dap_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_ha
             // Add it to cache
             s_balance_cache_update(a_ledger, wallet_balance);
         }
-        DAP_DELETE (l_addr_str);
     }
     dap_list_t *l_items_voting;
     if ((l_items_voting = dap_chain_datum_tx_items_get((dap_chain_datum_tx_t*) a_tx, TX_ITEM_TYPE_VOTING, NULL)) && s_voting_callback) {
@@ -5000,17 +4949,12 @@ uint256_t dap_ledger_calc_balance(dap_ledger_t *a_ledger, const dap_chain_addr_t
     HASH_FIND_STR(PVT(a_ledger)->balance_accounts, l_wallet_balance_key, l_balance_item);
     pthread_rwlock_unlock(&PVT(a_ledger)->balance_accounts_rwlock);
     if (l_balance_item) {
-        if(s_debug_more) {
-            char *l_balance = dap_chain_balance_print(l_balance_item->balance);
-            log_it(L_INFO, "Found address in cache with balance %s", l_balance);
-            DAP_DELETE(l_balance);
-        }
+        debug_if(s_debug_more, L_INFO, "Found address in cache with balance %s",
+            dap_uint256_to_char(l_balance_item->balance, NULL));
         l_ret = l_balance_item->balance;
     } else {
-        if (s_debug_more)
-            log_it (L_WARNING, "Balance item %s not found", l_wallet_balance_key);
+        debug_if(s_debug_more, L_WARNING, "Balance item %s not found", l_wallet_balance_key);
     }
-    DAP_DELETE(l_addr);
     DAP_DELETE(l_wallet_balance_key);
     return l_ret;
 }
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 585fa6c4a05610144cc329004f7a6a57645c6192..8bea38c39a559612d27455b020cdf4395e987897 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -1563,7 +1563,7 @@ static int s_cli_net(int argc, char **argv, void **reply)
         l_hash_out_type = "hex";
     if(dap_strcmp(l_hash_out_type,"hex") && dap_strcmp(l_hash_out_type,"base58")) {
         json_object_put(l_jobj_return);
-        dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_INVALID_PARAMETER_HASH, "invalid parameter -H, valid values: -H <hex | base58>");
+        dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_INVALID_PARAMETER_HASH, "%s", "invalid parameter -H, valid values: -H <hex | base58>");
         return DAP_CHAIN_NET_JSON_RPC_INVALID_PARAMETER_HASH;
 
     }
@@ -1577,14 +1577,14 @@ static int s_cli_net(int argc, char **argv, void **reply)
             dap_chain_net_t* l_net = NULL;
             if (dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-net", &l_net_str) && !l_net_str) {
                 json_object_put(l_jobj_return);
-                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_CAN_NOT_PARAMETER_NET_REQUIRE, "Parameter '-net' require <net name>");
+                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_CAN_NOT_PARAMETER_NET_REQUIRE, "%s", "Parameter '-net' require <net name>");
                 return DAP_CHAIN_NET_JSON_RPC_CAN_NOT_PARAMETER_NET_REQUIRE;
             }
 
             l_net = dap_chain_net_by_name(l_net_str);
             if (l_net_str && !l_net) {
                 json_object_put(l_jobj_return);
-                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_WRONG_NET, "Wrong <net name>, use 'net list' "
+                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_WRONG_NET, "%s", "Wrong <net name>, use 'net list' "
                                                                          "command to display a list of available networks");
                 return DAP_CHAIN_NET_JSON_RPC_WRONG_NET;
             }
@@ -1687,7 +1687,7 @@ static int s_cli_net(int argc, char **argv, void **reply)
             // plug for wrong command arguments
             if (argc > 2) {
                 json_object_put(l_jobj_return);
-                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_MANY_ARGUMENT_FOR_COMMAND_NET_LIST,
+                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_MANY_ARGUMENT_FOR_COMMAND_NET_LIST, "%s",
                                        "To many arguments for 'net list' command see help");
                 return DAP_CHAIN_NET_JSON_RPC_MANY_ARGUMENT_FOR_COMMAND_NET_LIST;
             }
@@ -1866,7 +1866,8 @@ static int s_cli_net(int argc, char **argv, void **reply)
 #ifdef DAP_TPS_TEST
                 dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETER_COMMAND_STATS, "Subcommand 'stats' requires one of parameter: tx, tps");
 #else
-                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETER_COMMAND_STATS, "Subcommand 'stats' requires one of parameter: tx");
+                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETER_COMMAND_STATS, "%s",
+                 "Subcommand 'stats' requires one of parameter: tx");
 #endif
                 l_ret = DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETER_COMMAND_STATS;
             }
@@ -1917,7 +1918,7 @@ static int s_cli_net(int argc, char **argv, void **reply)
                     dap_chain_net_state_go_to(l_net, NET_STATE_SYNC_CHAINS);
                 l_ret = DAP_CHAIN_NET_JSON_RPC_OK;
             } else {
-                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETER_COMMAND_GO,
+                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETER_COMMAND_GO, "%s",
                                        "Subcommand 'go' requires one of parameters: online, offline, sync\n");
                 l_ret = DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETER_COMMAND_GO;
             }
@@ -1945,14 +1946,13 @@ static int s_cli_net(int argc, char **argv, void **reply)
                 uint256_t l_network_fee = {};
                 dap_chain_addr_t l_network_fee_addr = {};
                 dap_chain_net_tx_get_fee(l_net->pub.id, &l_network_fee, &l_network_fee_addr);
-                char *l_network_fee_balance_str = dap_chain_balance_print(l_network_fee);
-                char *l_network_fee_coins_str = dap_chain_balance_to_coins(l_network_fee);
-                char *l_network_fee_addr_str = dap_chain_addr_to_str(&l_network_fee_addr);
+                char *l_network_fee_coins_str, *l_network_fee_balance_str =
+                    dap_uint256_to_char(l_network_fee, &l_network_fee_coins_str);
                 json_object *l_jobj_network =  json_object_new_object();
                 json_object *l_jobj_fee_coins = json_object_new_string(l_network_fee_coins_str);
                 json_object *l_jobj_fee_balance = json_object_new_string(l_network_fee_balance_str);
                 json_object *l_jobj_native_ticker = json_object_new_string(l_net->pub.native_ticker);
-                json_object *l_jobj_fee_addr = json_object_new_string(l_network_fee_addr_str);
+                json_object *l_jobj_fee_addr = json_object_new_string(dap_chain_addr_to_str(&l_network_fee_addr));
                 if (!l_jobj_network || !l_jobj_fee_coins || !l_jobj_fee_balance || !l_jobj_native_ticker || !l_jobj_fee_addr) {
                     json_object_put(l_jobj_fees);
                     json_object_put(l_jobj_network);
@@ -1969,9 +1969,6 @@ static int s_cli_net(int argc, char **argv, void **reply)
                 json_object_object_add(l_jobj_network, "ticker", l_jobj_native_ticker);
                 json_object_object_add(l_jobj_network, "addr", l_jobj_fee_addr);
                 json_object_object_add(l_jobj_fees, "network", l_jobj_network);
-                DAP_DELETE(l_network_fee_coins_str);
-                DAP_DELETE(l_network_fee_balance_str);
-                DAP_DELETE(l_network_fee_addr_str);
                 //Get validators fee
                 json_object *l_jobj_validators = dap_chain_net_srv_stake_get_fee_validators_json(l_net);
                 if (!l_jobj_validators) {
@@ -2013,7 +2010,7 @@ static int s_cli_net(int argc, char **argv, void **reply)
                 dap_cluster_t *l_net_cluster = dap_cluster_by_mnemonim(l_net->pub.name);
                 if (!l_net_cluster) {
                     json_object_put(l_jobj_return);
-                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_CAN_NOT_GET_CLUSTER, "Failed to obtain a cluster for "
+                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_CAN_NOT_GET_CLUSTER, "%s", "Failed to obtain a cluster for "
                                                                                        "the specified network.");
                     return DAP_CHAIN_NET_JSON_RPC_CAN_NOT_GET_CLUSTER;
                 }
@@ -2063,7 +2060,7 @@ static int s_cli_net(int argc, char **argv, void **reply)
                 json_object_object_add(l_jobj_return, "message", l_jobj_ret);
                 l_ret = DAP_CHAIN_NET_JSON_RPC_OK;
             }else {
-                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETERS_COMMAND_LINK,
+                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETERS_COMMAND_LINK, "%s",
                                        "Subcommand 'link' requires one of parameters: list, add, del, info, disconnect_all");
                 l_ret = DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETERS_COMMAND_LINK;
             }
@@ -2095,7 +2092,7 @@ static int s_cli_net(int argc, char **argv, void **reply)
                 json_object_put(l_jobj_return);
                 json_object_put(l_jobj_state_machine);
                 json_object_put(l_jobj_current);
-                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETERS_COMMAND_SYNC,
+                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETERS_COMMAND_SYNC, "%s",
                                        "Subcommand 'sync' requires one of parameters: all, gdb, chains");
                 l_ret = DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETERS_COMMAND_SYNC;
             }
@@ -2114,27 +2111,17 @@ static int s_cli_net(int argc, char **argv, void **reply)
             if (strcmp(l_ca_str, "add") == 0 ) {
                 const char *l_cert_string = NULL, *l_hash_string = NULL;
 
-
-
                 dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-cert", &l_cert_string);
                 dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-hash", &l_hash_string);
 
                 if (!l_cert_string && !l_hash_string) {
                     json_object_put(l_jobj_return);
-                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETERS_CA_ADD,
+                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETERS_CA_ADD, "%s",
                                            "One of -cert or -hash parameters is mandatory");
                     return DAP_CHAIN_NET_JSON_RPC_UNDEFINED_PARAMETERS_CA_ADD;
                 }
+                
                 char *l_hash_hex_str = NULL;
-                // hash may be in hex or base58 format
-                if(!dap_strncmp(l_hash_string, "0x", 2) || !dap_strncmp(l_hash_string, "0X", 2)) {
-                    l_hash_hex_str = dap_strdup(l_hash_string);
-                    //l_hash_base58_str = dap_enc_base58_from_hex_str_to_str(l_hash_string);
-                }
-                else {
-                    l_hash_hex_str = dap_enc_base58_to_hex_str_from_str(l_hash_string);
-                    //l_hash_base58_str = dap_strdup(l_hash_string);
-                }
 
                 if (l_cert_string) {
                     dap_cert_t * l_cert = dap_cert_find_by_name(l_cert_string);
@@ -2142,14 +2129,12 @@ static int s_cli_net(int argc, char **argv, void **reply)
                         json_object_put(l_jobj_return);
                         dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_CAN_NOT_FIND_CERT_CA_ADD,
                                                "Can't find \"%s\" certificate", l_cert_string);
-                        DAP_DELETE(l_hash_hex_str);
                         return DAP_CHAIN_NET_JSON_RPC_CAN_NOT_FIND_CERT_CA_ADD;
                     }
                     if (l_cert->enc_key == NULL) {
                         json_object_put(l_jobj_return);
                         dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_CAN_NOT_KEY_IN_CERT_CA_ADD,
                                                "No key found in \"%s\" certificate", l_cert_string);
-                        DAP_DEL_Z(l_hash_hex_str);
                         return DAP_CHAIN_NET_JSON_RPC_CAN_NOT_KEY_IN_CERT_CA_ADD;
                     }
                     // Get publivc key hash
@@ -2159,37 +2144,39 @@ static int s_cli_net(int argc, char **argv, void **reply)
                         json_object_put(l_jobj_return);
                         dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_CAN_SERIALIZE_PUBLIC_KEY_CERT_CA_ADD,
                                                "Can't serialize public key of certificate \"%s\"", l_cert_string);
-                        DAP_DEL_Z(l_hash_hex_str);
                         return DAP_CHAIN_NET_JSON_RPC_CAN_SERIALIZE_PUBLIC_KEY_CERT_CA_ADD;
                     }
                     dap_chain_hash_fast_t l_pkey_hash;
                     dap_hash_fast(l_pub_key, l_pub_key_size, &l_pkey_hash);
-                    DAP_DEL_Z(l_hash_hex_str);
                     l_hash_hex_str = dap_chain_hash_fast_to_str_new(&l_pkey_hash);
                     //l_hash_base58_str = dap_enc_base58_encode_hash_to_str(&l_pkey_hash);
+                } else {
+                    l_hash_hex_str = !dap_strncmp(l_hash_string, "0x", 2) || !dap_strncmp(l_hash_string, "0X", 2)
+                        ? dap_strdup(l_hash_string)
+                        : dap_enc_base58_to_hex_str_from_str(l_hash_string);
                 }
                 const char c = '1';
                 char *l_gdb_group_str = dap_chain_net_get_gdb_group_acl(l_net);
                 if (!l_gdb_group_str) {
+                    DAP_DELETE(l_hash_hex_str);
                     json_object_put(l_jobj_return);
-                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_DATABASE_ACL_GROUP_NOT_DEFINED_FOR_THIS_NETWORK_CA_ADD,
+                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_DATABASE_ACL_GROUP_NOT_DEFINED_FOR_THIS_NETWORK_CA_ADD, "%s",
                                            "Database ACL group not defined for this network");
                     return DAP_CHAIN_NET_JSON_RPC_DATABASE_ACL_GROUP_NOT_DEFINED_FOR_THIS_NETWORK_CA_ADD;
                 }
                 if( l_hash_hex_str ){
                     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) {
                         json_object_put(l_jobj_return);
                         dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_CAN_NOT_SAVE_PUBLIC_KEY_IN_DATABASE,
                                                "Can't save public key hash %s in database", l_hash_hex_str);
-                        DAP_DELETE(l_hash_hex_str);
                         return DAP_CHAIN_NET_JSON_RPC_CAN_NOT_SAVE_PUBLIC_KEY_IN_DATABASE;
                     }
-                    DAP_DELETE(l_hash_hex_str);
                 } else{
                     json_object_put(l_jobj_return);
-                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_CAN_NOT_SAVE_PUBLIC_KEY_IN_DATABASE,
+                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_CAN_NOT_SAVE_PUBLIC_KEY_IN_DATABASE, "%s",
                                            "Can't save NULL public key hash in database");
                     return DAP_CHAIN_NET_JSON_RPC_CAN_NOT_SAVE_PUBLIC_KEY_IN_DATABASE;
                 }
@@ -2197,7 +2184,7 @@ static int s_cli_net(int argc, char **argv, void **reply)
             } else if (strcmp(l_ca_str, "list") == 0 ) {
                 char *l_gdb_group_str = dap_chain_net_get_gdb_group_acl(l_net);
                 if (!l_gdb_group_str) {
-                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_DATABASE_ACL_GROUP_NOT_DEFINED_FOR_THIS_NETWORK_CA_LIST,
+                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_DATABASE_ACL_GROUP_NOT_DEFINED_FOR_THIS_NETWORK_CA_LIST, "%s",
                                            "Database ACL group not defined for this network");
                     return DAP_CHAIN_NET_JSON_RPC_DATABASE_ACL_GROUP_NOT_DEFINED_FOR_THIS_NETWORK_CA_LIST;
                 }
@@ -2237,13 +2224,13 @@ static int s_cli_net(int argc, char **argv, void **reply)
                 const char *l_hash_string = NULL;
                 dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-hash", &l_hash_string);
                 if (!l_hash_string) {
-                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_UNKNOWN_HASH_CA_DEL,
+                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_UNKNOWN_HASH_CA_DEL, "%s",
                                            "Format should be 'net ca del -hash <hash string>");
                     return DAP_CHAIN_NET_JSON_RPC_UNKNOWN_HASH_CA_DEL;
                 }
                 char *l_gdb_group_str = dap_chain_net_get_gdb_group_acl(l_net);
                 if (!l_gdb_group_str) {
-                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_DATABASE_ACL_GROUP_NOT_DEFINED_FOR_THIS_NETWORK_CA_DEL,
+                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_DATABASE_ACL_GROUP_NOT_DEFINED_FOR_THIS_NETWORK_CA_DEL, "%s",
                                            "Database ACL group not defined for this network");
                     return DAP_CHAIN_NET_JSON_RPC_DATABASE_ACL_GROUP_NOT_DEFINED_FOR_THIS_NETWORK_CA_DEL;
                 }
@@ -2259,7 +2246,7 @@ static int s_cli_net(int argc, char **argv, void **reply)
                 DAP_DELETE(l_gdb_group_str);
                 if (l_ret) {
                     json_object_put(l_jobj_return);
-                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_CAN_NOT_FIND_CERT_CA_DEL,
+                    dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_CAN_NOT_FIND_CERT_CA_DEL, "%s",
                                            "Can't find certificate public key hash in database");
                     return DAP_CHAIN_NET_JSON_RPC_CAN_NOT_FIND_CERT_CA_DEL;
                 }
@@ -2267,7 +2254,7 @@ static int s_cli_net(int argc, char **argv, void **reply)
                 json_object_array_add(*reply, l_jobj_ret);
                 return DAP_CHAIN_NET_JSON_RPC_OK;
             } else {
-                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_INVALID_PARAMETER_COMMAND_CA,
+                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_INVALID_PARAMETER_COMMAND_CA, "%s",
                                        "Subcommand 'ca' requires one of parameter: add, list, del");
                 return DAP_CHAIN_NET_JSON_RPC_INVALID_PARAMETER_COMMAND_CA;
             }
@@ -2280,7 +2267,7 @@ static int s_cli_net(int argc, char **argv, void **reply)
         } else if (l_list_str && !strcmp(l_list_str, "list")) {
             if (!l_net->pub.keys) {
                 json_object_put(l_jobj_return);
-                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_NO_POA_CERTS_FOUND_POA_CERTS,
+                dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_NO_POA_CERTS_FOUND_POA_CERTS, "%s",
                                        "No PoA certs found for this network");
                 return DAP_CHAIN_NET_JSON_RPC_NO_POA_CERTS_FOUND_POA_CERTS;
             }
@@ -2318,7 +2305,7 @@ static int s_cli_net(int argc, char **argv, void **reply)
             }
             l_ret = DAP_CHAIN_NET_JSON_RPC_OK;
         } else {
-            dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_UNKNOWN_SUBCOMMANDS,
+            dap_json_rpc_error_add(DAP_CHAIN_NET_JSON_RPC_UNKNOWN_SUBCOMMANDS, "%s",
                                    "Command 'net' requires one of subcomands: sync, link, go, get, stats, ca, ledger");
             l_ret = DAP_CHAIN_NET_JSON_RPC_UNKNOWN_SUBCOMMANDS;
         }
diff --git a/modules/net/dap_chain_net_voting.c b/modules/net/dap_chain_net_voting.c
index 285bcd3f129e1aedb730b1e9f329fbdafd84a3fe..00d39e9717ad367b3c67c03a3e4f349a8644bb16 100644
--- a/modules/net/dap_chain_net_voting.c
+++ b/modules/net/dap_chain_net_voting.c
@@ -247,9 +247,8 @@ bool s_datum_tx_voting_verification_callback(dap_ledger_t *a_ledger, dap_chain_t
         HASH_FIND(hh, s_votings, &l_vote_tx_item->voting_hash, sizeof(dap_hash_fast_t), l_voting);
         pthread_rwlock_unlock(&s_votings_rwlock);
         if(!l_voting || l_voting->net_id.uint64 != a_ledger->net->pub.id.uint64) {
-            char *l_hash_str = dap_chain_hash_fast_to_str_new(&l_hash);
-            log_it(L_ERROR, "Can't find voting with hash %s in net %s", l_hash_str, a_ledger->net->pub.name);
-            DAP_DELETE(l_hash_str);
+            log_it(L_ERROR, "Can't find voting with hash %s in net %s",
+                   dap_chain_hash_fast_to_str_static(&l_hash), a_ledger->net->pub.name);
             return false;
         }
 
@@ -1062,9 +1061,8 @@ static int s_cli_voting(int a_argc, char **a_argv, void **a_str_reply)
             if (l_voting->net_id.uint64 != l_net->pub.id.uint64)
                 continue;
 
-            char *l_hash_str = dap_chain_hash_fast_to_str_new(&l_voting->voting_hash);
-            dap_string_append_printf(l_str_out, "Voting hash: %s\n", l_hash_str);
-            DAP_DELETE(l_hash_str);
+            dap_string_append_printf(l_str_out, "Voting hash: %s\n",
+                dap_chain_hash_fast_to_str_static(&l_voting->voting_hash));
             dap_string_append(l_str_out, "Voting question:\n");
             char* l_voting_question = (char*)((byte_t*)l_voting->voting_params.voting_tx + l_voting->voting_params.voting_question_offset);
             dap_string_append_len(l_str_out,
@@ -1158,13 +1156,14 @@ static int s_cli_voting(int a_argc, char **a_argv, void **a_str_reply)
             DIV_256_COIN(l_results[i].weights, l_total_weight, &l_weight_percentage);
             MULT_256_COIN(l_weight_percentage, dap_chain_coins_to_balance("100.0"), &l_weight_percentage);
             char *l_weight_percentage_str = dap_uint256_decimal_to_round_char(l_weight_percentage, 2, true);
-            dap_string_append_printf(l_str_out, "\nVotes: %"DAP_UINT64_FORMAT_U" (%.2f%%)\nWeight: %s (%s) %s (%s%%)\n", l_results[i].num_of_votes, l_percentage,
-                                     dap_chain_balance_to_coins(l_results[i].weights), dap_chain_balance_print(l_results[i].weights), l_net->pub.native_ticker,
-                                     l_weight_percentage_str);
+            char *l_w_coins, *l_w_datoshi = dap_uint256_to_char(l_results[i].weights, &l_w_coins);
+            dap_string_append_printf(l_str_out, "\nVotes: %"DAP_UINT64_FORMAT_U" (%.2f%%)\nWeight: %s (%s) %s (%s%%)\n",
+                                     l_results[i].num_of_votes, l_percentage, l_w_coins, l_w_datoshi, l_net->pub.native_ticker, l_weight_percentage_str);
         }
         DAP_DELETE(l_results);
         dap_string_append_printf(l_str_out, "\nTotal number of votes: %"DAP_UINT64_FORMAT_U, l_votes_count);
-        dap_string_append_printf(l_str_out, "\nTotal weight: %s (%s) %s\n\n", dap_chain_balance_to_coins(l_total_weight), dap_chain_balance_print(l_total_weight), l_net->pub.native_ticker);
+        char *l_tw_coins, *l_tw_datoshi = dap_uint256_to_char(l_total_weight, &l_tw_coins);
+        dap_string_append_printf(l_str_out, "\nTotal weight: %s (%s) %s\n\n", l_tw_coins, l_tw_datoshi, l_net->pub.native_ticker);
         dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_out->str);
         dap_string_free(l_str_out, true);
     }break;
@@ -1342,9 +1341,8 @@ static int s_datum_tx_voting_coin_check_cond_out(dap_chain_net_t *a_net, dap_has
     HASH_FIND(hh, s_votings, &a_voting_hash, sizeof(dap_hash_fast_t), l_voting);
     pthread_rwlock_unlock(&s_votings_rwlock);
     if(!l_voting || l_voting->net_id.uint64 != a_net->pub.id.uint64) {
-        char *l_hash_str = dap_chain_hash_fast_to_str_new(&a_voting_hash);
-        log_it(L_ERROR, "Can't find voting with hash %s in net %s", l_hash_str, a_net->pub.name);
-        DAP_DELETE(l_hash_str);
+        log_it(L_ERROR, "Can't find voting with hash %s in net %s",
+            dap_chain_hash_fast_to_str_static(&a_voting_hash), a_net->pub.name);
         return -1;
     }
 
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index aed4a242df35beb8047410c94bca75a4c342763c..be2c6285b442ababf14fd8af21bd8751f0cf5d8c 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -2125,8 +2125,8 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE;
                                                                   dap_chain_wallet_check_sign(l_wallet) : "correct"));
                 json_object_object_add(json_obj_wall, "nwallet", json_object_new_string(l_wallet->name));
             }
-            json_object_object_add(json_obj_wall, "addr", (l_l_addr_str) ? json_object_new_string(l_l_addr_str) : json_object_new_string("-"));
-            json_object_object_add(json_obj_wall, "network", (l_net_name) ? json_object_new_string(l_net_name) : json_object_new_string("-"));
+            json_object_object_add(json_obj_wall, "addr", l_l_addr_str ? json_object_new_string(l_l_addr_str) : json_object_new_string("-"));
+            json_object_object_add(json_obj_wall, "network", l_net_name? json_object_new_string(l_net_name) : json_object_new_string("-"));
 
             size_t l_l_addr_tokens_size = 0;
             char **l_l_addr_tokens = NULL;
@@ -2138,14 +2138,11 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE;
                 if(l_l_addr_tokens[i]) {
                     json_object * j_balance_data = json_object_new_object();
                     uint256_t l_balance = dap_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);
+                    char *l_balance_coins, *l_balance_datoshi = dap_uint256_to_char(l_balance, &l_balance_coins);
                     json_object_object_add(j_balance_data, "balance", json_object_new_string(""));
                     json_object_object_add(j_balance_data, "coins", json_object_new_string(l_balance_coins));
                     json_object_object_add(j_balance_data, "datoshi", json_object_new_string(l_balance_datoshi));
                     json_object_object_add(j_balance_data, "token", json_object_new_string(l_l_addr_tokens[i]));
-                    DAP_DELETE(l_balance_coins);
-                    DAP_DELETE(l_balance_datoshi);
                     json_object_array_add(j_arr_balance, j_balance_data);
                 }
                 DAP_DELETE(l_l_addr_tokens[i]);
@@ -2153,7 +2150,6 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE;
             json_object_object_add(json_obj_wall, "tokens", j_arr_balance);
             json_object_array_add(json_arr_out, json_obj_wall);
             DAP_DELETE(l_l_addr_tokens);
-            DAP_DELETE(l_l_addr_str);
             if(l_wallet)
                 dap_chain_wallet_close(l_wallet);
             break;
@@ -2367,14 +2363,13 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE;
 
                     l_addr = l_net ? dap_chain_wallet_get_addr(l_wallet,l_net->pub.id ) : NULL;
 
-                    char *l_l_addr_str = l_addr ? dap_chain_addr_to_str(l_addr) : NULL;
+                    char *l_addr_str = dap_chain_addr_to_str(l_addr);
                     json_object * json_obj_wall = json_object_new_object();
                     json_object_object_add(json_obj_wall, "Wallet name", json_object_new_string(l_wallet->name));
                     json_object_object_add(json_obj_wall, "Sign type", json_object_new_string(l_sign_type_str));
                     json_object_object_add(json_obj_wall, "Status", json_object_new_string("successfully created"));
-                    if ( l_l_addr_str ) {
-                        json_object_object_add(json_obj_wall, "new address", json_object_new_string(l_l_addr_str));
-                        DAP_DELETE(l_l_addr_str);
+                    if ( l_addr_str ) {
+                        json_object_object_add(json_obj_wall, "new address", json_object_new_string(l_addr_str));
                     }
                     json_object_array_add(json_arr_out, json_obj_wall);
                     dap_chain_wallet_close(l_wallet);
@@ -2670,11 +2665,9 @@ int com_token_decl_sign(int a_argc, char **a_argv, void **a_str_reply)
             l_datum_hash_hex_str = dap_enc_base58_to_hex_str_from_str(l_datum_hash_str);
             l_datum_hash_base58_str = dap_strdup(l_datum_hash_str);
         }
-        const char *l_datum_hash_out_str;
-        if(!dap_strcmp(l_hash_out_type,"hex"))
-            l_datum_hash_out_str = l_datum_hash_hex_str;
-        else
-            l_datum_hash_out_str = l_datum_hash_base58_str;
+        const char *l_datum_hash_out_str = dap_strcmp(l_hash_out_type,"hex")
+            ? l_datum_hash_base58_str
+            : l_datum_hash_hex_str;
 
         log_it(L_DEBUG, "Requested to sign token declaration %s in gdb://%s with certs %s",
                 l_gdb_group_mempool, l_datum_hash_hex_str, l_certs_str);
@@ -2728,9 +2721,9 @@ int com_token_decl_sign(int a_argc, char **a_argv, void **a_str_reply)
                 l_datum_size = dap_chain_datum_size(l_datum);
                 dap_chain_hash_fast_t l_key_hash = { };
                 dap_hash_fast(l_datum->data, l_token_size, &l_key_hash);
-                char * l_key_str = dap_chain_hash_fast_to_str_new(&l_key_hash);
-                char * l_key_str_base58 = dap_enc_base58_encode_hash_to_str(&l_key_hash);
-                const char *l_key_out_str = dap_strcmp(l_hash_out_type,"hex")
+                char *l_key_str = dap_chain_hash_fast_to_str_static(&l_key_hash);
+                char *l_key_str_base58 = dap_enc_base58_encode_hash_to_str_static(&l_key_hash);
+                const char *l_key_out_str = dap_strcmp(l_hash_out_type, "hex")
                         ? l_key_str_base58 : l_key_str;
                 // Add datum to mempool with datum_token hash as a key
                 if( dap_global_db_set_sync(l_gdb_group_mempool, l_key_str, l_datum, dap_chain_datum_size(l_datum), false) == 0) {
@@ -2741,8 +2734,6 @@ int com_token_decl_sign(int a_argc, char **a_argv, void **a_str_reply)
                         dap_cli_server_cmd_set_reply_text(a_str_reply,
                                 "datum %s is replacing the %s in datum pool",
                                 l_key_out_str, l_datum_hash_out_str);
-                        DAP_DELETE(l_key_str);
-                        DAP_DELETE(l_key_str_base58);
                         DAP_DELETE(l_datum);
                         //DAP_DELETE(l_datum_token);
                         DAP_DELETE(l_gdb_group_mempool);
@@ -2751,22 +2742,16 @@ int com_token_decl_sign(int a_argc, char **a_argv, void **a_str_reply)
                         dap_cli_server_cmd_set_reply_text(a_str_reply,
                                 "Warning! Can't remove old datum %s ( new datum %s added normaly in datum pool)",
                                 l_datum_hash_out_str, l_key_out_str);
-                        DAP_DELETE(l_key_str);
-                        DAP_DELETE(l_key_str_base58);
                         DAP_DELETE(l_datum);
-                        //DAP_DELETE(l_datum_token);
                         DAP_DELETE(l_gdb_group_mempool);
                         return 1;
                     }
                     DAP_DELETE(l_hash_str);
-                    DAP_DELETE(l_key_str);
-                    DAP_DELETE(l_key_str_base58);
                 } else {
                     dap_cli_server_cmd_set_reply_text(a_str_reply,
                             "Error! datum %s produced from %s can't be placed in mempool",
                             l_key_out_str, l_datum_hash_out_str);
                     DAP_DELETE(l_datum);
-                    //DAP_DELETE(l_datum_token);
                     DAP_DELETE(l_gdb_group_mempool);
                     DAP_DELETE(l_key_str);
                     DAP_DELETE(l_key_str_base58);
@@ -3087,15 +3072,6 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                         datum_is_accepted_addr = true;
                     }
                     dap_list_free(l_list_sig_item);
-                    char *l_addr_from_str = dap_chain_addr_to_str(&l_addr_from);
-                    if (!l_addr_from_str) {
-                        json_object_put(l_jobj_datum);
-                        json_object_put(l_jobj_datums);
-                        json_object_put(l_obj_chain);
-                        dap_global_db_objs_delete(l_objs, l_objs_count);
-                        dap_json_rpc_allocation_error;
-                        return;
-                    }
                     dap_list_t *l_list_in_reward = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_IN_REWARD, NULL);
                     if (l_list_in_reward) {
                         json_object *l_obj_in_reward_arary = json_object_new_array();
@@ -3127,7 +3103,7 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                             DAP_DELETE(l_block_hash);
                         }
                     } else {
-                        json_object *l_jobj_addr_from = json_object_new_string(l_addr_from_str);
+                        json_object *l_jobj_addr_from = json_object_new_string(dap_chain_addr_to_str(&l_addr_from));
                         if (!l_jobj_addr_from) {
                             json_object_put(l_jobj_datum);
                             json_object_put(l_jobj_datums);
@@ -3138,7 +3114,6 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                         }
                         json_object_object_add(l_jobj_datum, "from", l_jobj_addr_from);
                     }
-                    DAP_DELETE(l_addr_from_str);
                     dap_list_t *l_list_out_items = dap_chain_datum_tx_items_get(l_tx, TX_ITEM_TYPE_OUT_ALL, NULL);
                     json_object *l_jobj_to_list = json_object_new_array();
                     json_object *l_jobj_change_list = json_object_new_array();
@@ -3236,69 +3211,9 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                             dap_json_rpc_allocation_error;
                             return;
                         }
-                        char *l_value_str = dap_chain_balance_print(l_value);
-                        if (!l_value_str) {
-                            json_object_put(l_jobj_to_list);
-                            json_object_put(l_jobj_change_list);
-                            json_object_put(l_jobj_to_from_emi);
-                            json_object_put(l_jobj_fee_list);
-                            json_object_put(l_jobj_money);
-                            json_object_put(l_jobj_datum);
-                            json_object_put(l_jobj_datums);
-                            json_object_put(l_obj_chain);
-                            dap_global_db_objs_delete(l_objs, l_objs_count);
-                            dap_json_rpc_allocation_error;
-                            return;
-                        }
-                        char *l_value_coins_str = dap_chain_balance_to_coins(l_value);
-                        if (!l_value_coins_str) {
-                            json_object_put(l_jobj_to_list);
-                            json_object_put(l_jobj_change_list);
-                            json_object_put(l_jobj_to_from_emi);
-                            json_object_put(l_jobj_fee_list);
-                            DAP_DELETE(l_value_str);
-                            json_object_put(l_jobj_money);
-                            json_object_put(l_jobj_datum);
-                            json_object_put(l_jobj_datums);
-                            json_object_put(l_obj_chain);
-                            dap_global_db_objs_delete(l_objs, l_objs_count);
-                            dap_json_rpc_allocation_error;
-                            return;
-                        }
-                        json_object *l_jobj_value = json_object_new_string(l_value_str);
-                        if (!l_jobj_value) {
-                            json_object_put(l_jobj_to_list);
-                            json_object_put(l_jobj_change_list);
-                            json_object_put(l_jobj_to_from_emi);
-                            json_object_put(l_jobj_fee_list);
-                            DAP_DELETE(l_value_str);
-                            DAP_DELETE(l_value_coins_str);
-                            json_object_put(l_jobj_money);
-                            json_object_put(l_jobj_datum);
-                            json_object_put(l_jobj_datums);
-                            json_object_put(l_obj_chain);
-                            dap_global_db_objs_delete(l_objs, l_objs_count);
-                            dap_json_rpc_allocation_error;
-                            return;
-                        }
-                        json_object_object_add(l_jobj_money, "value", l_jobj_value);
-                        json_object *l_jobj_value_coins = json_object_new_string(l_value_coins_str);
-                        if (!l_jobj_value_coins) {
-                            json_object_put(l_jobj_to_list);
-                            json_object_put(l_jobj_change_list);
-                            json_object_put(l_jobj_to_from_emi);
-                            json_object_put(l_jobj_fee_list);
-                            DAP_DELETE(l_value_str);
-                            DAP_DELETE(l_value_coins_str);
-                            json_object_put(l_jobj_money);
-                            json_object_put(l_jobj_datum);
-                            json_object_put(l_jobj_datums);
-                            json_object_put(l_obj_chain);
-                            dap_global_db_objs_delete(l_objs, l_objs_count);
-                            dap_json_rpc_allocation_error;
-                            return;
-                        }
-                        json_object_object_add(l_jobj_money, "coins", l_jobj_value_coins);
+                        char *l_value_coins_str, *l_value_str = dap_uint256_to_char(l_value, &l_value_coins_str);
+                        json_object_object_add(l_jobj_money, "value", json_object_new_string(l_value_str));
+                        json_object_object_add(l_jobj_money, "coins", json_object_new_string(l_value_coins_str));
                         if (l_dist_token) {
                             json_object *l_jobj_token = json_object_new_string(l_dist_token);
                             if (!l_jobj_token) {
@@ -3310,8 +3225,6 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                                 json_object_put(l_jobj_datum);
                                 json_object_put(l_jobj_datums);
                                 json_object_put(l_obj_chain);
-                                DAP_DELETE(l_value_str);
-                                DAP_DELETE(l_value_coins_str);
                                 dap_global_db_objs_delete(l_objs, l_objs_count);
                                 dap_json_rpc_allocation_error;
                                 return;
@@ -3320,31 +3233,12 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                         }
 
                         if (l_dist_addr) {
-                            char *l_addr_str = dap_chain_addr_to_str(l_dist_addr);
-                            if (!l_addr_str) {
-                                json_object_put(l_jobj_to_list);
-                                json_object_put(l_jobj_change_list);
-                                json_object_put(l_jobj_to_from_emi);
-                                json_object_put(l_jobj_fee_list);
-                                DAP_DELETE(l_value_str);
-                                DAP_DELETE(l_value_coins_str);
-                                json_object_put(l_jobj_money);
-                                json_object_put(l_jobj_datum);
-                                json_object_put(l_jobj_datums);
-                                json_object_put(l_obj_chain);
-                                dap_global_db_objs_delete(l_objs, l_objs_count);
-                                dap_json_rpc_allocation_error;
-                                return;
-                            }
-                            json_object *l_jobj_addr = json_object_new_string(l_addr_str);
+                            json_object *l_jobj_addr = json_object_new_string(dap_chain_addr_to_str(l_dist_addr));
                             if (!l_jobj_addr) {
                                 json_object_put(l_jobj_to_list);
                                 json_object_put(l_jobj_change_list);
                                 json_object_put(l_jobj_to_from_emi);
                                 json_object_put(l_jobj_fee_list);
-                                DAP_DELETE(l_value_str);
-                                DAP_DELETE(l_value_coins_str);
-                                DAP_DELETE(l_addr_str);
                                 json_object_put(l_jobj_money);
                                 json_object_put(l_jobj_datum);
                                 json_object_put(l_jobj_datums);
@@ -3362,9 +3256,6 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                                 json_object_put(l_jobj_change_list);
                                 json_object_put(l_jobj_to_from_emi);
                                 json_object_put(l_jobj_fee_list);
-                                DAP_DELETE(l_value_str);
-                                DAP_DELETE(l_value_coins_str);
-                                DAP_DELETE(l_addr_str);
                                 json_object_put(l_jobj_addr);
                                 json_object_put(l_jobj_money);
                                 json_object_put(l_jobj_datum);
@@ -3390,9 +3281,6 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                                             json_object_put(l_jobj_change_list);
                                             json_object_put(l_jobj_to_from_emi);
                                             json_object_put(l_jobj_fee_list);
-                                            DAP_DELETE(l_value_str);
-                                            DAP_DELETE(l_value_coins_str);
-                                            DAP_DELETE(l_addr_str);
                                             json_object_put(l_jobj_addr);
                                             json_object_put(l_jobj_money);
                                             json_object_put(l_jobj_datum);
@@ -3415,7 +3303,6 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                                 json_object_object_add(l_jobj_f, "addr", l_jobj_addr);
                                 json_object_array_add(l_jobj_to_list, l_jobj_f);
                             }
-                            DAP_DELETE(l_addr_str);
                         } else {
                             switch (l_out_cond_subtype) {
                                 case OUT_COND_TYPE_PAY:
@@ -3438,8 +3325,6 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a
                                     break;
                             }
                         }
-                        DAP_DELETE(l_value_str);
-                        DAP_DELETE(l_value_coins_str);
                     }
                     json_object_object_add(l_jobj_datum, "to", l_jobj_to_list);
                     json_object_object_add(l_jobj_datum, "change", l_jobj_change_list);
@@ -4774,9 +4659,8 @@ int com_token_decl(int a_argc, char ** a_argv, void **a_str_reply)
                             if (!dap_pkey_get_hash(l_pkey, &l_hf)) {
                                 log_it(L_DEBUG, "== TOTAL_PKEYS_ADD: <WRONG CALCULATION FINGERPRINT>");
                             } else {
-                                l_hash_str = dap_chain_hash_fast_to_str_new(&l_hf);
-                                log_it(L_DEBUG, "== TOTAL_PKEYS_ADD: %s", l_hash_str);
-                                DAP_DELETE(l_hash_str);
+                                log_it(L_DEBUG, "== TOTAL_PKEYS_ADD: %s",
+                                    dap_chain_hash_fast_to_str_static(&l_hf));
                             }
                         } else
                             log_it(L_DEBUG,"== TOTAL_PKEYS_ADD: <WRONG SIZE %u>", l_tsd->size);
@@ -4849,8 +4733,8 @@ int com_token_decl(int a_argc, char ** a_argv, void **a_str_reply)
     dap_chain_hash_fast_t l_key_hash;
     dap_hash_fast(l_datum->data, l_datum->header.data_size, &l_key_hash);
     char * l_key_str = !dap_strcmp(l_hash_out_type, "hex") ?
-                dap_chain_hash_fast_to_str_new(&l_key_hash) :
-                dap_enc_base58_encode_hash_to_str(&l_key_hash);
+                dap_chain_hash_fast_to_str_static(&l_key_hash) :
+                dap_enc_base58_encode_hash_to_str_static(&l_key_hash);
 
     // Add datum to mempool with datum_token hash as a key
     char *l_gdb_group_mempool = l_chain
@@ -4858,7 +4742,6 @@ int com_token_decl(int a_argc, char ** a_argv, void **a_str_reply)
             : dap_chain_net_get_gdb_group_mempool_by_chain_type(l_net, CHAIN_TYPE_TOKEN);
     if (!l_gdb_group_mempool) {
         dap_cli_server_cmd_set_reply_text(a_str_reply, "No suitable chain for placing token datum found");
-        DAP_DEL_Z(l_key_str);
         DAP_DELETE(l_datum);
         DAP_DEL_Z(l_params);
         return -10;
@@ -4866,7 +4749,6 @@ int com_token_decl(int a_argc, char ** a_argv, void **a_str_reply)
     bool l_placed = dap_global_db_set_sync(l_gdb_group_mempool, l_key_str, l_datum, l_datum_size, false) == 0;
     dap_cli_server_cmd_set_reply_text(a_str_reply, "Datum %s with token %s is%s placed in datum pool",
                                       l_key_str, l_ticker, l_placed ? "" : " not");
-    DAP_DEL_Z(l_key_str);
     DAP_DELETE(l_datum);
     DAP_DELETE(l_params);
     return l_placed ? 0 : -2;
@@ -5053,9 +4935,9 @@ int com_token_update(int a_argc, char ** a_argv, void **a_str_reply)
     // Calc datum's hash
     dap_chain_hash_fast_t l_key_hash;
     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_key_str = dap_chain_hash_fast_to_str_static(&l_key_hash);
     char * l_key_str_out = dap_strcmp(l_hash_out_type, "hex") ?
-                           dap_enc_base58_encode_hash_to_str(&l_key_hash) : dap_strdup(l_key_str);
+                           dap_enc_base58_encode_hash_to_str_static(&l_key_hash) : l_key_str;
 
     // Add datum to mempool with datum_token hash as a key
     char *l_gdb_group_mempool = l_chain
@@ -5063,16 +4945,12 @@ int com_token_update(int a_argc, char ** a_argv, void **a_str_reply)
             : dap_chain_net_get_gdb_group_mempool_by_chain_type(l_net, CHAIN_TYPE_TOKEN);
     if (!l_gdb_group_mempool) {
         dap_cli_server_cmd_set_reply_text(a_str_reply, "No suitable chain for placing token datum found");
-        DAP_DEL_Z(l_key_str);
-        DAP_DEL_Z(l_key_str_out);
         DAP_DELETE(l_datum);
         return -10;
     }
     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");
-    DAP_DEL_Z(l_key_str);
-    DAP_DEL_Z(l_key_str_out);
     DAP_DELETE(l_datum);
     DAP_DELETE(l_params);
     return l_placed ? 0 : -2;
@@ -6865,8 +6743,7 @@ int com_tx_history(int a_argc, char ** a_argv, void **a_str_reply)
         }
     } else if (l_addr) {
         // history addr and wallet
-        char *l_addr_str = dap_chain_addr_to_str(l_addr);
-        json_obj_out = dap_db_history_addr(l_addr, l_chain, l_hash_out_type, l_addr_str);
+        json_obj_out = dap_db_history_addr(l_addr, l_chain, l_hash_out_type, dap_chain_addr_to_str(l_addr));
         if (!json_obj_out) {
             dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_TX_HISTORY_DAP_DB_HISTORY_ADDR_ERR,
                                     "something went wrong in tx_history");
diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c
index 26f741220acda1a17b7f71f40ebc3aa544582b68..d6047738a96ef4cdb2ee130123373fb0ccbf2134 100644
--- a/modules/net/dap_chain_node_cli_cmd_tx.c
+++ b/modules/net/dap_chain_node_cli_cmd_tx.c
@@ -172,14 +172,14 @@ json_object * dap_db_tx_history_to_json(dap_chain_hash_fast_t* a_tx_hash,
 
     if (l_atom_hash) {
         char *l_atom_hash_str = dap_strcmp(a_hash_out_type, "hex")
-                            ? dap_enc_base58_encode_hash_to_str(l_atom_hash)
-                            : dap_chain_hash_fast_to_str_new(l_atom_hash);
+                            ? dap_enc_base58_encode_hash_to_str_static(l_atom_hash)
+                            : dap_chain_hash_fast_to_str_static(l_atom_hash);
         json_object_object_add(json_obj_datum, "atom_hash", json_object_new_string(l_atom_hash_str));
     }
 
     char *l_hash_str = dap_strcmp(a_hash_out_type, "hex")
-                        ? dap_enc_base58_encode_hash_to_str(a_tx_hash)
-                        : dap_chain_hash_fast_to_str_new(a_tx_hash);
+                        ? dap_enc_base58_encode_hash_to_str_static(a_tx_hash)
+                        : dap_chain_hash_fast_to_str_static(a_tx_hash);
     json_object_object_add(json_obj_datum, "hash", json_object_new_string(l_hash_str));
 
     json_object_object_add(json_obj_datum, "token_ticker", l_tx_token_ticker ? json_object_new_string(l_tx_token_ticker) 
@@ -225,10 +225,9 @@ json_object * dap_db_history_tx(dap_chain_hash_fast_t* a_tx_hash,
         return dap_db_tx_history_to_json(a_tx_hash, &l_atom_hash,l_tx, a_chain, a_hash_out_type, l_net, l_ret_code, &accepted_tx);
     } else {
         char *l_tx_hash_str = dap_strcmp(a_hash_out_type, "hex")
-                ? dap_enc_base58_encode_hash_to_str(a_tx_hash)
-                : dap_chain_hash_fast_to_str_new(a_tx_hash);
+                ? dap_enc_base58_encode_hash_to_str_static(a_tx_hash)
+                : dap_chain_hash_fast_to_str_static(a_tx_hash);
         dap_json_rpc_error_add(-1, "TX hash %s not founds in chains", l_tx_hash_str);
-        DAP_DELETE(l_tx_hash_str);
         return NULL;
     }
 }
@@ -491,21 +490,20 @@ json_object* dap_db_history_addr(dap_chain_addr_t *a_addr, dap_chain_t *a_chain,
                                       a_hash_out_type, l_ledger, &l_tx_hash, l_datum_iter->ret_code);
                     l_header_printed = true;
                 }
-                const char *l_src_addr_str = NULL, *l_src_str;
+                char *l_src_str = NULL;
                 if (l_base_tx)
                     l_src_str = l_reward_collect ? "reward collecting" : "emission";
                 else if (l_src_addr && dap_strcmp(l_dst_token, l_noaddr_token))
-                    l_src_str = l_src_addr_str = dap_chain_addr_to_str(l_src_addr);
+                    l_src_str = dap_chain_addr_to_str(l_src_addr);
                 else
-                    l_src_str = dap_chain_tx_out_cond_subtype_to_str(l_src_subtype);
+                    l_src_str = (char*)dap_chain_tx_out_cond_subtype_to_str(l_src_subtype);
                 if (l_is_unstake)
                     l_value = l_unstake_value;
                 else if (!dap_strcmp(l_native_ticker, l_noaddr_token)) {
                     l_is_need_correction = true;
                     l_corr_value = l_value;
                 }
-                char *l_value_str = dap_chain_balance_print(l_value);
-                char *l_coins_str = dap_chain_balance_to_coins(l_value);
+                char *l_coins_str, *l_value_str = dap_uint256_to_char(l_value, &l_coins_str);
                 json_object *j_obj_data = json_object_new_object();
                 if (!j_obj_data) {
                     dap_json_rpc_allocation_error;
@@ -523,9 +521,6 @@ json_object* dap_db_history_addr(dap_chain_addr_t *a_addr, dap_chain_t *a_chain,
                     l_corr_object = j_obj_data;
                 else
                     json_object_array_add(j_arr_data, j_obj_data);
-                DAP_DEL_Z(l_src_addr_str);
-                DAP_DELETE(l_value_str);
-                DAP_DELETE(l_coins_str);
             } else if (!l_src_addr || dap_chain_addr_compare(l_src_addr, a_addr)) {
                 if (!l_dst_addr && ((dap_chain_tx_out_cond_t *)it->data)->header.subtype == l_src_subtype && l_src_subtype == DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE)
                     continue;
@@ -540,8 +535,7 @@ json_object* dap_db_history_addr(dap_chain_addr_t *a_addr, dap_chain_t *a_chain,
                 const char *l_dst_addr_str = l_dst_addr ? dap_chain_addr_to_str(l_dst_addr)
                                                         : dap_chain_tx_out_cond_subtype_to_str(
                                                               ((dap_chain_tx_out_cond_t *)it->data)->header.subtype);
-                char *l_value_str = dap_chain_balance_print(l_value);
-                char *l_coins_str = dap_chain_balance_to_coins(l_value);
+                char *l_coins_str, *l_value_str = dap_uint256_to_char(l_value, &l_coins_str);
                 json_object * j_obj_data = json_object_new_object();
                 if (!j_obj_data) {
                     dap_json_rpc_allocation_error;
@@ -553,14 +547,9 @@ json_object* dap_db_history_addr(dap_chain_addr_t *a_addr, dap_chain_t *a_chain,
                 json_object_object_add(j_obj_data, "send_coins", json_object_new_string(l_coins_str));
                 json_object_object_add(j_obj_data, "send_datoshi", json_object_new_string(l_value_str));
                 json_object_object_add(j_obj_data, "token", l_dst_token ? json_object_new_string(l_dst_token)
-                                                                            : json_object_new_string("UNKNOWN"));
+                                                                        : json_object_new_string("UNKNOWN"));
                 json_object_object_add(j_obj_data, "destination_address", json_object_new_string(l_dst_addr_str));
-
                 json_object_array_add(j_arr_data, j_obj_data);
-                if (l_dst_addr)
-                    DAP_DELETE(l_dst_addr_str);
-                DAP_DELETE(l_value_str);
-                DAP_DELETE(l_coins_str);
             }
         }
         if (json_object_array_length(j_arr_data) > 0) {
@@ -569,16 +558,13 @@ json_object* dap_db_history_addr(dap_chain_addr_t *a_addr, dap_chain_t *a_chain,
         dap_list_free(l_list_out_items);
         if (l_is_need_correction) {
             SUM_256_256(l_corr_value, l_fee_sum, &l_corr_value);
-            char *l_value_str = dap_chain_balance_print(l_corr_value);
-            char *l_coins_str = dap_chain_balance_to_coins(l_corr_value);
+            char *l_coins_str, *l_value_str = dap_uint256_to_char(l_corr_value, &l_coins_str);
             json_object_object_add(l_corr_object, "recv_coins", json_object_new_string(l_coins_str));
             json_object_object_add(l_corr_object, "recv_datoshi", json_object_new_string(l_value_str));
             if (!j_arr_data) {
                 j_arr_data = json_object_new_array();
             }
             json_object_array_add(j_arr_data, l_corr_object);
-            DAP_DELETE(l_value_str);
-            DAP_DELETE(l_coins_str);
             l_is_need_correction = false;
         }
     }
@@ -809,9 +795,8 @@ static char* dap_db_history_filter(dap_chain_t * a_chain, dap_ledger_t *a_ledger
                     }
                     dap_chain_datum_token_emission_t *l_token_em =  (dap_chain_datum_token_emission_t *)l_datum->data;
                     if(!a_filter_token_name || !dap_strcmp(l_token_em->hdr.ticker, a_filter_token_name)) {
-                        char * l_token_emission_address_str = dap_chain_addr_to_str(&(l_token_em->hdr.address));
                         // filter for addr
-                        if (a_filtr_addr_base58 && dap_strcmp(a_filtr_addr_base58, l_token_emission_address_str)) {
+                        if (a_filtr_addr_base58 && dap_strcmp(a_filtr_addr_base58, dap_chain_addr_to_str(&(l_token_em->hdr.address)))) {
                              break;
                         }
                         dap_chain_datum_dump(l_str_out, l_datum, a_hash_out_type, a_chain->net_id);
@@ -1011,9 +996,7 @@ int com_ledger(int a_argc, char ** a_argv, void **reply)
             {
                 json_object* json_obj_array = dap_ledger_token_tx_item_list(l_ledger, l_addr, l_hash_out_type, l_unspent_flag);
                 json_object_object_add(json_obj_out, "Datum_tx", json_obj_array);
-                char *l_addr_str = dap_chain_addr_to_str(l_addr);
-                json_object_object_add(json_obj_out, "history for addr ", json_object_new_string(l_addr_str));
-                DAP_DELETE(l_addr_str);
+                json_object_object_add(json_obj_out, "history for addr ", json_object_new_string(dap_chain_addr_to_str(l_addr)));
             } else if(l_tx_hash_str) {
                 dap_chain_datum_tx_t *l_tx = NULL;
                 if (l_unspent_flag) {
diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c
index be4dc5d5c7db959bbf037181267497274b9cf6d6..f357e5b9e5e7c51dbb0cb603a41a8dda8733e8e7 100644
--- a/modules/net/srv/dap_chain_net_srv.c
+++ b/modules/net/srv/dap_chain_net_srv.c
@@ -902,7 +902,6 @@ dap_chain_net_srv_price_t * dap_chain_net_srv_get_price_from_order(dap_chain_net
     l_price->wallet_addr = dap_chain_addr_from_str(l_wallet_addr);
     if(!l_price->wallet_addr){
         log_it(L_ERROR, "Can't get wallet addr from wallet_addr in config file.");
-        DAP_DEL_Z(l_order);
         DAP_DELETE(l_price);
         DAP_DEL_Z(l_order);
         return NULL;
diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c
index d1379bfd22a6c150a7204dc4ddbbbe7693d73dc0..abe28cddc1fc415ab5e4226e4778faa543c1b19b 100644
--- a/modules/net/srv/dap_chain_net_srv_order.c
+++ b/modules/net/srv/dap_chain_net_srv_order.c
@@ -349,18 +349,14 @@ char *dap_chain_net_srv_order_save(dap_chain_net_t *a_net, dap_chain_net_srv_ord
     dap_chain_hash_fast_t l_order_hash;
     size_t l_order_size = dap_chain_net_srv_order_get_size(a_order);
     dap_hash_fast(a_order, l_order_size, &l_order_hash);
-    char *l_order_hash_str = dap_chain_hash_fast_to_str_new(&l_order_hash);
-    if (!l_order_hash_str)
-        return NULL;
+    char *l_order_hash_str = dap_chain_hash_fast_to_str_static(&l_order_hash);
     char *l_gdb_group_str = a_common ? dap_chain_net_srv_order_get_common_group(a_net)
                                      : dap_chain_net_srv_order_get_gdb_group(a_net);
     if (!l_gdb_group_str)
         return NULL;
     int l_rc = dap_global_db_set_sync(l_gdb_group_str, l_order_hash_str, a_order, l_order_size, false);
     DAP_DELETE(l_gdb_group_str);
-    if (l_rc != DAP_GLOBAL_DB_RC_SUCCESS)
-        DAP_DEL_Z(l_order_hash_str);
-    return l_order_hash_str;
+    return l_rc == DAP_GLOBAL_DB_RC_SUCCESS ? dap_strdup(l_order_hash_str) : NULL;
 }
 
 dap_chain_net_srv_order_t *dap_chain_net_srv_order_read(byte_t *a_order, size_t a_order_size)
@@ -544,8 +540,8 @@ void dap_chain_net_srv_order_dump_to_string(dap_chain_net_srv_order_t *a_order,d
         dap_chain_hash_fast_t l_hash;
         dap_hash_fast(a_order, dap_chain_net_srv_order_get_size(a_order), &l_hash);
         char *l_hash_str = dap_strcmp(a_hash_out_type,"hex")
-                ? dap_enc_base58_encode_hash_to_str(&l_hash)
-                : dap_chain_hash_fast_to_str_new(&l_hash);
+                ? dap_enc_base58_encode_hash_to_str_static(&l_hash)
+                : dap_chain_hash_fast_to_str_static(&l_hash);
 
         dap_string_append_printf(a_str_out, "== Order %s ==\n", l_hash_str);
         dap_string_append_printf(a_str_out, "  version:          %u\n", a_order->version );
@@ -559,11 +555,9 @@ void dap_chain_net_srv_order_dump_to_string(dap_chain_net_srv_order_t *a_order,d
         dap_time_to_str_rfc822(buf_time, 50, a_order->ts_created);
         dap_string_append_printf(a_str_out, "  created:          %s\n", buf_time);
         dap_string_append_printf(a_str_out, "  srv_uid:          0x%016"DAP_UINT64_FORMAT_X"\n", a_order->srv_uid.uint64 );
-        char *l_balance_coins = dap_chain_balance_to_coins(a_order->price);
-        char *l_balance = dap_chain_balance_print(a_order->price);
+        
+        char *l_balance_coins, *l_balance = dap_uint256_to_char(a_order->price, &l_balance_coins);
         dap_string_append_printf(a_str_out, "  price:            %s (%s)\n", l_balance_coins, l_balance);
-        DAP_DELETE(l_balance_coins);
-        DAP_DELETE(l_balance);
         dap_string_append_printf(a_str_out, "  price_token:      %s\n",  (*a_order->price_ticker) ? a_order->price_ticker: a_native_ticker);
         dap_string_append_printf(a_str_out, "  units:            %zu\n", a_order->units);
         if( a_order->price_unit.uint32 )
@@ -578,11 +572,10 @@ void dap_chain_net_srv_order_dump_to_string(dap_chain_net_srv_order_t *a_order,d
             l_continent_str = dap_chain_net_srv_order_continent_to_str(l_continent_num);
         dap_string_append_printf(a_str_out, "  node_location:    %s - %s\n", l_continent_str ? l_continent_str : "None" , l_region ? l_region : "None");
         DAP_DELETE(l_region);
-        DAP_DELETE(l_hash_str);
 
         l_hash_str = dap_strcmp(a_hash_out_type, "hex")
-                ? dap_enc_base58_encode_hash_to_str(&a_order->tx_cond_hash)
-                : dap_chain_hash_fast_to_str_new(&a_order->tx_cond_hash);
+                ? dap_enc_base58_encode_hash_to_str_static(&a_order->tx_cond_hash)
+                : dap_chain_hash_fast_to_str_static(&a_order->tx_cond_hash);
         dap_string_append_printf(a_str_out, "  tx_cond_hash:     %s\n", l_hash_str );
         char *l_ext_out = a_order->ext_size ? DAP_NEW_Z_SIZE(char, a_order->ext_size * 2 + 1) : NULL;
         if(l_ext_out) {
@@ -594,10 +587,8 @@ void dap_chain_net_srv_order_dump_to_string(dap_chain_net_srv_order_t *a_order,d
         dap_sign_t *l_sign = (dap_sign_t*)((byte_t*)a_order->ext_n_sign + a_order->ext_size);
         dap_hash_fast_t l_sign_pkey = {0};
         dap_sign_get_pkey_hash(l_sign, &l_sign_pkey);
-        char *l_sign_pkey_hash_str = dap_hash_fast_to_str_new(&l_sign_pkey);
+        char *l_sign_pkey_hash_str = dap_hash_fast_to_str_static(&l_sign_pkey);
         dap_string_append_printf(a_str_out, "  pkey:             %s\n", l_sign_pkey_hash_str);
-        DAP_DELETE(l_sign_pkey_hash_str);
-        DAP_DELETE(l_hash_str);
         DAP_DELETE(l_ext_out);
     }
 }
diff --git a/modules/service/stake/dap_chain_net_srv_stake_lock.c b/modules/service/stake/dap_chain_net_srv_stake_lock.c
index 619a3e7ebf57b061f8d2ef4322dc00ee63ccec26..4be264e1f9d8d7b496a1ea168004e09ea620f927 100644
--- a/modules/service/stake/dap_chain_net_srv_stake_lock.c
+++ b/modules/service/stake/dap_chain_net_srv_stake_lock.c
@@ -984,9 +984,7 @@ static bool s_stake_lock_callback_verificator(dap_ledger_t *a_ledger, dap_chain_
             log_it(L_INFO, "hold/take_value: %s",	str1);
             log_it(L_INFO, "delegated_value: %s",	str2);
             log_it(L_INFO, "burning_value:   %s",	str3);
-            DAP_DEL_Z(str1);
-            DAP_DEL_Z(str2);
-            DAP_DEL_Z(str3);
+            DAP_DEL_MULTY(str1, str2, str3);
         }
 
         if (!EQUAL_256(l_blank_out_value, l_value_delegated)) {
diff --git a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
index 0d49e1cbf4a280689545bf7531f2aeff27bb3731..1a02af6e9ec0c653653a3abe56777da58460c93e 100644
--- a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
+++ b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
@@ -309,10 +309,9 @@ void dap_chain_net_srv_stake_key_delegate(dap_chain_net_t *a_net, dap_chain_addr
     char l_key_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
     dap_chain_hash_fast_to_str(&a_signing_addr->data.hash_fast,
                                l_key_hash_str, DAP_CHAIN_HASH_FAST_STR_SIZE);
-    char *l_value_str = dap_chain_balance_to_coins(a_value);
+    char *l_value_str; dap_uint256_to_char(a_value, &l_value_str);
     log_it(L_NOTICE, "Added key with fingerprint %s and value %s for node "NODE_ADDR_FP_STR,
                         l_key_hash_str, l_value_str, NODE_ADDR_FP_ARGS(a_node_addr));
-    DAP_DELETE(l_value_str);
 }
 
 void dap_chain_net_srv_stake_key_invalidate(dap_chain_addr_t *a_signing_addr)
@@ -329,10 +328,9 @@ void dap_chain_net_srv_stake_key_invalidate(dap_chain_addr_t *a_signing_addr)
         char l_key_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
         dap_chain_hash_fast_to_str(&a_signing_addr->data.hash_fast,
                                    l_key_hash_str, DAP_CHAIN_HASH_FAST_STR_SIZE);
-        char *l_value_str = dap_chain_balance_to_coins(l_stake->value);
+        char *l_value_str; dap_uint256_to_char(l_stake->value, &l_value_str);
         log_it(L_NOTICE, "Removed key with fingerprint %s and value %s for node "NODE_ADDR_FP_STR,
                             l_key_hash_str, l_value_str, NODE_ADDR_FP_ARGS_S(l_stake->node_addr));
-        DAP_DELETE(l_value_str);
         DAP_DELETE(l_stake);
     }
 }
@@ -1517,12 +1515,11 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, voi
                         dap_string_append(l_reply_str, "Value in this order type means minimum value of m-tokens for validator acceptable for key delegation with supplied tax\n"
                                                        "Order external params:\n");
                         struct validator_odrer_ext *l_ext = (struct validator_odrer_ext *)l_order->ext_n_sign;
-                        char *l_tax_str = dap_chain_balance_to_coins(l_ext->tax);
-                        dap_string_append_printf(l_reply_str, "  tax:              %s%%\n", l_tax_str);
-                        DAP_DEL_Z(l_tax_str);
-                        char *l_max_str = dap_chain_balance_to_coins(l_ext->value_max);
-                        dap_string_append_printf(l_reply_str, "  maximum_value:    %s\n", l_max_str);
-                        DAP_DEL_Z(l_max_str);
+                        char *l_coins_str;
+                        dap_uint256_to_char(l_ext->tax, &l_coins_str);
+                        dap_string_append_printf(l_reply_str, "  tax:              %s%%\n", l_coins_str);
+                        dap_uint256_to_char(l_ext->value_max, &l_coins_str);
+                        dap_string_append_printf(l_reply_str, "  maximum_value:    %s\n", l_coins_str);
                     } else { // l_order->direction = SERV_DIR_BUY
                         dap_string_append(l_reply_str, "Value in this order type means value of m-tokens locked in conditional transaction attached to the order\n"
                                                        "Order conditional tx params:\n");
@@ -1542,12 +1539,9 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, voi
                             }
                         }
                         if (!l_error) {
-                            char *l_tax_str = dap_chain_balance_to_coins(l_tax);
-                            dap_string_append_printf(l_reply_str, "  sovereign_tax:    %s%%\n", l_tax_str);
-                            DAP_DEL_Z(l_tax_str);
-                            char *l_addr_str = dap_chain_addr_to_str(&l_addr);
-                            dap_string_append_printf(l_reply_str, "  sovereign_addr:   %s\n", l_addr_str);
-                            DAP_DEL_Z(l_addr_str);
+                            char *l_tax_str; dap_uint256_to_char(l_tax, &l_tax_str);
+                            dap_string_append_printf(l_reply_str, "  sovereign_tax:    %s%%\n  sovereign_addr:   %s\n",
+                                l_tax_str, dap_chain_addr_to_str(&l_addr));
                         } else
                             dap_string_append(l_reply_str, "  Conditional tx not found or illegal\n");
                     }
@@ -1759,26 +1753,18 @@ static int s_cli_srv_stake_delegate(int a_argc, char **a_argv, int a_arg_index,
             struct validator_odrer_ext *l_ext = (struct validator_odrer_ext *)l_order->ext_n_sign;
             l_sovereign_tax = l_ext->tax;
             if (l_order_hash_str && compare256(l_value, l_order->price) == -1) {
-                char *l_coin_str = dap_chain_balance_to_coins(l_value);
-                char *l_value_min_str = dap_chain_balance_print(l_order->price);
-                char *l_coin_min_str = dap_chain_balance_to_coins(l_order->price);
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Number in '-value' param %s(%s) is lower than order minimum allowed value %s(%s)",
-                                                  l_coin_str, l_value_str, l_coin_min_str, l_value_min_str);
-                DAP_DELETE(l_coin_str);
-                DAP_DELETE(l_value_min_str);
-                DAP_DELETE(l_coin_min_str);
+                char *l_coin_min_str, *l_value_min_str =
+                    dap_uint256_to_char(l_order->price, &l_coin_min_str);
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Number in '-value' param %s is lower than order minimum allowed value %s(%s)",
+                                                  l_value_str, l_coin_min_str, l_value_min_str);
                 dap_enc_key_delete(l_enc_key);
                 return -13;
             }
             if (l_order_hash_str && compare256(l_value, l_ext->value_max) == 1) {
-                char *l_coin_str = dap_chain_balance_to_coins(l_value);
-                char *l_value_max_str = dap_chain_balance_print(l_ext->value_max);
-                char *l_coin_max_str = dap_chain_balance_to_coins(l_ext->value_max);
-                dap_cli_server_cmd_set_reply_text(a_str_reply, "Number in '-value' param %s(%s) is higher than order minimum allowed value %s(%s)",
-                                                  l_coin_str, l_value_str, l_coin_max_str, l_value_max_str);
-                DAP_DELETE(l_coin_str);
-                DAP_DELETE(l_value_max_str);
-                DAP_DELETE(l_coin_max_str);
+                char *l_coin_max_str, *l_value_max_str =
+                    dap_uint256_to_char(l_ext->value_max, &l_coin_max_str);
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Number in '-value' param %s is higher than order minimum allowed value %s(%s)",
+                                                  l_value_str, l_coin_max_str, l_value_max_str);
                 dap_enc_key_delete(l_enc_key);
                 return -14;
             }
@@ -1817,14 +1803,9 @@ static int s_cli_srv_stake_delegate(int a_argc, char **a_argv, int a_arg_index,
         return l_check_result;
     }
     if (compare256(l_value, s_srv_stake->delegate_allowed_min) == -1) {
-        char *l_coin_str = dap_chain_balance_to_coins(l_value);
-        char *l_value_min_str = dap_chain_balance_print(s_srv_stake->delegate_allowed_min);
-        char *l_coin_min_str = dap_chain_balance_to_coins(s_srv_stake->delegate_allowed_min);
-        dap_cli_server_cmd_set_reply_text(a_str_reply, "Number in '-value' param %s(%s) is lower than minimum allowed value %s(%s)",
-                                          l_coin_str, l_value_str, l_coin_min_str, l_value_min_str);
-        DAP_DELETE(l_coin_str);
-        DAP_DELETE(l_value_min_str);
-        DAP_DELETE(l_coin_min_str);
+        char *l_coin_min_str, *l_value_min_str = dap_uint256_to_char(s_srv_stake->delegate_allowed_min, &l_coin_min_str);
+        dap_cli_server_cmd_set_reply_text(a_str_reply, "Number in '-value' param %s is lower than minimum allowed value %s(%s)",
+                                          l_value_str, l_coin_min_str, l_value_min_str);
         dap_enc_key_delete(l_enc_key);
         return -11;
     }
@@ -2001,9 +1982,8 @@ static int s_cli_srv_stake_invalidate(int a_argc, char **a_argv, int a_arg_index
             DAP_DELETE(l_out_hash_str);
             DAP_DELETE(l_tx);
         } else {
-            l_tx_hash_str = dap_chain_hash_fast_to_str_new(&l_tx_hash);
+            l_tx_hash_str = dap_chain_hash_fast_to_str_static(&l_tx_hash);
             dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't invalidate transaction %s, examine log files for details", l_tx_hash_str);
-            DAP_DELETE(l_tx_hash_str);
             DAP_DEL_Z(l_tx);
             return -21;
         }
@@ -2061,7 +2041,7 @@ static void s_srv_stake_print(dap_chain_net_srv_stake_item_t *a_stake, uint256_t
     if (s_chain_esbocs_started(a_stake->net))
         snprintf(l_active_str, 32, "\tActive: %s\n", a_stake->is_active ? "true" : "false");
     char *l_sov_addr_str = dap_chain_addr_is_blank(&a_stake->sovereign_addr) ?
-                dap_strdup("N/A") : dap_chain_addr_to_str(&a_stake->sovereign_addr);
+                "null" : dap_chain_addr_to_str(&a_stake->sovereign_addr);
     uint256_t l_sov_tax_percent = uint256_0;
     MULT_256_256(a_stake->sovereign_tax, GET_256_FROM_64(100), &l_sov_tax_percent);
     char *l_sov_tax_str = dap_chain_balance_to_coins(l_sov_tax_percent);
@@ -2078,7 +2058,6 @@ static void s_srv_stake_print(dap_chain_net_srv_stake_item_t *a_stake, uint256_t
                              l_sov_addr_str, l_sov_tax_str, l_active_str);
     DAP_DELETE(l_balance);
     DAP_DELETE(l_rel_weight_str);
-    DAP_DELETE(l_sov_addr_str);
     DAP_DELETE(l_sov_tax_str);
 }
 
@@ -2492,19 +2471,16 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, void **a_str_reply)
                         dap_string_append_printf(l_reply_str, "Total keys count: %zu\n", l_total_count);
                     if (s_chain_esbocs_started(l_net))
                         dap_string_append_printf(l_reply_str, "Inactive keys count: %zu\n", l_inactive_count);
-                    char *l_total_weight_str = dap_chain_balance_print(l_total_weight);
-                    char *l_total_weight_coins = dap_chain_balance_to_coins(l_total_weight);
+                    char *l_total_weight_coins, *l_total_weight_str =
+                            dap_uint256_to_char(l_total_weight, &l_total_weight_coins);
                     dap_string_append_printf(l_reply_str, "Total weight: %s (%s)\n", l_total_weight_coins, l_total_weight_str);
-                    DAP_DELETE(l_total_weight_coins);
-                    DAP_DELETE(l_total_weight_str);
                 }
 
-                char *l_delegate_min_str = dap_chain_balance_to_coins(s_srv_stake->delegate_allowed_min);
+                char *l_delegate_min_str; dap_uint256_to_char(s_srv_stake->delegate_allowed_min, &l_delegate_min_str);
                 char l_delegated_ticker[DAP_CHAIN_TICKER_SIZE_MAX];
                 dap_chain_datum_token_get_delegated_ticker(l_delegated_ticker, l_net->pub.native_ticker);
                 dap_string_append_printf(l_reply_str, "Minimum value for key delegating: %s %s",
                                          l_delegate_min_str, l_delegated_ticker);
-                DAP_DELETE(l_delegate_min_str);
                 *a_str_reply = dap_string_free(l_reply_str, false);
             } else if (dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "tx", NULL)) {
                 const char *l_net_str = NULL;
@@ -2546,17 +2522,14 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, void **a_str_reply)
                                                                                      &l_out_idx_tmp);
                     char l_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
                     dap_chain_hash_fast_to_str(&l_datum_hash, l_hash_str, sizeof(l_hash_str));
-                    dap_string_append_printf(l_str_tmp,"%s \n",spaces);
                     dap_time_to_str_rfc822(buf, DAP_TIME_STR_SIZE, l_datum_tx->header.ts_created);
-                    dap_string_append_printf(l_str_tmp, "%s \n", buf);
-                    dap_string_append_printf(l_str_tmp,"tx_hash:\t%s \n",l_hash_str);
+                    dap_string_append_printf(l_str_tmp,"%s \n%s \ntx_hash:\t%s \n",spaces, buf, l_hash_str);
 
-                    l_signing_addr_str = dap_chain_addr_to_str(&l_tx_out_cond->subtype.srv_stake_pos_delegate.signing_addr);
                     char l_pkey_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
                     dap_chain_hash_fast_to_str(&l_tx_out_cond->subtype.srv_stake_pos_delegate.signing_addr.data.hash_fast, l_pkey_hash_str, sizeof(l_pkey_hash_str));
-                    l_coins = dap_chain_balance_to_coins(l_tx_out_cond->header.value);
-                    l_balance = dap_chain_balance_print(l_tx_out_cond->header.value);
-
+                    l_balance = dap_uint256_to_char(l_tx_out_cond->header.value, &l_coins);
+                    
+                    l_signing_addr_str = dap_chain_addr_to_str(&l_tx_out_cond->subtype.srv_stake_pos_delegate.signing_addr);
                     dap_string_append_printf(l_str_tmp,"signing_addr:\t%s \n",l_signing_addr_str);
                     dap_string_append_printf(l_str_tmp,"signing_hash:\t%s \n",l_pkey_hash_str);
                     l_node_address_text_block = dap_strdup_printf("node_address:\t" NODE_ADDR_FP_STR,NODE_ADDR_FP_ARGS_S(l_tx_out_cond->subtype.srv_stake_pos_delegate.signer_node_addr));
@@ -2564,9 +2537,6 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, void **a_str_reply)
                     dap_string_append_printf(l_str_tmp,"value:\t\t%s (%s) \n",l_coins,l_balance);
 
                     DAP_DELETE(l_node_address_text_block);
-                    DAP_DELETE(l_signing_addr_str);
-                    DAP_DELETE(l_balance);
-                    DAP_DEL_Z(l_coins);
                 }
 
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_str_tmp->str);
@@ -2705,14 +2675,12 @@ void dap_chain_net_srv_stake_get_fee_validators_str(dap_chain_net_t *a_net, dap_
     uint256_t l_min = uint256_0, l_max = uint256_0, l_average = uint256_0, l_median = uint256_0;
     dap_chain_net_srv_stake_get_fee_validators(a_net, &l_max, &l_average, &l_min, &l_median);
     const char *l_native_token  = a_net->pub.native_ticker;
-    char    *l_min_balance      = dap_chain_balance_print(l_min),
-            *l_min_coins        = dap_chain_balance_to_coins(l_min),
-            *l_max_balance      = dap_chain_balance_print(l_max),
-            *l_max_coins        = dap_chain_balance_to_coins(l_max),
-            *l_average_balance  = dap_chain_balance_print(l_average),
-            *l_average_coins    = dap_chain_balance_to_coins(l_average),
-            *l_median_balance   = dap_chain_balance_print(l_median),
-            *l_median_coins     = dap_chain_balance_to_coins(l_median);
+    char *l_coins_str,
+    *l_min_balance      = dap_strdup(dap_uint256_to_char(l_min, &l_coins_str)),     *l_min_coins    = dap_strdup(l_coins_str),
+    *l_max_balance      = dap_strdup(dap_uint256_to_char(l_max, &l_coins_str)),     *l_max_coins    = dap_strdup(l_coins_str),
+    *l_average_balance  = dap_strdup(dap_uint256_to_char(l_average, &l_coins_str)), *l_average_coins= dap_strdup(l_coins_str),
+    *l_median_balance   = dap_strdup(dap_uint256_to_char(l_median, &l_coins_str)),  *l_median_coins = dap_strdup(l_coins_str);
+
     dap_string_append_printf(a_string_ret, "Validator fee: \n"
                                            "\t MIN: %s (%s) %s\n"
                                            "\t MAX: %s (%s) %s\n"
@@ -2721,14 +2689,7 @@ void dap_chain_net_srv_stake_get_fee_validators_str(dap_chain_net_t *a_net, dap_
                                            l_max_coins, l_max_balance, l_native_token,
                                            l_average_coins, l_average_balance, l_native_token,
                                            l_median_coins, l_median_balance, l_native_token);
-    DAP_DELETE(l_min_balance);
-    DAP_DELETE(l_min_coins);
-    DAP_DELETE(l_max_balance);
-    DAP_DELETE(l_max_coins);
-    DAP_DELETE(l_average_balance);
-    DAP_DELETE(l_average_coins);
-    DAP_DELETE(l_median_balance);
-    DAP_DELETE(l_median_coins);
+    DAP_DEL_MULTY(l_min_balance, l_min_coins, l_max_balance, l_max_coins, l_average_balance, l_average_coins, l_median_balance, l_median_coins);
 }
 
 json_object *dap_chain_net_srv_stake_get_fee_validators_json(dap_chain_net_t  *a_net) {
@@ -2737,68 +2698,29 @@ json_object *dap_chain_net_srv_stake_get_fee_validators_json(dap_chain_net_t  *a
     uint256_t l_min = uint256_0, l_max = uint256_0, l_average = uint256_0, l_median = uint256_0;
     dap_chain_net_srv_stake_get_fee_validators(a_net, &l_max, &l_average, &l_min, &l_median);
     const char *l_native_token  = a_net->pub.native_ticker;
-    char    *l_min_balance      = dap_chain_balance_print(l_min),
-            *l_min_coins        = dap_chain_balance_to_coins(l_min),
-            *l_max_balance      = dap_chain_balance_print(l_max),
-            *l_max_coins        = dap_chain_balance_to_coins(l_max),
-            *l_average_balance  = dap_chain_balance_print(l_average),
-            *l_average_coins    = dap_chain_balance_to_coins(l_average),
-            *l_median_balance   = dap_chain_balance_print(l_median),
-            *l_median_coins     = dap_chain_balance_to_coins(l_median);
-    json_object *l_jobj_ret = json_object_new_object();
-    json_object *l_jobj_min = json_object_new_object();
-    json_object *l_jobj_min_coins = json_object_new_string(l_min_coins);
-    json_object *l_jobj_min_balance = json_object_new_string(l_min_balance);
-    json_object *l_jobj_max = json_object_new_object();
-    json_object *l_jobj_max_coins = json_object_new_string(l_max_coins);
-    json_object *l_jobj_max_balance = json_object_new_string(l_max_balance);
-    json_object *l_jobj_average = json_object_new_object();
-    json_object *l_jobj_average_coins = json_object_new_string(l_average_coins);
-    json_object *l_jobj_average_balance = json_object_new_string(l_average_balance);
-    json_object *l_jobj_median = json_object_new_object();
-    json_object *l_jobj_median_coins = json_object_new_string(l_median_coins);
-    json_object *l_jobj_median_balance = json_object_new_string(l_median_balance);
-    json_object *l_jobj_ticker = json_object_new_string(l_native_token);
-    if (!l_jobj_ret || !l_jobj_min || !l_jobj_min_coins || !l_jobj_min_balance || !l_jobj_max || !l_jobj_max_coins ||
-        !l_jobj_max_balance || !l_jobj_average || !l_jobj_average_coins || !l_jobj_average_balance || !l_jobj_median ||
-        !l_jobj_median_coins || !l_jobj_median_balance || !l_jobj_ticker) {
-        json_object_put(l_jobj_ret);
-        json_object_put(l_jobj_min);
-        json_object_put(l_jobj_min_coins);
-        json_object_put(l_jobj_min_balance);
-        json_object_put(l_jobj_max);
-        json_object_put(l_jobj_max_coins);
-        json_object_put(l_jobj_max_balance);
-        json_object_put(l_jobj_average);
-        json_object_put(l_jobj_average_coins);
-        json_object_put(l_jobj_average_balance);
-        json_object_put(l_jobj_median);
-        json_object_put(l_jobj_median_coins);
-        json_object_put(l_jobj_median_balance);
-        json_object_put(l_jobj_ticker);
-        return NULL;
-    }
-    json_object_object_add(l_jobj_min, "coin", l_jobj_min_coins);
-    json_object_object_add(l_jobj_min, "balance", l_jobj_min_balance);
-    json_object_object_add(l_jobj_max, "coin", l_jobj_max_coins);
-    json_object_object_add(l_jobj_max, "balance", l_jobj_max_balance);
-    json_object_object_add(l_jobj_average, "coin", l_jobj_average_coins);
-    json_object_object_add(l_jobj_average, "balance", l_jobj_average_balance);
-    json_object_object_add(l_jobj_median, "coin", l_jobj_median_coins);
-    json_object_object_add(l_jobj_median, "balance", l_jobj_median_balance);
-    json_object_object_add(l_jobj_ret, "min", l_jobj_min);
-    json_object_object_add(l_jobj_ret, "max", l_jobj_max);
-    json_object_object_add(l_jobj_ret, "average", l_jobj_average);
-    json_object_object_add(l_jobj_ret, "median", l_jobj_median);
-    json_object_object_add(l_jobj_ret, "token", l_jobj_ticker);
-    DAP_DELETE(l_min_balance);
-    DAP_DELETE(l_min_coins);
-    DAP_DELETE(l_max_balance);
-    DAP_DELETE(l_max_coins);
-    DAP_DELETE(l_average_balance);
-    DAP_DELETE(l_average_coins);
-    DAP_DELETE(l_median_balance);
-    DAP_DELETE(l_median_coins);
+    json_object *l_jobj_min     = json_object_new_object(), *l_jobj_max     = json_object_new_object(),
+                *l_jobj_average = json_object_new_object(), *l_jobj_median  = json_object_new_object(),
+                *l_jobj_ret     = json_object_new_object();
+                
+    char *l_coins_str;
+    json_object_object_add( l_jobj_min,     "balance",  json_object_new_string(dap_uint256_to_char(l_min, &l_coins_str)) );
+    json_object_object_add( l_jobj_min,     "coin",     json_object_new_string(l_coins_str) );
+
+    json_object_object_add( l_jobj_max,     "balance",  json_object_new_string(dap_uint256_to_char(l_max, &l_coins_str)) );
+    json_object_object_add( l_jobj_max,     "coin",     json_object_new_string(l_coins_str) );
+
+    json_object_object_add( l_jobj_average, "balance",  json_object_new_string(dap_uint256_to_char(l_average, &l_coins_str)) );
+    json_object_object_add( l_jobj_average, "coin",     json_object_new_string(l_coins_str) );
+    
+    json_object_object_add( l_jobj_median, "balance",   json_object_new_string(dap_uint256_to_char(l_median, &l_coins_str)) );
+    json_object_object_add( l_jobj_median, "coin",      json_object_new_string(l_coins_str) );
+
+    json_object_object_add(l_jobj_ret, "min",       l_jobj_min);
+    json_object_object_add(l_jobj_ret, "max",       l_jobj_max);
+    json_object_object_add(l_jobj_ret, "average",   l_jobj_average);
+    json_object_object_add(l_jobj_ret, "median",    l_jobj_median);
+    json_object_object_add(l_jobj_ret, "token",     json_object_new_string(a_net->pub.native_ticker));
+
     return l_jobj_ret;
 }
 
diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c
index 3e0630c055cfac649bb14a19887b240afc3ddd91..4e9f9a823b31acb79da4408e5380e2367f9a8da2 100644
--- a/modules/service/xchange/dap_chain_net_srv_xchange.c
+++ b/modules/service/xchange/dap_chain_net_srv_xchange.c
@@ -646,7 +646,12 @@ static dap_chain_datum_tx_t *s_xchange_tx_create_exchange(dap_chain_net_srv_xcha
             SUBTRACT_256_256(l_value_need, l_exceed, &l_value_need);
         } else
             l_datoshi_buy = a_datoshi_buy;
-        debug_if(s_debug_more, L_NOTICE, "l_value_sell = %s %s", dap_chain_balance_to_coins(l_datoshi_sell), a_price->token_sell);
+        
+        if (s_debug_more) {
+            char *l_datoshi_sell_str; dap_uint256_to_char(l_datoshi_sell, &l_datoshi_sell_str);
+            log_it(L_NOTICE, "l_value_sell = %s %s", l_datoshi_sell_str, a_price->token_sell);
+        }
+        
         uint256_t l_value_sell = l_datoshi_sell;
         if (l_pay_with_native) {
             if (compare256(l_datoshi_sell, l_total_fee) <= 0) {
@@ -666,10 +671,18 @@ static dap_chain_datum_tx_t *s_xchange_tx_create_exchange(dap_chain_net_srv_xcha
         return NULL;
     }
     // transfer unselling coins (partial exchange)
-    debug_if(s_debug_more, L_NOTICE, "l_value_cond = %s", dap_chain_balance_to_coins(l_tx_out_cond->header.value));
+    if (s_debug_more) {
+        char *l_value_str; dap_uint256_to_char(l_tx_out_cond->header.value, &l_value_str);
+        log_it(L_NOTICE, "l_value_cond = %s", l_value_str);
+    }
+    
     if (compare256(l_tx_out_cond->header.value, l_datoshi_sell) == 1) {
         SUBTRACT_256_256(l_tx_out_cond->header.value, l_datoshi_sell, &l_value_back);
-        debug_if(s_debug_more, L_NOTICE, "l_value_unselled = %s", dap_chain_balance_to_coins(l_value_back));
+        if (s_debug_more) {
+            char *l_value_back_str; dap_uint256_to_char(l_value_back, &l_value_back_str);
+            log_it(L_NOTICE, "l_value_unselled = %s", l_value_back_str);
+        }
+        
         dap_chain_tx_out_cond_t *l_tx_out = dap_chain_datum_tx_item_out_cond_create_srv_xchange(
                     c_dap_chain_net_srv_xchange_uid, a_price->net->pub.id, l_value_back,
                     a_price->net->pub.id, a_price->token_buy, a_price->rate,
@@ -690,7 +703,11 @@ static dap_chain_datum_tx_t *s_xchange_tx_create_exchange(dap_chain_net_srv_xcha
         log_it(L_ERROR, "Can't add buying coins output");
         return NULL;
     }
-    debug_if(s_debug_more, L_NOTICE, "l_value_buy = %s %s", dap_chain_balance_to_coins(l_datoshi_buy), a_price->token_buy);
+    if (s_debug_more) {
+        char *l_buy_str; dap_uint256_to_char(l_datoshi_buy, &l_buy_str);
+        log_it(L_NOTICE, "l_value_buy = %s %s", l_buy_str, a_price->token_buy);
+    }
+    
     // transfer validator's fee
     if (!IS_ZERO_256(a_datoshi_fee)) {
         if (dap_chain_datum_tx_add_fee_item(&l_tx, a_datoshi_fee) == -1) {
@@ -698,7 +715,10 @@ static dap_chain_datum_tx_t *s_xchange_tx_create_exchange(dap_chain_net_srv_xcha
             log_it(L_ERROR, "Can't add validator fee output");
             return NULL;
         }
-        debug_if(s_debug_more, L_NOTICE, "l_validator_fee = %s", dap_chain_balance_to_coins(a_datoshi_fee));
+        if (s_debug_more) {
+            char *l_fee_str; dap_uint256_to_char(a_datoshi_fee, &l_fee_str);
+            log_it (L_NOTICE, "l_validator_fee = %s", l_fee_str);
+        }
     }
     // transfer net fee
     if (l_net_fee_used) {
@@ -707,7 +727,10 @@ static dap_chain_datum_tx_t *s_xchange_tx_create_exchange(dap_chain_net_srv_xcha
             log_it(L_ERROR, "Can't add net fee output");
             return NULL;
         }
-        debug_if(s_debug_more, L_NOTICE, "l_net_fee = %s", dap_chain_balance_to_coins(l_net_fee));
+        if (s_debug_more) {
+            char *l_net_fee_str; dap_uint256_to_char(l_net_fee, &l_net_fee_str);
+            log_it(L_NOTICE, "l_net_fee = %s", l_net_fee_str);
+        }
     }
     // transfer service fee
     if (l_service_fee_used) {
@@ -716,8 +739,11 @@ static dap_chain_datum_tx_t *s_xchange_tx_create_exchange(dap_chain_net_srv_xcha
             log_it(L_ERROR, "Can't add net fee output");
             return NULL;
         }
-        debug_if(s_debug_more, L_NOTICE, "l_service_fee = %s %s", dap_chain_balance_to_coins(l_net_fee),
-                                                       l_service_ticker ? l_service_ticker : "UNKNOWN");
+        if (s_debug_more) {
+            char *l_srv_fee_str; dap_uint256_to_char(l_service_fee, &l_srv_fee_str);
+            log_it(L_NOTICE, "l_service_fee = %s %s", 
+                             l_srv_fee_str, l_service_ticker ? l_service_ticker : "<undefined>");
+        }
     }
     // coin back
     SUBTRACT_256_256(l_value_transfer, l_value_need, &l_value_back);
@@ -728,8 +754,12 @@ static dap_chain_datum_tx_t *s_xchange_tx_create_exchange(dap_chain_net_srv_xcha
             return NULL;
         }
     }
-    debug_if(s_debug_more, L_NOTICE, "l_value_transfer = %s", dap_chain_balance_to_coins(l_value_transfer));
-    debug_if(s_debug_more, L_NOTICE, "l_value_back = %s", dap_chain_balance_to_coins(l_value_back));
+    if (s_debug_more) {
+        char *l_value_transfer_str; dap_uint256_to_char(l_value_transfer, &l_value_transfer_str);
+        log_it(L_NOTICE, "l_value_transfer = %s", l_value_transfer_str);
+        char *l_value_back_str; dap_uint256_to_char(l_value_back, &l_value_back_str);
+        log_it(L_NOTICE, "l_value_back = %s", l_value_back_str);
+    }
     // fee back
     if (!l_pay_with_native && !l_buy_with_native) {
         SUBTRACT_256_256(l_fee_transfer, l_total_fee, &l_value_back);
@@ -740,8 +770,12 @@ static dap_chain_datum_tx_t *s_xchange_tx_create_exchange(dap_chain_net_srv_xcha
                 return NULL;
             }
         }
-        debug_if(s_debug_more, L_NOTICE, "l_fee_transfer = %s", dap_chain_balance_to_coins(l_fee_transfer));
-        debug_if(s_debug_more, L_NOTICE, "l_fee_back = %s", dap_chain_balance_to_coins(l_value_back));
+        if (s_debug_more) {
+            char *l_fee_transfer_str; dap_uint256_to_char(l_fee_transfer, &l_fee_transfer_str);
+            log_it(L_NOTICE, "l_fee_transfer = %s", l_fee_transfer_str);
+            char *l_val_back_str; dap_uint256_to_char(l_value_back, &l_val_back_str);
+            log_it(L_NOTICE, "l_cashback = %s", l_val_back_str);
+        }
     }
 
     // add 'sign' items
@@ -753,7 +787,6 @@ static dap_chain_datum_tx_t *s_xchange_tx_create_exchange(dap_chain_net_srv_xcha
         return NULL;
     }
     dap_enc_key_delete(l_buyer_key);
-
     return l_tx;
 }
 
@@ -1226,9 +1259,9 @@ static int s_cli_srv_xchange_order(int a_argc, char **a_argv, int a_arg_index, v
                 dap_chain_datum_tx_t * l_tx = dap_chain_net_get_tx_by_hash(l_net, &l_order_tx_hash, TX_SEARCH_TYPE_NET);
                 if( l_tx){
                     int l_rc = s_tx_check_for_open_close(l_net,l_tx);
-                    char *l_tx_hash = dap_chain_hash_fast_to_str_new(&l_order_tx_hash);
                     if(l_rc == 0){
-                        dap_cli_server_cmd_set_reply_text(a_str_reply, "WRONG TX %s", l_tx_hash);
+                        dap_cli_server_cmd_set_reply_text(a_str_reply, "WRONG TX %s",
+                            dap_chain_hash_fast_to_str_static(&l_order_tx_hash));
                     }else{
                         dap_string_t * l_str_reply = dap_string_new("");
                         dap_string_append_printf(l_str_reply, "Order %s hisrory:\n\n", l_order_hash_str);
@@ -1312,10 +1345,9 @@ static int s_cli_srv_xchange_order(int a_argc, char **a_argv, int a_arg_index, v
                 case XCHANGE_REMOVE_ERROR_CAN_NOT_INVALIDATE_TX: {
                     dap_chain_datum_tx_t *l_cond_tx = dap_ledger_tx_find_by_hash(l_net->pub.ledger, &l_tx_hash);
                     dap_chain_net_srv_xchange_price_t *l_price = s_xchange_price_from_order(l_net, l_cond_tx, &l_fee, false);
-                    char *l_finaly_tx_hash_str = dap_chain_hash_fast_to_str_new(&l_price->tx_hash);
-                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't create invalidate transaction from: %s\n", l_finaly_tx_hash_str);
+                    char *l_final_tx_hash_str = dap_chain_hash_fast_to_str_static(&l_price->tx_hash);
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't create invalidate transaction from: %s\n", l_final_tx_hash_str);
                     DAP_DELETE(l_price);
-                    DAP_DELETE(l_finaly_tx_hash_str);
                 } break;
                 default:
                     dap_cli_server_cmd_set_reply_text(a_str_reply, "An error occurred with an unknown code: %d.", l_ret_code);
@@ -1357,8 +1389,7 @@ static int s_cli_srv_xchange_order(int a_argc, char **a_argv, int a_arg_index, v
             }
 
             // TODO add filters to list (tokens, network, etc.)
-            dap_chain_net_srv_xchange_price_t * l_price = NULL;
-            l_price = s_xchange_price_from_order(l_net, l_tx, NULL, true);
+            dap_chain_net_srv_xchange_price_t *l_price = s_xchange_price_from_order(l_net, l_tx, NULL, true);
             if( !l_price ){
                 dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't get price from order");
                 return -18;
@@ -1388,15 +1419,11 @@ static int s_cli_srv_xchange_order(int a_argc, char **a_argv, int a_arg_index, v
 
             dap_hash_fast_t l_tx_hash = {};
             dap_hash_fast(l_tx, dap_chain_datum_tx_get_size(l_tx), &l_tx_hash);
-            char *l_tx_hash_str = dap_chain_hash_fast_to_str_new(&l_tx_hash);
 
-            char *l_amount_coins_str = l_out_cond_last_tx ? dap_chain_balance_to_coins(l_out_cond_last_tx->header.value) : NULL;
-            char *l_amount_datoshi_str = l_out_cond_last_tx ? dap_chain_balance_print(l_out_cond_last_tx->header.value) : NULL;
-            char *l_percent_completed_str = NULL;
+            char *l_amount_coins_str = "0.0", *l_amount_datoshi_str = "0", *l_percent_completed_str = NULL;
 
             uint256_t l_percent_completed = {};
             if(l_out_cond_last_tx){
-
                 SUBTRACT_256_256(l_out_cond->header.value, l_out_cond_last_tx->header.value, &l_percent_completed);
                 DIV_256_COIN(l_percent_completed, l_out_cond->header.value, &l_percent_completed);
                 MULT_256_COIN(l_percent_completed, dap_chain_coins_to_balance("100.0"), &l_percent_completed);
@@ -1414,31 +1441,35 @@ static int s_cli_srv_xchange_order(int a_argc, char **a_argv, int a_arg_index, v
                 }
             }
 
-            l_percent_completed_str = dap_chain_balance_to_coins(l_percent_completed);
+            l_percent_completed_str = dap_chain_balance_to_coins(l_percent_completed); // must be free'd
             size_t l_str_len = strlen(l_percent_completed_str);
-            char*  l_dot_pos = strstr(l_percent_completed_str, ".");
+            char*  l_dot_pos = strchr(l_percent_completed_str, '.');
             if (l_dot_pos && (l_str_len - (l_dot_pos - l_percent_completed_str)) > 2){
                 *(char*)(l_dot_pos + 3) = '\0';
             }
 
+            l_cp_rate = dap_chain_balance_to_coins(l_price->rate); // must be free'd
+
             char l_tmp_buf[DAP_TIME_STR_SIZE] = {};
             dap_time_t l_ts_create = (dap_time_t)l_tx->header.ts_created;
             dap_time_to_str_rfc822(l_tmp_buf, DAP_TIME_STR_SIZE, l_ts_create);
             l_tmp_buf[strlen(l_tmp_buf) - 1] = '\0';
 
-            dap_cli_server_cmd_set_reply_text(a_str_reply, "orderHash: %s\n ts_created: %s (%"DAP_UINT64_FORMAT_U")\n Status: %s, amount: %s (%s) %s, filled: %s%%, rate (%s/%s): %s, net: %s\n\n", l_tx_hash_str,
+            if (l_out_cond_last_tx) {
+                l_amount_datoshi_str = dap_uint256_to_char(l_out_cond_last_tx->header.value, &l_amount_coins_str);
+            }
+
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "orderHash: %s\n ts_created: %s (%"DAP_UINT64_FORMAT_U")\n Status: %s, amount: %s (%s) %s, filled: %s%%, rate (%s/%s): %s, net: %s\n\n",
+                                     dap_chain_hash_fast_to_str_static(&l_tx_hash),
                                      l_tmp_buf, l_ts_create, l_status_order,
                                      l_amount_coins_str ? l_amount_coins_str : "0.0",
                                      l_amount_datoshi_str ? l_amount_datoshi_str : "0",
                                      l_price->token_sell, l_percent_completed_str,
                                      l_price->token_buy, l_price->token_sell,
-                                     l_cp_rate = dap_chain_balance_to_coins(l_price->rate),
+                                     l_cp_rate,
                                      l_price->net->pub.name);
 
-            DAP_DEL_Z(l_tx_hash_str);
             DAP_DEL_Z(l_percent_completed_str);
-            DAP_DEL_Z(l_amount_coins_str);
-            DAP_DEL_Z(l_amount_datoshi_str);
             DAP_DEL_Z(l_cp_rate);
             DAP_DEL_Z(l_price);
         } break;
@@ -1593,10 +1624,9 @@ static bool s_string_append_tx_cond_info( dap_string_t * a_reply_str,
     size_t l_tx_size = dap_chain_datum_tx_get_size(a_tx);
 
     dap_hash_fast_t l_tx_hash = {0};
-    char l_tx_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE+1];
 
     dap_hash_fast(a_tx, l_tx_size, &l_tx_hash);
-    dap_chain_hash_fast_to_str(&l_tx_hash, l_tx_hash_str, DAP_CHAIN_HASH_FAST_STR_SIZE + 1);
+    char *l_tx_hash_str = dap_chain_hash_fast_to_str_static(&l_tx_hash);
 
     // Get input token ticker
     const char * l_tx_input_ticker = dap_ledger_tx_get_token_ticker_by_hash(
@@ -1620,11 +1650,9 @@ static bool s_string_append_tx_cond_info( dap_string_t * a_reply_str,
 
     switch(l_tx_type){
         case TX_TYPE_ORDER:{
-            uint256_t l_value_from = l_out_cond_item->header.value;
-            uint256_t l_rate = l_out_cond_item->subtype.srv_xchange.rate;
-            char *l_rate_str = dap_chain_balance_to_coins(l_rate);
-            char *l_amount_str = dap_chain_balance_to_coins(l_value_from);
-            char *l_amount_datoshi_str = dap_chain_balance_print(l_value_from);
+            char *l_rate_str = dap_chain_balance_to_coins(l_out_cond_item->subtype.srv_xchange.rate),
+                 *l_amount_str, 
+                 *l_amount_datoshi_str = dap_uint256_to_char(l_out_cond_item->header.value, &l_amount_str);
 
             dap_string_append_printf(a_reply_str, "Hash: %s\n", l_tx_hash_str);
             if(a_print_ts){
@@ -1637,34 +1665,28 @@ static bool s_string_append_tx_cond_info( dap_string_t * a_reply_str,
             dap_string_append_printf(a_reply_str, "  proposed %s (%s) %s for exchange to %s,", l_amount_str, l_amount_datoshi_str, l_tx_input_ticker, l_out_cond_item->subtype.srv_xchange.buy_token);
             dap_string_append_printf(a_reply_str, "  rate (%s/%s): %s, net: %s", l_out_cond_item->subtype.srv_xchange.buy_token, l_tx_input_ticker, l_rate_str, a_net->pub.name);
 
-            DAP_DELETE(l_amount_str);
             DAP_DELETE(l_rate_str);
-            DAP_DELETE(l_amount_datoshi_str);
         } break;
         case TX_TYPE_EXCHANGE:{
-            dap_chain_tx_in_cond_t * l_in_cond = (dap_chain_tx_in_cond_t *)dap_chain_datum_tx_item_get(a_tx, NULL, TX_ITEM_TYPE_IN_COND , NULL);
+            dap_chain_tx_in_cond_t *l_in_cond 
+                = (dap_chain_tx_in_cond_t*)dap_chain_datum_tx_item_get(a_tx, NULL, TX_ITEM_TYPE_IN_COND , NULL);
             char l_tx_prev_cond_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
-            dap_hash_fast_to_str(&l_in_cond->header.tx_prev_hash,l_tx_prev_cond_hash_str, sizeof(l_tx_prev_cond_hash_str));
+            dap_hash_fast_to_str(&l_in_cond->header.tx_prev_hash, l_tx_prev_cond_hash_str, sizeof(l_tx_prev_cond_hash_str));
+
+            uint256_t l_rate = l_out_cond_item 
+                ? l_out_cond_item->subtype.srv_xchange.rate
+                : l_out_prev_cond_item->subtype.srv_xchange.rate,
+                     l_value_from = {}, l_value_to = {};
 
-            uint256_t l_rate = l_out_cond_item ? l_out_cond_item->subtype.srv_xchange.rate : l_out_prev_cond_item->subtype.srv_xchange.rate;
-            uint256_t l_value_from = {};
-            uint256_t l_value_to = {};
             if (l_out_cond_item)
                 SUBTRACT_256_256(l_out_prev_cond_item->header.value, l_out_cond_item->header.value, &l_value_from);
             else
                 l_value_from = l_out_prev_cond_item->header.value;
             MULT_256_COIN(l_value_from, l_rate, &l_value_to);
 
-            char *l_value_from_str = dap_chain_balance_to_coins(l_value_from);
-            char *l_value_from_datoshi_str = dap_chain_balance_print(l_value_from);
-            char *l_value_to_str = dap_chain_balance_to_coins(l_value_to);
-            char *l_value_to_datoshi_str = dap_chain_balance_print(l_value_to);
-
-
-            char *l_rate_str = dap_chain_balance_to_coins(l_rate);
-            char *l_amount_str = l_out_cond_item ? dap_chain_balance_to_coins(l_out_cond_item->header.value) : dap_chain_balance_to_coins(uint256_0);
-            char *l_amount_datoshi_str = l_out_cond_item ? dap_chain_balance_print(l_out_cond_item->header.value) : dap_chain_balance_print(uint256_0);
-            char *l_buy_ticker = l_out_cond_item ? l_out_cond_item->subtype.srv_xchange.buy_token : l_out_prev_cond_item->subtype.srv_xchange.buy_token;
+            char *l_buy_ticker = l_out_cond_item 
+                ? l_out_cond_item->subtype.srv_xchange.buy_token
+                : l_out_prev_cond_item->subtype.srv_xchange.buy_token;
 
             dap_string_append_printf(a_reply_str, "Hash: %s\n", l_tx_hash_str);
             if(a_print_ts){
@@ -1674,28 +1696,27 @@ static bool s_string_append_tx_cond_info( dap_string_t * a_reply_str,
             }
             if(a_print_status)
                 dap_string_append_printf(a_reply_str, "  Status: %s,", l_is_closed ? "inactive" : "active");
-            dap_string_append_printf(a_reply_str, "  changed %s (%s) %s for %s (%s) %s,", l_value_from_str, l_value_from_datoshi_str, l_tx_input_ticker, l_value_to_str, l_value_to_datoshi_str, l_buy_ticker);
+            
+            char *l_value_from_str, *l_value_from_datoshi_str = dap_uint256_to_char(l_value_from, &l_value_from_str);
+            dap_string_append_printf(a_reply_str, "  changed %s (%s) %s", l_value_from_str, l_value_from_datoshi_str, l_tx_input_ticker);
+
+            char *l_value_to_str, *l_value_to_datoshi_str = dap_uint256_to_char(l_value_to, &l_value_to_str);
+            dap_string_append_printf(a_reply_str, " for %s (%s) %s,", l_value_to_str, l_value_to_datoshi_str, l_buy_ticker);
+
+            char *l_rate_str; dap_uint256_to_char(l_rate, &l_rate_str);
             dap_string_append_printf(a_reply_str, "  rate (%s/%s): %s,", l_buy_ticker, l_tx_input_ticker, l_rate_str);
+
+            char *l_amount_str = "0.0",
+                 *l_amount_datoshi_str = l_out_cond_item ? dap_uint256_to_char(l_out_cond_item->header.value, &l_amount_str) : "0";
             dap_string_append_printf(a_reply_str, "  remain amount %s (%s) %s, net: %s", l_amount_str, l_amount_datoshi_str, l_tx_input_ticker, a_net->pub.name);
             if(a_print_prev_hash)
                 dap_string_append_printf(a_reply_str, "\n  Prev cond: %s", l_tx_prev_cond_hash_str);
-
-            DAP_DELETE(l_value_from_str);
-            DAP_DELETE(l_value_from_datoshi_str);
-            DAP_DELETE(l_value_to_str);
-            DAP_DELETE(l_value_to_datoshi_str);
-            DAP_DELETE(l_amount_str);
-            DAP_DELETE(l_rate_str);
-            DAP_DELETE(l_amount_datoshi_str);
         } break;
         case TX_TYPE_INVALIDATE:{
             dap_chain_tx_in_cond_t * l_in_cond = (dap_chain_tx_in_cond_t *)dap_chain_datum_tx_item_get(a_tx, NULL, TX_ITEM_TYPE_IN_COND , NULL);
             char l_tx_prev_cond_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE];
             dap_hash_fast_to_str(&l_in_cond->header.tx_prev_hash,l_tx_prev_cond_hash_str, sizeof(l_tx_prev_cond_hash_str));
 
-            char *l_value_from_str = dap_chain_balance_to_coins(l_out_prev_cond_item->header.value);
-            char *l_value_from_datoshi_str = dap_chain_balance_print(l_out_prev_cond_item->header.value);
-
             dap_string_append_printf(a_reply_str, "Hash: %s\n", l_tx_hash_str);
             if(a_print_ts){
                 char l_tmp_buf[DAP_TIME_STR_SIZE];
@@ -1704,12 +1725,10 @@ static bool s_string_append_tx_cond_info( dap_string_t * a_reply_str,
             }
             if (a_print_status)
                 dap_string_append_printf(a_reply_str, "  Status: inactive,");
+            char *l_value_from_str, *l_value_from_datoshi_str = dap_uint256_to_char(l_out_prev_cond_item->header.value, &l_value_from_str);
             dap_string_append_printf(a_reply_str, "  returned %s(%s) %s to owner", l_value_from_str, l_value_from_datoshi_str, l_tx_input_ticker);
             if(a_print_prev_hash)
                 dap_string_append_printf(a_reply_str, "\n  Prev cond: %s", l_tx_prev_cond_hash_str);
-
-            DAP_DELETE(l_value_from_str);
-            DAP_DELETE(l_value_from_datoshi_str);
         } break;
         default: return false;
     }
@@ -1899,11 +1918,7 @@ static int s_cli_srv_xchange(int a_argc, char **a_argv, void **a_str_reply)
 
                 dap_hash_fast_t l_tx_hash = {};
                 dap_hash_fast(l_tx, dap_chain_datum_tx_get_size(l_tx), &l_tx_hash);
-                char *l_tx_hash_str = dap_chain_hash_fast_to_str_new(&l_tx_hash);
-
-                char *l_amount_coins_str = l_out_cond_last_tx ? dap_chain_balance_to_coins(l_out_cond_last_tx->header.value) : NULL;
-                char *l_amount_datoshi_str = l_out_cond_last_tx ? dap_chain_balance_print(l_out_cond_last_tx->header.value) : NULL;
-                char *l_percent_completed_str = NULL;
+                char *l_tx_hash_str = dap_chain_hash_fast_to_str_static(&l_tx_hash);
 
                 uint256_t l_percent_completed = {};
                 if(l_out_cond_last_tx){
@@ -1925,7 +1940,7 @@ static int s_cli_srv_xchange(int a_argc, char **a_argv, void **a_str_reply)
                     }
                 }
 
-                l_percent_completed_str = dap_chain_balance_to_coins(l_percent_completed);
+                char *l_percent_completed_str = dap_chain_balance_to_coins(l_percent_completed);
                 size_t l_str_len = strlen(l_percent_completed_str);
                 char*  l_dot_pos = strstr(l_percent_completed_str, ".");
                 if (l_dot_pos && (l_str_len - (l_dot_pos - l_percent_completed_str)) > 2){
@@ -1937,20 +1952,20 @@ static int s_cli_srv_xchange(int a_argc, char **a_argv, void **a_str_reply)
                 dap_time_to_str_rfc822(l_tmp_buf, DAP_TIME_STR_SIZE, l_ts_create);
                 l_tmp_buf[strlen(l_tmp_buf) - 1] = '\0';
 
+                l_cp_rate = dap_chain_balance_to_coins(l_price->rate);
+
+                char *l_amount_coins_str = "0.0",
+                     *l_amount_datoshi_str = l_out_cond_last_tx ? dap_uint256_to_char(l_out_cond_last_tx->header.value, &l_amount_coins_str) : "0";
                 dap_string_append_printf(l_reply_str, "orderHash: %s\n ts_created: %s (%"DAP_UINT64_FORMAT_U")\n Status: %s, amount: %s (%s) %s, filled: %s%%, rate (%s/%s): %s, net: %s\n\n", l_tx_hash_str,
                                          l_tmp_buf, l_ts_create, l_status_order,
                                          l_amount_coins_str ? l_amount_coins_str : "0.0",
                                          l_amount_datoshi_str ? l_amount_datoshi_str : "0",
                                          l_price->token_sell, l_percent_completed_str,
                                          l_price->token_buy, l_price->token_sell,
-                                         l_cp_rate = dap_chain_balance_to_coins(l_price->rate),
+                                         l_cp_rate,
                                          l_price->net->pub.name);
                 l_printed_orders_count++;
-                DAP_DEL_Z(l_tx_hash_str);
-                DAP_DEL_Z(l_amount_coins_str);
-                DAP_DEL_Z(l_amount_datoshi_str);
-                DAP_DEL_Z(l_cp_rate);
-                DAP_DEL_Z(l_price);
+                DAP_DEL_MULTY(l_cp_rate, l_price, l_percent_completed_str);
             }
             dap_list_free(l_tx_list);
             if (!l_reply_str->len) {
@@ -2241,14 +2256,14 @@ static int s_cli_srv_xchange(int a_argc, char **a_argv, void **a_str_reply)
                     if (!IS_ZERO_256(l_total_rates_count))
                         DIV_256(l_total_rates,l_total_rates_count,&l_rate_average);
 
-                    char *l_rate_average_str = dap_chain_balance_to_coins(l_rate_average);
-                    char *l_last_rate_str = dap_chain_balance_to_coins(l_rate);
                     char l_tmp_buf[DAP_TIME_STR_SIZE];
                     dap_time_to_str_rfc822(l_tmp_buf, DAP_TIME_STR_SIZE, l_last_rate_time);
                     l_tmp_buf[strlen(l_tmp_buf) - 1] = '\0';
-                    dap_string_append_printf(l_reply_str,"Average rate: %s   \n\rLast rate: %s Last rate time: %s (%"DAP_UINT64_FORMAT_U")", l_rate_average_str, l_last_rate_str, l_tmp_buf, l_last_rate_time);
-                    DAP_DELETE(l_rate_average_str);
-                    DAP_DELETE(l_last_rate_str);
+                    char *l_rate_average_str; dap_uint256_to_char(l_rate_average, &l_rate_average_str);
+                    dap_string_append_printf(l_reply_str,"Average rate: %s   \r\n", l_rate_average_str);
+                    char *l_last_rate_str; dap_uint256_to_char(l_rate, &l_last_rate_str);
+                    dap_string_append_printf(l_reply_str, "Last rate: %s Last rate time: %s (%"DAP_UINT64_FORMAT_U")",
+                                             l_last_rate_str, l_tmp_buf, l_last_rate_time);
                     *a_str_reply = dap_string_free(l_reply_str, false);
                     break;
                 }else if (strcmp(l_price_subcommand,"history") == 0){
@@ -2389,31 +2404,15 @@ json_object *dap_chain_net_srv_xchange_print_fee_json(dap_chain_net_t *a_net) {
     dap_chain_addr_t l_addr = {0};
     uint16_t l_type = 0;
     if (s_srv_xchange_get_fee(a_net->pub.id, &l_fee, &l_addr, &l_type)) {
-        char *l_fee_balance = dap_chain_balance_print(l_fee);
-        char *l_fee_coins = dap_chain_balance_to_coins(l_fee);
-        char *l_addr_str = dap_chain_addr_to_str(&l_addr);
-        const char *l_type_str = dap_chain_net_srv_fee_type_to_str((dap_chain_net_srv_fee_type_t)l_type);
+        char *l_fee_coins, *l_fee_balance = dap_uint256_to_char(l_fee, &l_fee_coins);
         json_object *l_jobj_xchange = json_object_new_object();
-        json_object *l_jobj_balance = json_object_new_string(l_fee_balance);
-        json_object *l_jobj_coins = json_object_new_string(l_fee_coins);
-        json_object *l_jobj_addr = json_object_new_string(l_addr_str);
-        json_object *l_jobj_type = json_object_new_string(l_type_str);
-        if (!l_jobj_xchange || !l_jobj_balance || !l_jobj_coins || !l_jobj_addr || !l_jobj_type) {
-            json_object_put(l_jobj_xchange);
-            json_object_put(l_jobj_balance);
-            json_object_put(l_jobj_coins);
-            json_object_put(l_jobj_addr);
-            json_object_put(l_jobj_type);
-            return NULL;
-        }
-        json_object_object_add(l_jobj_xchange, "coin", l_jobj_coins);
-        json_object_object_add(l_jobj_xchange, "balance", l_jobj_balance);
-        json_object_object_add(l_jobj_xchange, "addr", l_jobj_addr);
-        json_object_object_add(l_jobj_xchange, "type", l_jobj_type);
+        json_object_object_add(l_jobj_xchange, "coin",      json_object_new_string(l_fee_coins));
+        json_object_object_add(l_jobj_xchange, "balance",   json_object_new_string(l_fee_balance));
+        json_object_object_add(l_jobj_xchange, "addr",      json_object_new_string(dap_chain_addr_to_str(&l_addr)));
+        json_object_object_add(l_jobj_xchange, "type",      json_object_new_string(dap_chain_net_srv_fee_type_to_str((dap_chain_net_srv_fee_type_t)l_type)));
         return l_jobj_xchange;
     } else {
-        json_object *l_jobj_str = json_object_new_string("service has not announced a commission fee");
-        return l_jobj_str;
+        return json_object_new_string("service has not announced a commission fee");
     }
 }
 
@@ -2424,14 +2423,13 @@ void dap_chain_net_srv_xchange_print_fee(dap_chain_net_t *a_net, dap_string_t *a
     dap_chain_addr_t l_addr = {0};
     uint16_t l_type = 0;
     if (s_srv_xchange_get_fee(a_net->pub.id, &l_fee, &l_addr, &l_type)) {
-        char *l_fee_balance = dap_chain_balance_print(l_fee);
-        char *l_fee_coins = dap_chain_balance_to_coins(l_fee);
-        char *l_addr_str = dap_chain_addr_to_str(&l_addr);
-        const char *l_type_str = dap_chain_net_srv_fee_type_to_str((dap_chain_net_srv_fee_type_t)l_type);
+        char *l_fee_coins, *l_fee_balance = dap_uint256_to_char(l_fee, &l_fee_coins);
         dap_string_append_printf(a_string_ret, "\txchange:\n"
                                                "\t\tFee: %s (%s)\n"
                                                "\t\tAddr: %s\n"
-                                               "\t\tType: %s\n", l_fee_coins, l_fee_balance, l_addr_str, l_type_str);
+                                               "\t\tType: %s\n",
+                                l_fee_coins, l_fee_balance, dap_chain_addr_to_str(&l_addr),
+                                dap_chain_net_srv_fee_type_to_str((dap_chain_net_srv_fee_type_t)l_type));
     } else {
         dap_string_append_printf(a_string_ret, "\txchange:\n"
                                                "\t\tThe xchanger service has not announced a commission fee.\n");
diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index 01fc8e8c3c484ca2df6b188408da22f683b63e90..c1df202f3b46dc6de89103b55cb1fbe099ec5828 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -466,10 +466,9 @@ static void s_print_autocollect_table(dap_chain_net_t *a_net, dap_string_t *a_re
     uint256_t l_total_value = uint256_0;
     for (size_t i = 0; i < l_objs_count; i++) {
         dap_global_db_obj_t *l_obj_cur = l_objs + i;
-        uint256_t l_cur_value = *(uint256_t *)l_obj_cur->value;
-        char *l_value_str = dap_chain_balance_to_coins(l_cur_value);
+        uint256_t l_cur_value = *(uint256_t*)l_obj_cur->value;
+        char *l_value_str; dap_uint256_to_char(l_cur_value, &l_value_str);
         dap_string_append_printf(a_reply_str, "%s\t%s\n", l_obj_cur->key, l_value_str);
-        DAP_DEL_Z(l_value_str);
         SUM_256_256(l_total_value, l_cur_value, &l_total_value);
     }
     if (l_objs_count) {
@@ -495,10 +494,7 @@ static void s_print_autocollect_table(dap_chain_net_t *a_net, dap_string_t *a_re
         char *l_fee_str = dap_chain_balance_to_coins(l_collect_fee);
         dap_string_append_printf(a_reply_str, "\nTotal prepared value: %s %s, where\n\tprofit is %s, tax is %s, fee is %s\n",
                                  l_total_str, a_net->pub.native_ticker, l_profit_str, l_tax_str, l_fee_str);
-        DAP_DEL_Z(l_total_str);
-        DAP_DEL_Z(l_profit_str);
-        DAP_DEL_Z(l_tax_str);
-        DAP_DEL_Z(l_fee_str);
+        DAP_DEL_MULTY(l_total_str, l_profit_str, l_tax_str, l_fee_str);
     } else
         dap_string_append(a_reply_str, "Empty\n");
 }
@@ -969,9 +965,8 @@ static int s_cli_blocks(int a_argc, char ** a_argv, void **a_str_reply)
                     break;
                 } else if (dap_cli_server_cmd_check_option(a_argv, arg_index, a_argc, "show") >= 0) {
                     uint256_t l_cur_reward = dap_chain_net_get_reward(l_net, UINT64_MAX);
-                    char *l_reward_str = dap_chain_balance_to_coins(l_cur_reward);
+                    char *l_reward_str; dap_uint256_to_char(l_cur_reward, &l_reward_str);
                     dap_cli_server_cmd_set_reply_text(a_str_reply, "Current base block reward is %s\n", l_reward_str);
-                    DAP_DEL_Z(l_reward_str);
                     break;
                 } else if (dap_cli_server_cmd_check_option(a_argv, arg_index, a_argc, "collect") == -1) {
                     dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'block reward' requires subcommands 'set' or 'show' or 'collect'");
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index 931a8dcc86c65c36ec7ae3e6154a5bbc482b3b5a..e670ddea7d3902c76f15cf7aa22b452541dfcafe 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -1004,11 +1004,8 @@ dap_chain_cs_dag_event_item_t* s_dag_proc_treshold(dap_chain_cs_dag_t * a_dag)
     HASH_ITER(hh, PVT(a_dag)->events_treshold, l_event_item, l_event_item_tmp) {
         dap_dag_threshold_verification_res_t ret = dap_chain_cs_dag_event_verify_hashes_with_treshold(a_dag, l_event_item->event);
         if (ret == DAP_THRESHOLD_OK) {
-            if (s_debug_more) {
-                char * l_event_hash_str = dap_chain_hash_fast_to_str_new(&l_event_item->hash);
-                log_it(L_DEBUG, "Processing event (threshold): %s...", l_event_hash_str);
-                DAP_DELETE(l_event_hash_str);
-            }
+            debug_if(s_debug_more, L_DEBUG, "Processing event (threshold): %s...",
+                    dap_chain_hash_fast_to_str_static(&l_event_item->hash));
             int l_add_res = s_dap_chain_add_atom_to_events_table(a_dag, l_event_item);
             HASH_DEL(PVT(a_dag)->events_treshold, l_event_item);
             if (!l_add_res) {
@@ -1261,17 +1258,17 @@ static dap_chain_atom_ptr_t* s_chain_callback_atom_iter_get_links( dap_chain_ato
                     l_ret[i] = l_link_item->event;
                     (*a_links_size_array)[i] = l_link_item->event_size;
                 }else {
-                    char * l_link_hash_str = dap_chain_hash_fast_to_str_new(l_link_hash);
-                    char * l_event_hash_str = l_event_item ? dap_chain_hash_fast_to_str_new(&l_event_item->hash) : NULL;
-                    log_it(L_ERROR,"Can't find %s->%s links", l_event_hash_str ? l_event_hash_str : "[null]", l_link_hash_str);
-                    DAP_DEL_Z(l_event_hash_str);
-                    DAP_DELETE(l_link_hash_str);
+                    char l_err_str[256];
+                    unsigned l_off = dap_snprintf(l_err_str, sizeof(l_err_str), "Can't find %s -> ",
+                        dap_chain_hash_fast_to_str_static(l_link_hash));
+                    dap_snprintf(l_err_str + l_off, sizeof(l_err_str) - l_off, "%s links",
+                        l_event_item ? dap_chain_hash_fast_to_str_static(&l_event_item->hash) : "<null>");
+                    log_it(L_ERROR, "%s", l_err_str);
                     (*a_links_size_array)--;
                 }
             }
-            if(!(*a_links_size_array)){
-                DAP_DELETE(l_ret);
-                l_ret = NULL;
+            if(!(*a_links_size_array)) {
+                DAP_DEL_Z(l_ret);
             }
             return l_ret;
         }
@@ -1846,11 +1843,9 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                         dap_string_append_printf(l_str_tmp,
                             "\tRound info:\n\t\tsigns reject: %d\n",
                             l_round_item->round_info.reject_count);
-                        char * l_hash_str = dap_chain_hash_fast_to_str_new(&l_round_item->round_info.datum_hash);
-                        dap_string_append_printf(l_str_tmp, "\t\tdatum_hash: %s\n", l_hash_str);
-                        DAP_DELETE(l_hash_str);
                         dap_time_to_str_rfc822(buf, 50, l_round_item->round_info.ts_update);
-                        dap_string_append_printf(l_str_tmp,"\t\tts_update: %s\n", buf);
+                        dap_string_append_printf(l_str_tmp, "\t\tdatum_hash: %s\n\t\tts_update: %s\n",
+                            dap_chain_hash_fast_to_str_static(&l_round_item->round_info.datum_hash), buf);
                     }
 
                      // Header
@@ -1867,9 +1862,8 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                     for (uint16_t i=0; i < l_event->header.hash_count; i++){
                         dap_chain_hash_fast_t * l_hash = (dap_chain_hash_fast_t *) (l_event->hashes_n_datum_n_signs +
                                 i*sizeof (dap_chain_hash_fast_t));
-                        char * l_hash_str = dap_chain_hash_fast_to_str_new(l_hash);
-                        dap_string_append_printf(l_str_tmp,"\t\t\t\thash: %s\n",l_hash_str);
-                        DAP_DELETE(l_hash_str);
+                        dap_string_append_printf(l_str_tmp,"\t\t\t\thash: %s\n",
+                            dap_chain_hash_fast_to_str_static(l_hash));
                     }
                     size_t l_offset =  l_event->header.hash_count*sizeof (dap_chain_hash_fast_t);
                     dap_chain_datum_t * l_datum = (dap_chain_datum_t*) (l_event->hashes_n_datum_n_signs + l_offset);
@@ -1896,17 +1890,15 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                             break;
                         }
                         dap_chain_hash_fast_t l_pkey_hash;
-                        char *l_hash_str;
                         dap_sign_get_pkey_hash(l_sign, &l_pkey_hash);
-                        if (!dap_strcmp(l_hash_out_type, "hex"))
-                            l_hash_str = dap_chain_hash_fast_to_str_new(&l_pkey_hash);
-                        else
-                            l_hash_str = dap_enc_base58_encode_hash_to_str(&l_pkey_hash);
+                        char *l_hash_str = dap_strcmp(l_hash_out_type, "hex")
+                            ? dap_enc_base58_encode_hash_to_str_static(&l_pkey_hash)
+                            : dap_chain_hash_fast_to_str_static(&l_pkey_hash);
+
                         dap_string_append_printf(l_str_tmp,"\t\t\t\t\t\ttype: %s\tpkey_hash: %s"
                                                            "\n", dap_sign_type_to_str( l_sign->header.type ),
                                                  l_hash_str );
                         l_offset += l_sign_size;
-                        DAP_DELETE( l_hash_str);
                     }
                     dap_chain_datum_dump(l_str_tmp, l_datum, l_hash_out_type, l_net->pub.id);
 
@@ -1962,10 +1954,9 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                     HASH_ITER(hh,PVT(l_dag)->events,l_event_item, l_event_item_tmp ) {
                         char buf[50];
                         dap_time_to_str_rfc822(buf, 50, l_event_item->event->header.ts_created);
-                        char * l_event_item_hash_str = dap_chain_hash_fast_to_str_new( &l_event_item->hash);
                         dap_string_append_printf(l_str_tmp,"\t%s: ts_create=%s\n",
-                                                 l_event_item_hash_str, buf);
-                        DAP_DELETE(l_event_item_hash_str);
+                                                 dap_chain_hash_fast_to_str_static( &l_event_item->hash),
+                                                 buf);
                     }
                     size_t l_events_count = HASH_COUNT(PVT(l_dag)->events);
                     pthread_mutex_unlock(&PVT(l_dag)->events_mutex);
@@ -1981,10 +1972,9 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                     HASH_ITER(hh,PVT(l_dag)->events_treshold,l_event_item, l_event_item_tmp ) {
                         char buf[50];
                         dap_time_to_str_rfc822(buf, 50, l_event_item->event->header.ts_created);
-                        char * l_event_item_hash_str = dap_chain_hash_fast_to_str_new( &l_event_item->hash);
                         dap_string_append_printf(l_str_tmp,"\t%s: ts_create=%s\n",
-                                                 l_event_item_hash_str, buf);
-                        DAP_DELETE(l_event_item_hash_str);
+                                                 dap_chain_hash_fast_to_str_static( &l_event_item->hash),
+                                                 buf);
                     }
                     size_t l_events_count = HASH_COUNT(PVT(l_dag)->events_treshold);
                     pthread_mutex_unlock(&PVT(l_dag)->events_mutex);
@@ -2031,10 +2021,10 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                         if ( l_event_size_new ) {
                             dap_chain_hash_fast_t l_event_new_hash;
                             dap_chain_cs_dag_event_calc_hash(l_event, l_event_size_new, &l_event_new_hash);
-                            char * l_event_new_hash_hex_str = dap_chain_hash_fast_to_str_new(&l_event_new_hash);
+                            char * l_event_new_hash_hex_str = dap_chain_hash_fast_to_str_static(&l_event_new_hash);
                             char * l_event_new_hash_base58_str = NULL;
                             if (dap_strcmp(l_hash_out_type, "hex"))
-                                l_event_new_hash_base58_str = dap_enc_base58_encode_hash_to_str(&l_event_new_hash);
+                                l_event_new_hash_base58_str = dap_enc_base58_encode_hash_to_str_static(&l_event_new_hash);
 
                             if (dap_chain_cs_dag_event_gdb_set(l_dag, l_event_new_hash_hex_str, l_event,
                                                                l_event_size_new, l_round_item)) {
@@ -2049,8 +2039,6 @@ static int s_cli_dag(int argc, char ** argv, void **a_str_reply)
                                 ret = -31;
                             }
                             DAP_DELETE(l_event);
-                            DAP_DELETE(l_event_new_hash_hex_str);
-                            DAP_DEL_Z(l_event_new_hash_base58_str);
                         } else {
                             dap_cli_server_cmd_set_reply_text(a_str_reply,
                                                           "Can't sign event %s in round.new\n",