|
|
@ -442,6 +442,21 @@ namespace
|
|
|
|
fail_msg_writer() << tr("unexpected error: ") << e.what();
|
|
|
|
fail_msg_writer() << tr("unexpected error: ") << e.what();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool check_file_overwrite(const std::string &filename)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
boost::system::error_code errcode;
|
|
|
|
|
|
|
|
if (boost::filesystem::exists(filename, errcode))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (boost::ends_with(filename, ".keys"))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
fail_msg_writer() << boost::format(tr("File %s likely stores wallet private keys! Use a different file name.")) % filename;
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return command_line::is_yes(input_line((boost::format(tr("File %s already exists. Are you sure to overwrite it? (Y/Yes/N/No): ")) % filename).str()));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool parse_priority(const std::string& arg, uint32_t& priority)
|
|
|
|
bool parse_priority(const std::string& arg, uint32_t& priority)
|
|
|
@ -874,6 +889,8 @@ bool simple_wallet::export_multisig(const std::vector<std::string> &args)
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
|
|
const std::string filename = args[0];
|
|
|
|
const std::string filename = args[0];
|
|
|
|
|
|
|
|
if (m_wallet->confirm_export_overwrite() && !check_file_overwrite(filename))
|
|
|
|
|
|
|
|
return true;
|
|
|
|
try
|
|
|
|
try
|
|
|
|
{
|
|
|
|
{
|
|
|
|
cryptonote::blobdata ciphertext = m_wallet->export_multisig();
|
|
|
|
cryptonote::blobdata ciphertext = m_wallet->export_multisig();
|
|
|
@ -1122,6 +1139,8 @@ bool simple_wallet::export_raw_multisig(const std::vector<std::string> &args)
|
|
|
|
if (m_wallet->ask_password() && !get_and_verify_password()) { return true; }
|
|
|
|
if (m_wallet->ask_password() && !get_and_verify_password()) { return true; }
|
|
|
|
|
|
|
|
|
|
|
|
std::string filename = args[0];
|
|
|
|
std::string filename = args[0];
|
|
|
|
|
|
|
|
if (m_wallet->confirm_export_overwrite() && !check_file_overwrite(filename))
|
|
|
|
|
|
|
|
return true;
|
|
|
|
try
|
|
|
|
try
|
|
|
|
{
|
|
|
|
{
|
|
|
|
tools::wallet2::multisig_tx_set txs;
|
|
|
|
tools::wallet2::multisig_tx_set txs;
|
|
|
@ -1470,6 +1489,19 @@ bool simple_wallet::set_confirm_backlog_threshold(const std::vector<std::string>
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool simple_wallet::set_confirm_export_overwrite(const std::vector<std::string> &args/* = std::vector<std::string>()*/)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
const auto pwd_container = get_and_verify_password();
|
|
|
|
|
|
|
|
if (pwd_container)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
parse_bool_and_use(args[1], [&](bool r) {
|
|
|
|
|
|
|
|
m_wallet->confirm_export_overwrite(r);
|
|
|
|
|
|
|
|
m_wallet->rewrite(m_wallet_file, pwd_container->password());
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool simple_wallet::set_refresh_from_block_height(const std::vector<std::string> &args/* = std::vector<std::string>()*/)
|
|
|
|
bool simple_wallet::set_refresh_from_block_height(const std::vector<std::string> &args/* = std::vector<std::string>()*/)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
const auto pwd_container = get_and_verify_password();
|
|
|
|
const auto pwd_container = get_and_verify_password();
|
|
|
@ -1824,6 +1856,7 @@ bool simple_wallet::set_variable(const std::vector<std::string> &args)
|
|
|
|
success_msg_writer() << "merge-destinations = " << m_wallet->merge_destinations();
|
|
|
|
success_msg_writer() << "merge-destinations = " << m_wallet->merge_destinations();
|
|
|
|
success_msg_writer() << "confirm-backlog = " << m_wallet->confirm_backlog();
|
|
|
|
success_msg_writer() << "confirm-backlog = " << m_wallet->confirm_backlog();
|
|
|
|
success_msg_writer() << "confirm-backlog-threshold = " << m_wallet->get_confirm_backlog_threshold();
|
|
|
|
success_msg_writer() << "confirm-backlog-threshold = " << m_wallet->get_confirm_backlog_threshold();
|
|
|
|
|
|
|
|
success_msg_writer() << "confirm-export-overwrite = " << m_wallet->confirm_export_overwrite();
|
|
|
|
success_msg_writer() << "refresh-from-block-height = " << m_wallet->get_refresh_from_block_height();
|
|
|
|
success_msg_writer() << "refresh-from-block-height = " << m_wallet->get_refresh_from_block_height();
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1872,6 +1905,7 @@ bool simple_wallet::set_variable(const std::vector<std::string> &args)
|
|
|
|
CHECK_SIMPLE_VARIABLE("merge-destinations", set_merge_destinations, tr("0 or 1"));
|
|
|
|
CHECK_SIMPLE_VARIABLE("merge-destinations", set_merge_destinations, tr("0 or 1"));
|
|
|
|
CHECK_SIMPLE_VARIABLE("confirm-backlog", set_confirm_backlog, tr("0 or 1"));
|
|
|
|
CHECK_SIMPLE_VARIABLE("confirm-backlog", set_confirm_backlog, tr("0 or 1"));
|
|
|
|
CHECK_SIMPLE_VARIABLE("confirm-backlog-threshold", set_confirm_backlog_threshold, tr("unsigned integer"));
|
|
|
|
CHECK_SIMPLE_VARIABLE("confirm-backlog-threshold", set_confirm_backlog_threshold, tr("unsigned integer"));
|
|
|
|
|
|
|
|
CHECK_SIMPLE_VARIABLE("confirm-export-overwrite", set_confirm_export_overwrite, tr("0 or 1"));
|
|
|
|
CHECK_SIMPLE_VARIABLE("refresh-from-block-height", set_refresh_from_block_height, tr("block height"));
|
|
|
|
CHECK_SIMPLE_VARIABLE("refresh-from-block-height", set_refresh_from_block_height, tr("block height"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fail_msg_writer() << tr("set: unrecognized argument(s)");
|
|
|
|
fail_msg_writer() << tr("set: unrecognized argument(s)");
|
|
|
@ -6329,6 +6363,8 @@ bool simple_wallet::export_key_images(const std::vector<std::string> &args)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (m_wallet->ask_password() && !get_and_verify_password()) { return true; }
|
|
|
|
if (m_wallet->ask_password() && !get_and_verify_password()) { return true; }
|
|
|
|
std::string filename = args[0];
|
|
|
|
std::string filename = args[0];
|
|
|
|
|
|
|
|
if (m_wallet->confirm_export_overwrite() && !check_file_overwrite(filename))
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
try
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -6396,6 +6432,8 @@ bool simple_wallet::export_outputs(const std::vector<std::string> &args)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (m_wallet->ask_password() && !get_and_verify_password()) { return true; }
|
|
|
|
if (m_wallet->ask_password() && !get_and_verify_password()) { return true; }
|
|
|
|
std::string filename = args[0];
|
|
|
|
std::string filename = args[0];
|
|
|
|
|
|
|
|
if (m_wallet->confirm_export_overwrite() && !check_file_overwrite(filename))
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
|
|
LOCK_IDLE_SCOPE();
|
|
|
|
LOCK_IDLE_SCOPE();
|
|
|
|
try
|
|
|
|
try
|
|
|
|