diff --git a/dap_chain_node_cli.c b/dap_chain_node_cli.c index a53a53ed498f859abdbd0f53bacfa53536eca3e3..cc2f6caa016806bd2a370a8fa647bcef43385b12 100644 --- a/dap_chain_node_cli.c +++ b/dap_chain_node_cli.c @@ -835,6 +835,9 @@ int dap_chain_node_cli_init(dap_config_t * g_config) dap_chain_node_cli_cmd_item_create ("tx_verify", com_tx_verify, "Verifing transaction", "tx_verify -wallet <wallet name> [-path <wallet path>]\n" ); + // Transaction history + dap_chain_node_cli_cmd_item_create("tx_history", com_tx_history, "Transaction history", + "tx_verify -addr <addr> -w <wallet name> [-path <wallet path>]\n"); // Log dap_chain_node_cli_cmd_item_create ("print_log", com_print_log, "Print log info", "print_log [ts_after <timestamp >] [limit <line numbers>]\n" ); diff --git a/dap_chain_node_cli_cmd.c b/dap_chain_node_cli_cmd.c index 75802c9796eaab53009f9c9d46d324e24fb05f65..ab463f811e0a62ccfc072b76d639b2a9e6aa55a8 100644 --- a/dap_chain_node_cli_cmd.c +++ b/dap_chain_node_cli_cmd.c @@ -455,7 +455,7 @@ static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_add if ( l_addr ) { } }else { // Dump list - dap_global_db_obj_t **l_objs = NULL; + dap_global_db_obj_t *l_objs = NULL; size_t l_nodes_count = 0; dap_chain_node_info_t *l_node_info; // read all node @@ -467,7 +467,7 @@ static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_add }else { dap_string_append_printf(l_string_reply,"Got %u records:\n",l_nodes_count); for(size_t i = 0; i < l_nodes_count; i++) { - dap_chain_node_info_t *node_info = (dap_chain_node_info_t *) l_objs[i]->value; + dap_chain_node_info_t *node_info = (dap_chain_node_info_t *) l_objs[i].value; // find addr by alias or addr_str dap_chain_node_addr_t *address = node_info_get_addr(a_net, node_info, &node_info->hdr.address, a_alias); if(!address) { @@ -539,6 +539,7 @@ static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_add DAP_DELETE(node_info_read); } } + dap_chain_global_db_objs_delete(l_objs, l_nodes_count); } dap_chain_node_cli_set_reply_text(a_str_reply, l_string_reply->str); dap_string_free(l_string_reply, true); @@ -1174,7 +1175,7 @@ int com_help(int argc, char ** argv, char **str_reply) */ int com_tx_wallet(int argc, char ** argv, char **str_reply) { - const char *c_wallets_path = dap_config_get_item_str(g_config, "general", "wallets_path"); + const char *c_wallets_path = dap_chain_wallet_get_path(g_config); // Get address of wallet enum { CMD_NONE, CMD_WALLET_NEW, CMD_WALLET_LIST, CMD_WALLET_INFO @@ -2117,7 +2118,7 @@ int com_tx_cond_create(int argc, char ** argv, char **str_reply) (void) argc; // test const char * l_token_ticker = NULL; - const char *c_wallets_path = dap_config_get_item_str(g_config, "general", "wallets_path"); + 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) const char *c_net_name = "kelvin-testnet"; @@ -2233,7 +2234,7 @@ int com_tx_create(int argc, char ** argv, char **str_reply) return -1; } - const char *c_wallets_path = dap_config_get_item_str(g_config, "general", "wallets_path"); + const char *c_wallets_path = dap_chain_wallet_get_path(g_config); dap_chain_wallet_t * l_wallet = dap_chain_wallet_open(l_from_wallet_name, c_wallets_path); if(!l_wallet) { @@ -2293,6 +2294,66 @@ int com_tx_verify(int argc, char ** argv, char **str_reply) return -1; } + +/** + * tx_history command + * + * Transaction history for an address + */ +int com_tx_history(int argc, char ** argv, char **str_reply) +{ + int arg_index = 1; + const char *l_addr_base58 = NULL; + const char *l_wallet_name = NULL; + + dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-addr", &l_addr_base58); + dap_chain_node_cli_find_option_val(argv, arg_index, argc, "-w", &l_wallet_name); + + if(!l_addr_base58 && !l_wallet_name) { + dap_chain_node_cli_set_reply_text(str_reply, "tx_history requires parameter '-addr' or '-wallet'"); + return -1; + } + + dap_chain_addr_t *l_addr = NULL; + if(l_wallet_name) { + const char *c_wallets_path = dap_chain_wallet_get_path(g_config); + dap_chain_wallet_t * l_wallet = dap_chain_wallet_open(l_wallet_name, c_wallets_path); + if(l_wallet) { + dap_chain_addr_t *l_addr_tmp = (dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet); + l_addr = DAP_NEW_SIZE(dap_chain_addr_t, sizeof(dap_chain_addr_t)); + memcpy(l_addr, l_addr_tmp, sizeof(dap_chain_addr_t)); + dap_chain_wallet_close(l_wallet); + } + } + if(l_addr && l_addr_base58) { + l_addr = dap_chain_addr_from_str(l_addr_base58); + } + if(!l_addr) { + dap_chain_node_cli_set_reply_text(str_reply, "wallet address not recognized"); + return -1; + } + + char *l_str_ret = NULL; + + // read all history + size_t l_objs_count = 0; + dap_global_db_obj_t *l_objs = dap_chain_global_db_gr_load(GROUP_LOCAL_HISTORY, &l_objs_count); + + size_t l_objs_count_filter = l_objs_count; + //uint8_t*a = dap_db_log_pack(l_objs, &l_objs_count); + dap_global_db_obj_t *a = dap_db_history_filter("123", &l_objs_count_filter); + for(size_t i = 0; i < l_objs_count_filter; i++) { + dap_global_db_obj_t *l_node_info = (dap_chain_node_info_t *) l_objs[i].value; + l_node_info = 0; + } + //dap_store_obj_free(l_objs, l_objs_count); + dap_chain_global_db_objs_delete(l_objs, l_objs_count); + + dap_chain_node_cli_set_reply_text(str_reply, l_str_ret); + DAP_DELETE(l_str_ret); + return 0; +} + /** * print_log command * diff --git a/dap_chain_node_cli_cmd.h b/dap_chain_node_cli_cmd.h index aa650f4018da9216e44625538ca5df03224cfd6f..ccea01fd45bb318a8fc1f137227dc6cfcc784dd6 100644 --- a/dap_chain_node_cli_cmd.h +++ b/dap_chain_node_cli_cmd.h @@ -116,6 +116,13 @@ int com_tx_cond_create(int argc, char ** argv, char **str_reply); */ int com_tx_verify(int argc, char ** argv, char **str_reply); +/** + * tx_history command + * + * Transaction history for an address + */ +int com_tx_history(int argc, char ** argv, char **str_reply); + // Print log info int com_print_log(int argc, char ** argv, char **str_reply);