diff --git a/dap-sdk b/dap-sdk
index 2fa175608533db70a74d61ab1ed57edd85a01607..be89b46ae7ac20620b50714d7ba852341f79fa51 160000
--- a/dap-sdk
+++ b/dap-sdk
@@ -1 +1 @@
-Subproject commit 2fa175608533db70a74d61ab1ed57edd85a01607
+Subproject commit be89b46ae7ac20620b50714d7ba852341f79fa51
diff --git a/modules/common/CMakeLists.txt b/modules/common/CMakeLists.txt
index 785170c91815e8a9ec72df3d1f8ac5c68e588a7b..81f118c84042790a85911e5475526d86b90aa41b 100644
--- a/modules/common/CMakeLists.txt
+++ b/modules/common/CMakeLists.txt
@@ -6,5 +6,5 @@ file(GLOB DAP_CHAIN_COMMON_HEADERS include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_COMMON_SRCS} ${DAP_CHAIN_COMMON_HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_core dap_crypto )
+target_link_libraries(${PROJECT_NAME} dap_core dap_crypto json-c)
 target_include_directories(${PROJECT_NAME} PUBLIC include/ )
diff --git a/modules/common/dap_chain_common.c b/modules/common/dap_chain_common.c
index a2a8f77dd28ba8f538d6cbc569703c82dccbe08d..3a39a7b1c32363719f1a8c69cc8667dc601ea4fe 100644
--- a/modules/common/dap_chain_common.c
+++ b/modules/common/dap_chain_common.c
@@ -50,6 +50,23 @@ const dap_chain_cell_id_t c_dap_chain_cell_id_null = {0};
 char        *dap_cvt_uint256_to_str (uint256_t a_uint256);
 uint256_t   dap_cvt_str_to_uint256 (const char *a_256bit_num);
 
+json_object* dap_chain_receipt_info_to_json(dap_chain_receipt_info_t *a_info){
+    json_object *l_obj = json_object_new_object();
+    json_object *l_obj_srv_uid = json_object_new_uint64(a_info->srv_uid.uint64);
+    json_object_object_add(l_obj, "srvUID", l_obj_srv_uid);
+#if DAP_CHAIN_NET_SRV_UID_SIZE == 8
+    json_object *l_obj_addition = json_object_new_uint64(a_info->addition);
+    json_object_object_add(l_obj, "addition", l_obj_addition);
+#endif
+    json_object *l_obj_units_type = json_object_new_string(dap_chain_srv_unit_enum_to_str(a_info->units_type.enm));
+    json_object_object_add(l_obj, "unitsType", l_obj_units_type);
+    char *l_datoshi_value = dap_chain_balance_print(a_info->value_datoshi);
+    json_object *l_obj_datoshi = json_object_new_string(l_datoshi_value);
+    DAP_DELETE(l_datoshi_value);
+    json_object_object_add(l_obj, "value", l_obj_datoshi);
+    return l_obj;
+}
+
 /**
  * @brief dap_chain_hash_to_str
  * @param a_hash
@@ -75,6 +92,18 @@ size_t dap_chain_hash_slow_to_str( dap_chain_hash_slow_t *a_hash, char *a_str, s
     return strlen(a_str);
 }
 
+/**
+ * @brief dap_chain_addr_to_json
+ * @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);
+    json_object *l_obj = json_object_new_string(l_addr_str);
+    DAP_DELETE(l_addr_str);
+    return l_obj;
+}
+
 /**
  * @brief dap_chain_addr_to_str
  * @param a_addr
diff --git a/modules/common/dap_chain_datum.c b/modules/common/dap_chain_datum.c
index c3704bc994364dda56e6a184b0608164cb6fc35d..7e82c6d7142858ae539460f0874052dcfd0eeb21 100644
--- a/modules/common/dap_chain_datum.c
+++ b/modules/common/dap_chain_datum.c
@@ -322,7 +322,6 @@ bool dap_chain_datum_dump_tx(dap_chain_datum_tx_t *a_datum,
                         ((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);
-            serv_unit_enum_t l_unit = ((dap_chain_datum_tx_receipt_t*)item)->receipt_info.units_type.enm;
             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"
@@ -335,7 +334,7 @@ bool dap_chain_datum_dump_tx(dap_chain_datum_tx_t *a_datum,
                                      ((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(&l_unit),
+                                     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)){
@@ -750,7 +749,7 @@ void dap_chain_datum_dump(dap_string_t *a_str_out, dap_chain_datum_t *a_datum, c
             char l_decree_hash_str[40] = "";
             dap_hash_fast_t l_decree_hash ={0};
             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);
+            dap_chain_hash_fast_to_str(&l_decree_hash, l_decree_hash_str, 40);
 
             dap_string_append_printf(a_str_out, "decree hash: %s\n", l_decree_hash_str);
 
@@ -759,3 +758,32 @@ void dap_chain_datum_dump(dap_string_t *a_str_out, dap_chain_datum_t *a_datum, c
     }    
     DAP_DELETE(l_hash_str);
 }
+
+json_object * dap_chain_datum_to_json(dap_chain_datum_t* a_datum){
+    json_object *l_object = json_object_new_object();
+    dap_hash_fast_t l_hash_data = {0};
+    dap_hash_fast(a_datum->data, a_datum->header.data_size, &l_hash_data);
+    char *l_hash_data_str = dap_hash_fast_to_str_new(&l_hash_data);
+    json_object *l_obj_data_hash = json_object_new_string(l_hash_data_str);
+    DAP_DELETE(l_hash_data_str);
+    json_object *l_obj_version = json_object_new_int(a_datum->header.version_id);
+    json_object *l_obj_size = json_object_new_int(a_datum->header.data_size);
+    json_object *l_obj_ts_created = json_object_new_uint64(a_datum->header.ts_create);
+    json_object *l_obj_type = json_object_new_string(dap_chain_datum_type_id_to_str(a_datum->header.type_id));
+    json_object *l_obj_data;
+    switch (a_datum->header.type_id) {
+        case DAP_CHAIN_DATUM_TX:
+            l_obj_data = dap_chain_datum_tx_to_json((dap_chain_datum_tx_t*)a_datum->data);
+            break;
+        default:
+            l_obj_data = json_object_new_null();
+            break;
+    }
+    json_object_object_add(l_object, "version", l_obj_version);
+    json_object_object_add(l_object, "hash", l_obj_data_hash);
+    json_object_object_add(l_object, "data_size", l_obj_size);
+    json_object_object_add(l_object, "ts_created", l_obj_ts_created);
+    json_object_object_add(l_object, "type", l_obj_type);
+    json_object_object_add(l_object, "data", l_obj_data);
+    return l_object;
+}
diff --git a/modules/common/dap_chain_datum_anchor.c b/modules/common/dap_chain_datum_anchor.c
index a1ef9e131c67f42c962b9cec73e96688fe05e673..3be303ad469f5a57fba1cc57142b9fdc7f27bc13 100644
--- a/modules/common/dap_chain_datum_anchor.c
+++ b/modules/common/dap_chain_datum_anchor.c
@@ -25,13 +25,11 @@
 #include "dap_tsd.h"
 #include "dap_sign.h"
 #include "dap_common.h"
+#include "dap_enc_base58.h"
 #include "dap_chain_datum_anchor.h"
 
-
 #define LOG_TAG "dap_chain_datum_anchor"
 
-
-
 int dap_chain_datum_anchor_get_hash_from_data(dap_chain_datum_anchor_t* a_anchor, dap_hash_fast_t * l_out_hash)
 {
     if(!a_anchor){
diff --git a/modules/common/dap_chain_datum_tx.c b/modules/common/dap_chain_datum_tx.c
index 82d01e2becb1f3d12096024e8f6cf51838ae1097..dbf6de247a3dbd7cf70b399f7de01069b55272ab 100644
--- a/modules/common/dap_chain_datum_tx.c
+++ b/modules/common/dap_chain_datum_tx.c
@@ -273,3 +273,106 @@ int dap_chain_datum_tx_verify_sign(dap_chain_datum_tx_t *tx)
     return ret;
 }
 
+json_object *dap_chain_datum_tx_to_json(dap_chain_datum_tx_t *a_tx){
+    json_object *l_obj = json_object_new_object();
+    json_object *l_obj_ts_created = json_object_new_uint64(a_tx->header.ts_created);
+    json_object *l_obj_items = json_object_new_array();
+    uint32_t l_tx_items_count = 0;
+    uint32_t l_tx_items_size = a_tx->header.tx_items_size;
+    while(l_tx_items_count < l_tx_items_size) {
+        uint8_t *item = a_tx->tx_items + l_tx_items_count;
+        size_t l_tx_item_size = dap_chain_datum_item_tx_get_size(item);
+        if (l_tx_item_size == 0) {
+            json_object_put(l_obj_items);
+            l_obj_items = json_object_new_null();
+            break;
+        }
+        dap_chain_tx_item_type_t l_item_type = dap_chain_datum_tx_item_get_type(item);
+        json_object *l_obj_item_type = NULL;
+        json_object *l_obj_item_data = NULL;
+        dap_hash_fast_t a_tx_hash = {0};
+        char *l_hash_str = NULL;
+        switch (l_item_type) {
+            case TX_ITEM_TYPE_IN:
+                l_obj_item_type = json_object_new_string("TX_ITEM_TYPE_IN");
+                l_obj_item_data = dap_chain_datum_tx_item_in_to_json((dap_chain_tx_in_t*)item);
+                break;
+            case TX_ITEM_TYPE_OUT:
+                l_obj_item_type = json_object_new_string("TX_ITEM_TYPE_OUT");
+                l_obj_item_data = dap_chain_datum_tx_item_out_to_json((dap_chain_tx_out_t*)item);
+                break;
+            case TX_ITEM_TYPE_IN_EMS:
+                l_obj_item_type = json_object_new_string("TX_ITEM_TYPE_IN_EMS");
+                l_obj_item_data = dap_chain_datum_tx_item_in_ems_to_json((dap_chain_tx_in_ems_t*)item);
+                break;
+            case TX_ITEM_TYPE_SIG:
+                l_obj_item_type = json_object_new_string("TX_ITEM_TYPE_SIG");
+                l_obj_item_data = dap_chain_datum_tx_item_sig_to_json((dap_chain_tx_sig_t*)item);
+                break;
+            case TX_ITEM_TYPE_RECEIPT:
+                l_obj_item_type = json_object_new_string("TX_ITEM_TYPE_RECEIPT");
+                l_obj_item_data = dap_chain_datum_tx_receipt_to_json((dap_chain_datum_tx_receipt_t*)item);
+                break;
+            case TX_ITEM_TYPE_IN_COND:
+                l_obj_item_type = json_object_new_string("TX_ITEM_TYPE_IN_COND");
+                l_obj_item_data = dap_chain_datum_tx_item_in_cond_to_json((dap_chain_tx_in_cond_t*)item);
+                break;
+            case TX_ITEM_TYPE_OUT_COND:
+                switch (((dap_chain_tx_out_cond_t*)item)->header.subtype) {
+                    case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY:
+                        l_obj_item_type = json_object_new_string("DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY");
+                        l_obj_item_data = dap_chain_datum_tx_item_out_cond_srv_pay_to_json((dap_chain_tx_out_cond_t*)item);
+                        break;
+                    case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK:
+                        l_obj_item_type = json_object_new_string("DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK");
+                        l_obj_item_data = dap_chain_net_srv_stake_lock_cond_out_to_json((dap_chain_tx_out_cond_t*)item);
+                        break;
+                    case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE:
+                        l_obj_item_type = json_object_new_string("DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE");
+                        l_obj_item_data = dap_chain_datum_tx_item_out_cond_srv_stake_to_json((dap_chain_tx_out_cond_t*)item);
+                        break;
+                    case DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE:
+                        l_obj_item_type = json_object_new_string("DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE");
+                        l_obj_item_data = dap_chain_datum_tx_item_out_cond_srv_xchange_to_json((dap_chain_tx_out_cond_t*)item);
+                        break;
+                    case DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE:
+                        l_obj_item_type = json_object_new_string("DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE");
+                        l_obj_item_data = dap_chain_datum_tx_item_out_cond_fee_to_json((dap_chain_tx_out_cond_t*)item);
+                        break;
+//                    default:
+                }
+                l_obj_item_type = json_object_new_string("TX_ITEM_TYPE_OUT_COND");
+                break;
+            case TX_ITEM_TYPE_OUT_EXT:
+                l_obj_item_type = json_object_new_string("TX_ITEM_TYPE_OUT_EXT");
+                l_obj_item_data = dap_chain_datum_tx_item_out_ext_to_json((dap_chain_tx_out_ext_t*)item);
+                break;
+            case TX_ITEM_TYPE_TSD:
+                l_obj_item_type = json_object_new_string("TX_ITEM_TYPE_TSD");
+                l_obj_item_data = dap_chain_datum_tx_item_tsd_to_json((dap_chain_tx_tsd_t*)item);
+                break;
+            default:
+                dap_hash_fast(a_tx, dap_chain_datum_tx_get_size(a_tx), &a_tx_hash);
+                l_hash_str = dap_chain_hash_fast_to_str_new(&a_tx_hash);
+                log_it(L_NOTICE, "Transaction %s has an item whose type cannot be handled by the dap_chain_datum_tx_to_json function.", l_hash_str);
+                DAP_DELETE(l_hash_str);
+                break;
+        }
+        if (!l_obj_item_type){
+            json_object_array_add(l_obj_items, json_object_new_null());
+        } else {
+            if (!l_obj_item_data)
+                l_obj_item_data = json_object_new_null();
+            json_object *l_obj_item = json_object_new_object();
+            json_object_object_add(l_obj_item, "type", l_obj_item_type);
+            json_object_object_add(l_obj_item, "data", l_obj_item_data);
+            json_object_array_add(l_obj_items, l_obj_item);
+        }
+
+        l_tx_items_count += l_tx_item_size;
+    }
+    json_object_object_add(l_obj, "tsCrated", l_obj_ts_created);
+    json_object_object_add(l_obj, "items", l_obj_items);
+    return l_obj;
+}
+
diff --git a/modules/common/dap_chain_datum_tx_items.c b/modules/common/dap_chain_datum_tx_items.c
index 0bd20cb46c78ef6470500a1e232a36328c210dfc..df32f5e239d9e1bdd000600e64676e3f9d6bb285 100644
--- a/modules/common/dap_chain_datum_tx_items.c
+++ b/modules/common/dap_chain_datum_tx_items.c
@@ -226,7 +226,7 @@ size_t dap_chain_datum_item_tx_get_size(const void *a_item)
 }
 
 /**
- * Create item dap_chain_tx_token_t
+ * Create item dap_chain_tx_in_ems_t
  *
  * return item, NULL Error
  */
@@ -242,6 +242,20 @@ dap_chain_tx_in_ems_t *dap_chain_datum_tx_item_token_create(dap_chain_id_t a_id,
     return l_item;
 }
 
+json_object *dap_chain_datum_tx_item_in_ems_to_json(const dap_chain_tx_in_ems_t *a_in_ems)
+{
+    json_object *l_object = json_object_new_object();
+    json_object *l_obj_ticker = json_object_new_string(a_in_ems->header.ticker);
+    json_object *l_obj_chain_id = json_object_new_uint64(a_in_ems->header.token_emission_chain_id.uint64);
+    char *l_ehf = dap_chain_hash_fast_to_str_new(&a_in_ems->header.token_emission_hash);
+    json_object *l_obj_ehf = json_object_new_string(l_ehf);
+    DAP_DELETE(l_ehf);
+    json_object_object_add(l_object, "ticker", l_obj_ticker);
+    json_object_object_add(l_object, "chainId", l_obj_chain_id);
+    json_object_object_add(l_object, "emissionHash", l_obj_ehf);
+    return l_object;
+}
+
 /**
  * Create item dap_chain_tx_out_old_t
  *
@@ -276,6 +290,28 @@ dap_chain_tx_tsd_t *dap_chain_datum_tx_item_tsd_create(void *a_data, int a_type,
     return l_item;
 }
 
+json_object* dap_chain_datum_tx_item_in_to_json(dap_chain_tx_in_t *a_in){
+    json_object *l_obj_in = json_object_new_object();
+    json_object *l_obj_prev_idx = json_object_new_uint64(a_in->header.tx_out_prev_idx);
+    char *l_hash = dap_chain_hash_fast_to_str_new(&a_in->header.tx_prev_hash);
+    json_object *l_obj_hash = json_object_new_string(l_hash);
+    DAP_DELETE(l_hash);
+    json_object_object_add(l_obj_in, "prev_idx", l_obj_prev_idx);
+    json_object_object_add(l_obj_in, "prev_hash", l_obj_hash);
+    return l_obj_in;
+}
+
+json_object* dap_chain_datum_tx_item_tsd_to_json(dap_chain_tx_tsd_t *a_tsd){
+    json_object *l_object = json_object_new_object();
+    json_object *l_obj_tsd_type = json_object_new_int(a_tsd->header.type);
+    json_object *l_obj_tsd_size = json_object_new_uint64(a_tsd->header.size);
+    json_object *l_obj_data = json_object_new_string_len((char *)a_tsd->tsd, a_tsd->header.size);
+    json_object_object_add(l_object, "type", l_obj_tsd_type);
+    json_object_object_add(l_object, "size", l_obj_tsd_size);
+    json_object_object_add(l_object, "data", l_obj_data);
+    return l_object;
+}
+
 /**
  * @brief dap_chain_datum_tx_item_in_cond_create
  * @param a_pkey_serialized
@@ -296,6 +332,24 @@ dap_chain_tx_in_cond_t* dap_chain_datum_tx_item_in_cond_create(dap_chain_hash_fa
     return l_item;
 }
 
+json_object* dap_chain_datum_tx_item_in_cond_to_json(dap_chain_tx_in_cond_t *a_in_cond){
+    json_object *l_obj = json_object_new_object();
+    json_object *l_obj_receipt_idx = json_object_new_uint64(a_in_cond->header.receipt_idx);
+    json_object *l_obj_out_prev_idx = json_object_new_uint64(a_in_cond->header.tx_out_prev_idx);
+    json_object *l_obj_prev_hash = NULL;
+    if (dap_hash_fast_is_blank(&a_in_cond->header.tx_prev_hash)){
+        l_obj_prev_hash = json_object_new_null();
+    } else {
+        char *l_prev_hash = dap_hash_fast_to_str_new(&a_in_cond->header.tx_prev_hash);
+        l_obj_prev_hash = json_object_new_string(dap_strdup(l_prev_hash));
+        DAP_DELETE(l_prev_hash);
+    }
+    json_object_object_add(l_obj, "receiptIdx", l_obj_receipt_idx);
+    json_object_object_add(l_obj, "outPrevIdx", l_obj_out_prev_idx);
+    json_object_object_add(l_obj, "txPrevHash", l_obj_prev_hash);
+    return l_obj;
+}
+
 /**
  * Create item dap_chain_tx_out_old_t
  *
@@ -312,6 +366,15 @@ dap_chain_tx_out_t* dap_chain_datum_tx_item_out_create(const dap_chain_addr_t *a
     return l_item;
 }
 
+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 = json_object_new_string(dap_chain_balance_print(a_out->header.value));
+    json_object *l_addr = dap_chain_addr_to_json(&a_out->addr);
+    json_object_object_add(l_object, "value", l_value);
+    json_object_object_add(l_object, "addr", l_addr);
+    return l_object;
+}
+
 dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_out_ext_create(const dap_chain_addr_t *a_addr, uint256_t a_value, const char *a_token)
 {
     if (!a_addr || !a_token)
@@ -326,6 +389,19 @@ dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_out_ext_create(const dap_chain_a
     return l_item;
 }
 
+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();
+    char *l_value = dap_chain_balance_print(a_out_ext->header.value);
+    json_object *l_obj_value = json_object_new_string(l_value);
+    DAP_DELETE(l_value);
+    json_object *l_obj_addr = dap_chain_addr_to_json(&a_out_ext->addr);
+    json_object *l_obj_token = json_object_new_string(a_out_ext->token);
+    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);
+    return l_obj;
+}
+
 dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_fee(uint256_t a_value)
 {
     if (IS_ZERO_256(a_value))
@@ -337,6 +413,18 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_fee(uint256_t a
     return l_item;
 }
 
+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();
+        char *l_balance = dap_chain_balance_print(a_fee->header.value);
+        json_object *l_obj_balance = json_object_new_string(l_balance);
+        DAP_DELETE(l_balance);
+        json_object_object_add(l_obj, "balance", l_obj_balance);
+        return l_obj;
+    }
+    return NULL;
+}
+
 /**
  * Create item dap_chain_tx_out_cond_t
  *
@@ -369,6 +457,33 @@ dap_chain_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap_pke
     return l_item;
 }
 
+json_object *dap_chain_datum_tx_item_out_cond_srv_pay_to_json(dap_chain_tx_out_cond_t *a_srv_pay) {
+    if (a_srv_pay->header.subtype == DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY) {
+        json_object *l_obj = json_object_new_object();
+        char *l_balance = dap_chain_balance_print(a_srv_pay->header.value);
+        json_object *l_obj_value = json_object_new_string(l_balance);
+        DAP_DELETE(l_balance);
+        json_object_object_add(l_obj, "value", l_obj_value);
+        json_object *l_obj_srv_uid = json_object_new_uint64(a_srv_pay->header.srv_uid.uint64);
+        json_object_object_add(l_obj, "srvUid", l_obj_srv_uid);
+        json_object *l_obj_units_type = json_object_new_string(dap_chain_srv_unit_enum_to_str(a_srv_pay->subtype.srv_pay.unit.enm));
+        json_object_object_add(l_obj, "srvUnit", l_obj_units_type);
+        char *l_price_max_datoshi = dap_chain_balance_print(a_srv_pay->subtype.srv_pay.unit_price_max_datoshi);
+        json_object *l_obj_price_max_datoshi = json_object_new_string(l_price_max_datoshi);
+        DAP_DELETE(l_price_max_datoshi);
+        json_object_object_add(l_obj, "price", l_obj_price_max_datoshi);
+        char *l_pkeyHash = dap_hash_fast_to_str_new(&a_srv_pay->subtype.srv_pay.pkey_hash);
+        json_object *l_obj_pkey_hash = json_object_new_string(l_pkeyHash);
+        DAP_DELETE(l_pkeyHash);
+        json_object_object_add(l_obj, "pKeyHash", l_obj_pkey_hash);
+        //TODO: Parsing a_srv_pay->tsd
+//        json_object *l_obj_tsd = json_object_new_string_len(a_srv_pay->tsd, a_srv_pay->tsd_size);
+//        json_object_object_add(l_obj, "TSD", l_obj_tsd);
+        return l_obj;
+    }
+    return NULL;
+}
+
 dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap_chain_net_srv_uid_t a_srv_uid, dap_chain_net_id_t a_sell_net_id,
                                                                              uint256_t a_value_sell, dap_chain_net_id_t a_buy_net_id,
                                                                              const char *a_token, uint256_t a_value_buy,
@@ -396,6 +511,33 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap
     return l_item;
 }
 
+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);
+        json_object *l_obj_value = json_object_new_string(l_value);
+        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_value_buy = dap_chain_balance_print(a_srv_xchange->subtype.srv_xchange.buy_value);
+        json_object *l_obj_value_buy = json_object_new_string(l_value_buy);
+        DAP_DELETE(l_value_buy);
+        json_object *l_obj_seller_addr = dap_chain_addr_to_json(&a_srv_xchange->subtype.srv_xchange.seller_addr);
+        json_object_object_add(l_object, "value", l_obj_value);
+        json_object_object_add(l_object, "valueBuy", l_obj_value_buy);
+        json_object_object_add(l_object, "srvUID", l_obj_srv_uid);
+        json_object_object_add(l_object, "buyNetId", l_obj_buy_net_id);
+        json_object_object_add(l_object, "sellNetId", l_obj_sell_net_id);
+        json_object_object_add(l_object, "buyToken", l_obj_buy_token);
+        json_object_object_add(l_object, "sellerAddr", l_obj_seller_addr);
+        //TODO: Parse TSD
+        return l_object;
+    }
+    return NULL;
+}
+
 dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_stake(dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value, uint256_t a_fee_value,
                                                                            dap_chain_addr_t *a_fee_addr, dap_chain_addr_t *a_hldr_addr,
                                                                            dap_chain_addr_t *a_signing_addr, dap_chain_node_addr_t *a_signer_node_addr)
@@ -415,6 +557,97 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_stake(dap_c
     return l_item;
 }
 
+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);
+        json_object *l_obj_value = json_object_new_string(l_value);
+        DAP_DELETE(l_value);
+        json_object *l_obj_srv_uid = json_object_new_uint64(a_srv_stake->header.srv_uid.uint64);
+        char *l_value_fee = dap_chain_balance_print(a_srv_stake->subtype.srv_stake.fee_value);
+        json_object *l_obj_value_fee = json_object_new_string(l_value_fee);
+        DAP_DELETE(l_value_fee);
+        json_object *l_obj_fee_addr = dap_chain_addr_to_json(&a_srv_stake->subtype.srv_stake.fee_addr);
+        json_object *l_obj_hldr_addr = dap_chain_addr_to_json(&a_srv_stake->subtype.srv_stake.hldr_addr);
+        json_object *l_obj_signing_addr = dap_chain_addr_to_json(&a_srv_stake->subtype.srv_stake.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.signer_node_addr));
+        json_object *l_obj_signer_node_addr = json_object_new_string(l_signer_node_addr);
+        DAP_DELETE(l_signer_node_addr);
+        json_object_object_add(l_object, "value", l_obj_value);
+        json_object_object_add(l_object, "srvUID", l_obj_srv_uid);
+        json_object_object_add(l_object, "valueFee", l_obj_value_fee);
+        json_object_object_add(l_object, "feeAddr", l_obj_fee_addr);
+        json_object_object_add(l_object, "hldrAddr", l_obj_hldr_addr);
+        json_object_object_add(l_object, "signindAddr", l_obj_signing_addr);
+        json_object_object_add(l_object, "signerNodeAddr", l_obj_signer_node_addr);
+        return l_object;
+    }
+    return NULL;
+}
+
+/**
+ * @brief dap_chain_net_srv_stake_lock_create_cond_out
+ * @param a_key
+ * @param a_srv_uid
+ * @param a_value
+ * @param a_time_staking
+ * @param token
+ * @return
+ */
+dap_chain_tx_out_cond_t *dap_chain_net_srv_stake_lock_create_cond_out(dap_pkey_t *a_key, dap_chain_net_srv_uid_t a_srv_uid,
+                                                                      uint256_t a_value, uint64_t a_time_staking,
+                                                                      uint256_t a_reinvest_percent, bool create_base_tx)
+{
+    if (IS_ZERO_256(a_value))
+        return NULL;
+    dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z(dap_chain_tx_out_cond_t);
+    l_item->header.item_type = TX_ITEM_TYPE_OUT_COND;
+    l_item->header.value = a_value;
+    l_item->header.subtype = DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK;
+    l_item->header.srv_uid = a_srv_uid;
+    l_item->subtype.srv_stake_lock.reinvest_percent = a_reinvest_percent;
+    if (a_time_staking) {
+//		l_item->header.ts_expires = dap_time_now() + a_time_staking;
+        l_item->subtype.srv_stake_lock.time_unlock = dap_time_now() + a_time_staking;
+        l_item->subtype.srv_stake_lock.flags |= DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_BY_TIME;
+    }
+    if (create_base_tx)
+        l_item->subtype.srv_stake_lock.flags |= DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_CREATE_BASE_TX;
+    if (a_key)
+        dap_hash_fast(a_key->pkey, a_key->header.size, &l_item->subtype.srv_stake_lock.pkey_delegated);
+
+    return l_item;
+}
+
+json_object *dap_chain_net_srv_stake_lock_cond_out_to_json(dap_chain_tx_out_cond_t *a_stake_lock)
+{
+    if (a_stake_lock->header.subtype == DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK) {
+        json_object *l_object = json_object_new_object();
+        char *l_value = dap_chain_balance_print(a_stake_lock->header.value);
+        json_object *l_obj_value = json_object_new_string(l_value);
+        DAP_DELETE(l_value);
+        json_object *l_obj_srv_uid = json_object_new_uint64(a_stake_lock->header.srv_uid.uint64);
+        char *l_reinvest_precent = dap_chain_balance_print(a_stake_lock->subtype.srv_stake_lock.reinvest_percent);
+        json_object *l_obj_reinvest_percent = json_object_new_string(l_reinvest_precent);
+        DAP_DELETE(l_reinvest_precent);
+        json_object *l_obj_time_unlock = json_object_new_uint64(a_stake_lock->subtype.srv_stake_lock.time_unlock);
+        json_object *l_obj_flags = json_object_new_uint64(a_stake_lock->subtype.srv_stake_lock.flags);
+        char *l_pkey_delegate_hash = dap_hash_fast_to_str_new(&a_stake_lock->subtype.srv_stake_lock.pkey_delegated);
+        json_object *l_obj_pkey_delegate_hash = json_object_new_string(l_pkey_delegate_hash);
+        DAP_DELETE(l_pkey_delegate_hash);
+        json_object_object_add(l_object, "value", l_obj_value);
+        json_object_object_add(l_object, "srvUID", l_obj_srv_uid);
+        json_object_object_add(l_object, "reinvestPercent", l_obj_reinvest_percent);
+        json_object_object_add(l_object, "timeUnlock", l_obj_time_unlock);
+        json_object_object_add(l_object, "flags", l_obj_flags);
+        json_object_object_add(l_object, "pkeyDelegateHash", l_obj_pkey_delegate_hash);
+        return l_object;
+    }
+    return NULL;
+}
+
 /**
  * Create item dap_chain_tx_sig_t
  *
@@ -438,6 +671,15 @@ dap_chain_tx_sig_t* dap_chain_datum_tx_item_sign_create(dap_enc_key_t *a_key, co
     return l_tx_sig;
 }
 
+json_object* dap_chain_datum_tx_item_sig_to_json(const dap_chain_tx_sig_t *a_sig){
+    json_object *l_object = json_object_new_object();
+    json_object *l_sign_size = json_object_new_uint64(a_sig->header.sig_size);
+    json_object *l_sign = dap_sign_to_json((dap_sign_t*)a_sig->sig);
+    json_object_object_add(l_object, "signSize", l_sign_size);
+    json_object_object_add(l_object, "sign", l_sign);
+    return l_object;
+}
+
 /**
  * Get sign from sign item
  *
diff --git a/modules/common/dap_chain_datum_tx_receipt.c b/modules/common/dap_chain_datum_tx_receipt.c
index dd3148ed05cb907af7734cad06ce591580606113..8c8010827779c93a3ecacfb5624a987895ec8dea 100644
--- a/modules/common/dap_chain_datum_tx_receipt.c
+++ b/modules/common/dap_chain_datum_tx_receipt.c
@@ -155,3 +155,24 @@ uint16_t dap_chain_datum_tx_receipt_signs_count(dap_chain_datum_tx_receipt_t * a
         log_it(L_ERROR, "Receipt 0x%zu (size=%zu) is corrupted", (size_t)a_receipt, a_receipt_size);
     return l_ret;
 }
+
+json_object *dap_chain_datum_tx_receipt_to_json(dap_chain_datum_tx_receipt_t *a_receipt) {
+    json_object *l_obj = json_object_new_object();
+    json_object *l_obj_info = dap_chain_receipt_info_to_json(&a_receipt->receipt_info);
+    json_object *l_obj_size = json_object_new_uint64(a_receipt->size);
+    //Provider
+    dap_sign_t *l_first_sign  = dap_chain_datum_tx_receipt_sign_get(a_receipt, a_receipt->size, 1);
+    //Client
+    dap_sign_t *l_second_sign  = dap_chain_datum_tx_receipt_sign_get(a_receipt, a_receipt->size, 2);
+    json_object *l_obj_signs = json_object_new_object();
+    json_object *l_obj_provider_sign = dap_sign_to_json(l_first_sign);
+    json_object *l_obj_client_sign = dap_sign_to_json(l_second_sign);
+    json_object_object_add(l_obj_signs, "provider", l_obj_provider_sign);
+    json_object_object_add(l_obj_signs, "client", l_obj_client_sign);
+    json_object *l_exts_data = json_object_new_string_len((char *)a_receipt->exts_n_signs, a_receipt->exts_size);
+    json_object_object_add(l_obj, "info", l_obj_info);
+    json_object_object_add(l_obj, "size", l_obj_size);
+    json_object_object_add(l_obj, "sings", l_obj_signs);
+    json_object_object_add(l_obj, "extsData", l_exts_data);
+    return l_obj;
+}
diff --git a/modules/common/include/dap_chain_common.h b/modules/common/include/dap_chain_common.h
index 49d7febfbc31cb0265fa528e14b25b3404785ae5..b85660693b5cdd16804cd194ac8dda09ec1b2f8a 100644
--- a/modules/common/include/dap_chain_common.h
+++ b/modules/common/include/dap_chain_common.h
@@ -32,6 +32,7 @@
 #include "dap_pkey.h"
 #include "dap_sign.h"
 #include "dap_hash.h"
+#include <json-c/json.h>
 
 #define DAP_CHAIN_ADDR_VERSION_CURRENT 1
 
@@ -162,7 +163,7 @@ typedef union {
 extern const dap_chain_net_srv_uid_t c_dap_chain_net_srv_uid_null;
 extern const dap_chain_cell_id_t c_dap_chain_cell_id_null;
 
-enum serv_unit_enum {
+enum dap_chain_srv_unit_enum {
     SERV_UNIT_UNDEFINED = 0 ,
     SERV_UNIT_MB = 0x00000001, // megabytes
     SERV_UNIT_SEC = 0x00000002, // seconds
@@ -171,10 +172,11 @@ enum serv_unit_enum {
     SERV_UNIT_B = 0x00000011,   // bytes
     SERV_UNIT_PCS = 0x00000022  // pieces
 };
-typedef uint32_t serv_unit_enum_t;
+typedef uint32_t dap_chain_srv_unit_enum_t;
 
-DAP_STATIC_INLINE const char *serv_unit_enum_to_str(serv_unit_enum_t *unit_enum){
-    switch (*unit_enum) {
+DAP_STATIC_INLINE const char *dap_chain_srv_unit_enum_to_str(dap_chain_srv_unit_enum_t a_unit_enum)
+{
+    switch (a_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";
@@ -189,7 +191,7 @@ DAP_STATIC_INLINE const char *serv_unit_enum_to_str(serv_unit_enum_t *unit_enum)
 typedef union {
     uint8_t raw[4];
     uint32_t uint32;
-    serv_unit_enum_t enm;
+    dap_chain_srv_unit_enum_t enm;
 } DAP_ALIGN_PACKED dap_chain_net_srv_price_unit_uid_t;
 
 enum dap_chain_tx_item_type {
@@ -237,12 +239,19 @@ typedef struct dap_chain_receipt_info {
 extern "C" {
 #endif
 
+json_object* dap_chain_receipt_info_to_json(dap_chain_receipt_info_t *a_info);
+
 size_t dap_chain_hash_slow_to_str(dap_chain_hash_slow_t * a_hash, char * a_str, size_t a_str_max);
 
 char* dap_chain_addr_to_str(const dap_chain_addr_t *a_addr);
+json_object *dap_chain_addr_to_json(const dap_chain_addr_t *a_addr);
 dap_chain_addr_t* dap_chain_addr_from_str(const char *str);
 bool dap_chain_addr_is_blank(const dap_chain_addr_t *a_addr);
 
+DAP_STATIC_INLINE json_object *dap_chain_net_id_to_json(dap_chain_net_id_t a_net_id) {
+    return json_object_new_uint64(a_net_id.uint64);
+}
+
 dap_chain_net_srv_uid_t dap_chain_net_srv_uid_from_str(const char* a_str);
 
 void dap_chain_addr_fill(dap_chain_addr_t *a_addr, dap_sign_type_t a_type, dap_chain_hash_fast_t *a_pkey_hash, dap_chain_net_id_t a_net_id);
diff --git a/modules/common/include/dap_chain_datum.h b/modules/common/include/dap_chain_datum.h
index 8bd2c7419f214a05f82e7a9811aa12abd6b5e033..85a05c7560a4c2dfacc64abc911dedf86ec30e6e 100644
--- a/modules/common/include/dap_chain_datum.h
+++ b/modules/common/include/dap_chain_datum.h
@@ -29,6 +29,7 @@
 #include "dap_chain_common.h"
 #include "dap_chain_datum_tx.h"
 #include "dap_chain_datum_token.h"
+#include <json-c/json.h>
 
 #define DAP_CHAIN_DATUM_VERSION 0x00
 
@@ -176,3 +177,4 @@ bool dap_chain_datum_dump_tx(dap_chain_datum_tx_t *a_datum,
                              dap_string_t *a_str_out,
                              const char *a_hash_out_type,
                              dap_hash_fast_t *a_tx_hash);
+json_object * dap_chain_datum_to_json(dap_chain_datum_t* a_datum);
diff --git a/modules/common/include/dap_chain_datum_tx.h b/modules/common/include/dap_chain_datum_tx.h
index d4f53f1efcf6324d533891b827a4e3a2a0d8f742..b0b50c0b2227adb543565ec9c3aa17492dc0326d 100644
--- a/modules/common/include/dap_chain_datum_tx.h
+++ b/modules/common/include/dap_chain_datum_tx.h
@@ -27,6 +27,7 @@
 #include "dap_enc_key.h"
 #include "dap_chain_common.h"
 #include "dap_time.h"
+#include <json-c/json.h>
 
 typedef enum dap_chain_tx_cond_type {
     COND_SERVICE_PROVIDE = 0x20, //
@@ -139,3 +140,5 @@ int dap_chain_datum_tx_add_sign_item(dap_chain_datum_tx_t **a_tx, dap_enc_key_t
  * return 1 Ok, 0 Invalid sign, -1 Not found sing or other Error
  */
 int dap_chain_datum_tx_verify_sign(dap_chain_datum_tx_t *a_tx);
+
+json_object *dap_chain_datum_tx_to_json(dap_chain_datum_tx_t *a_tx);
diff --git a/modules/common/include/dap_chain_datum_tx_in_ems.h b/modules/common/include/dap_chain_datum_tx_in_ems.h
index c0f46fbeecf0e6011e5ec50ab534996ce84b2f34..f3aa0cfc0cbea2feeec70fe6d52368db142524ef 100644
--- a/modules/common/include/dap_chain_datum_tx_in_ems.h
+++ b/modules/common/include/dap_chain_datum_tx_in_ems.h
@@ -38,7 +38,7 @@ typedef struct dap_chain_tx_in_ems {
         char ticker[DAP_CHAIN_TICKER_SIZE_MAX];
         uint8_t padding; // Padding
         dap_chain_id_t token_emission_chain_id;
-        dap_chain_hash_fast_t token_emission_hash;
+        dap_hash_fast_t token_emission_hash;
     } header; /// Only header's hash is used for verification
 } DAP_ALIGN_PACKED dap_chain_tx_in_ems_t;
 
diff --git a/modules/common/include/dap_chain_datum_tx_items.h b/modules/common/include/dap_chain_datum_tx_items.h
index 050909ccd2bda840e6d62292163d7238f756186c..0a728612d4ebe6f48eeaaecacf03978d09c9455d 100644
--- a/modules/common/include/dap_chain_datum_tx_items.h
+++ b/modules/common/include/dap_chain_datum_tx_items.h
@@ -104,12 +104,14 @@ dap_chain_tx_out_cond_subtype_t dap_chain_tx_out_cond_subtype_from_str(const cha
 size_t dap_chain_datum_item_tx_get_size(const void *a_item);
 
 /**
- * Create item dap_chain_tx_token_t
+ * Create item dap_chain_tx_in_ems_t
  *
  * return item, NULL Error
  */
 dap_chain_tx_in_ems_t *dap_chain_datum_tx_item_token_create(dap_chain_id_t a_id, dap_chain_hash_fast_t *a_datum_token_hash, const char *a_ticker);
 
+json_object *dap_chain_datum_tx_item_in_ems_to_json(const dap_chain_tx_in_ems_t *a_in_ems);
+
 /**
  * Create item dap_chain_tx_out_old_t
  *
@@ -117,11 +119,18 @@ dap_chain_tx_in_ems_t *dap_chain_datum_tx_item_token_create(dap_chain_id_t a_id,
  */
 dap_chain_tx_in_t* dap_chain_datum_tx_item_in_create(dap_chain_hash_fast_t *a_tx_prev_hash, uint32_t a_tx_out_prev_idx);
 
+json_object* dap_chain_datum_tx_item_in_to_json(dap_chain_tx_in_t *a_in);
+
 dap_chain_tx_tsd_t *dap_chain_datum_tx_item_tsd_create(void *a_data, int a_type, size_t a_size);
 
+json_object* dap_chain_datum_tx_item_tsd_to_json(dap_chain_tx_tsd_t *a_tsd);
+
 
 dap_chain_tx_in_cond_t* dap_chain_datum_tx_item_in_cond_create(dap_chain_hash_fast_t *a_tx_prev_hash, uint32_t a_tx_out_prev_idx,
                                                                uint32_t a_receipt_idx);
+
+json_object* dap_chain_datum_tx_item_in_cond_to_json(dap_chain_tx_in_cond_t *a_in_cond);
+
 /**
  * Create item dap_chain_tx_out_old_t
  *
@@ -129,6 +138,8 @@ dap_chain_tx_in_cond_t* dap_chain_datum_tx_item_in_cond_create(dap_chain_hash_fa
  */
 dap_chain_tx_out_t* dap_chain_datum_tx_item_out_create(const dap_chain_addr_t *a_addr, uint256_t a_value);
 
+json_object* dap_chain_datum_tx_item_out_to_json(const dap_chain_tx_out_t *a_out);
+
 /**
  * Create item dap_chain_tx_out_ext_t
  *
@@ -136,6 +147,8 @@ dap_chain_tx_out_t* dap_chain_datum_tx_item_out_create(const dap_chain_addr_t *a
  */
 dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_out_ext_create(const dap_chain_addr_t *a_addr, uint256_t a_value, const char *a_token);
 
+json_object* dap_chain_datum_tx_item_out_ext_to_json(const dap_chain_tx_out_ext_t *a_out_ext);
+
 /**
  * Create item dap_chain_tx_out_cond_t with fee subtype
  *
@@ -143,6 +156,8 @@ dap_chain_tx_out_ext_t* dap_chain_datum_tx_item_out_ext_create(const dap_chain_a
  */
 dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_fee(uint256_t a_value);
 
+json_object *dap_chain_datum_tx_item_out_cond_fee_to_json(dap_chain_tx_out_cond_t *a_fee);
+
 /**
  * Create item dap_chain_tx_out_cond_t with fee stake subtype
  *
@@ -159,6 +174,9 @@ dap_chain_tx_out_cond_t* dap_chain_datum_tx_item_out_cond_create_srv_pay(dap_pke
                                                                              uint256_t a_value, uint256_t a_value_max_per_unit,
                                                                              dap_chain_net_srv_price_unit_uid_t a_unit,
                                                                              const void *a_params, size_t a_params_size);
+
+json_object *dap_chain_datum_tx_item_out_cond_srv_pay_to_json(dap_chain_tx_out_cond_t *a_srv_pay);
+
 /**
  * Create item dap_chain_tx_out_cond_t for eXchange service
  *
@@ -168,6 +186,9 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap
                                                                              uint256_t a_value_sell, dap_chain_net_id_t a_buy_net_id,
                                                                              const char *a_token, uint256_t a_value_buy, const dap_chain_addr_t *a_seller_addr,
                                                                              const void *a_params, uint32_t a_params_size);
+
+json_object* dap_chain_datum_tx_item_out_cond_srv_xchange_to_json(dap_chain_tx_out_cond_t* a_srv_xchange);
+
 /**
  * Create item dap_chain_tx_out_cond_t for stake service
  *
@@ -176,6 +197,17 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_xchange(dap
 dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_stake(dap_chain_net_srv_uid_t a_srv_uid, uint256_t a_value, uint256_t a_fee_value,
                                                                                dap_chain_addr_t *a_fee_addr, dap_chain_addr_t *a_hldr_addr,
                                                                                dap_chain_addr_t *a_signing_addr, dap_chain_node_addr_t *a_signer_node_addr);
+
+json_object *dap_chain_datum_tx_item_out_cond_srv_stake_to_json(dap_chain_tx_out_cond_t* a_srv_stake);
+
+// Create cond out
+dap_chain_tx_out_cond_t	*dap_chain_net_srv_stake_lock_create_cond_out(dap_pkey_t *a_key, dap_chain_net_srv_uid_t a_srv_uid,
+                                                                      uint256_t a_value, uint64_t a_time_staking,
+                                                                      uint256_t a_reinvest_percent, bool create_base_tx);
+
+json_object *dap_chain_net_srv_stake_lock_cond_out_to_json(dap_chain_tx_out_cond_t *a_stake_lock);
+
+
 /**
  * Create item dap_chain_tx_sig_t
  *
@@ -183,6 +215,8 @@ dap_chain_tx_out_cond_t *dap_chain_datum_tx_item_out_cond_create_srv_stake(dap_c
  */
 dap_chain_tx_sig_t *dap_chain_datum_tx_item_sign_create(dap_enc_key_t *a_key, const void *a_data, size_t a_data_size);
 
+json_object* dap_chain_datum_tx_item_sig_to_json(const dap_chain_tx_sig_t *a_sig);
+
 /**
  * Get sign from sign item
  *
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 2e41d3497b6cb32aa59bb839a7c4bdda3fa101e6..f46a079278fe8bb5b9e84c832eecef8ccff0edc0 100644
--- a/modules/common/include/dap_chain_datum_tx_out_cond.h
+++ b/modules/common/include/dap_chain_datum_tx_out_cond.h
@@ -53,6 +53,18 @@ DAP_STATIC_INLINE const char *dap_chain_tx_out_cond_subtype_to_str(dap_chain_tx_
     return "UNDEFINED";
 }
 
+// Allow to spend stake by network
+// Need for service staking to enable network governance to fee the service provider
+#define DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_ENABLE_NET_FEE           0x00000001
+// Delegate token to prove thats stake is provided
+#define DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_DELEGATE_TOKEN           0x00000002
+// Delegate public key's hash
+#define DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_DELEGATE_PKEY            0x00000004
+// Lock by time
+#define DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_BY_TIME                  0x00000008
+// Create base tx for delegated token
+#define DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_CREATE_BASE_TX           0x00000010
+
 /**
  * @struct dap_chain_tx_out
  * @brief Transaction item out_cond
diff --git a/modules/common/include/dap_chain_datum_tx_receipt.h b/modules/common/include/dap_chain_datum_tx_receipt.h
index f534726ab692883f63990258dba512c817106d67..df8cc3bad94edf9936d6c6b218f3453b5d81411e 100644
--- a/modules/common/include/dap_chain_datum_tx_receipt.h
+++ b/modules/common/include/dap_chain_datum_tx_receipt.h
@@ -49,6 +49,7 @@ dap_chain_datum_tx_receipt_t * dap_chain_datum_tx_receipt_create(dap_chain_net_s
                                                                     uint64_t units, uint256_t value_datoshi, const void * a_ext, size_t a_ext_size);
 
 dap_chain_datum_tx_receipt_t *dap_chain_datum_tx_receipt_sign_add(dap_chain_datum_tx_receipt_t *a_receipt, dap_enc_key_t *a_key);
+json_object *dap_chain_datum_tx_receipt_to_json(dap_chain_datum_tx_receipt_t *a_receipt);
 dap_sign_t* dap_chain_datum_tx_receipt_sign_get(dap_chain_datum_tx_receipt_t * l_receipt, size_t l_receipt_size , uint16_t sign_position);
 uint32_t    dap_chain_datum_tx_receipt_utype_get(dap_chain_datum_tx_receipt_t * l_receipt);
 uint64_t    dap_chain_datum_tx_receipt_srv_uid_get(dap_chain_datum_tx_receipt_t * l_receipt);
diff --git a/modules/mempool/CMakeLists.txt b/modules/mempool/CMakeLists.txt
index 42a266f33071d3f7125f2369c13c5a05803073ab..c187a6b5398d8f280cd9e7853100629b95a65c78 100644
--- a/modules/mempool/CMakeLists.txt
+++ b/modules/mempool/CMakeLists.txt
@@ -6,6 +6,6 @@ file(GLOB DAP_CHAIN_MEMPOOL_HDR include/*.h)
 
 add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_MEMPOOL_SRC} ${DAP_CHAIN_MEMPOOL_HDR})
 
-target_link_libraries(${PROJECT_NAME} dap_http_server dap_client dap_chain_net dap_global_db dap_core)
+target_link_libraries(${PROJECT_NAME} dap_http_server dap_client dap_chain_net dap_global_db dap_core dap_json_rpc)
 target_include_directories(${PROJECT_NAME} INTERFACE .)
 target_include_directories(${PROJECT_NAME} PUBLIC include)
diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c
index 16ed3ec3935a2ad55c21293f421973a63cdf979a..0924bf90961938b4afbcb4f1ff674b6bcc288f4d 100644
--- a/modules/mempool/dap_chain_mempool.c
+++ b/modules/mempool/dap_chain_mempool.c
@@ -64,6 +64,7 @@
 #include "dap_chain_datum_tx.h"
 #include "dap_chain_datum_tx_items.h"
 #include "dap_chain_net_srv.h"
+#include "dap_chain_mempool_rpc.h"
 
 #define LOG_TAG "dap_chain_mempool"
 
@@ -74,6 +75,7 @@ static void s_tx_create_massive_gdb_save_callback(dap_global_db_context_t *a_glo
 
 int dap_datum_mempool_init(void)
 {
+    dap_chain_mempool_rpc_init();
     return 0;
 }
 
diff --git a/modules/mempool/dap_chain_mempool_rpc.c b/modules/mempool/dap_chain_mempool_rpc.c
new file mode 100644
index 0000000000000000000000000000000000000000..28b7ad35ea4680d582c40ce512eceb47a1f4a0ac
--- /dev/null
+++ b/modules/mempool/dap_chain_mempool_rpc.c
@@ -0,0 +1,102 @@
+#include "dap_chain_mempool_rpc.h"
+#include "dap_chain_mempool.h"
+
+#define LOG_TAG "dap_chain_mempool_rpc"
+
+int dap_chain_mempool_rpc_init(void) {
+    dap_json_rpc_registration_request_handler("mempool_list", dap_chain_mempool_rpc_handler_list);
+    dap_json_rpc_registration_request_handler("memtest", dap_chain_mempool_rpc_handler_test);
+    return 0;
+}
+
+void dap_chain_mempool_rpc_handler_test(dap_json_rpc_params_t *a_params,
+                                        dap_json_rpc_response_t *a_response, const char *a_method) {
+    UNUSED(a_method);
+    char *l_tn = NULL;
+//    char *l_chain_str = NULL;
+    for (uint32_t i = 0; i < a_params->lenght; i++) {
+        dap_json_rpc_param_t *l_prm = a_params->params[i];
+        if (i == 0)
+            l_tn = l_prm->value_param;
+    }
+    if (dap_strcmp(l_tn, "NULL") == 0) {
+        a_response->type_result = TYPE_RESPONSE_NULL;
+    } else if (dap_strcmp(l_tn, "STRING") == 0) {
+        a_response->type_result = TYPE_RESPONSE_STRING;
+        a_response->result_string = dap_strdup("This test string");
+    } else if (dap_strcmp(l_tn, "INTEGER") == 0) {
+        a_response->type_result = TYPE_RESPONSE_INTEGER;
+        a_response->result_int = 4555745;
+    } else if (dap_strcmp(l_tn, "BOOLEAN") == 0) {
+        a_response->type_result = TYPE_RESPONSE_BOOLEAN;
+        a_response->result_boolean = true;
+    } else if (dap_strcmp(l_tn, "DOUBLE") == 0) {
+        a_response->type_result = TYPE_RESPONSE_DOUBLE;
+        a_response->result_double = 75.545;
+    } else if (dap_strcmp(l_tn, "JSON") == 0) {
+        a_response->type_result = TYPE_RESPONSE_JSON;
+        json_object *l_obj = json_object_new_object();
+        json_object *l_int = json_object_new_uint64(45577445);
+        json_object *l_boolean = json_object_new_boolean((json_bool)1);
+        json_object *l_double = json_object_new_double(457.74514);
+        json_object *l_arr = json_object_new_array();
+        for (int i = 1000; i < 1997; i++) {
+            json_object *l_cur = json_object_new_int(i);
+            json_object_array_add(l_arr, l_cur);
+        }
+        json_object_object_add(l_obj, "int", l_int);
+        json_object_object_add(l_obj, "boolean", l_boolean);
+        json_object_object_add(l_obj, "double", l_double);
+        json_object_object_add(l_obj, "array", l_arr);
+        a_response->result_json_object = json_object_get(l_obj);
+        json_object_put(l_obj);
+    } else {
+        //set ERR code
+    }
+}
+
+void dap_chain_mempool_rpc_handler_list(dap_json_rpc_params_t *a_params,
+                                        dap_json_rpc_response_t *a_response, const char *a_method) {
+    char *l_net_str = NULL;
+    char *l_chain_str = NULL;
+    for (uint32_t i = 0; i < a_params->lenght; i++) {
+        dap_json_rpc_param_t *l_prm = a_params->params[i];
+        if (i == 0)
+            l_net_str = l_prm->value_param;
+        if (i == 1)
+            l_chain_str = l_prm->value_param;
+    }
+    dap_chain_net_t  *l_net = dap_chain_net_by_name(l_net_str);
+    dap_chain_t *l_chain = dap_chain_net_get_chain_by_name(l_net, l_chain_str);
+    a_response->type_result = TYPE_RESPONSE_STRING;
+    char * l_gdb_group_mempool = dap_chain_net_get_gdb_group_mempool_new(l_chain);
+    if(!l_gdb_group_mempool){
+        a_response->result_string = "{\"datums\":[]}";
+        return;
+    }
+    size_t l_objs_size = 0;
+    dap_global_db_obj_t *l_objs = dap_global_db_get_all_sync(l_gdb_group_mempool, &l_objs_size);
+    json_object *l_object = json_object_new_object();
+    json_object *l_object_array = json_object_new_array();
+
+    for(size_t i = 0; i < l_objs_size; i++) {
+        dap_chain_datum_t *l_datum = (dap_chain_datum_t *)l_objs[i].value;
+        //dap_time_t l_ts_create = (dap_time_t) l_datum->header.ts_create;
+        if (!l_datum->header.data_size || (l_datum->header.data_size > l_objs[i].value_len)) {
+            log_it(L_ERROR, "Trash datum in GDB %s.%s, key: %s data_size:%u, value_len:%zu",
+                   l_net->pub.name, l_chain->name, l_objs[i].key, l_datum->header.data_size, l_objs[i].value_len);
+            dap_global_db_del(l_objs[i].key, l_gdb_group_mempool, NULL, NULL);
+            continue;
+        }
+
+        json_object *l_obj_datum = dap_chain_datum_to_json(l_datum);
+        json_object_array_add(l_object_array, l_obj_datum);
+    }
+    json_object_object_add(l_object, "datums", l_object_array);
+    a_response->type_result = TYPE_RESPONSE_JSON;
+    a_response->result_json_object = l_object;
+
+    DAP_DELETE(l_gdb_group_mempool);
+}
+
+#undef LOG_TAG
diff --git a/modules/mempool/include/dap_chain_mempool_rpc.h b/modules/mempool/include/dap_chain_mempool_rpc.h
new file mode 100644
index 0000000000000000000000000000000000000000..60388908103c0d002071f8d2c90126914214c82c
--- /dev/null
+++ b/modules/mempool/include/dap_chain_mempool_rpc.h
@@ -0,0 +1,8 @@
+#pragma once
+#include "dap_json_rpc.h"
+
+int dap_chain_mempool_rpc_init(void);
+void dap_chain_mempool_rpc_handler_list(dap_json_rpc_params_t *a_params,
+                                        dap_json_rpc_response_t *a_response, const char *a_method);
+void dap_chain_mempool_rpc_handler_test(dap_json_rpc_params_t *a_params,
+                                        dap_json_rpc_response_t *a_response, const char *a_method);
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 80e1bda575225dc034cb7e6a82e0d40dee33ff6d..71ebb09d26a212ba5b4169f0190020f4fca0c338 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -737,11 +737,11 @@ int com_global_db(int a_argc, char ** a_argv, char **a_str_reply)
         cmd_name = CMD_FLUSH;
     else if(dap_cli_server_cmd_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "record", NULL))
             cmd_name = CMD_RECORD;
-    else if(dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "write", NULL))
+    else if(dap_cli_server_cmd_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "write", NULL))
                 cmd_name = CMD_WRITE;
-    else if(dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "read", NULL))
+    else if(dap_cli_server_cmd_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "read", NULL))
                 cmd_name = CMD_READ;
-    else if(dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "delete", NULL))
+    else if(dap_cli_server_cmd_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "delete", NULL))
                 cmd_name = CMD_DELETE;
     switch (cmd_name) {
     case CMD_NAME_CELL:
@@ -931,93 +931,91 @@ int com_global_db(int a_argc, char ** a_argv, char **a_str_reply)
     }
     case CMD_WRITE:
         {
-            char *l_group_str = NULL;
-            char *l_key_str = NULL;
-            char *l_value_str = NULL;
+            const char *l_group_str = NULL;
+            const char *l_key_str = NULL;
+            const char *l_value_str = NULL;
 
-            dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str);
-            dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key_str);
-            dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-value", &l_value_str);
+            dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str);
+            dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key_str);
+            dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-value", &l_value_str);
 
             if(!l_group_str) {
-                dap_chain_node_cli_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]);
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]);
                 return -120;
             }
 
             if(!l_key_str) {
-                dap_chain_node_cli_set_reply_text(a_str_reply, "%s requires parameter 'key' to be valid", a_argv[0]);
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'key' to be valid", a_argv[0]);
                 return -121;
             }
 
             if(!l_value_str) {
-                dap_chain_node_cli_set_reply_text(a_str_reply, "%s requires parameter 'value' to be valid", a_argv[0]);
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'value' to be valid", a_argv[0]);
                 return -122;
             }
 
-            if(dap_chain_global_db_gr_set(l_key_str, l_value_str, strlen(l_value_str), l_group_str))
-            {
-                dap_chain_node_cli_set_reply_text(a_str_reply, "Data has been successfully written to the database");
+            if (dap_global_db_set(l_group_str, l_key_str, l_value_str, strlen(l_value_str), false, NULL, NULL)) {
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Data has been successfully written to the database");
                 return 0;
-            }else{
-                dap_chain_node_cli_set_reply_text(a_str_reply, "Data writing is failed");
+            } else {
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Data writing is failed");
                 return -124;
             }
 
         }
         case CMD_READ:
         {
-            char *l_group_str = NULL;
-            char *l_key_str = NULL;
+            const char *l_group_str = NULL;
+            const char *l_key_str = NULL;
 
-            dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str);
-            dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key_str);
+            dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str);
+            dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key_str);
 
             if(!l_group_str) {
-                dap_chain_node_cli_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]);
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]);
                 return -120;
             }
 
             if(!l_key_str) {
-                dap_chain_node_cli_set_reply_text(a_str_reply, "%s requires parameter 'key' to be valid", a_argv[0]);
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'key' to be valid", a_argv[0]);
                 return -122;
             }
 
             size_t l_out_len = 0;
-            uint8_t *l_value_out = dap_chain_global_db_gr_get(l_key_str, &l_out_len, l_group_str);
+            uint8_t *l_value_out = dap_global_db_get_sync(l_group_str, l_key_str, &l_out_len, NULL, NULL);
 
             if (!l_value_out || !l_out_len)
             {
-                dap_chain_node_cli_set_reply_text(a_str_reply, "Record with key %s in group %s not found", l_key_str, l_group_str);
+                dap_cli_server_cmd_set_reply_text(a_str_reply, "Record with key %s in group %s not found", l_key_str, l_group_str);
                 return -121;
             }
 
-            dap_chain_node_cli_set_reply_text(a_str_reply, "Group %s, key %s, data:\n %s", l_group_str, l_key_str, (char*)l_value_out);
+            dap_cli_server_cmd_set_reply_text(a_str_reply, "Group %s, key %s, data:\n %s", l_group_str, l_key_str, (char*)l_value_out);
             return 0;
         }
         case CMD_DELETE:
             {
-                char *l_group_str = NULL;
-                char *l_key_str = NULL;
+                const char *l_group_str = NULL;
+                const char *l_key_str = NULL;
 
-                dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str);
-                dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key_str);
+                dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str);
+                dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key_str);
 
                 if(!l_group_str) {
-                    dap_chain_node_cli_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]);
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]);
                     return -120;
                 }
 
                 if(!l_key_str) {
-                    dap_chain_node_cli_set_reply_text(a_str_reply, "%s requires parameter 'key' to be valid", a_argv[0]);
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "%s requires parameter 'key' to be valid", a_argv[0]);
                     return -121;
                 }
 
-                if (dap_chain_global_db_gr_del(l_key_str, l_group_str))
-                {
-                    dap_chain_node_cli_set_reply_text(a_str_reply, "Record with key %s in group %s was deleted successfuly", l_key_str, l_group_str);
+                if (dap_global_db_del(l_group_str, l_key_str, NULL, NULL)) {
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Record with key %s in group %s was deleted successfuly", l_key_str, l_group_str);
                     return 0;
-                }else{
-                    dap_chain_node_cli_set_reply_text(a_str_reply, "Record with key %s in group %s deleting failed", l_group_str, l_key_str);
+                } else {
+                    dap_cli_server_cmd_set_reply_text(a_str_reply, "Record with key %s in group %s deleting failed", l_group_str, l_key_str);
                     return -122;
                 }
             }
diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c
index ed303f4c59590ad3ad9b3e6ce3156d6489f04e11..586451e479aa88793b51cc3418de9ee313b35d5a 100644
--- a/modules/net/dap_chain_node_cli_cmd_tx.c
+++ b/modules/net/dap_chain_node_cli_cmd_tx.c
@@ -1537,7 +1537,7 @@ int cmd_decree(int a_argc, char **a_argv, char ** a_str_reply)
                     dap_pkey_t *l_pkey = dap_cert_to_pkey(l_new_certs[i]);
                     if(!l_pkey)
                     {
-                        log_it(L_WARNING,"New cert [%d] have no public key.");
+                        log_it(L_WARNING,"New cert [%zu] have no public key.", i);
                         l_failed_certs++;
                         continue;
                     }
diff --git a/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c b/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c
index f02801c0c13a5782a5252ec002f48230374d6e51..013eb3293ef6b2ef9f714e9f95f4539b32966137 100644
--- a/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c
+++ b/modules/service/stake_lock/dap_chain_net_srv_stake_lock.c
@@ -1359,40 +1359,6 @@ dap_chain_datum_t *dap_chain_net_srv_stake_lock_datum_create(dap_chain_net_t *a_
     return l_datum;
 }
 
-/**
- * @brief dap_chain_net_srv_stake_lock_create_cond_out
- * @param a_key
- * @param a_srv_uid
- * @param a_value
- * @param a_time_staking
- * @param token
- * @return
- */
-dap_chain_tx_out_cond_t *dap_chain_net_srv_stake_lock_create_cond_out(dap_pkey_t *a_key, dap_chain_net_srv_uid_t a_srv_uid,
-                                                                      uint256_t a_value, uint64_t a_time_staking,
-                                                                      uint256_t a_reinvest_percent, bool create_base_tx)
-{
-    if (IS_ZERO_256(a_value))
-        return NULL;
-    dap_chain_tx_out_cond_t *l_item = DAP_NEW_Z(dap_chain_tx_out_cond_t);
-    l_item->header.item_type = TX_ITEM_TYPE_OUT_COND;
-    l_item->header.value = a_value;
-    l_item->header.subtype = DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK;
-    l_item->header.srv_uid = a_srv_uid;
-    l_item->subtype.srv_stake_lock.reinvest_percent = a_reinvest_percent;
-    if (a_time_staking) {
-//		l_item->header.ts_expires = dap_time_now() + a_time_staking;
-        l_item->subtype.srv_stake_lock.time_unlock = dap_time_now() + a_time_staking;
-        l_item->subtype.srv_stake_lock.flags |= DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_BY_TIME;
-    }
-    if (create_base_tx)
-        l_item->subtype.srv_stake_lock.flags |= DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_CREATE_BASE_TX;
-    if (a_key)
-        dap_hash_fast(a_key->pkey, a_key->header.size, &l_item->subtype.srv_stake_lock.pkey_delegated);
-
-    return l_item;
-}
-
 dap_chain_datum_t *dap_chain_burning_tx_create(dap_chain_t *a_chain, dap_enc_key_t *a_key_from,
                                              const dap_chain_addr_t* a_addr_from, const dap_chain_addr_t* a_addr_to,
                                              const char a_token_ticker[DAP_CHAIN_TICKER_SIZE_MAX],
diff --git a/modules/service/stake_lock/include/dap_chain_net_srv_stake_lock.h b/modules/service/stake_lock/include/dap_chain_net_srv_stake_lock.h
index b6a086266f2d608db69b913264354a7ea59a4574..ea615ba5cb4602a966ce43357b5fd4ae5514da31 100644
--- a/modules/service/stake_lock/include/dap_chain_net_srv_stake_lock.h
+++ b/modules/service/stake_lock/include/dap_chain_net_srv_stake_lock.h
@@ -30,18 +30,6 @@
 
 #define DAP_CHAIN_NET_SRV_STAKE_LOCK_ID 0x12
 
-// Allow to spend stake by network
-// Need for service staking to enable network governance to fee the service provider
-#define DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_ENABLE_NET_FEE           0x00000001
-// Delegate token to prove thats stake is provided
-#define DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_DELEGATE_TOKEN           0x00000002
-// Delegate public key's hash
-#define DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_DELEGATE_PKEY            0x00000004
-// Lock by time
-#define DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_BY_TIME                  0x00000008
-// Create base tx for delegated token
-#define DAP_CHAIN_NET_SRV_STAKE_LOCK_FLAG_CREATE_BASE_TX           0x00000010
-
 /**
  * @brief The cond_params struct thats placed in tx_cond->params[] section
  */
@@ -50,10 +38,6 @@
 int 					dap_chain_net_srv_stake_lock_init(void);
 void					dap_chain_net_srv_stake_lock_deinit(void);
 
-// Create cond out
-dap_chain_tx_out_cond_t	*dap_chain_net_srv_stake_lock_create_cond_out(dap_pkey_t *a_key, dap_chain_net_srv_uid_t a_srv_uid,
-                                                                      uint256_t a_value, uint64_t a_time_staking,
-                                                                      uint256_t a_reinvest_percent, bool create_base_tx);
 // Create stake lock datum
 dap_chain_datum_t *dap_chain_net_srv_stake_lock_datum_create(dap_chain_net_t *a_net,
                                                    dap_enc_key_t *a_key_from, dap_pkey_t *a_key_cond,
diff --git a/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h b/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h
index 8d623501075b56cb9683f4b0ccb6ae7ed7106cdb..8d4067a88e4352f6da98096c486794c8f2a1dbed 100644
--- a/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h
+++ b/modules/service/stake_pos_delegate/include/dap_chain_net_srv_stake_pos_delegate.h
@@ -44,7 +44,17 @@ typedef struct dap_chain_net_srv_stake_item {
     dap_chain_node_addr_t node_addr;
     UT_hash_handle hh;
 } dap_chain_net_srv_stake_item_t;
-
+/*
+typedef struct dap_chain_net_srv_stake_item {
+    bool is_active;
+    dap_chain_net_t *net;
+    uint256_t value;
+    dap_chain_addr_t signing_addr;
+    dap_chain_hash_fast_t tx_hash;
+    dap_chain_node_addr_t node_addr;
+    UT_hash_handle hh;
+} dap_chain_net_srv_stake_item_t;
+*/
 typedef struct dap_srv_stake_order_ext {
     dap_chain_addr_t addr_hldr;
     dap_chain_addr_t signing_addr;