mirror of
https://github.com/monero-project/monero.git
synced 2025-08-18 07:28:01 -04:00
wallet: add 'outputs' option for sweep_* commands
'outputs' option allows to specify the number of separate outputs of smaller denomination that will be created by sweep operation. rebased by moneromooo
This commit is contained in:
parent
52e19d6955
commit
24f5239693
5 changed files with 74 additions and 18 deletions
|
@ -2316,15 +2316,15 @@ simple_wallet::simple_wallet()
|
|||
boost::bind(&simple_wallet::sweep_unmixable, this, _1),
|
||||
tr("Send all unmixable outputs to yourself with ring_size 1"));
|
||||
m_cmd_binder.set_handler("sweep_all", boost::bind(&simple_wallet::sweep_all, this, _1),
|
||||
tr("sweep_all [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> [<payment_id>]"),
|
||||
tr("Send all unlocked balance to an address. If the parameter \"index<N1>[,<N2>,...]\" is specified, the wallet sweeps outputs received by those address indices. If omitted, the wallet randomly chooses an address index to be used."));
|
||||
tr("sweep_all [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] [outputs=<N>] <address> [<payment_id>]"),
|
||||
tr("Send all unlocked balance to an address. If the parameter \"index<N1>[,<N2>,...]\" is specified, the wallet sweeps outputs received by those address indices. If omitted, the wallet randomly chooses an address index to be used. If the parameter \"outputs=<N>\" is specified and N > 0, wallet splits the transaction into N even outputs."));
|
||||
m_cmd_binder.set_handler("sweep_below",
|
||||
boost::bind(&simple_wallet::sweep_below, this, _1),
|
||||
tr("sweep_below <amount_threshold> [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> [<payment_id>]"),
|
||||
tr("Send all unlocked outputs below the threshold to an address."));
|
||||
m_cmd_binder.set_handler("sweep_single",
|
||||
boost::bind(&simple_wallet::sweep_single, this, _1),
|
||||
tr("sweep_single [<priority>] [<ring_size>] <key_image> <address> [<payment_id>]"),
|
||||
tr("sweep_single [<priority>] [<ring_size>] [outputs=<N>] <key_image> <address> [<payment_id>]"),
|
||||
tr("Send a single output of the given key image to an address without change."));
|
||||
m_cmd_binder.set_handler("donate",
|
||||
boost::bind(&simple_wallet::donate, this, _1),
|
||||
|
@ -5262,7 +5262,7 @@ bool simple_wallet::sweep_main(uint64_t below, bool locked, const std::vector<st
|
|||
{
|
||||
auto print_usage = [below]()
|
||||
{
|
||||
fail_msg_writer() << boost::format(tr("usage: %s [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] <address> [<payment_id>]")) % (below ? "sweep_below" : "sweep_all");
|
||||
fail_msg_writer() << boost::format(tr("usage: %s [index=<N1>[,<N2>,...]] [<priority>] [<ring_size>] [outputs=<N>] <address> [<payment_id>]")) % (below ? "sweep_below" : "sweep_all");
|
||||
};
|
||||
if (args_.size() == 0)
|
||||
{
|
||||
|
@ -5360,6 +5360,25 @@ bool simple_wallet::sweep_main(uint64_t below, bool locked, const std::vector<st
|
|||
local_args.erase(local_args.begin() + 1);
|
||||
}
|
||||
|
||||
size_t outputs = 1;
|
||||
if (local_args.size() > 0 && local_args[0].substr(0, 8) == "outputs=")
|
||||
{
|
||||
if (!epee::string_tools::get_xtype_from_string(outputs, local_args[0].substr(8)))
|
||||
{
|
||||
fail_msg_writer() << tr("Failed to parse number of outputs");
|
||||
return true;
|
||||
}
|
||||
else if (outputs < 1)
|
||||
{
|
||||
fail_msg_writer() << tr("Amount of outputs should be greater than 0");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
local_args.erase(local_args.begin());
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<uint8_t> extra;
|
||||
bool payment_id_seen = false;
|
||||
if (local_args.size() >= 2)
|
||||
|
@ -5444,7 +5463,7 @@ bool simple_wallet::sweep_main(uint64_t below, bool locked, const std::vector<st
|
|||
try
|
||||
{
|
||||
// figure out what tx will be necessary
|
||||
auto ptx_vector = m_wallet->create_transactions_all(below, info.address, info.is_subaddress, fake_outs_count, unlock_block /* unlock_time */, priority, extra, m_current_subaddress_account, subaddr_indices);
|
||||
auto ptx_vector = m_wallet->create_transactions_all(below, info.address, info.is_subaddress, outputs, fake_outs_count, unlock_block /* unlock_time */, priority, extra, m_current_subaddress_account, subaddr_indices);
|
||||
|
||||
if (ptx_vector.empty())
|
||||
{
|
||||
|
@ -5585,6 +5604,25 @@ bool simple_wallet::sweep_single(const std::vector<std::string> &args_)
|
|||
return true;
|
||||
}
|
||||
|
||||
size_t outputs = 1;
|
||||
if (local_args.size() > 0 && local_args[0].substr(0, 8) == "outputs=")
|
||||
{
|
||||
if (!epee::string_tools::get_xtype_from_string(outputs, local_args[0].substr(8)))
|
||||
{
|
||||
fail_msg_writer() << tr("Failed to parse number of outputs");
|
||||
return true;
|
||||
}
|
||||
else if (outputs < 1)
|
||||
{
|
||||
fail_msg_writer() << tr("Amount of outputs should be greater than 0");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
local_args.erase(local_args.begin());
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<uint8_t> extra;
|
||||
bool payment_id_seen = false;
|
||||
if (local_args.size() == 3)
|
||||
|
@ -5618,7 +5656,7 @@ bool simple_wallet::sweep_single(const std::vector<std::string> &args_)
|
|||
|
||||
if (local_args.size() != 2)
|
||||
{
|
||||
fail_msg_writer() << tr("usage: sweep_single [<priority>] [<ring_size>] <key_image> <address> [<payment_id>]");
|
||||
fail_msg_writer() << tr("usage: sweep_single [<priority>] [<ring_size>] [outputs=<N>] <key_image> <address> [<payment_id>]");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -5673,7 +5711,7 @@ bool simple_wallet::sweep_single(const std::vector<std::string> &args_)
|
|||
try
|
||||
{
|
||||
// figure out what tx will be necessary
|
||||
auto ptx_vector = m_wallet->create_transactions_single(ki, info.address, info.is_subaddress, fake_outs_count, 0 /* unlock_time */, priority, extra);
|
||||
auto ptx_vector = m_wallet->create_transactions_single(ki, info.address, info.is_subaddress, outputs, fake_outs_count, 0 /* unlock_time */, priority, extra);
|
||||
|
||||
if (ptx_vector.empty())
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue