diff --git a/dap_chain_node_cli_cmd.c b/dap_chain_node_cli_cmd.c
index dcd7122fbc738eac130d40357c297618f051050c..a6c8110de21afdb0eab122feba28b628db45f87f 100644
--- a/dap_chain_node_cli_cmd.c
+++ b/dap_chain_node_cli_cmd.c
@@ -72,9 +72,11 @@
 #include "dap_chain_node_cli_cmd_tx.h"
 #include "dap_chain_node_ping.h"
 #include "dap_chain_net_srv.h"
+#include "dap_chain_net_srv_vpn.h"
 #include "dap_chain_net_vpn_client.h"
 #include "dap_chain_cell.h"
 
+#include "dap_chain_common.h"
 #include "dap_chain_datum.h"
 #include "dap_chain_datum_token.h"
 #include "dap_chain_datum_tx_items.h"
@@ -2551,24 +2553,122 @@ int com_token_emit(int argc, char ** argv, char ** str_reply)
 int com_tx_cond_create(int argc, char ** argv, char **str_reply)
 {
     (void) argc;
-    // test
-    /*
-    const char * l_token_ticker = NULL;
+    int arg_index = 1;
     const char *c_wallets_path = dap_chain_wallet_get_path(g_config);
-    const char *c_wallet_name_from = "w_tesla"; // where to take coins for service
-    const char *c_wallet_name_cond = "w_picnic"; // who will be use service, usually the same address (addr_from)
-    uint64_t l_value = 50;
+    const char * l_token_ticker = NULL;
+    const char * l_wallet_from_str = NULL;
+    const char * l_wallet_to_str = NULL; //l_addr_to_str
+    const char * l_value_datoshi_str = NULL;
+    const char * l_net_name = NULL;
+    const char * l_unit_str = NULL;
+    const char * l_service_str = NULL;
+    uint64_t l_value_datoshi = 0;
+
+    // Token ticker
+    dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-token", &l_token_ticker);
+    // Wallet name - from
+    dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-wallet_f", &l_wallet_from_str);
+    // Wallet address - to
+    dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-wallet_t", &l_wallet_to_str);
+    // value datoshi
+    dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-value", &l_value_datoshi_str);
+    // net
+    dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-net", &l_net_name);
+    // unit
+    dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-unit", &l_unit_str);
+    // service
+    dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-service", &l_service_str);
+
+    if(!l_token_ticker) {
+        dap_chain_node_cli_set_reply_text(str_reply, "tx_cond_create requires parameter '-token'");
+        return -1;
+    }
+    if(!l_wallet_from_str) {
+        dap_chain_node_cli_set_reply_text(str_reply, "tx_cond_create requires parameter '-wallet_f'");
+        return -2;
+    }
+    if(!l_wallet_to_str) {
+        dap_chain_node_cli_set_reply_text(str_reply, "tx_cond_create requires parameter '-wallet_t'");
+        return -3;
+    }
+    if(!l_value_datoshi_str) {
+        dap_chain_node_cli_set_reply_text(str_reply, "tx_cond_create requires parameter '-value'");
+        return -4;
+    }
 
-    dap_chain_wallet_t *l_wallet_from = dap_chain_wallet_open(c_wallet_name_from, c_wallets_path);
-    dap_enc_key_t *l_key = dap_chain_wallet_get_key(l_wallet_from, 0);
-    dap_chain_wallet_t *l_wallet_cond = dap_chain_wallet_open(c_wallet_name_cond, c_wallets_path);
+    if(!l_net_name) {
+        dap_chain_node_cli_set_reply_text(str_reply, "tx_cond_create requires parameter '-net'");
+        return -5;
+    }
+    if(!l_unit_str) {
+        dap_chain_node_cli_set_reply_text(str_reply, "tx_cond_create requires parameter '-unit={mb|kb|b|sec|day}'");
+        return -6;
+    }
+    if(!l_service_str) {
+        dap_chain_node_cli_set_reply_text(str_reply, "tx_cond_create requires parameter '-service={vpn}'");
+        return -7;
+    }
+    dap_chain_net_srv_uid_t l_srv_uid = { 0 };
+    if(!dap_strcmp(l_service_str, "vpn"))
+        l_srv_uid.uint64 = DAP_CHAIN_NET_SRV_VPN_ID;
+    //dap_chain_addr_t *addr_to = dap_chain_addr_from_str(l_addr_to_str);
+    if(!l_srv_uid.uint64) {
+        dap_chain_node_cli_set_reply_text(str_reply, "can't recognize service='%s' unit must look like {vpn}",
+                l_service_str);
+        return -8;
+    }
+
+    dap_chain_net_srv_price_unit_uid_t l_price_unit = { .enm = SERV_UNIT_UNDEFINED };
+    if(!dap_strcmp(l_unit_str, "mb"))
+        l_price_unit.enm = SERV_UNIT_MB;
+    else if(!dap_strcmp(l_unit_str, "sec"))
+        l_price_unit.enm = SERV_UNIT_SEC;
+    else if(!dap_strcmp(l_unit_str, "day"))
+        l_price_unit.enm = SERV_UNIT_DAY;
+    else if(!dap_strcmp(l_unit_str, "kb"))
+        l_price_unit.enm = SERV_UNIT_KB;
+    else if(!dap_strcmp(l_unit_str, "b"))
+        l_price_unit.enm = SERV_UNIT_B;
+
+    if(l_price_unit.enm == SERV_UNIT_UNDEFINED) {
+        dap_chain_node_cli_set_reply_text(str_reply, "can't recognize unit='%s' unit must look like {mb|kb|b|sec|day}",
+                l_unit_str);
+        return -9;
+    }
+
+    l_value_datoshi = strtoll(l_value_datoshi_str, NULL, 10);
+    if(!l_value_datoshi) {
+        dap_chain_node_cli_set_reply_text(str_reply, "can't recognize value='%s' as a number", l_value_datoshi_str);
+        return -10;
+    }
+
+    dap_chain_net_t * l_net = l_net_name ? dap_chain_net_by_name(l_net_name) : NULL;
+    if(!l_net) {
+        dap_chain_node_cli_set_reply_text(str_reply, "can't find net '%s'", l_net_name);
+        return -11;
+    }
+    dap_chain_wallet_t *l_wallet_from = dap_chain_wallet_open(l_wallet_from_str, c_wallets_path);
+    if(!l_wallet_from) {
+        dap_chain_node_cli_set_reply_text(str_reply, "can't open wallet '%s'", l_wallet_from);
+        return -12;
+    }
+    dap_chain_wallet_t *l_wallet_cond = dap_chain_wallet_open(l_wallet_to_str, c_wallets_path);
+    if(!l_wallet_to_str) {
+        dap_chain_wallet_close(l_wallet_from);
+        dap_chain_node_cli_set_reply_text(str_reply, "can't open wallet '%s'", l_wallet_to_str);
+        return -13;
+    }
+    dap_enc_key_t *l_key_from = dap_chain_wallet_get_key(l_wallet_from, 0);
     dap_enc_key_t *l_key_cond = dap_chain_wallet_get_key(l_wallet_cond, 0);
+
+
     // where to take coins for service
-    const dap_chain_addr_t *addr_from = dap_chain_wallet_get_addr(l_wallet_from);
+    const dap_chain_addr_t *l_addr_from = dap_chain_wallet_get_addr(l_wallet_from, l_net->pub.id);
     // who will be use service, usually the same address (addr_from)
-    const dap_chain_addr_t *addr_cond = dap_chain_wallet_get_addr(l_wallet_cond);
+    //const dap_chain_addr_t *l_addr_cond = dap_chain_wallet_get_addr(l_wallet_cond, l_net->pub.id);
+
 
-    dap_chain_net_srv_abstract_t l_cond;
+/*    //dap_chain_net_srv_abstract_t l_cond;
 //    dap_chain_net_srv_abstract_set(&l_cond, SERV_CLASS_PERMANENT, SERV_ID_VPN, l_value, SERV_UNIT_MB,
 //            "test vpn service");
 //    dap_ledger_t *l_ledger = dap_chain_ledger_by_net_name((const char *) c_net_name);
@@ -2576,14 +2676,33 @@ int com_tx_cond_create(int argc, char ** argv, char **str_reply)
     int res = dap_chain_mempool_tx_create_cond(NULL, l_key, l_key_cond, addr_from,
             addr_cond,
             NULL, l_token_ticker, l_value, 0, (const void*) &l_cond, sizeof(dap_chain_net_srv_abstract_t));
+*/
+
+    dap_chain_hash_fast_t *l_tx_cond_hash = dap_chain_mempool_tx_create_cond(l_net, l_key_from, l_key_cond, l_addr_from, l_token_ticker,
+            l_value_datoshi, 0, l_price_unit, l_srv_uid, 0, NULL, 0);
 
     dap_chain_wallet_close(l_wallet_from);
     dap_chain_wallet_close(l_wallet_cond);
-    dap_chain_node_cli_set_reply_text(str_reply, "cond create=%s\n",
+
+    char *l_hash_str = l_tx_cond_hash ? dap_chain_hash_fast_to_str_new(l_tx_cond_hash) : NULL;
+
+    /*dap_chain_node_cli_set_reply_text(str_reply, "cond create=%s\n",
             (res == 0) ? "Ok" : (res == -2) ? "False, not enough funds for service fee" : "False");
-    return res;
-    */
-    return  -1;
+    return res;*/
+
+    int l_ret;
+    // example: cond create succefully hash=0x4AA303EB7C10430C0AAC42F399D265BC7DD09E3983E088E02B8CED38DA22EDA9
+    if(l_hash_str){
+        dap_chain_node_cli_set_reply_text(str_reply, "cond create succefully hash=%s\n", l_hash_str);
+        l_ret = 0;
+    }
+    else{
+        dap_chain_node_cli_set_reply_text(str_reply, "cond can't create\n");
+        l_ret = -1;
+    }
+
+    DAP_DELETE(l_hash_str);
+    return  l_ret;
 }
 
 /**