From 73eb92ff400d84594be63f3ab848a3b586383d16 Mon Sep 17 00:00:00 2001 From: "roman.padenkov" <roman.padenkov@demlabs.net> Date: Tue, 4 Mar 2025 19:49:44 +0700 Subject: [PATCH 1/5] ... --- dap-sdk | 2 +- modules/net/dap_chain_node_cli_cmd.c | 55 +++++++++++++++++++++++++--- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/dap-sdk b/dap-sdk index d9b03ffb93..3491640b76 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit d9b03ffb93d4003cb1a33c6470612a7f88ad6005 +Subproject commit 3491640b76de5715eb3936ccd377abd51d88b99e diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index a5db76bcfe..acfa1c20a6 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -1505,9 +1505,11 @@ int com_help(int a_argc, char **a_argv, void **a_str_reply) } -void s_wallet_list(const char *a_wallet_path, json_object *a_json_arr_out){ +void s_wallet_list(const char *a_wallet_path, json_object *a_json_arr_out, dap_chain_addr_t *a_addr){ if (!a_wallet_path || !a_json_arr_out) return; + const char *l_addr_str = NULL; + dap_chain_addr_t * l_addr = NULL; DIR * l_dir = opendir(a_wallet_path); if(l_dir) { struct dirent * l_dir_entry = NULL; @@ -1518,7 +1520,7 @@ void s_wallet_list(const char *a_wallet_path, json_object *a_json_arr_out){ size_t l_file_name_len = (l_file_name) ? strlen(l_file_name) : 0; unsigned int res = 0; json_object * json_obj_wall = json_object_new_object(); - if (!json_obj_wall) + if (!json_obj_wall) return; if ( (l_file_name_len > 8) && (!strcmp(l_file_name + l_file_name_len - 8, ".dwallet")) ) { char l_file_path_tmp[MAX_PATH] = {0}; @@ -1526,6 +1528,28 @@ void s_wallet_list(const char *a_wallet_path, json_object *a_json_arr_out){ dap_chain_wallet_t *l_wallet = dap_chain_wallet_open(l_file_name, a_wallet_path, &res); if (l_wallet) { + if (a_addr) { + l_addr = dap_chain_wallet_get_addr(l_wallet, a_addr->net_id); + if (dap_chain_addr_compare(l_addr, a_addr)) { + json_object_object_add(json_obj_wall, "wallet", json_object_new_string(l_file_name)); + if(l_wallet->flags & DAP_WALLET$M_FL_ACTIVE) + json_object_object_add(json_obj_wall, "status", json_object_new_string("protected-active")); + else + json_object_object_add(json_obj_wall, "status", json_object_new_string("unprotected")); + json_object_object_add(json_obj_wall, "deprecated", json_object_new_string( + strlen(dap_chain_wallet_check_sign(l_wallet))!=0 ? "true" : "false")); + } + else { + json_object_put(json_obj_wall); + dap_chain_wallet_close(l_wallet); + DAP_DEL_Z(l_addr); + continue; + } + DAP_DEL_Z(l_addr); + dap_chain_wallet_close(l_wallet); + json_object_array_add(a_json_arr_out, json_obj_wall); + break; + } //l_addr = l_net ? dap_chain_wallet_get_addr(l_wallet, l_net->pub.id) : NULL; // const char *l_addr_str = dap_chain_addr_to_str_static(l_addr); json_object_object_add(json_obj_wall, "Wallet", json_object_new_string(l_file_name)); @@ -1550,6 +1574,12 @@ void s_wallet_list(const char *a_wallet_path, json_object *a_json_arr_out){ } json_object_array_add(a_json_arr_out, json_obj_wall); } + if (a_addr && (json_object_array_length(a_json_arr_out) == 0)) { + json_object * json_obj_out = json_object_new_object(); + if (!json_obj_out) return; + json_object_object_add(json_obj_out, "status", json_object_new_string("not found")); + json_object_array_add(a_json_arr_out, json_obj_out); + } closedir(l_dir); } } @@ -1568,7 +1598,8 @@ int com_tx_wallet(int a_argc, char **a_argv, void **a_str_reply) { json_object ** a_json_arr_reply = (json_object **) a_str_reply; const char *c_wallets_path = dap_chain_wallet_get_path(g_config); -enum { CMD_NONE, CMD_WALLET_NEW, CMD_WALLET_LIST, CMD_WALLET_INFO, CMD_WALLET_ACTIVATE, CMD_WALLET_DEACTIVATE, CMD_WALLET_CONVERT, CMD_WALLET_OUTPUTS }; +enum { CMD_NONE, CMD_WALLET_NEW, CMD_WALLET_LIST, CMD_WALLET_INFO, CMD_WALLET_ACTIVATE, + CMD_WALLET_DEACTIVATE, CMD_WALLET_CONVERT, CMD_WALLET_OUTPUTS, CMD_WALLET_FIND}; int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; // find add parameter ('alias' or 'handshake') @@ -1586,6 +1617,8 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; cmd_num = CMD_WALLET_CONVERT; else if(dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, dap_min(a_argc, l_arg_index + 1), "outputs", NULL)) cmd_num = CMD_WALLET_OUTPUTS; + else if(dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, dap_min(a_argc, l_arg_index + 1), "find", NULL)) + cmd_num = CMD_WALLET_FIND; l_arg_index++; @@ -1629,7 +1662,7 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; switch (cmd_num) { // wallet list case CMD_WALLET_LIST: - s_wallet_list(c_wallets_path, json_arr_out); + s_wallet_list(c_wallets_path, json_arr_out, NULL); break; // wallet info case CMD_WALLET_INFO: { @@ -1841,6 +1874,18 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; json_object_object_add(json_obj_wall, "outs", l_json_outs_arr); json_object_array_add(json_arr_out, json_obj_wall); } break; + case CMD_WALLET_FIND: { + if (l_addr_str) { + l_addr = dap_chain_addr_from_str(l_addr_str); + if (l_addr) + s_wallet_list(c_wallets_path, json_arr_out, l_addr); + else { + dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_COM_TX_WALLET_ADDR_ERR, + "addr not recognized"); + return DAP_CHAIN_NODE_CLI_COM_TX_WALLET_ADDR_ERR; + } + } + } break; default: { if( !l_wallet_name ) { dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_COM_TX_WALLET_NAME_ERR, @@ -7981,7 +8026,7 @@ struct json_object *wallet_list_json_collect(){ struct json_object *l_json = json_object_new_object(); json_object_object_add(l_json, "class", json_object_new_string("WalletList")); struct json_object *l_j_wallets = json_object_new_array(); - s_wallet_list(dap_chain_wallet_get_path(g_config), l_j_wallets); + s_wallet_list(dap_chain_wallet_get_path(g_config), l_j_wallets, NULL); json_object_object_add(l_json, "wallets", l_j_wallets); return l_json; } -- GitLab From 01d9df51ea2e30f3c7dd8d2c43b15074d430f5fd Mon Sep 17 00:00:00 2001 From: "roman.padenkov" <roman.padenkov@demlabs.net> Date: Wed, 5 Mar 2025 16:44:31 +0700 Subject: [PATCH 2/5] ... --- modules/net/dap_chain_node_cli.c | 3 ++- modules/net/dap_chain_node_cli_cmd.c | 20 ++++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c index 5faac29320..817d2dc672 100644 --- a/modules/net/dap_chain_node_cli.c +++ b/modules/net/dap_chain_node_cli.c @@ -160,7 +160,8 @@ int dap_chain_node_cli_init(dap_config_t * g_config) "wallet activate -w <wallet_name> -password <password> [-ttl <password_ttl_in_minutes>]\n" "wallet deactivate -w <wallet_name>>\n" "wallet outputs {-addr <addr> | -w <wallet_name>} -net <net_name> -token <token_tiker> [-value <uint256_value>]\n" - "wallet convert -w <wallet_name> {-password <password> | -remove_password }\n"); + "wallet convert -w <wallet_name> {-password <password> | -remove_password }\n" + "wallet find -addr <addr> {-file <file path>}\n"); // Token commands diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index acfa1c20a6..fd31eeeccc 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -1571,6 +1571,9 @@ void s_wallet_list(const char *a_wallet_path, json_object *a_json_arr_out, dap_c } else if ((l_file_name_len > 7) && (!strcmp(l_file_name + l_file_name_len - 7, ".backup"))) { json_object_object_add(json_obj_wall, "Wallet", json_object_new_string(l_file_name)); json_object_object_add(json_obj_wall, "status", json_object_new_string("Backup")); + } else if (a_addr) { + json_object_put(json_obj_wall); + continue; } json_object_array_add(a_json_arr_out, json_obj_wall); } @@ -1629,7 +1632,7 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; } const char *l_addr_str = NULL, *l_wallet_name = NULL, *l_net_name = NULL, *l_sign_type_str = NULL, *l_restore_str = NULL, - *l_pass_str = NULL, *l_ttl_str = NULL; + *l_pass_str = NULL, *l_ttl_str = NULL, *l_file_path = NULL; // find wallet addr dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-addr", &l_addr_str); @@ -1637,6 +1640,7 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-net", &l_net_name); dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-password", &l_pass_str); dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-sign", &l_sign_type_str); + dap_cli_server_cmd_find_option_val(a_argv, l_arg_index, a_argc, "-file", &l_file_path); // Check if wallet name has only digits and English letter if (l_wallet_name && !dap_isstralnum(l_wallet_name)){ @@ -1877,14 +1881,22 @@ int l_arg_index = 1, l_rc, cmd_num = CMD_NONE; case CMD_WALLET_FIND: { if (l_addr_str) { l_addr = dap_chain_addr_from_str(l_addr_str); - if (l_addr) - s_wallet_list(c_wallets_path, json_arr_out, l_addr); + if (l_addr) { + if (l_file_path) + s_wallet_list(l_file_path, json_arr_out, l_addr); + else + s_wallet_list(c_wallets_path, json_arr_out, l_addr); + } else { dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_COM_TX_WALLET_ADDR_ERR, "addr not recognized"); return DAP_CHAIN_NODE_CLI_COM_TX_WALLET_ADDR_ERR; } - } + } else { + dap_json_rpc_error_add(*a_json_arr_reply, DAP_CHAIN_NODE_CLI_COM_TX_WALLET_ADDR_ERR, + "You should use -addr option for the wallet find command."); + return DAP_CHAIN_NODE_CLI_COM_TX_WALLET_ADDR_ERR; + } } break; default: { if( !l_wallet_name ) { -- GitLab From cca1e770fdf3f93b1fc0b8d11fb11935146f9ea0 Mon Sep 17 00:00:00 2001 From: "roman.padenkov" <roman.padenkov@demlabs.net> Date: Wed, 5 Mar 2025 16:51:49 +0700 Subject: [PATCH 3/5] sub update --- dap-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dap-sdk b/dap-sdk index 3491640b76..a7b6da64ee 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 3491640b76de5715eb3936ccd377abd51d88b99e +Subproject commit a7b6da64ee24a3aba64dcbbd5f3f356069d853ad -- GitLab From ceeebc91daa7490096aa14730f08b154b5303ed9 Mon Sep 17 00:00:00 2001 From: "roman.padenkov" <roman.padenkov@demlabs.net> Date: Thu, 6 Mar 2025 19:35:43 +0700 Subject: [PATCH 4/5] ... --- modules/net/dap_chain_node_cli_cmd.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index fd31eeeccc..5a094ffd33 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -1530,7 +1530,7 @@ void s_wallet_list(const char *a_wallet_path, json_object *a_json_arr_out, dap_c if (l_wallet) { if (a_addr) { l_addr = dap_chain_wallet_get_addr(l_wallet, a_addr->net_id); - if (dap_chain_addr_compare(l_addr, a_addr)) { + if (l_addr && dap_chain_addr_compare(l_addr, a_addr)) { json_object_object_add(json_obj_wall, "wallet", json_object_new_string(l_file_name)); if(l_wallet->flags & DAP_WALLET$M_FL_ACTIVE) json_object_object_add(json_obj_wall, "status", json_object_new_string("protected-active")); @@ -1563,18 +1563,18 @@ void s_wallet_list(const char *a_wallet_path, json_object *a_json_arr_out, dap_c // json_object_object_add(json_obj_wall, "addr", json_object_new_string(l_addr_str)); // } dap_chain_wallet_close(l_wallet); - } else{ + } else if (!a_addr){ json_object_object_add(json_obj_wall, "Wallet", json_object_new_string(l_file_name)); if(res==4)json_object_object_add(json_obj_wall, "status", json_object_new_string("protected-inactive")); else if(res != 0)json_object_object_add(json_obj_wall, "status", json_object_new_string("invalid")); } - } else if ((l_file_name_len > 7) && (!strcmp(l_file_name + l_file_name_len - 7, ".backup"))) { - json_object_object_add(json_obj_wall, "Wallet", json_object_new_string(l_file_name)); - json_object_object_add(json_obj_wall, "status", json_object_new_string("Backup")); } else if (a_addr) { json_object_put(json_obj_wall); continue; - } + } else if ((l_file_name_len > 7) && (!strcmp(l_file_name + l_file_name_len - 7, ".backup"))) { + json_object_object_add(json_obj_wall, "Wallet", json_object_new_string(l_file_name)); + json_object_object_add(json_obj_wall, "status", json_object_new_string("Backup")); + } json_object_array_add(a_json_arr_out, json_obj_wall); } if (a_addr && (json_object_array_length(a_json_arr_out) == 0)) { -- GitLab From 4c9ad2881aa19ef9d5eed4061ef7475bf3e8bc3c Mon Sep 17 00:00:00 2001 From: "roman.padenkov" <roman.padenkov@demlabs.net> Date: Tue, 11 Mar 2025 18:10:26 +0700 Subject: [PATCH 5/5] ... --- modules/net/dap_chain_node_cli_cmd.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 5a094ffd33..62d87846aa 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -1574,8 +1574,11 @@ void s_wallet_list(const char *a_wallet_path, json_object *a_json_arr_out, dap_c } else if ((l_file_name_len > 7) && (!strcmp(l_file_name + l_file_name_len - 7, ".backup"))) { json_object_object_add(json_obj_wall, "Wallet", json_object_new_string(l_file_name)); json_object_object_add(json_obj_wall, "status", json_object_new_string("Backup")); - } - json_object_array_add(a_json_arr_out, json_obj_wall); + } + if (json_object_object_length(json_obj_wall)) + json_object_array_add(a_json_arr_out, json_obj_wall); + else + json_object_put(json_obj_wall); } if (a_addr && (json_object_array_length(a_json_arr_out) == 0)) { json_object * json_obj_out = json_object_new_object(); -- GitLab