forked from lthn/blockchain
added send wrapped transaction to desktop UI
This commit is contained in:
parent
69eb2dc38a
commit
506bf42632
3 changed files with 46 additions and 7 deletions
|
|
@ -1226,6 +1226,11 @@ bool simple_wallet::transfer(const std::vector<std::string> &args_)
|
|||
//check if address looks like wrapped address
|
||||
if (is_address_like_wrapped(local_args[i]))
|
||||
{
|
||||
if (wrapped_transaction)
|
||||
{
|
||||
fail_msg_writer() << "Second wrap entry not allowed in one tx";
|
||||
return true;
|
||||
}
|
||||
success_msg_writer(true) << "Address " << local_args[i] << " recognized as wrapped address, creating wrapping transaction...";
|
||||
//put into service attachment specially encrypted entry which will contain wrap address and network
|
||||
tx_service_attachment sa = AUTO_VAL_INIT(sa);
|
||||
|
|
@ -1273,6 +1278,10 @@ bool simple_wallet::transfer(const std::vector<std::string> &args_)
|
|||
dsts.push_back(de);
|
||||
}
|
||||
|
||||
if (wrapped_transaction)
|
||||
{
|
||||
currency::create_and_add_tx_payer_to_container_from_address(extra, m_wallet->get_account().get_keys().account_address, m_wallet->get_top_block_height(), m_wallet->get_core_runtime_config());
|
||||
}
|
||||
|
||||
std::vector<currency::attachment_v> attachments;
|
||||
if (!payment_id.empty() && !set_payment_id_to_tx(attachments, payment_id))
|
||||
|
|
|
|||
|
|
@ -298,6 +298,7 @@ namespace tools
|
|||
//put it to attachments
|
||||
ctp.attachments.insert(ctp.extra.end(), req.service_entries.begin(), req.service_entries.end());
|
||||
}
|
||||
bool wrap = false;
|
||||
std::vector<currency::tx_destination_entry>& dsts = ctp.dsts;
|
||||
for (auto it = req.destinations.begin(); it != req.destinations.end(); it++)
|
||||
{
|
||||
|
|
@ -307,6 +308,13 @@ namespace tools
|
|||
//check if address looks like wrapped address
|
||||
if (currency::is_address_like_wrapped(it->address))
|
||||
{
|
||||
if (wrap) {
|
||||
LOG_ERROR("More then one entries in transactions");
|
||||
er.code = WALLET_RPC_ERROR_CODE_WRONG_ARGUMENT;
|
||||
er.message = "Second wrap entry not supported in transactions";
|
||||
return false;
|
||||
|
||||
}
|
||||
LOG_PRINT_L0("Address " << it->address << " recognized as wrapped address, creating wrapping transaction...");
|
||||
//put into service attachment specially encrypted entry which will contain wrap address and network
|
||||
currency::tx_service_attachment sa = AUTO_VAL_INIT(sa);
|
||||
|
|
@ -319,6 +327,7 @@ namespace tools
|
|||
currency::account_public_address acc = AUTO_VAL_INIT(acc);
|
||||
currency::get_account_address_from_str(acc, BC_WRAP_SERVICE_CUSTODY_WALLET);
|
||||
de.addr.front() = acc;
|
||||
wrap = true;
|
||||
//encrypt body with a special way
|
||||
}
|
||||
else if(!m_wallet.get_transfer_address(it->address, de.addr.back(), embedded_payment_id))
|
||||
|
|
@ -358,7 +367,7 @@ namespace tools
|
|||
attachments.push_back(comment);
|
||||
}
|
||||
|
||||
if (req.push_payer)
|
||||
if (req.push_payer | wrap)
|
||||
{
|
||||
currency::create_and_add_tx_payer_to_container_from_address(extra, m_wallet.get_account().get_keys().account_address, m_wallet.get_top_block_height(), m_wallet.get_core_runtime_config());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
#include "core_default_rpc_proxy.h"
|
||||
#include "common/db_backend_selector.h"
|
||||
#include "common/pre_download.h"
|
||||
#include "wallet/wrap_service.h"
|
||||
|
||||
#define GET_WALLET_OPT_BY_ID(wallet_id, name) \
|
||||
SHARED_CRITICAL_REGION_LOCAL(m_wallets_lock); \
|
||||
|
|
@ -1323,6 +1324,10 @@ std::string wallets_manager::transfer(size_t wallet_id, const view::transfer_par
|
|||
return API_RETURN_CODE_BAD_ARG_EMPTY_DESTINATIONS;
|
||||
|
||||
uint64_t fee = tp.fee;
|
||||
//payment_id
|
||||
std::vector<currency::attachment_v> attachments;
|
||||
std::vector<currency::extra_v> extra;
|
||||
bool wrap = false;
|
||||
// if (!currency::parse_amount(fee, tp.fee))
|
||||
// return API_RETURN_CODE_BAD_ARG_WRONG_FEE;
|
||||
|
||||
|
|
@ -1331,12 +1336,30 @@ std::string wallets_manager::transfer(size_t wallet_id, const view::transfer_par
|
|||
{
|
||||
dsts.push_back(currency::tx_destination_entry());
|
||||
dsts.back().addr.resize(1);
|
||||
currency::tx_destination_entry& de = dsts.back();
|
||||
std::string embedded_payment_id;
|
||||
if (!tools::get_transfer_address(d.address, dsts.back().addr.back(), embedded_payment_id, m_rpc_proxy.get()))
|
||||
if (currency::is_address_like_wrapped(d.address))
|
||||
{
|
||||
CHECK_AND_ASSERT_MES(!wrap, API_RETURN_CODE_BAD_ARG, "Second wrap entry in one tx not allowed");
|
||||
LOG_PRINT_L0("Address " << d.address << " recognized as wrapped address, creating wrapping transaction...");
|
||||
//put into service attachment specially encrypted entry which will contain wrap address and network
|
||||
currency::tx_service_attachment sa = AUTO_VAL_INIT(sa);
|
||||
sa.service_id = BC_WRAP_SERVICE_ID;
|
||||
sa.instruction = BC_WRAP_SERVICE_INSTRUCTION_ERC20;
|
||||
sa.flags = TX_SERVICE_ATTACHMENT_ENCRYPT_BODY | TX_SERVICE_ATTACHMENT_ENCRYPT_BODY_ISOLATE_AUDITABLE;
|
||||
sa.body = d.address;
|
||||
extra.push_back(sa);
|
||||
|
||||
currency::account_public_address acc = AUTO_VAL_INIT(acc);
|
||||
currency::get_account_address_from_str(acc, BC_WRAP_SERVICE_CUSTODY_WALLET);
|
||||
de.addr.front() = acc;
|
||||
wrap = true;
|
||||
}
|
||||
else if (!tools::get_transfer_address(d.address, dsts.back().addr.back(), embedded_payment_id, m_rpc_proxy.get()))
|
||||
{
|
||||
return API_RETURN_CODE_BAD_ARG_INVALID_ADDRESS;
|
||||
}
|
||||
if(!currency::parse_amount(dsts.back().amount, d.amount))
|
||||
else if(!currency::parse_amount(dsts.back().amount, d.amount))
|
||||
{
|
||||
return API_RETURN_CODE_BAD_ARG_WRONG_AMOUNT;
|
||||
}
|
||||
|
|
@ -1347,9 +1370,7 @@ std::string wallets_manager::transfer(size_t wallet_id, const view::transfer_par
|
|||
payment_id = embedded_payment_id;
|
||||
}
|
||||
}
|
||||
//payment_id
|
||||
std::vector<currency::attachment_v> attachments;
|
||||
std::vector<currency::extra_v> extra;
|
||||
|
||||
if (payment_id.size())
|
||||
{
|
||||
if (!currency::is_payment_id_size_ok(payment_id))
|
||||
|
|
@ -1381,7 +1402,7 @@ std::string wallets_manager::transfer(size_t wallet_id, const view::transfer_par
|
|||
tc.comment = tp.comment;
|
||||
extra.push_back(tc);
|
||||
}
|
||||
if (tp.push_payer)
|
||||
if (tp.push_payer || wrap)
|
||||
{
|
||||
currency::create_and_add_tx_payer_to_container_from_address(extra, w->get()->get_account().get_keys().account_address, w->get()->get_top_block_height(), w->get()->get_core_runtime_config());
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue