From 6756908d9feedc5852c60f7509c8515359c0eb2e Mon Sep 17 00:00:00 2001
From: "pavel.uhanov" <pavel.uhanov@demlabs.net>
Date: Thu, 20 Mar 2025 08:09:33 +0300
Subject: [PATCH] [*] use dap_chain_node_cli_cmd_id_from_str

---
 .../consensus/dag-poa/dap_chain_cs_dag_poa.c  |  2 +-
 .../consensus/esbocs/dap_chain_cs_esbocs.c    |  2 +-
 modules/net/dap_chain_net.c                   |  2 +-
 modules/net/dap_chain_node_cli.c              | 66 +++++++++----------
 modules/net/dap_chain_node_cli_cmd.c          | 52 +++++++++++++++
 modules/net/dap_chain_node_rpc.c              | 41 +++++++-----
 modules/net/include/dap_chain_node_cli.h      | 49 --------------
 modules/net/include/dap_chain_node_cli_cmd.h  | 53 +++++++++++++++
 modules/net/srv/dap_chain_net_srv.c           |  2 +-
 .../service/datum/dap_chain_net_srv_datum.c   |  2 +-
 .../dap_chain_net_srv_emit_delegate.c         |  2 +-
 .../stake/dap_chain_net_srv_stake_lock.c      |  3 +-
 .../dap_chain_net_srv_stake_pos_delegate.c    |  3 +-
 .../service/voting/dap_chain_net_srv_voting.c |  3 +-
 modules/service/vpn/dap_chain_net_srv_vpn.c   |  2 +-
 .../service/vpn/dap_chain_net_vpn_client.c    |  2 +-
 .../xchange/dap_chain_net_srv_xchange.c       |  3 +-
 modules/type/blocks/dap_chain_cs_blocks.c     |  2 +-
 modules/type/dag/dap_chain_cs_dag.c           |  2 +-
 19 files changed, 180 insertions(+), 113 deletions(-)

diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
index 1bfef5ffba..27519efd9b 100644
--- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
+++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c
@@ -109,7 +109,7 @@ int dap_chain_cs_dag_poa_init()
     // Add consensus constructor
     dap_chain_cs_add("dag_poa", s_callback_new);
     s_seed_mode = dap_config_get_item_bool_default(g_config,"general","seed_mode",false);
-    dap_cli_server_cmd_add ("dag_poa", s_cli_dag_poa, "DAG PoA commands",
+    dap_cli_server_cmd_add ("dag_poa", s_cli_dag_poa, "DAG PoA commands", dap_chain_node_cli_cmd_id_from_str("dag_poa"),
         "dag_poa event sign -net <net_name> [-chain <chain_name>] -event <event_hash> [-H {hex | base58(default)}]\n"
             "\tSign event <event hash> in the new round pool with its authorize certificate\n\n");
     s_debug_more = dap_config_get_item_bool_default(g_config, "dag", "debug_more", s_debug_more);
diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
index 29c1c01001..16d57a8bb0 100644
--- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c
+++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c
@@ -195,7 +195,7 @@ int dap_chain_cs_esbocs_init()
                            NULL,
                            s_stream_ch_packet_in,
                            NULL);
-    dap_cli_server_cmd_add (DAP_CHAIN_ESBOCS_CS_TYPE_STR, s_cli_esbocs, "ESBOCS commands",
+    dap_cli_server_cmd_add (DAP_CHAIN_ESBOCS_CS_TYPE_STR, s_cli_esbocs, "ESBOCS commands", dap_chain_node_cli_cmd_id_from_str(DAP_CHAIN_ESBOCS_CS_TYPE_STR),
         "esbocs min_validators_count set -net <net_name> [-chain <chain_name>] -cert <poa_cert_name> -val_count <value>\n"
             "\tSets minimum validators count for ESBOCS consensus\n"
         "esbocs min_validators_count show -net <net_name> [-chain <chain_name>]\n"
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index a1950dc342..ae4ba5370a 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -253,7 +253,7 @@ int dap_chain_net_init()
     dap_http_ban_list_client_init();
     dap_link_manager_init(&s_link_manager_callbacks);
     dap_chain_node_init();
-    dap_cli_server_cmd_add ("net", s_cli_net, "Network commands",
+    dap_cli_server_cmd_add ("net", s_cli_net, "Network commands", dap_chain_node_cli_cmd_id_from_str("net"),
         "net list [chains -net <net_name>]\n"
             "\tList all networks or list all chains in selected network\n"
         "net -net <net_name> [-mode {update | all}] go {online | offline | sync}\n"
diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c
index a5f19a24bf..dc230b60bf 100644
--- a/modules/net/dap_chain_node_cli.c
+++ b/modules/net/dap_chain_node_cli.c
@@ -69,7 +69,7 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
         dap_chain_node_rpc_init(g_config);
     }
 
-    dap_cli_server_cmd_add("global_db", com_global_db, "Work with global database",
+    dap_cli_server_cmd_add("global_db", com_global_db, "Work with global database", dap_chain_node_cli_cmd_id_from_str("global_db"),
             "global_db flush\n"
                 "\tFlushes the current state of the database to disk.\n\n"
             "global_db write -group <group_name> -key <key_name> -value <value>\n"
@@ -87,11 +87,11 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
 
 //                    "global_db wallet_info set -addr <wallet address> -cell <cell id> \n\n"
             );
-    dap_cli_server_cmd_add("mempool", com_signer, "Sign operations",
+    dap_cli_server_cmd_add("mempool", com_signer, "Sign operations", dap_chain_node_cli_cmd_id_from_str("mempool"),
                "mempool sign -cert <priv_cert_name> -net <net_name> -chain <chain_name> -file <filename> [-mime {<SIGNER_FILENAME,SIGNER_FILENAME_SHORT,SIGNER_FILESIZE,SIGNER_DATE,SIGNER_MIME_MAGIC> | <SIGNER_ALL_FLAGS>}]\n"
                "mempool check -cert <priv_cert_name> -net <net_name> {-file <filename> | -hash <hash>} [-mime {<SIGNER_FILENAME,SIGNER_FILENAME_SHORT,SIGNER_FILESIZE,SIGNER_DATE,SIGNER_MIME_MAGIC> | <SIGNER_ALL_FLAGS>}]\n"
                                           );
-    dap_cli_server_cmd_add("node", com_node, "Work with node",
+    dap_cli_server_cmd_add("node", com_node, "Work with node", dap_chain_node_cli_cmd_id_from_str("node"),
                     "node add -net <net_name> [-port <port>]\n\n"
                     "node del -net <net_name> {-addr <node_address> | -alias <node_alias>}\n\n"
                     "node link {add | del}  -net <net_name> {-addr <node_address> | -alias <node_alias>} -link <node_address>\n\n"
@@ -106,20 +106,20 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
                     "node unban -net <net_name> -certs <certs_name> [-addr <node_address> | -host <ip_v4_or_v6_address>]\n"
                     "node banlist\n\n");
     
-    dap_cli_server_cmd_add ("version", com_version, "Return software version",
+    dap_cli_server_cmd_add ("version", com_version, "Return software version", dap_chain_node_cli_cmd_id_from_str("version"),
                                         "version\n"
                                         "\tReturn version number\n"
                                         );
 
-    dap_cli_server_cmd_add ("help", com_help, "Description of command parameters",
+    dap_cli_server_cmd_add ("help", com_help, "Description of command parameters", dap_chain_node_cli_cmd_id_from_str("help"),
                                         "help [<command>]\n"
                                         "\tObtain help for <command> or get the total list of the commands\n"
                                         );
-    dap_cli_server_cmd_add ("?", com_help, "Synonym for \"help\"",
+    dap_cli_server_cmd_add ("?", com_help, "Synonym for \"help\"", dap_chain_node_cli_cmd_id_from_str("help"),
                                         "? [<command>]\n"
                                         "\tObtain help for <command> or get the total list of the commands\n"
                                         );
-    dap_cli_server_cmd_add ("token_update", com_token_update, "Token update",
+    dap_cli_server_cmd_add ("token_update", com_token_update, "Token update", dap_chain_node_cli_cmd_id_from_str("token_update"),
                             "\nPrivate or CF20 token update\n"
                             "token_update -net <net_name> [-chain <chain_name>] -token <existing_token_ticker> -type <CF20|private> [-total_supply_change <value>] "
                             "-certs <name_certs> [-flag_set <flag>] [-flag_unset <flag>] [-total_signs_valid <value>] [-description <value>] "
@@ -158,7 +158,7 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
                             "\t -tx_sender_blocked <wallet_addr>:\t Adds specified wallet address to the list of blocked senders.\n"
                             "\n"
     );
-    dap_cli_server_cmd_add ("wallet", com_tx_wallet, "Wallet operations",
+    dap_cli_server_cmd_add ("wallet", com_tx_wallet, "Wallet operations", dap_chain_node_cli_cmd_id_from_str("wallet"),
                             "wallet list\n"
                             "wallet new -w <wallet_name> [-sign <sign_type>] [-restore <hex_value> | -restore_legacy <restore_string>] [-net <net_name>] [-force] [-password <password>]\n"
                             "wallet info {-addr <addr> | -w <wallet_name>} -net <net_name>\n"
@@ -173,7 +173,7 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
 
 
     // Token commands
-    dap_cli_server_cmd_add ("token_decl", com_token_decl, "Token declaration",
+    dap_cli_server_cmd_add ("token_decl", com_token_decl, "Token declaration", dap_chain_node_cli_cmd_id_from_str("token_decl"),
             "Simple token declaration:\n"
             "token_decl -net <net_name> [-chain <chain_name>] -token <token_ticker> -total_supply <total_supply> -signs_total <sign_total> -signs_emission <signs_for_emission> -certs <certs_list>\n"
             "\t  Declare new simple token for <net_name>:<chain_name> with ticker <token_ticker>, maximum emission <total_supply> and <signs_for_emission> from <signs_total> signatures on valid emission\n"
@@ -221,22 +221,22 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
             "\n"
             );
 
-    dap_cli_server_cmd_add("token_update_sign", com_token_decl_sign, "Token update add sign to datum",
+    dap_cli_server_cmd_add("token_update_sign", com_token_decl_sign, "Token update add sign to datum", dap_chain_node_cli_cmd_id_from_str("token_update_sign"),
                                         "token_update_sign -net <net_name> [-chain <chain_name>] -datum <datum_hash> -certs <cert_list>\n"
                                         "\t Sign existent <datum hash> in mempool with <certs_list>\n"
     );
     // Token commands
 
-    dap_cli_server_cmd_add ("token_decl_sign", com_token_decl_sign, "Token declaration add sign",
+    dap_cli_server_cmd_add ("token_decl_sign", com_token_decl_sign, "Token declaration add sign", dap_chain_node_cli_cmd_id_from_str("token_decl_sign"),
             "token_decl_sign -net <net_name> [-chain <chain_name>] -datum <datum_hash> -certs <certs_list>\n"
             "\t Sign existent <datum_hash> in mempool with <certs_list>\n"
             );
 
-    dap_cli_server_cmd_add ("token_emit", com_token_emit, "Token emission",
+    dap_cli_server_cmd_add ("token_emit", com_token_emit, "Token emission", dap_chain_node_cli_cmd_id_from_str("token_emit"),
                             "token_emit { sign -emission <hash> | -token <mempool_token_ticker> -emission_value <value> -addr <addr> } "
                             "[-chain_emission <chain_name>] -net <net_name> -certs <cert_list>\n");
 
-    dap_cli_cmd_t *l_cmd_mempool = dap_cli_server_cmd_add("mempool", com_mempool, "Command for working with mempool",
+    dap_cli_cmd_t *l_cmd_mempool = dap_cli_server_cmd_add("mempool", com_mempool, "Command for working with mempool", dap_chain_node_cli_cmd_id_from_str("mempool"),
                            "mempool list -net <net_name> [-chain <chain_name>] [-addr <addr>] [-brief] [-limit] [-offset]\n"
                            "\tList mempool (entries or transaction) for (selected chain network or wallet)\n"
                            "mempool check -net <net_name> [-chain <chain_name>] -datum <datum_hash>\n"
@@ -263,68 +263,68 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
     dap_cli_server_alias_add(l_cmd_mempool, "add_ca", "chain_ca_copy");
 
     dap_cli_server_cmd_add ("chain_ca_pub", com_chain_ca_pub,
-                                        "Add pubic certificate into the mempool to prepare its way to chains",
+                                        "Add pubic certificate into the mempool to prepare its way to chains", dap_chain_node_cli_cmd_id_from_str("chain_ca_pub"),
             "chain_ca_pub -net <net_name> [-chain <chain_name>] -ca_name <priv_cert_name>\n");
 
     // Transaction commands
-    dap_cli_server_cmd_add ("tx_create", com_tx_create, "Make transaction",
+    dap_cli_server_cmd_add ("tx_create", com_tx_create, "Make transaction", dap_chain_node_cli_cmd_id_from_str("tx_create"),
             "tx_create -net <net_name> [-chain <chain_name>] -value <value> -token <token_ticker> -to_addr <addr>"
             "{-from_wallet <wallet_name> | -from_emission <emission_hash> {-cert <cert_name> | -wallet_fee <wallet_name>}} -fee <value>\n");
-    dap_cli_server_cmd_add ("tx_create_json", com_tx_create_json, "Make transaction",
+    dap_cli_server_cmd_add ("tx_create_json", com_tx_create_json, "Make transaction", dap_chain_node_cli_cmd_id_from_str("tx_create_json"),
                 "tx_create_json -net <net_name> [-chain <chain_name>] -json <json_file_path>\n" );
-    dap_cli_server_cmd_add ("tx_cond_create", com_tx_cond_create, "Make cond transaction",
+    dap_cli_server_cmd_add ("tx_cond_create", com_tx_cond_create, "Make cond transaction", dap_chain_node_cli_cmd_id_from_str("tx_cond_create"),
                                         "tx_cond_create -net <net_name> -token <token_ticker> -w <wallet_name>"
                                         " -cert <pub_cert_name> -value <value_datoshi> -fee <value> -unit {B | SEC} -srv_uid <numeric_uid>\n" );
-        dap_cli_server_cmd_add ("tx_cond_remove", com_tx_cond_remove, "Remove cond transactions and return funds from condition outputs to wallet",
+        dap_cli_server_cmd_add ("tx_cond_remove", com_tx_cond_remove, "Remove cond transactions and return funds from condition outputs to wallet", dap_chain_node_cli_cmd_id_from_str("tx_cond_remove"),
                                         "tx_cond_remove -net <net_name> -hashes <hash1,hash2...> -w <wallet_name>"
                                         " -fee <value> -srv_uid <numeric_uid>\n" );
-        dap_cli_server_cmd_add ("tx_cond_unspent_find", com_tx_cond_unspent_find, "Find cond transactions by wallet",
+        dap_cli_server_cmd_add ("tx_cond_unspent_find", com_tx_cond_unspent_find, "Find cond transactions by wallet", dap_chain_node_cli_cmd_id_from_str("tx_cond_unspent_find"),
                                         "tx_cond_unspent_find -net <net_name> -srv_uid <numeric_uid> -w <wallet_name> \n" );
 
-    dap_cli_server_cmd_add ("tx_verify", com_tx_verify, "Verifing transaction in mempool",
+    dap_cli_server_cmd_add ("tx_verify", com_tx_verify, "Verifing transaction in mempool", dap_chain_node_cli_cmd_id_from_str("tx_verify"),
             "tx_verify -net <net_name> [-chain <chain_name>] -tx <tx_hash>\n" );
 
     // Transaction history
-    dap_cli_server_cmd_add("tx_history", com_tx_history, "Transaction history (for address or by hash)",
+    dap_cli_server_cmd_add("tx_history", com_tx_history, "Transaction history (for address or by hash)", dap_chain_node_cli_cmd_id_from_str("tx_history"),
             "tx_history  {-addr <addr> | {-w <wallet_name> | -tx <tx_hash>} -net <net_name>} [-chain <chain_name>] [-limit] [-offset] [-head]\n"
             "tx_history -all -net <net_name> [-chain <chain_name>] [-limit] [-offset] [-head]\n"
             "tx_history -count -net <net_name>\n");
 
 	// Ledger info
-    dap_cli_server_cmd_add("ledger", com_ledger, "Ledger information",
+    dap_cli_server_cmd_add("ledger", com_ledger, "Ledger information", dap_chain_node_cli_cmd_id_from_str("ledger"),
             "ledger list coins -net <net_name> [-limit] [-offset]\n"
             "ledger list threshold [-hash <tx_treshold_hash>] -net <net_name> [-limit] [-offset] [-head]\n"
             "ledger list balance -net <net_name> [-limit] [-offset] [-head]\n"
             "ledger info -hash <tx_hash> -net <net_name> [-unspent]\n");
 
     // Token info
-    dap_cli_server_cmd_add("token", com_token, "Token info",
+    dap_cli_server_cmd_add("token", com_token, "Token info", dap_chain_node_cli_cmd_id_from_str("token"),
             "token list -net <net_name>\n"
             "token info -net <net_name> -name <token_ticker>\n");
 
     // Log
-    dap_cli_server_cmd_add ("print_log", com_print_log, "Print log info",
+    dap_cli_server_cmd_add ("print_log", com_print_log, "Print log info", dap_chain_node_cli_cmd_id_from_str("print_log"),
                 "print_log [ts_after <timestamp>] [limit <line_numbers>]\n" );
 
     // Statisticss
-    dap_cli_server_cmd_add("stats", com_stats, "Print statistics",
+    dap_cli_server_cmd_add("stats", com_stats, "Print statistics", dap_chain_node_cli_cmd_id_from_str("stats"),
                 "stats cpu");
 
     // Export GDB to JSON
-    dap_cli_server_cmd_add("gdb_export", cmd_gdb_export, "Export gdb to JSON",
+    dap_cli_server_cmd_add("gdb_export", cmd_gdb_export, "Export gdb to JSON", dap_chain_node_cli_cmd_id_from_str("gdb_export"),
                                         "gdb_export filename <filename without extension> [-groups <group names list>]");
 
     //Import GDB from JSON
-    dap_cli_server_cmd_add("gdb_import", cmd_gdb_import, "Import gdb from JSON",
+    dap_cli_server_cmd_add("gdb_import", cmd_gdb_import, "Import gdb from JSON", dap_chain_node_cli_cmd_id_from_str("gdb_import"),
                                         "gdb_import filename <filename_without_extension>");
 
-    dap_cli_server_cmd_add ("remove", cmd_remove, "Delete chain files or global database",
+    dap_cli_server_cmd_add ("remove", cmd_remove, "Delete chain files or global database", dap_chain_node_cli_cmd_id_from_str("remove"),
            "remove -gdb\n"
            "remove -chains [-net <net_name> | -all]\n"
                      "Be careful, the '-all' option for '-chains' will delete all chains and won't ask you for permission!");
 
     // Decree create command
-    dap_cli_server_cmd_add ("decree", cmd_decree, "Work with decree",
+    dap_cli_server_cmd_add ("decree", cmd_decree, "Work with decree", dap_chain_node_cli_cmd_id_from_str("decree"),
             "decree create common -net <net_name> [-chain <chain_name>] -decree_chain <chain_name> -certs <certs_list> {-fee <net_fee_value> -to_addr <net_fee_wallet_addr> | -new_certs <new_owners_certs_list> | -signs_verify <value>}\n"
             "Creates common network decree in net <net_name>. Decree adds to chain -chain and applies to chain -decree_chain. If -chain and -decree_chain is different you must create anchor in -decree_chain that is connected to this decree."
             "\nCommon decree parameters:\n"
@@ -343,11 +343,11 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
             "decree info -net <net_name>\n"
             "Displays information about the parameters of the decrees in the network.\n");
 
-    dap_cli_server_cmd_add ("exec_cmd", com_exec_cmd, "Execute command on remote node",
+    dap_cli_server_cmd_add ("exec_cmd", com_exec_cmd, "Execute command on remote node", dap_chain_node_cli_cmd_id_from_str("exec_cmd"),
             "exec_cmd -net <net_name> -addr <node_addr> -cmd <command,and,all,args,separated,by,commas>\n" );
 
     //Find command
-    dap_cli_server_cmd_add("find", cmd_find, "The command searches for the specified elements by the specified attributes",
+    dap_cli_server_cmd_add("find", cmd_find, "The command searches for the specified elements by the specified attributes", dap_chain_node_cli_cmd_id_from_str("find"),
                            "find datum -net <net_name> [-chain <chain_name>] -hash <datum_hash>\n"
                            "\tSearches for datum by hash in the specified network in chains and mempool.\n"
                            "find atom -net <net_name> [-chain <chain_name>] -hash <atom_hash>\n"
@@ -358,7 +358,7 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
                            "min_validators_count, ban, unban, reward, validator_max_weight, emergency_validators, check_signs_structure\n");
 
 
-    dap_cli_server_cmd_add ("policy", com_policy, "Policy commands",
+    dap_cli_server_cmd_add ("policy", com_policy, "Policy commands", dap_chain_node_cli_cmd_id_from_str("policy"),
                 "policy activate - prepare policy activate decree\n"
                 "\t[execute] - used to create policy decree, otherwise show policy decree draft\n"
                 "\t-net <net_name>\n"
@@ -378,7 +378,7 @@ int dap_chain_node_cli_init(dap_config_t * g_config)
                 "policy list - show all policies from table in net\n"
                 "\t-net <net_name>\n");
     // Exit - always last!
-    dap_cli_server_cmd_add ("exit", com_exit, "Stop application and exit",
+    dap_cli_server_cmd_add ("exit", com_exit, "Stop application and exit", dap_chain_node_cli_cmd_id_from_str("exit"),
                 "exit\n" );
     dap_notify_srv_set_callback_new(dap_notify_new_client_send_info);
     return 0;
diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c
index 3300918974..830a736bf1 100644
--- a/modules/net/dap_chain_node_cli_cmd.c
+++ b/modules/net/dap_chain_node_cli_cmd.c
@@ -8538,3 +8538,55 @@ int com_policy(int argc, char **argv, void **reply) {
 
     return 0;
 }
+
+dap_chain_node_cli_cmd_t dap_chain_node_cli_cmd_id_from_str(const char *a_cmd_str)
+{
+    if(!a_cmd_str) return DAP_CHAIN_NODE_CLI_CMD_ID_UNKNOWN;
+    if (!strcmp(a_cmd_str, "tx_history")) return DAP_CHAIN_NODE_CLI_CMD_ID_TX_HISTORY;
+    if (!strcmp(a_cmd_str, "wallet")) return DAP_CHAIN_NODE_CLI_CMD_ID_WALLET;
+    if (!strcmp(a_cmd_str, "mempool")) return DAP_CHAIN_NODE_CLI_CMD_ID_MEMPOOL;
+    if (!strcmp(a_cmd_str, "ledger")) return DAP_CHAIN_NODE_CLI_CMD_ID_LEDGER;
+    if (!strcmp(a_cmd_str, "tx_create")) return DAP_CHAIN_NODE_CLI_CMD_ID_TX_CREATE;
+    if (!strcmp(a_cmd_str, "tx_create_json")) return DAP_CHAIN_NODE_CLI_CMD_ID_TX_CREATE_JSON;
+    if (!strcmp(a_cmd_str, "tx_verify")) return DAP_CHAIN_NODE_CLI_CMD_ID_TX_VERIFY;
+    if (!strcmp(a_cmd_str, "tx_cond_create")) return DAP_CHAIN_NODE_CLI_CMD_ID_TX_COND_CREATE;
+    if (!strcmp(a_cmd_str, "tx_cond_remove")) return DAP_CHAIN_NODE_CLI_CMD_ID_TX_COND_REMOVE;
+    if (!strcmp(a_cmd_str, "tx_cond_unspent_find")) return DAP_CHAIN_NODE_CLI_CMD_ID_TX_COND_UNSPENT_FIND;
+    if (!strcmp(a_cmd_str, "chain_ca_copy")) return DAP_CHAIN_NODE_CLI_CMD_ID_CHAIN_CA_COPY;
+    if (!strcmp(a_cmd_str, "dag")) return DAP_CHAIN_NODE_CLI_CMD_ID_DAG;
+    if (!strcmp(a_cmd_str, "dag_poa")) return DAP_CHAIN_NODE_CLI_CMD_ID_DAG_POA;
+    if (!strcmp(a_cmd_str, "block")) return DAP_CHAIN_NODE_CLI_CMD_ID_BLOCK;
+    if (!strcmp(a_cmd_str, "token")) return DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN;
+    if (!strcmp(a_cmd_str, "esbocs")) return DAP_CHAIN_NODE_CLI_CMD_ID_ESBOCS;
+    if (!strcmp(a_cmd_str, "net_srv")) return DAP_CHAIN_NODE_CLI_CMD_ID_NET_SRV;
+    if (!strcmp(a_cmd_str, "net")) return DAP_CHAIN_NODE_CLI_CMD_ID_NET;
+    if (!strcmp(a_cmd_str, "srv_stake")) return DAP_CHAIN_NODE_CLI_CMD_ID_SRV_STAKE;
+    if (!strcmp(a_cmd_str, "srv_datum")) return DAP_CHAIN_NODE_CLI_CMD_ID_SRV_DATUM;
+    if (!strcmp(a_cmd_str, "poll")) return DAP_CHAIN_NODE_CLI_CMD_ID_POLL;
+    if (!strcmp(a_cmd_str, "srv_xchange")) return DAP_CHAIN_NODE_CLI_CMD_ID_SRV_XCHANGE;
+    if (!strcmp(a_cmd_str, "emit_delegate")) return DAP_CHAIN_NODE_CLI_CMD_ID_EMIT_DELEGATE;
+    if (!strcmp(a_cmd_str, "token_decl")) return DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_DECL;
+    if (!strcmp(a_cmd_str, "token_update")) return DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_UPDATE;
+    if (!strcmp(a_cmd_str, "token_update_sign")) return DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_UPDATE_SIGN;
+    if (!strcmp(a_cmd_str, "token_decl_sign")) return DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_DECL_SIGN;
+    if (!strcmp(a_cmd_str, "chain_ca_pub")) return DAP_CHAIN_NODE_CLI_CMD_ID_CHAIN_CA_PUB;
+    if (!strcmp(a_cmd_str, "token_emit")) return DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_EMIT;
+    if (!strcmp(a_cmd_str, "find")) return DAP_CHAIN_NODE_CLI_CMD_ID_FIND;
+    if (!strcmp(a_cmd_str, "version")) return DAP_CHAIN_NODE_CLI_CMD_ID_VERSION;
+    if (!strcmp(a_cmd_str, "remove")) return DAP_CHAIN_NODE_CLI_CMD_ID_REMOVE;
+    if (!strcmp(a_cmd_str, "global_db")) return DAP_CHAIN_NODE_CLI_CMD_ID_GLOBAL_DB;
+    if (!strcmp(a_cmd_str, "gdb_import")) return DAP_CHAIN_NODE_CLI_CMD_ID_GDB_IMPORT;
+    if (!strcmp(a_cmd_str, "gdb_export")) return DAP_CHAIN_NODE_CLI_CMD_ID_GDB_EXPORT;
+    if (!strcmp(a_cmd_str, "stats")) return DAP_CHAIN_NODE_CLI_CMD_ID_STATS;
+    if (!strcmp(a_cmd_str, "print_log")) return DAP_CHAIN_NODE_CLI_CMD_ID_PRINT_LOG;
+    if (!strcmp(a_cmd_str, "stake_lock")) return DAP_CHAIN_NODE_CLI_CMD_ID_STAKE_LOCK;
+    if (!strcmp(a_cmd_str, "exec_cmd")) return DAP_CHAIN_NODE_CLI_CMD_ID_EXEC_CMD;
+    if (!strcmp(a_cmd_str, "policy")) return DAP_CHAIN_NODE_CLI_CMD_ID_POLICY;
+    if (!strcmp(a_cmd_str, "decree")) return DAP_CHAIN_NODE_CLI_CMD_ID_DECREE;
+    if (!strcmp(a_cmd_str, "node")) return DAP_CHAIN_NODE_CLI_CMD_ID_NODE;
+    if (!strcmp(a_cmd_str, "vpn_stat")) return DAP_CHAIN_NODE_CLI_CMD_ID_VPN_STAT;
+    if (!strcmp(a_cmd_str, "vpn_client")) return DAP_CHAIN_NODE_CLI_CMD_ID_VPN_CLIENT;
+    if (!strcmp(a_cmd_str, "help")) return DAP_CHAIN_NODE_CLI_CMD_ID_HELP;
+    if (!strcmp(a_cmd_str, "exit")) return DAP_CHAIN_NODE_CLI_CMD_ID_EXIT;
+    return DAP_CHAIN_NODE_CLI_CMD_ID_UNKNOWN;
+}
diff --git a/modules/net/dap_chain_node_rpc.c b/modules/net/dap_chain_node_rpc.c
index 1bfc174a6c..0fec020f5a 100644
--- a/modules/net/dap_chain_node_rpc.c
+++ b/modules/net/dap_chain_node_rpc.c
@@ -30,6 +30,7 @@
 
 typedef enum {
     RPC_ROLE_INVALID = 0,
+    RPC_ROLE_USER,
     RPC_ROLE_BALANCER,
     RPC_ROLE_SERVER,
     RPC_ROLE_ROOT
@@ -44,6 +45,7 @@ static dap_global_db_cluster_t *s_rpc_node_list_cluster = NULL;
 DAP_STATIC_INLINE s_get_role_from_str(const char *a_str)
 {
     if (!a_str) return RPC_ROLE_INVALID;
+    if (!strcmp(a_str, "user")) return RPC_ROLE_USER;
     if (!strcmp(a_str, "balancer")) return RPC_ROLE_BALANCER;
     if (!strcmp(a_str, "server")) return RPC_ROLE_SERVER;
     if (!strcmp(a_str, "root")) return RPC_ROLE_SERVER;
@@ -82,23 +84,6 @@ void dap_chain_node_rpc_init(dap_config_t *a_cfg)
 {
     rpc_role_t l_role = s_get_role_from_str(dap_config_get_item_str(a_cfg, "rpc", "role"));
     
-    if (l_role == RPC_ROLE_SERVER || l_role == RPC_ROLE_BALANCER) {
-        if (!(s_rpc_server_states_cluster = dap_global_db_cluster_add(
-            dap_global_db_instance_get_default(), DAP_STREAM_CLUSTER_GLOBAL,
-            *(dap_guuid_t *)&uint128_0, s_rpc_server_states_group,
-            0,
-            true, DAP_GDB_MEMBER_ROLE_USER, DAP_CLUSTER_TYPE_EMBEDDED)))
-        {
-            log_it(L_ERROR, "Can't create rpc server states cluster");
-            return;
-        }
-        if (l_role == RPC_ROLE_SERVER) {
-            if (dap_proc_thread_timer_add(NULL, s_update_node_rpc_states_info, NULL, s_timer_update_states_info))
-                log_it(L_ERROR, "Can't activate timer on node states update");
-            else
-                dap_cli_server_statistic_callback_add(s_collect_state_info);
-        }
-    }
     if (l_role != RPC_ROLE_INVALID) {
         if (!(s_rpc_node_list_cluster = dap_global_db_cluster_add(
                 dap_global_db_instance_get_default(), DAP_STREAM_CLUSTER_GLOBAL,
@@ -115,7 +100,29 @@ void dap_chain_node_rpc_init(dap_config_t *a_cfg)
         for (uint16_t i = 0; i < l_authorized_nodes_count; ++i)
             dap_global_db_cluster_member_add(s_rpc_node_list_cluster, l_authorized_nodes + i, DAP_GDB_MEMBER_ROLE_ROOT);
         DAP_DELETE(l_authorized_nodes);
+    } else {
+        log_it(L_ERROR, "Can't recognized rpc role, please check config");
+        return;
+    }
+    if (l_role == RPC_ROLE_SERVER || l_role == RPC_ROLE_BALANCER || l_role == RPC_ROLE_USER) {
+        if (!(s_rpc_server_states_cluster = dap_global_db_cluster_add(
+            dap_global_db_instance_get_default(), DAP_STREAM_CLUSTER_GLOBAL,
+            *(dap_guuid_t *)&uint128_0, s_rpc_server_states_group,
+            0,
+            true, DAP_GDB_MEMBER_ROLE_USER, DAP_CLUSTER_TYPE_EMBEDDED)))
+        {
+            log_it(L_ERROR, "Can't create rpc server states cluster");
+            return;
+        }
+        if (l_role == RPC_ROLE_SERVER) {
+            if (dap_proc_thread_timer_add(NULL, s_update_node_rpc_states_info, NULL, s_timer_update_states_info))
+                log_it(L_ERROR, "Can't activate timer on node states update");
+            else
+                dap_cli_server_statistic_callback_add(s_collect_state_info);
+        }
     }
+    if (l_role == RPC_ROLE_ROOT && !dap_chain_node_rpc_is_my_node_authorized())
+        log_it(L_WARNING, "Your addres not finded in authorized rpc node list");
 }
 
 /**
diff --git a/modules/net/include/dap_chain_node_cli.h b/modules/net/include/dap_chain_node_cli.h
index 133530c0aa..1a13538cb5 100644
--- a/modules/net/include/dap_chain_node_cli.h
+++ b/modules/net/include/dap_chain_node_cli.h
@@ -36,55 +36,6 @@
 extern "C" {
 #endif
 
-typedef enum dap_chain_node_cli_cmd {
-    DAP_CHAIN_NODE_CLI_CMD_ID_EXIT,
-    DAP_CHAIN_NODE_CLI_CMD_ID_TX_HISTORY,
-    DAP_CHAIN_NODE_CLI_CMD_ID_WALLET,
-    DAP_CHAIN_NODE_CLI_CMD_ID_MEMPOOL,
-    DAP_CHAIN_NODE_CLI_CMD_ID_LEDGER,
-    DAP_CHAIN_NODE_CLI_CMD_ID_TX_CREATE,
-    DAP_CHAIN_NODE_CLI_CMD_ID_TX_CREATE_JSON,
-    DAP_CHAIN_NODE_CLI_CMD_ID_TX_VERIFY,
-    DAP_CHAIN_NODE_CLI_CMD_ID_TX_COND_CREATE,
-    DAP_CHAIN_NODE_CLI_CMD_ID_TX_COND_REMOVE,
-    DAP_CHAIN_NODE_CLI_CMD_ID_TX_COND_UNSPENT_FIND,
-    DAP_CHAIN_NODE_CLI_CMD_ID_CHAIN_CA_COPY,
-    DAP_CHAIN_NODE_CLI_CMD_ID_DAG,
-    DAP_CHAIN_NODE_CLI_CMD_ID_DAG_POA,
-    DAP_CHAIN_NODE_CLI_CMD_ID_BLOCK,
-    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN,
-    DAP_CHAIN_NODE_CLI_CMD_ID_ESBOCS,
-    DAP_CHAIN_NODE_CLI_CMD_ID_GLOBAL_DB,
-    DAP_CHAIN_NODE_CLI_CMD_ID_NET_SRV,
-    DAP_CHAIN_NODE_CLI_CMD_ID_NET,
-    DAP_CHAIN_NODE_CLI_CMD_ID_SRV_STAKE,
-    DAP_CHAIN_NODE_CLI_CMD_ID_SRV_DATUM,
-    DAP_CHAIN_NODE_CLI_CMD_ID_POLL,
-    DAP_CHAIN_NODE_CLI_CMD_ID_SRV_XCHANGE,
-    DAP_CHAIN_NODE_CLI_CMD_ID_EMIT_DELEGATE,
-    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_DECL,
-    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_UPDATE,
-    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_UPDATE_SIGN,
-    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_DECL_SIGN,
-    DAP_CHAIN_NODE_CLI_CMD_ID_CHAIN_CA_PUB,
-    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_EMIT,
-    DAP_CHAIN_NODE_CLI_CMD_ID_FIND,
-    DAP_CHAIN_NODE_CLI_CMD_ID_VERSION,
-    DAP_CHAIN_NODE_CLI_CMD_ID_REMOVE,
-    DAP_CHAIN_NODE_CLI_CMD_ID_GDB_IMPORT,
-    DAP_CHAIN_NODE_CLI_CMD_ID_GDB_EXPORT,
-    DAP_CHAIN_NODE_CLI_CMD_ID_STATS,
-    DAP_CHAIN_NODE_CLI_CMD_ID_PRINT_LOG,
-    DAP_CHAIN_NODE_CLI_CMD_ID_STAKE_LOCK,
-    DAP_CHAIN_NODE_CLI_CMD_ID_EXEC_CMD,
-    DAP_CHAIN_NODE_CLI_CMD_ID_POLICY,
-    DAP_CHAIN_NODE_CLI_CMD_ID_DECREE,
-    DAP_CHAIN_NODE_CLI_CMD_ID_NODE,
-    DAP_CHAIN_NODE_CLI_CMD_ID_VPN_STAT,
-    DAP_CHAIN_NODE_CLI_CMD_ID_VPN_CLIENT,
-    DAP_CHAIN_NODE_CLI_CMD_ID_HELP,
-    DAP_CHAIN_NODE_CLI_CMD_ID_TOTAL
-} dap_chain_node_cli_cmd_t;
 
 /**
  * Initialization of the server side of the interaction
diff --git a/modules/net/include/dap_chain_node_cli_cmd.h b/modules/net/include/dap_chain_node_cli_cmd.h
index fba416a4c8..c7e6124436 100644
--- a/modules/net/include/dap_chain_node_cli_cmd.h
+++ b/modules/net/include/dap_chain_node_cli_cmd.h
@@ -417,6 +417,59 @@ typedef enum s_com_print_log_err{
     DAP_CHAIN_NODE_CLI_COM_PRINT_LOG_NO_LOGS
 }s_com_print_log_err_t;
 
+typedef enum dap_chain_node_cli_cmd {
+    DAP_CHAIN_NODE_CLI_CMD_ID_UNKNOWN,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TX_HISTORY,
+    DAP_CHAIN_NODE_CLI_CMD_ID_WALLET,
+    DAP_CHAIN_NODE_CLI_CMD_ID_MEMPOOL,
+    DAP_CHAIN_NODE_CLI_CMD_ID_LEDGER,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TX_CREATE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TX_CREATE_JSON,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TX_VERIFY,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TX_COND_CREATE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TX_COND_REMOVE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TX_COND_UNSPENT_FIND,
+    DAP_CHAIN_NODE_CLI_CMD_ID_CHAIN_CA_COPY,
+    DAP_CHAIN_NODE_CLI_CMD_ID_DAG,
+    DAP_CHAIN_NODE_CLI_CMD_ID_DAG_POA,
+    DAP_CHAIN_NODE_CLI_CMD_ID_BLOCK,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN,
+    DAP_CHAIN_NODE_CLI_CMD_ID_ESBOCS,
+    DAP_CHAIN_NODE_CLI_CMD_ID_GLOBAL_DB,
+    DAP_CHAIN_NODE_CLI_CMD_ID_NET_SRV,
+    DAP_CHAIN_NODE_CLI_CMD_ID_NET,
+    DAP_CHAIN_NODE_CLI_CMD_ID_SRV_STAKE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_SRV_DATUM,
+    DAP_CHAIN_NODE_CLI_CMD_ID_POLL,
+    DAP_CHAIN_NODE_CLI_CMD_ID_SRV_XCHANGE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_EMIT_DELEGATE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_DECL,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_UPDATE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_UPDATE_SIGN,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_DECL_SIGN,
+    DAP_CHAIN_NODE_CLI_CMD_ID_CHAIN_CA_PUB,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TOKEN_EMIT,
+    DAP_CHAIN_NODE_CLI_CMD_ID_FIND,
+    DAP_CHAIN_NODE_CLI_CMD_ID_VERSION,
+    DAP_CHAIN_NODE_CLI_CMD_ID_REMOVE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_GDB_IMPORT,
+    DAP_CHAIN_NODE_CLI_CMD_ID_GDB_EXPORT,
+    DAP_CHAIN_NODE_CLI_CMD_ID_STATS,
+    DAP_CHAIN_NODE_CLI_CMD_ID_PRINT_LOG,
+    DAP_CHAIN_NODE_CLI_CMD_ID_STAKE_LOCK,
+    DAP_CHAIN_NODE_CLI_CMD_ID_EXEC_CMD,
+    DAP_CHAIN_NODE_CLI_CMD_ID_POLICY,
+    DAP_CHAIN_NODE_CLI_CMD_ID_DECREE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_NODE,
+    DAP_CHAIN_NODE_CLI_CMD_ID_VPN_STAT,
+    DAP_CHAIN_NODE_CLI_CMD_ID_VPN_CLIENT,
+    DAP_CHAIN_NODE_CLI_CMD_ID_HELP,
+    DAP_CHAIN_NODE_CLI_CMD_ID_EXIT,
+    DAP_CHAIN_NODE_CLI_CMD_ID_TOTAL
+} dap_chain_node_cli_cmd_t;
+
+dap_chain_node_cli_cmd_t dap_chain_node_cli_cmd_id_from_str(const char *a_cmd_str);
+
 int com_tx_cond_remove(int a_argc, char **a_argv, void **reply);
 int com_tx_cond_unspent_find(int a_argc, char **a_argv, void **reply);
 
diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c
index f0a757bc49..58e78521ba 100644
--- a/modules/net/srv/dap_chain_net_srv.c
+++ b/modules/net/srv/dap_chain_net_srv.c
@@ -92,7 +92,7 @@ int dap_chain_net_srv_init()
     dap_ledger_verificator_add(DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY, s_pay_verificator_callback, NULL, NULL);
     dap_ledger_verificator_add(DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE, s_fee_verificator_callback, NULL, NULL);
 
-    dap_cli_server_cmd_add ("net_srv", s_cli_net_srv, "Network services managment",
+    dap_cli_server_cmd_add ("net_srv", s_cli_net_srv, "Network services managment", dap_chain_node_cli_cmd_id_from_str("net_srv"),
         "net_srv -net <net_name> order find [-direction {sell|buy}] [-srv_uid <service_UID>] [-price_unit <price_unit>]"
         " [-price_token <token_ticker>] [-price_min <price_minimum>] [-price_max <price_maximum>]\n"
         "\tOrders list, all or by UID and/or class\n"
diff --git a/modules/service/datum/dap_chain_net_srv_datum.c b/modules/service/datum/dap_chain_net_srv_datum.c
index 64e1dafd6c..ac77777177 100644
--- a/modules/service/datum/dap_chain_net_srv_datum.c
+++ b/modules/service/datum/dap_chain_net_srv_datum.c
@@ -46,7 +46,7 @@ static bool s_tag_check_datum(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx
 
 int dap_chain_net_srv_datum_init()
 {
-    dap_cli_server_cmd_add("srv_datum", s_srv_datum_cli, "Service Datum commands", 
+    dap_cli_server_cmd_add("srv_datum", s_srv_datum_cli, "Service Datum commands", dap_chain_node_cli_cmd_id_from_str("srv_datum"),
         "srv_datum -net <net_name> -chain <chain_name> datum save -datum <datum_hash>\n"
             "\tSaving datum from mempool to file.\n\n"
         "srv_datum -net <net_name> -chain <chain_name> datum load -datum <datum_hash>\n"
diff --git a/modules/service/emit-delegate/dap_chain_net_srv_emit_delegate.c b/modules/service/emit-delegate/dap_chain_net_srv_emit_delegate.c
index 4a16024466..a46c564b0b 100644
--- a/modules/service/emit-delegate/dap_chain_net_srv_emit_delegate.c
+++ b/modules/service/emit-delegate/dap_chain_net_srv_emit_delegate.c
@@ -1138,7 +1138,7 @@ static int s_cli_emit_delegate(int a_argc, char **a_argv, void **a_str_reply)
 int dap_chain_net_srv_emit_delegate_init()
 {
     dap_ledger_verificator_add(DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_EMIT_DELEGATE, s_emit_delegate_verificator, NULL, NULL);
-    dap_cli_server_cmd_add("emit_delegate", s_cli_emit_delegate, "Emitting delegation service commands",
+    dap_cli_server_cmd_add("emit_delegate", s_cli_emit_delegate, "Emitting delegation service commands", dap_chain_node_cli_cmd_id_from_str("emit_delegate"),
                 "emit_delegate hold - to create new delegation\n"
                 "\t-net <net_name>\n"
                 "\t-w <wallet_name> - wallet to writeoff value, pay fee and sign tx\n"
diff --git a/modules/service/stake/dap_chain_net_srv_stake_lock.c b/modules/service/stake/dap_chain_net_srv_stake_lock.c
index e3b3ccc2fc..7878c23e6c 100644
--- a/modules/service/stake/dap_chain_net_srv_stake_lock.c
+++ b/modules/service/stake/dap_chain_net_srv_stake_lock.c
@@ -33,6 +33,7 @@
 #include "dap_chain_mempool.h"
 #include "dap_chain_net_srv.h"
 #include "dap_cli_server.h"
+#include "dap_chain_node_cli.h"
 
 static bool s_debug_more = false;
 
@@ -251,7 +252,7 @@ static bool s_tag_check_staking(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_
 int dap_chain_net_srv_stake_lock_init()
 {
     dap_ledger_verificator_add(DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_LOCK, s_stake_lock_callback_verificator, s_stake_lock_callback_updater, NULL);
-    dap_cli_server_cmd_add("stake_lock", s_cli_stake_lock, "Stake lock service commands",
+    dap_cli_server_cmd_add("stake_lock", s_cli_stake_lock, "Stake lock service commands", dap_chain_node_cli_cmd_id_from_str("stake_lock"),
                 "stake_lock hold -net <net_name> -w <wallet_name> -time_staking <YYMMDD> -token <ticker> -value <value> -fee <value>"
                             "[-chain <chain_name>] [-reinvest <percentage>]\n"
                 "stake_lock take -net <net_name> -w <wallet_name> -tx <transaction_hash> -fee <value>"
diff --git a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
index 73fe463d10..977ba8118a 100644
--- a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
+++ b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c
@@ -43,6 +43,7 @@
 #include "dap_json_rpc_errors.h"
 #include "dap_cli_server.h"
 #include "dap_chain_net_srv_order.h"
+#include "dap_chain_node_cli.h"
 
 #define LOG_TAG "dap_chain_net_srv_stake_pos_delegate"
 
@@ -142,7 +143,7 @@ static bool s_tag_check_key_delegation(dap_ledger_t *a_ledger, dap_chain_datum_t
 int dap_chain_net_srv_stake_pos_delegate_init()
 {
     dap_ledger_verificator_add(DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_STAKE_POS_DELEGATE, s_stake_verificator_callback, s_stake_updater_callback, s_stake_deleted_callback);
-    dap_cli_server_cmd_add("srv_stake", s_cli_srv_stake, "Delegated stake service commands",
+    dap_cli_server_cmd_add("srv_stake", s_cli_srv_stake, "Delegated stake service commands", dap_chain_node_cli_cmd_id_from_str("srv_stake"),
             "\t\t=== Commands for work with orders ===\n"
     "srv_stake order create [fee] -net <net_name> -value <value> -cert <priv_cert_name> [-H {hex(default) | base58}]\n"
         "\tCreates an order declaring the minimum fee that the validator agrees to for process a transaction.\n"
diff --git a/modules/service/voting/dap_chain_net_srv_voting.c b/modules/service/voting/dap_chain_net_srv_voting.c
index fb8f37c799..e5e7cd185f 100644
--- a/modules/service/voting/dap_chain_net_srv_voting.c
+++ b/modules/service/voting/dap_chain_net_srv_voting.c
@@ -38,6 +38,7 @@
 #include "utlist.h"
 #include "dap_cli_server.h"
 #include "dap_chain_wallet_cache.h"
+#include "dap_chain_node_cli.h"
 
 #define LOG_TAG "chain_net_voting"
 
@@ -117,7 +118,7 @@ int dap_chain_net_srv_voting_init()
     pthread_rwlock_init(&s_votings_rwlock, NULL);
     dap_chain_ledger_voting_verificator_add(s_datum_tx_voting_verification_callback, s_datum_tx_voting_verification_delete_callback);
     dap_cli_cmd_t *l_poll_cmd = dap_cli_server_cmd_add(
-                "poll", s_cli_voting, "Voting/poll commands",
+                "poll", s_cli_voting, "Voting/poll commands", dap_chain_node_cli_cmd_id_from_str("poll"),
                             "poll create -net <net_name> -question <\"Question_string\"> -options <\"Option0\", \"Option1\" ... \"OptionN\"> [-expire <poll_expire_time_in_RCF822>]"
                                            " [-max_votes_count <Votes_count>] [-delegated_key_required] [-vote_changing_allowed] -fee <value_datoshi> -w <fee_wallet_name> [-token <ticker>]\n"
                             "poll vote -net <net_name> -hash <poll_hash> -option_idx <option_index> [-cert <delegate_cert_name>] -fee <value_datoshi> -w <fee_wallet_name>\n"
diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c
index 2eb22a5d7a..a26ae18e37 100644
--- a/modules/service/vpn/dap_chain_net_srv_vpn.c
+++ b/modules/service/vpn/dap_chain_net_srv_vpn.c
@@ -920,7 +920,7 @@ int dap_chain_net_srv_vpn_init(dap_config_t * g_config) {
             s_ch_packet_out);
 
     // add console command to display vpn statistics
-    dap_cli_server_cmd_add ("vpn_stat", com_vpn_statistics, "VPN statistics",
+    dap_cli_server_cmd_add ("vpn_stat", com_vpn_statistics, "VPN statistics", dap_chain_node_cli_cmd_id_from_str("vpn_stat"),
             "vpn_stat -net <net_name> [-full]\n"
             );
 
diff --git a/modules/service/vpn/dap_chain_net_vpn_client.c b/modules/service/vpn/dap_chain_net_vpn_client.c
index 753da5a726..723d209b8b 100644
--- a/modules/service/vpn/dap_chain_net_vpn_client.c
+++ b/modules/service/vpn/dap_chain_net_vpn_client.c
@@ -751,7 +751,7 @@ int dap_chain_net_vpn_client_init(dap_config_t * g_config)
     pthread_mutex_init(&sf_socks_mutex, NULL);
 
     // vpn client command
-    dap_cli_server_cmd_add ("vpn_client", com_vpn_client, "VPN client control",
+    dap_cli_server_cmd_add ("vpn_client", com_vpn_client, "VPN client control", dap_chain_node_cli_cmd_id_from_str("vpn_client"),
     "vpn_client [start -addr <server_address> -port <server_port>|stop|status] -net <net_name>\n"
     "vpn_client init -w <wallet_name> -token <token_name> -value <value> -net <net_name>\n"
             "vpn_client stop -net <net_name>\n"
diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c
index 433f453f17..9d078b0cb2 100644
--- a/modules/service/xchange/dap_chain_net_srv_xchange.c
+++ b/modules/service/xchange/dap_chain_net_srv_xchange.c
@@ -47,6 +47,7 @@
 #include "uthash.h"
 #include "dap_cli_server.h"
 #include "dap_chain_wallet_cache.h"
+#include "dap_chain_node_cli.h"
 
 #define LOG_TAG "dap_chain_net_srv_xchange"
 
@@ -218,7 +219,7 @@ static bool s_tag_check_xchange(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_
 int dap_chain_net_srv_xchange_init()
 {
     dap_ledger_verificator_add(DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_XCHANGE, s_xchange_verificator_callback, NULL, NULL);
-    dap_cli_server_cmd_add("srv_xchange", s_cli_srv_xchange, "eXchange service commands",
+    dap_cli_server_cmd_add("srv_xchange", s_cli_srv_xchange, "eXchange service commands", dap_chain_node_cli_cmd_id_from_str("srv_xchange"),
 
     "srv_xchange order create -net <net_name> -token_sell <token_ticker> -token_buy <token_ticker> -w <wallet_name>"
                                             " -value <value> -rate <value> -fee <value>\n"
diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index b21899511e..3e33304d19 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -190,7 +190,7 @@ int dap_chain_cs_blocks_init()
     dap_chain_cs_type_add("blocks", s_chain_cs_blocks_new, NULL);
     s_seed_mode = dap_config_get_item_bool_default(g_config,"general","seed_mode",false);
     s_debug_more = dap_config_get_item_bool_default(g_config, "blocks", "debug_more", false);
-    dap_cli_server_cmd_add ("block", s_cli_blocks, "Create and explore blockchains",
+    dap_cli_server_cmd_add ("block", s_cli_blocks, "Create and explore blockchains", dap_chain_node_cli_cmd_id_from_str("block"),
         "New block create, fill and complete commands:\n"
             "block -net <net_name> [-chain <chain_name>] new\n"
                 "\t\tCreate new block and flush memory if was smth formed before\n\n"
diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c
index c5abe99b23..8063dceb09 100644
--- a/modules/type/dag/dap_chain_cs_dag.c
+++ b/modules/type/dag/dap_chain_cs_dag.c
@@ -153,7 +153,7 @@ int dap_chain_cs_dag_init()
     s_debug_more        = dap_config_get_item_bool_default(g_config, "dag",     "debug_more",       false);
     s_threshold_enabled = dap_config_get_item_bool_default(g_config, "dag",     "threshold_enabled",false);
     debug_if(s_debug_more, L_DEBUG, "Thresholding %s", s_threshold_enabled ? "enabled" : "disabled");
-    dap_cli_server_cmd_add ("dag", s_cli_dag, "DAG commands",
+    dap_cli_server_cmd_add ("dag", s_cli_dag, "DAG commands", dap_chain_node_cli_cmd_id_from_str("dag"),
         "dag event sign -net <net_name> [-chain <chain_name>] -event <event_hash>\n"
             "\tAdd sign to event <event hash> in round.new. Hash doesn't include other signs so event hash\n"
             "\tdoesn't changes after sign add to event. \n\n"
-- 
GitLab