Skip to content
Snippets Groups Projects
dap_chain_node_cli_cmd.c 78.7 KiB
Newer Older
dmitriy.gerasimov's avatar
dmitriy.gerasimov committed
        if(dap_chain_node_cli_find_option_val(argv, arg_index, argc, "value_fee", &str_tmp)) {
            value_fee = strtoull(str_tmp, NULL, 10);
dmitriy.gerasimov's avatar
dmitriy.gerasimov committed
    if(dap_chain_node_cli_find_option_val(argv, arg_index, argc, "value", &str_tmp)) {
        value = strtoull(str_tmp, NULL, 10);
    if(!l_from_wallet_name) {
dmitriy.gerasimov's avatar
dmitriy.gerasimov committed
        dap_chain_node_cli_set_reply_text(str_reply, "tx_create requires parameter 'from_wallet_name'");
dmitriy.gerasimov's avatar
dmitriy.gerasimov committed
        dap_chain_node_cli_set_reply_text(str_reply, "tx_create requires parameter 'to_addr'");
dmitriy.gerasimov's avatar
dmitriy.gerasimov committed
        dap_chain_node_cli_set_reply_text(str_reply, "tx_create requires parameter 'value'");
        return -1;
    }
    if(addr_base58_fee && !value_fee) {
dmitriy.gerasimov's avatar
dmitriy.gerasimov committed
        dap_chain_node_cli_set_reply_text(str_reply, "tx_create requires parameter 'value_fee' if 'fee' is specified");
    const char *c_wallets_path = dap_config_get_item_str(g_config, "general", "wallets_path");
    dap_chain_wallet_t * l_wallet = dap_chain_wallet_open(l_from_wallet_name, c_wallets_path);
    if(!l_wallet) {
dmitriy.gerasimov's avatar
dmitriy.gerasimov committed
        dap_chain_node_cli_set_reply_text(str_reply, "wallet %s does not exist", l_from_wallet_name);
/*    //debug
    {
        dap_chain_wallet_t * l_wallet_tesla = dap_chain_wallet_open("w_tesla", c_wallets_path);
        const dap_chain_addr_t *l_addr_tesla = dap_chain_wallet_get_addr(l_wallet_tesla);
        char *addr = dap_chain_addr_to_str(l_addr_tesla);
        addr = 0;
    }*/
    const dap_chain_addr_t *addr_from = (const dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet);
    dap_chain_addr_t *addr_to = dap_chain_str_to_addr(addr_base58_to);
    dap_chain_addr_t *addr_fee = dap_chain_str_to_addr(addr_base58_fee);

    if(!addr_from) {
dmitriy.gerasimov's avatar
dmitriy.gerasimov committed
        dap_chain_node_cli_set_reply_text(str_reply, "source address is invalid");
        return -1;
    }
    if(!addr_to) {
dmitriy.gerasimov's avatar
dmitriy.gerasimov committed
        dap_chain_node_cli_set_reply_text(str_reply, "destination address is invalid");
        return -1;
    }
    if(addr_base58_fee && !addr_fee) {
dmitriy.gerasimov's avatar
dmitriy.gerasimov committed
        dap_chain_node_cli_set_reply_text(str_reply, "fee address is invalid");
    dap_string_t *string_ret = dap_string_new(NULL);
    //g_string_printf(string_ret, "from=%s\nto=%s\nval=%lld\nfee=%s\nval_fee=%lld\n\n",
    //        addr_base58_from, addr_base58_to, value, addr_base58_fee, value_fee);

    int res = dap_chain_mempool_tx_create(dap_chain_wallet_get_key(l_wallet, 0), addr_from, addr_to, addr_fee,
            l_token_ticker, value, value_fee);
    dap_string_append_printf(string_ret, "transfer=%s\n", (res == 0) ? "Ok" : (res==-2)? "False, not enough funds for transfer" : "False");
    char *str_ret_tmp = dap_string_free(string_ret, false);
    char *str_ret = strdup(str_ret_tmp);
dmitriy.gerasimov's avatar
dmitriy.gerasimov committed
    dap_chain_node_cli_set_reply_text(str_reply, str_ret);
    DAP_DELETE(str_ret_tmp);
    DAP_DELETE(addr_to);
    DAP_DELETE(addr_fee);
    dap_chain_wallet_close(l_wallet);
    return res;
/**
 * tx_verify command
 *
 * Verifing transaction
 */
int com_tx_verify(int argc, const char ** argv, char **str_reply)
{
    if(argc > 1) {
        if(str_reply)
dmitriy.gerasimov's avatar
dmitriy.gerasimov committed
            dap_chain_node_cli_set_reply_text(str_reply, "command \"%s\" not recognized", argv[1]);
dmitriy.gerasimov's avatar
dmitriy.gerasimov committed
        dap_chain_node_cli_set_reply_text(str_reply, "command not defined, enter \"help <cmd name>\"");