From 0cf6df3ae6d14b90c2571092a09dfc6769275c81 Mon Sep 17 00:00:00 2001 From: Roman Khlopkov <roman.khlopkov@demlabs.net> Date: Wed, 26 Apr 2023 15:59:51 +0300 Subject: [PATCH] [+] Decree find subcommand --- modules/net/dap_chain_node_cli.c | 1 + modules/net/dap_chain_node_cli_cmd_tx.c | 44 ++++++++++++++++++------- modules/type/dag/dap_chain_cs_dag.c | 2 +- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c index e0255892b6..8c3355f0ae 100644 --- a/modules/net/dap_chain_node_cli.c +++ b/modules/net/dap_chain_node_cli.c @@ -322,6 +322,7 @@ int dap_chain_node_cli_init(dap_config_t * g_config) "decree create service -net <net_name> [-chain <chain_name>] -decree_chain <chain_name> -srv_id <service_id> -certs <certs list> -<Subtype param name> <Subtype param Value>\n" "decree sign -net <net_name> [-chain <chain_name>] -datum <datum_hash> -certs <certs_list>\n" "decree anchor -net <net_name> -chain <chain_name> -datum <datum_hash> -certs <certs_list>\n" + "decree find -net <net_name> -hash <decree_hash>. Find decree by hash and show it's status (apllied or not)" "==Subtype Params==\n" "\t -fee <value>: sets fee for tx in net\n" "\t -to_addr <wallet_addr>: sets wallet addr for network fee\n" diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c index ef1e975c91..d5948c0287 100644 --- a/modules/net/dap_chain_node_cli_cmd_tx.c +++ b/modules/net/dap_chain_node_cli_cmd_tx.c @@ -1200,7 +1200,7 @@ static dap_chain_datum_anchor_t * s_sign_anchor_in_cycle(dap_cert_t ** a_certs, // Decree commands handlers int cmd_decree(int a_argc, char **a_argv, char ** a_str_reply) { - enum { CMD_NONE=0, CMD_CREATE, CMD_SIGN, CMD_ANCHOR }; + enum { CMD_NONE=0, CMD_CREATE, CMD_SIGN, CMD_ANCHOR, CMD_FIND }; enum { TYPE_NONE=0, TYPE_COMMON, TYPE_SERVICE}; enum { SUBTYPE_NONE=0, SUBTYPE_FEE, SUBTYPE_OWNERS, SUBTYPE_MIN_OWNERS}; int arg_index = 1; @@ -1242,15 +1242,19 @@ int cmd_decree(int a_argc, char **a_argv, char ** a_str_reply) else if (dap_cli_server_cmd_find_option_val(a_argv, 1, 2, "sign", NULL)) l_cmd = CMD_SIGN; else if (dap_cli_server_cmd_find_option_val(a_argv, 1, 2, "anchor", NULL)) - l_cmd = CMD_ANCHOR; - - // Public certifiacte of condition owner - dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-certs", &l_certs_str); - if (!l_certs_str) { - dap_cli_server_cmd_set_reply_text(a_str_reply, "decree create requires parameter '-certs'"); - return -106; + l_cmd = CMD_ANCHOR; + else if (dap_cli_server_cmd_find_option_val(a_argv, 1, 2, "find", NULL)) + l_cmd = CMD_FIND; + + if (l_cmd != CMD_FIND) { + // Public certifiacte of condition owner + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-certs", &l_certs_str); + if (!l_certs_str) { + dap_cli_server_cmd_set_reply_text(a_str_reply, "decree create requires parameter '-certs'"); + return -106; + } + dap_cert_parse_str_list(l_certs_str, &l_certs, &l_certs_count); } - dap_cert_parse_str_list(l_certs_str, &l_certs, &l_certs_count); switch (l_cmd) { @@ -1482,7 +1486,7 @@ int cmd_decree(int a_argc, char **a_argv, char ** a_str_reply) case CMD_SIGN:{ if(!l_certs_count) { dap_cli_server_cmd_set_reply_text(a_str_reply, - "decree sign command requres at least one valid certificate to sign the basic transaction of emission"); + "decree sign command requres at least one valid certificate to sign"); return -106; } @@ -1673,8 +1677,26 @@ int cmd_decree(int a_argc, char **a_argv, char ** a_str_reply) l_key_str_out ? "" : " not"); break; } + case CMD_FIND: { + const char *l_hash_str = NULL; + dap_cli_server_cmd_find_option_val(a_argv, arg_index, a_argc, "-hash", &l_hash_str); + if (!l_hash_str) { + dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'decree find' requiers parameter '-hash'"); + return -110; + } + dap_hash_fast_t l_datum_hash; + if (dap_chain_hash_fast_from_hex_str(l_hash_str, &l_datum_hash) && + dap_chain_hash_fast_from_base58_str(l_hash_str, &l_datum_hash)) { + dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't convert '-hash' parameter to numeric value"); + return -111; + } + bool l_applied = false; + dap_chain_datum_decree_t *l_decree = dap_chain_net_decree_get_by_hash(&l_datum_hash, &l_applied); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Specified decree is %s in decrees hash-table", + l_decree ? (l_applied ? "apllied" : "not applied") : "not found"); + } break; default: - dap_cli_server_cmd_set_reply_text(a_str_reply, "Not found decree action. Use create, sign or anchor parametr"); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Not found decree action. Use create, sign, anchor or find parameter"); return -1; } diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index 68d59ae5cc..d29b0958c3 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -1675,7 +1675,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) dap_string_append_printf(l_str_tmp,"\nEvent %s:\n", l_event_hash_str); // Round info - if ( strcmp(l_from_events_str,"round.new") == 0 ){ + if (l_from_events_str && strcmp(l_from_events_str,"round.new") == 0) { dap_string_append_printf(l_str_tmp, "\tRound info:\n\t\tsigns reject: %d\n", l_round_item->round_info.reject_count); -- GitLab