From a59e4c5b793e5b471c734135827020e8effeea9c Mon Sep 17 00:00:00 2001 From: woodser Date: Fri, 28 Jun 2019 13:37:10 -0400 Subject: [PATCH] wip sendTxs() compiling with call to validate_transfer --- src/wallet/MoneroWallet.cpp | 112 ++++++++++++++++++++++++++++++++++-- 1 file changed, 106 insertions(+), 6 deletions(-) diff --git a/src/wallet/MoneroWallet.cpp b/src/wallet/MoneroWallet.cpp index d38e304..0bbb794 100644 --- a/src/wallet/MoneroWallet.cpp +++ b/src/wallet/MoneroWallet.cpp @@ -1099,7 +1099,110 @@ namespace monero { wallet_rpc::COMMAND_RPC_TRANSFER::request req; wallet_rpc::COMMAND_RPC_TRANSFER::response res; - epee::json_rpc::error er; + epee::json_rpc::error err; + + // prepare parameters for wallet rpc's validate_transfer() + string paymentId = request.paymentId == boost::none ? string("") : request.paymentId.get(); + list trDestinations; + for (const shared_ptr& destination : request.destinations) { + tools::wallet_rpc::transfer_destination trDestination; + trDestination.amount = destination->amount.get(); + trDestination.address = destination->address.get(); + trDestinations.push_back(trDestination); + } + + // validate the requested txs and populate dsts & extra + std::vector dsts; + std::vector extra; + if (!validate_transfer(wallet2.get(), trDestinations, paymentId, dsts, extra, true, err)) { + throw runtime_error("Need to handle sendTxs() error"); // TODO + } + + + + +// std::vector dsts; +// std::vector extra; +// +// +// // validate the transfer requested and populate dsts & extra +// if (!validate_transfer(wallet2, req.destinations, req.payment_id, dsts, extra, true, er)) +// { +// return false; +// } +// +// try +// { +// uint64_t mixin = wallet2->adjust_mixin(req.ring_size ? req.ring_size - 1 : 0); +// uint32_t priority = wallet2->adjust_priority(req.priority); +// std::vector ptx_vector = wallet2->create_transactions_2(dsts, mixin, req.unlock_time, priority, extra, req.account_index, req.subaddr_indices); +// +// if (ptx_vector.empty()) +// { +// er.code = WALLET_RPC_ERROR_CODE_TX_NOT_POSSIBLE; +// er.message = "No transaction created"; +// return false; +// } +// +// // reject proposed transactions if there are more than one. see on_transfer_split below. +// if (ptx_vector.size() != 1) +// { +// er.code = WALLET_RPC_ERROR_CODE_TX_TOO_LARGE; +// er.message = "Transaction would be too large. try /transfer_split."; +// return false; +// } +// +// return fill_response(wallet2, ptx_vector, req.get_tx_key, res.tx_key, res.amount, res.fee, res.multisig_txset, res.unsigned_txset, req.do_not_relay, +// res.tx_hash, req.get_tx_hex, res.tx_blob, req.get_tx_metadata, res.tx_metadata, er); +// } +// catch (const std::exception& e) +// { +// return false; +// } +// return true; +// } +// //------------------------------------------------------------------------------------------------------------------------------ +// bool on_transfer_split(wallet2* wallet2, const wallet_rpc::COMMAND_RPC_TRANSFER_SPLIT::request& req, wallet_rpc::COMMAND_RPC_TRANSFER_SPLIT::response& res, epee::json_rpc::error& er) +// { +// +// std::vector dsts; +// std::vector extra; +// +// // validate the transfer requested and populate dsts & extra; RPC_TRANSFER::request and RPC_TRANSFER_SPLIT::request are identical types. +// if (!validate_transfer(wallet2, req.destinations, req.payment_id, dsts, extra, true, er)) +// { +// return false; +// } +// +// try +// { +// uint64_t mixin = wallet2->adjust_mixin(req.ring_size ? req.ring_size - 1 : 0); +// uint32_t priority = wallet2->adjust_priority(req.priority); +// std::vector ptx_vector = wallet2->create_transactions_2(dsts, mixin, req.unlock_time, priority, extra, req.account_index, req.subaddr_indices); +// +// return fill_response(wallet2, ptx_vector, req.get_tx_keys, res.tx_key_list, res.amount_list, res.fee_list, res.multisig_txset, res.unsigned_txset, req.do_not_relay, +// res.tx_hash_list, req.get_tx_hex, res.tx_blob_list, req.get_tx_metadata, res.tx_metadata_list, er); +// } +// catch (const std::exception& e) +// { +// return false; +// } +// return true; + + + + + + + + + + + + + + + //tools::wallet_rpc_server::connection_context* ctx = 0; @@ -1113,12 +1216,9 @@ namespace monero { // validate the transfer requested and populate dsts & extra - std::vector dsts; - std::vector extra; - - return vector>(); - //throw runtime_error("not implemented"); + //return vector>(); + throw runtime_error("not implemented"); } void MoneroWallet::save() {