diff --git a/dap-sdk/crypto/include/dap_pkey.h b/dap-sdk/crypto/include/dap_pkey.h
index af9d930a84a25993ca47faef8136b9928874fcea..db9a60720f624dfb1dca1ee95467cbf9a1851512 100755
--- a/dap-sdk/crypto/include/dap_pkey.h
+++ b/dap-sdk/crypto/include/dap_pkey.h
@@ -39,6 +39,20 @@ typedef union dap_pkey_type{
     } type: 16;
     uint16_t raw;
 } dap_pkey_type_t;
+
+DAP_STATIC_INLINE const char *dap_pkey_type_to_str(dap_pkey_type_t a_type){
+    switch (a_type.type) {
+    case PKEY_TYPE_NULL:  return  "PKEY_TYPE_NULL";
+    case PKEY_TYPE_MULTI: return "PKEY_TYPE_MULTI";
+    case PKEY_TYPE_SIGN_BLISS: return "PKEY_TYPE_SIGN_BLISS";
+    case PKEY_TYPE_SIGN_TESLA: return "PKEY_TYPE_SIGN_TESLA";
+    case PKEY_TYPE_SIGN_PICNIC: return "PKEY_TYPE_SIGN_PICNIC";
+    case PKEY_TYPE_SIGN_DILITHIUM: return "PKEY_TYPE_SIGN_DILITHIUM";
+    default: return "UNDEFINED";
+
+    }
+}
+
 /**
   * @struct dap_pkey
   * @brief Public keys
diff --git a/modules/common/include/dap_chain_common.h b/modules/common/include/dap_chain_common.h
index 543931b83efcd28ba6434dbbda3aec4a0faeb3b1..6a94a2241f477e84a4bcb5b397b08017827c38f7 100644
--- a/modules/common/include/dap_chain_common.h
+++ b/modules/common/include/dap_chain_common.h
@@ -165,6 +165,23 @@ typedef enum {
     SERV_UNIT_B = 0x00000011,   // bytes
 } serv_unit_enum_t;
 
+DAP_STATIC_INLINE const char *serv_unit_enum_to_str(serv_unit_enum_t *unit_enum){
+    switch (*unit_enum) {
+    case SERV_UNIT_UNDEFINED: return "SERV_UNIT_UNDEFINED";
+    case SERV_UNIT_MB: return "SERV_UNIT_MB";
+    case SERV_UNIT_SEC: return "SERV_UNIT_SEC";
+    case SERV_UNIT_DAY: return "SERV_UNIT_DAY";
+    case SERV_UNIT_KB: return "SERV_UNIT_KB";
+    case SERV_UNIT_B: return "SERV_UNIT_B";
+    default: return "UNDEFINED";
+
+    }
+//    switch (unit_enum){
+//    case SERV
+//    }
+//    return  "SERV_UNIT_UNDEFINED";
+}
+
 typedef union {
     uint8_t raw[4];
     uint32_t raw_ui32[1];
diff --git a/modules/common/include/dap_chain_datum_tx_out_cond.h b/modules/common/include/dap_chain_datum_tx_out_cond.h
index 519d94ce6d39976230cf3038b523459255557fbf..b0b099572a7b8eb95cd5dcdbb3a36c976b000415 100644
--- a/modules/common/include/dap_chain_datum_tx_out_cond.h
+++ b/modules/common/include/dap_chain_datum_tx_out_cond.h
@@ -35,6 +35,16 @@ typedef enum dap_chain_tx_out_cond_subtype {
     DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE = 0x03
 } dap_chain_tx_out_cond_subtype_t;
 
+DAP_STATIC_INLINE const char *dap_chain_tx_out_cond_subtype_to_str(dap_chain_tx_out_cond_subtype_t a_subtype){
+    switch (a_subtype) {
+    case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY";
+    case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE";
+    case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE: return "DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE";
+    default: return "UNDEFINED";
+
+    }
+}
+
 /**
  * @struct dap_chain_tx_out
  * @brief Transaction item out_cond
diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c
index 827942a812b6932d33a239bb05d2eee8d5040177..fe77c04dfa48adb110b01e45fe6ac6c2f0de3f6d 100644
--- a/modules/net/dap_chain_node_cli_cmd_tx.c
+++ b/modules/net/dap_chain_node_cli_cmd_tx.c
@@ -109,7 +109,10 @@ void _dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
     uint32_t l_tx_items_count = 0;
     uint32_t l_tx_items_size =a_datum->header.tx_items_size;
     char *l_hash_str_tmp = NULL;
+    char l_tmp_buf[70];
     dap_sign_t *l_sign_tmp;
+    dap_chain_hash_fast_t l_pkey_hash_tmp;
+    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);
@@ -124,8 +127,12 @@ void _dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
             break;
         case TX_ITEM_TYPE_OUT:
             dap_string_append_printf(a_str_out, "\t OUT:\n"
-                                                "\t\t Value: %llu\n"
-                                                "\t\t Address: %s\n", ((dap_chain_tx_out_t*)item)->header.value,
+                                                "\t\t Value: %s (%"DAP_UINT64_FORMAT_u")\n"
+                                                "\t\t Address: %s\n",
+                                        dap_chain_balance_to_coins(dap_chain_uint128_from(
+                                                                       ((dap_chain_tx_out_t*)item)->header.value)
+                                                                   ),
+                                        ((dap_chain_tx_out_t*)item)->header.value,
                                         dap_chain_addr_to_str(&((dap_chain_tx_out_t*)item)->addr));
             break;
         case TX_ITEM_TYPE_TOKEN:
@@ -137,12 +144,169 @@ void _dap_chain_datum_tx_out_data(dap_chain_datum_tx_t *a_datum,
                                         ((dap_chain_tx_token_t*)item)->header.token_emission_chain_id.uint64);
             DAP_DELETE(l_hash_str_tmp);
             break;
+        case TX_ITEM_TYPE_TOKEN_EXT:
+            l_hash_str_tmp = dap_chain_hash_fast_to_str_new(&((dap_chain_tx_token_ext_t*)item)->header.ext_tx_hash);
+            dap_string_append_printf(a_str_out, "\t TOKEN EXT:\n"
+                                         "\t\t Version: %u\n"
+                                         "\t\t Ticker: %s\n"
+                                         "\t\t Ext chain id: 0x%016"DAP_UINT64_FORMAT_x"\n"
+                                         "\t\t Ext net id: 0x%016"DAP_UINT64_FORMAT_x"\n"
+                                         "\t\t Ext tx hash: %s\n"
+                                         "\t\t Ext tx out idx: %u\n",
+                                     ((dap_chain_tx_token_ext_t*)item)->header.version,
+                                     ((dap_chain_tx_token_ext_t*)item)->header.ticker,
+                                     ((dap_chain_tx_token_ext_t*)item)->header.ext_chain_id.uint64,
+                                     ((dap_chain_tx_token_ext_t*)item)->header.ext_net_id.uint64,
+                                     l_hash_str_tmp,
+                                     ((dap_chain_tx_token_ext_t*)item)->header.ext_tx_out_idx);
+            DAP_FREE(l_hash_str_tmp);
+            break;
         case TX_ITEM_TYPE_SIG:
             l_sign_tmp = dap_chain_datum_tx_item_sign_get_sig((dap_chain_tx_sig_t*)item);
             dap_string_append_printf(a_str_out, "\t SIG:\n"
                                                 "\t sig_size: %u\n", ((dap_chain_tx_sig_t*)item)->header.sig_size);
             dap_sign_get_information(l_sign_tmp, a_str_out);
             break;
+        case TX_ITEM_TYPE_RECEIPT:
+            dap_string_append_printf(a_str_out, "\t Receipt:\n"
+                                                "\t\t size: %u\n"
+                                                "\t\t ext size:%u\n"
+                                                "\t\t Info:"
+                                                "\t\t\t   units: 0x%016"DAP_UINT64_FORMAT_x"\n"
+                                                "\t\t\t   uid: 0x%016"DAP_UINT64_FORMAT_x"\n"
+                                                "\t\t\t   units type: %s \n"
+                                                "\t\t\t   value: %s (%"DAP_UINT64_FORMAT_u")\n",
+                                     ((dap_chain_datum_tx_receipt_t*)item)->size,
+                                     ((dap_chain_datum_tx_receipt_t*)item)->exts_size,
+                                     ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.units,
+                                     ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.srv_uid.uint64,
+                                     serv_unit_enum_to_str(
+                                         &((dap_chain_datum_tx_receipt_t*)item)->receipt_info.units_type.enm
+                                         ),
+                                     dap_chain_balance_to_coins(
+                                         dap_chain_uint128_from(
+                                             ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.value_datoshi
+                                         )
+                                     ),
+                                     ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.value_datoshi);
+            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);
+                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);
+                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);
+                dap_string_append_printf(a_str_out, "   Client:\n");
+                dap_sign_get_information(l_client, a_str_out);
+            } 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);
+                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");
+                dap_sign_get_information(l_provider, a_str_out);
+            }
+            break;
+        case TX_ITEM_TYPE_PKEY:
+            l_pkey_tmp = (dap_pkey_t*)((dap_chain_tx_pkey_t*)item)->pkey;
+            dap_hash_fast(l_pkey_tmp->pkey, l_pkey_tmp->header.size, &l_pkey_hash_tmp);
+            l_hash_str_tmp = dap_chain_hash_fast_to_str_new(&l_pkey_hash_tmp);
+            dap_string_append_printf(a_str_out, "\t PKey: \n",
+                                                "\t\t SIG type: %s\n"
+                                                "\t\t SIG size: %i\n"
+                                                "\t\t Sequence number: %i \n"
+                                                "\t\t Key: \n"
+                                                "\t\t\t Type: %s\n"
+                                                "\t\t\t Size: %u\n"
+                                                "\t\t\t Hash: %s\n",
+                                     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,
+                                     l_hash_str_tmp);
+            DAP_FREE(l_hash_str_tmp);
+            break;
+        case TX_ITEM_TYPE_IN_COND:
+            l_hash_str_tmp = dap_chain_hash_fast_to_str_new(&((dap_chain_tx_in_t*)item)->header.tx_prev_hash);
+            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_tmp,
+                                     ((dap_chain_tx_in_cond_t*)item)->header.tx_out_prev_idx);
+            DAP_FREE(l_hash_str_tmp);
+            break;
+        case TX_ITEM_TYPE_OUT_COND:
+            dap_string_append_printf(a_str_out, "\t OUT COND:\n"
+                                                "\t Header:\n"
+                                                "\t\t\t ts_expires: %s\t"
+                                                "\t\t\t value: %s (%"DAP_UINT64_FORMAT_u")\n"
+                                                "\t\t\t subtype: %s\n"
+                                                "\t\t SubType:\n",
+                                     dap_ctime_r((time_t*)((dap_chain_tx_out_cond_t*)item)->header.ts_expires, l_tmp_buf),
+                                     dap_chain_balance_to_coins(
+                                         dap_chain_uint128_from(((dap_chain_tx_out_cond_t*)item)->header.value)
+                                     ),
+                                     ((dap_chain_tx_out_cond_t*)item)->header.value,
+                                     dap_chain_tx_out_cond_subtype_to_str(((dap_chain_tx_out_cond_t*)item)->header.subtype));
+            switch (((dap_chain_tx_out_cond_t*)item)->header.subtype) {
+            case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY:
+                l_hash_str_tmp = dap_hash_fast_to_str_new(&((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.pkey_hash);
+                dap_string_append_printf(a_str_out, "\t\t\t unit: 0x%08x\n"
+                                                    "\t\t\t uid: 0x%016"DAP_UINT64_FORMAT_x"\n"
+                                                    "\t\t\t pkey: %s\n"
+                                                    "\t\t\t max price: %s (%"DAP_UINT64_FORMAT_u") \n",
+                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit.uint32,
+                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.srv_uid.uint64,
+                                         l_hash_str_tmp,
+                                         dap_chain_balance_to_coins(dap_chain_uint128_from(
+                                                ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi)
+                                                                    ),
+                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_pay.unit_price_max_datoshi);
+                DAP_FREE(l_hash_str_tmp);
+                break;
+            case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE:
+                dap_string_append_printf(a_str_out, "\t\t\t uid:\n"
+                                                    "\t\t\t addr:\n"
+                                                    "\t\t\t value: %ld",
+                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake.srv_uid.uint64,
+                                         dap_chain_addr_to_str(
+                                             &((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake.fee_addr
+                                             ),
+                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_stake.fee_value);
+                break;
+            case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE:
+                dap_string_append_printf(a_str_out, "\t\t\t uid: 0x%016"DAP_UINT64_FORMAT_x"\n"
+                                                    "\t\t\t net id: 0x%016"DAP_UINT64_FORMAT_x"\n"
+                                                    "\t\t\t token: %s\n"
+                                                    "\t\t\t value: %s (%"DAP_UINT64_FORMAT_u")\n",
+                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.srv_uid.uint64,
+                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.net_id.uint64,
+                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.token,
+                                         dap_chain_balance_to_coins(
+                                             dap_chain_uint128_from(
+                                                 ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.value
+                                                 )
+                                             ),
+                                         ((dap_chain_tx_out_cond_t*)item)->subtype.srv_xchange.value);
+                break;
+            }
+            break;
+        case TX_ITEM_TYPE_OUT_EXT:
+            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 (%"DAP_UINT64_FORMAT_u")\n",
+                                     dap_chain_addr_to_str(&((dap_chain_tx_out_ext_t*)item)->addr),
+                                     ((dap_chain_tx_out_ext_t*)item)->token,
+                                     dap_chain_balance_to_coins(dap_chain_uint128_from(
+                                                                    ((dap_chain_tx_out_ext_t*)item)->header.value)
+                                                                ),
+                                     ((dap_chain_tx_out_ext_t*)item)->header.value);
+            break;
         default:
             dap_string_append_printf(a_str_out, " This transaction have unknown item type \n");
             break;