simplewallet: Add input file parameter to sign_transfer

This commit is contained in:
Steff Richards 2020-12-31 16:54:01 +01:00
parent a1eca8ca7e
commit 021a28137d
1 changed files with 20 additions and 5 deletions

View File

@ -195,7 +195,7 @@ namespace
const char* USAGE_SWEEP_BELOW("sweep_below <amount_threshold> [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> [<payment_id (obsolete)>]"); const char* USAGE_SWEEP_BELOW("sweep_below <amount_threshold> [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> [<payment_id (obsolete)>]");
const char* USAGE_SWEEP_SINGLE("sweep_single [<priority>] [<ring_size>] [outputs=<N>] <key_image> <address> [<payment_id (obsolete)>]"); const char* USAGE_SWEEP_SINGLE("sweep_single [<priority>] [<ring_size>] [outputs=<N>] <key_image> <address> [<payment_id (obsolete)>]");
const char* USAGE_DONATE("donate [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <amount> [<payment_id (obsolete)>]"); const char* USAGE_DONATE("donate [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <amount> [<payment_id (obsolete)>]");
const char* USAGE_SIGN_TRANSFER("sign_transfer [export_raw]"); const char* USAGE_SIGN_TRANSFER("sign_transfer [export_raw] [<filename>]");
const char* USAGE_SET_LOG("set_log <level>|{+,-,}<categories>"); const char* USAGE_SET_LOG("set_log <level>|{+,-,}<categories>");
const char* USAGE_ACCOUNT("account\n" const char* USAGE_ACCOUNT("account\n"
" account new <label text with white spaces allowed>\n" " account new <label text with white spaces allowed>\n"
@ -3301,7 +3301,8 @@ simple_wallet::simple_wallet()
m_cmd_binder.set_handler("sign_transfer", m_cmd_binder.set_handler("sign_transfer",
boost::bind(&simple_wallet::on_command, this, &simple_wallet::sign_transfer, _1), boost::bind(&simple_wallet::on_command, this, &simple_wallet::sign_transfer, _1),
tr(USAGE_SIGN_TRANSFER), tr(USAGE_SIGN_TRANSFER),
tr("Sign a transaction from a file. If the parameter \"export_raw\" is specified, transaction raw hex data suitable for the daemon RPC /sendrawtransaction is exported.")); tr("Sign a transaction from a file. If the parameter \"export_raw\" is specified, transaction raw hex data suitable for the daemon RPC /sendrawtransaction is exported.\n"
"Use the parameter <filename> to specify the file to read from. If not specified, the default \"unsigned_monero_tx\" will be used."));
m_cmd_binder.set_handler("submit_transfer", m_cmd_binder.set_handler("submit_transfer",
boost::bind(&simple_wallet::on_command, this, &simple_wallet::submit_transfer, _1), boost::bind(&simple_wallet::on_command, this, &simple_wallet::submit_transfer, _1),
tr("Submit a signed transaction from a file.")); tr("Submit a signed transaction from a file."));
@ -7886,19 +7887,33 @@ bool simple_wallet::sign_transfer(const std::vector<std::string> &args_)
fail_msg_writer() << tr("This is a watch only wallet"); fail_msg_writer() << tr("This is a watch only wallet");
return true; return true;
} }
if (args_.size() > 1 || (args_.size() == 1 && args_[0] != "export_raw"))
bool export_raw = false;
std::string unsigned_filename = "unsigned_monero_tx";
if (args_.size() > 2 || (args_.size() == 2 && args_[0] != "export_raw"))
{ {
PRINT_USAGE(USAGE_SIGN_TRANSFER); PRINT_USAGE(USAGE_SIGN_TRANSFER);
return true; return true;
} }
else if (args_.size() == 2)
{
export_raw = true;
unsigned_filename = args_[1];
}
else if (args_.size() == 1)
{
if (args_[0] == "export_raw")
export_raw = true;
else
unsigned_filename = args_[0];
}
SCOPED_WALLET_UNLOCK(); SCOPED_WALLET_UNLOCK();
const bool export_raw = args_.size() == 1;
std::vector<tools::wallet2::pending_tx> ptx; std::vector<tools::wallet2::pending_tx> ptx;
try try
{ {
bool r = m_wallet->sign_tx("unsigned_monero_tx", "signed_monero_tx", ptx, [&](const tools::wallet2::unsigned_tx_set &tx){ return accept_loaded_tx(tx); }, export_raw); bool r = m_wallet->sign_tx(unsigned_filename, "signed_monero_tx", ptx, [&](const tools::wallet2::unsigned_tx_set &tx){ return accept_loaded_tx(tx); }, export_raw);
if (!r) if (!r)
{ {
fail_msg_writer() << tr("Failed to sign transaction"); fail_msg_writer() << tr("Failed to sign transaction");