From 91ffb61c25561a9143e9a8e713be16b09b03f633 Mon Sep 17 00:00:00 2001 From: Lee Clagett Date: Fri, 25 Nov 2016 21:07:45 -0500 Subject: [PATCH] Added command_line::is_yes --- src/common/command_line.cpp | 27 +- src/common/command_line.h | 3 + src/simplewallet/simplewallet.cpp | 32 +- tests/unit_tests/CMakeLists.txt | 1 + tests/unit_tests/command_line.cpp | 50 ++ translations/monero.ts | 1127 +++++++++++++++-------------- 6 files changed, 673 insertions(+), 567 deletions(-) create mode 100644 tests/unit_tests/command_line.cpp diff --git a/src/common/command_line.cpp b/src/common/command_line.cpp index b3f48844..28879e09 100644 --- a/src/common/command_line.cpp +++ b/src/common/command_line.cpp @@ -29,11 +29,22 @@ // Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers #include "command_line.h" -#include "string_tools.h" +#include +#include +#include "common/i18n.h" #include "cryptonote_config.h" +#include "string_tools.h" namespace command_line { + namespace + { + const char* tr(const char* str) + { + return i18n_translate(str, "command_line"); + } + } + std::string input_line(const std::string& prompt) { std::cout << prompt; @@ -45,6 +56,20 @@ namespace command_line } + bool is_yes(const std::string& str) + { + if (str == "y" || str == "Y") + return true; + + boost::algorithm::is_iequal ignore_case{}; + if (boost::algorithm::equals("yes", str, ignore_case)) + return true; + if (boost::algorithm::equals(command_line::tr("yes"), str, ignore_case)) + return true; + + return false; + } + const arg_descriptor arg_help = {"help", "Produce help message"}; const arg_descriptor arg_version = {"version", "Output version information"}; const arg_descriptor arg_data_dir = {"data-dir", "Specify data directory"}; diff --git a/src/common/command_line.h b/src/common/command_line.h index 0ea74916..98c115bb 100644 --- a/src/common/command_line.h +++ b/src/common/command_line.h @@ -43,6 +43,9 @@ namespace command_line std::string input_line(const std::string& prompt); + //! \return True if `str` is `is_iequal("y" || "yes" || `tr("yes"))`. + bool is_yes(const std::string& str); + template struct arg_descriptor; diff --git a/src/simplewallet/simplewallet.cpp b/src/simplewallet/simplewallet.cpp index 462cdf58..f52f5460 100644 --- a/src/simplewallet/simplewallet.cpp +++ b/src/simplewallet/simplewallet.cpp @@ -212,17 +212,17 @@ namespace return message_writer(epee::log_space::console_color_red, true, sw::tr("Error: "), LOG_LEVEL_0); } - bool is_it_true(std::string s) + bool is_it_true(const std::string& s) { - std::transform(s.begin(), s.end(), s.begin(), ::tolower); - if (s == "true") + if (s == "1" || command_line::is_yes(s)) return true; - if (s == "1") + + boost::algorithm::is_iequal ignore_case{}; + if (boost::algorithm::equals("true", s, ignore_case)) return true; - if (s == "y" || s == "yes") - return true; - if (s == sw::tr("yes")) + if (boost::algorithm::equals(simple_wallet::tr("true"), s, ignore_case)) return true; + return false; } @@ -916,7 +916,7 @@ bool simple_wallet::ask_wallet_create_if_needed() LOG_ERROR("Unexpected std::cin.eof() - Exited simple_wallet::ask_wallet_create_if_needed()"); return false; } - if(is_it_true(confirm_creation)) + if(command_line::is_yes(confirm_creation)) { success_msg_writer() << tr("Generating new wallet..."); m_generate_new = wallet_path; @@ -1977,8 +1977,7 @@ bool simple_wallet::get_address_from_str(const std::string &str, cryptonote::acc { return false; } - if (confirm_dns_ok != "Y" && confirm_dns_ok != "y" && confirm_dns_ok != "Yes" && confirm_dns_ok != "yes" - && confirm_dns_ok != tr("yes") && confirm_dns_ok != tr("no")) + if (!command_line::is_yes(confirm_dns_ok)) { fail_msg_writer() << tr("you have cancelled the transfer request"); return false; @@ -2136,7 +2135,7 @@ bool simple_wallet::transfer_main(int transfer_type, const std::vector &args_) std::string accepted = command_line::input_line(prompt_str); if (std::cin.eof()) return true; - if (accepted != "Y" && accepted != "y" && accepted != "Yes" && accepted != "yes") + if (!command_line::is_yes(accepted)) { fail_msg_writer() << tr("transaction cancelled."); @@ -2613,7 +2612,7 @@ bool simple_wallet::sweep_all(const std::vector &args_) std::string accepted = command_line::input_line(tr("No payment id is included with this transaction. Is this okay? (Y/Yes/N/No)")); if (std::cin.eof()) return true; - if (accepted != "Y" && accepted != "y" && accepted != "Yes" && accepted != "yes") + if (!command_line::is_yes(accepted)) { fail_msg_writer() << tr("transaction cancelled."); @@ -2658,7 +2657,7 @@ bool simple_wallet::sweep_all(const std::vector &args_) std::string accepted = command_line::input_line(prompt_str); if (std::cin.eof()) return true; - if (accepted != "Y" && accepted != "y" && accepted != "Yes" && accepted != "yes") + if (!command_line::is_yes(accepted)) { fail_msg_writer() << tr("transaction cancelled."); @@ -2853,8 +2852,7 @@ bool simple_wallet::accept_loaded_tx(const std::function get_num_txes, uint64_t fee = amount - amount_to_dests; std::string prompt_str = (boost::format(tr("Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %sIs this okay? (Y/Yes/N/No)")) % (unsigned long)get_num_txes() % print_money(amount) % print_money(fee) % dest_string % change_string % (unsigned long)min_mixin % extra_message).str(); - std::string accepted = command_line::input_line(prompt_str); - return is_it_true(accepted); + return command_line::is_yes(command_line::input_line(prompt_str)); } //---------------------------------------------------------------------------------------------------- bool simple_wallet::accept_loaded_tx(const tools::wallet2::unsigned_tx_set &txs) diff --git a/tests/unit_tests/CMakeLists.txt b/tests/unit_tests/CMakeLists.txt index 5f050554..78dd7452 100644 --- a/tests/unit_tests/CMakeLists.txt +++ b/tests/unit_tests/CMakeLists.txt @@ -35,6 +35,7 @@ set(unit_tests_sources canonical_amounts.cpp chacha8.cpp checkpoints.cpp + command_line.cpp decompose_amount_into_digits.cpp dns_resolver.cpp epee_boosted_tcp_server.cpp diff --git a/tests/unit_tests/command_line.cpp b/tests/unit_tests/command_line.cpp new file mode 100644 index 00000000..4e1c9bff --- /dev/null +++ b/tests/unit_tests/command_line.cpp @@ -0,0 +1,50 @@ +// Copyright (c) 2014-2016, The Monero Project +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#include "gtest/gtest.h" +#include "common/command_line.h" + +TEST(CommandLine, IsYes) +{ + EXPECT_TRUE(command_line::is_yes("Y")); + EXPECT_TRUE(command_line::is_yes("y")); + EXPECT_TRUE(command_line::is_yes("YES")); + EXPECT_TRUE(command_line::is_yes("YEs")); + EXPECT_TRUE(command_line::is_yes("YeS")); + EXPECT_TRUE(command_line::is_yes("yES")); + EXPECT_TRUE(command_line::is_yes("Yes")); + EXPECT_TRUE(command_line::is_yes("yeS")); + EXPECT_TRUE(command_line::is_yes("yEs")); + EXPECT_TRUE(command_line::is_yes("yes")); + + EXPECT_FALSE(command_line::is_yes("")); + EXPECT_FALSE(command_line::is_yes("yes-")); + EXPECT_FALSE(command_line::is_yes("NO")); + EXPECT_FALSE(command_line::is_yes("No")); + EXPECT_FALSE(command_line::is_yes("nO")); + EXPECT_FALSE(command_line::is_yes("no")); +} diff --git a/translations/monero.ts b/translations/monero.ts index 5f154944..0dcb09d0 100644 --- a/translations/monero.ts +++ b/translations/monero.ts @@ -32,109 +32,109 @@ Bitmonero::WalletImpl - + payment id has invalid format, expected 16 or 64 character hex string: - - + + daemon is busy. Please try again later. - - + + no connection to daemon. Please make sure daemon is running. - - + + RPC error: - - + + failed to get random outputs to mix - - + + not enough money to transfer, available only %s, sent amount %s - - - - not enough money to transfer, available only %s, transaction amount %s = %s + %s (fee) - - - - - - not enough outputs for specified mixin_count - - - - - - output amount - - - - - - found outputs to mix - - - - - - transaction was not constructed - - - transaction %s was rejected by daemon with status: + not enough money to transfer, available only %s, transaction amount %s = %s + %s (fee) - - - one of destinations is zero + + + not enough outputs for specified mixin_count - - - failed to find a suitable way to split transactions + + + output amount - - - unknown transfer error: + + + found outputs to mix + transaction was not constructed + + + + + + transaction %s was rejected by daemon with status: + + + + + + one of destinations is zero + + + + + + failed to find a suitable way to split transactions + + + + + + unknown transfer error: + + + + + internal error: - - + + unexpected error: - - + + unknown error @@ -203,1042 +203,1056 @@ + + command_line + + + yes + + + cryptonote::simple_wallet - + Commands: - - - - - - - - - - + + + + + + + + + + failed to read wallet password - - - - - - - - + + + + + + + + invalid password - + start_mining [<number_of_threads>] - Start mining in daemon - + Stop mining in daemon - + Save current blockchain data - + Show current wallet balance - + Show blockchain height - + Show current wallet public address - + Show this help - + set seed: needs an argument. available options: language - + set always-confirm-transfers: needs an argument (0 or 1) - + set: unrecognized argument(s) - + wrong number format, use: set_log <log_level_number_0-4> - + wrong number range, use: set_log <log_level_number_0-4> - + wallet file path not valid: - + Attempting to generate or restore wallet, but specified file(s) exist. Exiting to not risk overwriting. - + PLEASE NOTE: the following 25 words can be used to recover access to your wallet. Please write them down and store them somewhere safe and secure. Please do not store them in your email or on file storage services outside of your immediate control. - + specify a recovery parameter with the --electrum-seed="words list here" - + wallet failed to connect to daemon: - + List of available languages for your wallet's seed: - + Enter the number corresponding to the language of your choice: - + You had been using a deprecated version of the wallet. Please use the new seed that we provide. - - + + Generated new wallet: - - + + failed to generate new wallet: - + Opened watch-only wallet - + Opened wallet - + You had been using a deprecated version of the wallet. Please proceed to upgrade your wallet. - + You had been using a deprecated version of the wallet. Your wallet file format is being upgraded now. - + failed to load wallet: - + Use "help" command to see the list of available commands. - + Wallet data saved - + Password for the new watch-only wallet - + Enter new password again - + passwords do not match - + invalid arguments. Please use start_mining [<number_of_threads>], <number_of_threads> should be from 1 to - + Mining started in daemon - + mining has NOT been started: - + Mining stopped in daemon - + mining has NOT been stopped: - + Blockchain saved - - - - - Height - - - transaction + Height + + + transaction + + + + received - + spent - + unsupported transaction format - + Starting refresh... - + Refresh done, blocks received: - + you have cancelled the transfer request - + failed to get a Monero address from: - + not yet supported: Multiple Monero addresses found for given URL: - + wrong address: - - + + payment id has invalid format, expected 16 or 64 character hex string: - + bad locked_blocks parameter: - + Locked blocks too high, max 1000000 (˜4 yrs) - - + + a single transaction cannot use more than one payment id: - - + + failed to set up payment id, though it was decoded correctly - - + + No payment id is included with this transaction. Is this okay? (Y/Yes/N/No) - - - - - - + + + + + + transaction cancelled. - - + + + Sending %s. + + + + + Your transaction needs to be split into %llu transactions. This will result in a transaction fee being applied to each transaction, for a total fee of %s - - + + The transaction fee is %s - - + + , of which %s is dust from change - - - - + + + + . - - + + A total of %s from dust change will be sent to dust address - + . This transaction will unlock on block %llu, in approximately %s days (assuming 2 minutes per block) - - + + Is this okay? (Y/Yes/N/No) - - - + + + Failed to write transaction(s) to file - - - + + + Unsigned transaction(s) successfully written to file: - - - - + + + + Not enough money in unlocked balance - - - - + + + + Failed to find a way to create transactions. This is usually due to dust which is so small it cannot pay for itself in fees, or trying to send more money than the unlocked balance, or not leaving enough for fees - - - + + + Reason: - - - + + + failed to find a suitable way to split transactions - + No unmixable outputs found - + No address given - + No outputs found - + Claimed change does not go to a paid address - + Claimed change is larger than payment to the change address - + + Change does to more than one address + + + + sending %s to %s - + with no destinations - - Loaded %lu transactions, for %s, fee %s, change %s, %s, with min mixin %lu. Is this okay? (Y/Yes/N/No) - - - - + Failed to sign transaction - + Failed to sign transaction: - - Transaction successfully signed to file: - - - - + Failed to load transaction from file - + daemon is busy. Please try later - - - - - - + + + + + + RPC error: - - - - - + + + + + internal error: - - - - - - + + + + + + unexpected error: - - - - - - + + + + + + unknown error - + refresh failed: - + Blocks received: - + unlocked balance: - - + + amount - + spent - + global index - + tx id - + No incoming transfers - + No incoming available transfers - + No incoming unavailable transfers - + expected at least one payment_id - + payment - + transaction - + height - + unlock time - + No payments with id - - + + failed to get blockchain height: - + wrong number of arguments - + This is a watch only wallet - + DNSSEC validation passed - + + true + + + + failed to parse refresh type - - + + wallet is watch-only and has no seed - - + + wallet is non-deterministic and has no seed - - - - + + + + wallet is watch-only and cannot transfer - - - + + + mixin must be an integer >= 2 - + could not change default mixin - + priority must be 0, 1, 2, or 3 - + priority must be 0, 1, 2, or 3 - + priority must be 0, 1, 2 or 3 - + could not change default priority - + Synchronize transactions and balance - + incoming_transfers [available|unavailable] - Show incoming transfers, all or filtered by availability - + payments <PID_1> [<PID_2> ... <PID_N>] - Show payments for given payment ID[s] - + transfer [<mixin_count>] <addr_1> <amount_1> [<addr_2> <amount_2> ... <addr_N> <amount_N>] [payment_id] - Transfer <amount_1>,... <amount_N> to <address_1>,... <address_N>, respectively. <mixin_count> is the number of extra inputs to include for untraceability (from 2 to maximum available) - + Same as transfer_original, but using a new transaction building algorithm - + locked_transfer [<mixin_count>] <addr> <amount> <lockblocks>(Number of blocks to lock the transaction for, max 1000000) [<payment_id>] - + Send all unmixable outputs to yourself with mixin 0 - + sweep_all [mixin] address [payment_id] - Send all unlocked balance an address - + Sign a transaction from a file - + Submit a signed transaction from a file - + set_log <level> - Change current log detail level, <0-4> - + integrated_address [PID] - Encode a payment ID into an integrated address for the current wallet public address (no argument uses a random payment ID), or decode an integrated address to standard address and payment ID - + Save wallet data - + Save a watch-only keys file - + Display private view key - + Display private spend key - + Display Electrum-style mnemonic seed - + Available options: seed language - set wallet seed language; always-confirm-transfers <1|0> - whether to confirm unsplit txes; store-tx-info <1|0> - whether to store outgoing tx info (destination address, payment ID, tx secret key) for future reference; default-mixin <n> - set default mixin (default is 4); auto-refresh <1|0> - whether to automatically sync new blocks from the daemon; refresh-type <full|optimize-coinbase|no-coinbase|default> - set wallet refresh behaviour; priority [1|2|3] - normal/elevated/priority fee; confirm-missing-payment-id <1|0> - + Rescan blockchain for spent outputs - + Get transaction key (r) for a given <txid> - + Check amount going to <address> in <txid> - + show_transfers [in|out] [<min_height> [<max_height>]] - Show incoming/outgoing transfers within an optional height range - + Rescan blockchain from scratch - + Set an arbitrary string note for a txid - + Get a string note for a txid - + Show wallet status information - + Sign the contents of a file - + Verify a signature on the contents of a file - + Export a signed set of key images - + Import signed key images list and verify their spent status - + Export a set of outputs owned by this wallet - + Import set of outputs owned by this wallet - + set store-tx-info: needs an argument (0 or 1) - + set default-mixin: needs an argument (integer >= 2) - + set auto-refresh: needs an argument (0 or 1) - + set refresh-type: needs an argument: - + full (slowest, no assumptions); optimize-coinbase (fast, assumes the whole coinbase is paid to a single address); no-coinbase (fastest, assumes we receive no coinbase transaction), default (same as optimize-coinbase) - + set priority: needs an argument: 0, 1, 2, or 3 - + set confirm-missing-payment-id: needs an argument (0 or 1) - + usage: set_log <log_level_number_0-4> - + Specify wallet file name (e.g., MyWallet). If the wallet doesn't exist, it will be created. Wallet file name (or Ctrl-C to quit): - + Wallet name not valid. Please try again or use Ctrl-C to quit. - + Wallet and key files found, loading... - + Key file found but not wallet file. Regenerating... - + Key file not found. Failed to open wallet: - + No wallet/key file found with that name. Confirm creation of new wallet named: - + (y)es/(n)o: - + Generating new wallet... - + can't specify more than one of --generate-new-wallet="wallet_name", --wallet-file="wallet_name", --generate-from-view-key="wallet_name", --generate-from-json="jsonfilename" and --generate-from-keys="wallet_name" - + can't specify both --restore-deterministic-wallet and --non-deterministic - + Electrum-style word list failed verification - + bad m_restore_height parameter: - - - - - + + + + + No data supplied, cancelled - - - - + + + + failed to parse address - - + + failed to parse view key secret key - - + + failed to verify view key secret key - - + + view key does not match standard address - - - + + + account creation failed - + failed to parse spend key secret key - + failed to verify spend key secret key - + spend key does not match standard address - + failed to open account - + Daemon either is not started or wrong port was passed. Please make sure daemon is running or restart the wallet with the correct daemon address. - + Daemon uses a different RPC version that the wallet: - + Either update one of them, or use --allow-mismatched-daemon-version. - - + + invalid language choice passed. Please try again. - + View key: - + Your wallet has been generated! To start synchronizing with the daemon, use "refresh" command. Use "help" command to see the list of available commands. @@ -1249,489 +1263,509 @@ your wallet again (your wallet keys are NOT at risk in any case). - + You may want to remove the file "%s" and try again - + failed to deinitialize wallet - - + + this command requires a trusted daemon. Enable with --trusted-daemon - + blockchain can't be saved: - - - - - + + + + + daemon is busy. Please try again later. - - - - - + + + + + no connection to daemon. Please make sure daemon is running. - + refresh error: - + Balance: - - + + pubkey + + + + + key image + + + + + unlocked - + ringct - + T - + F - + locked - + RingCT - + - - + payment ID has invalid format, expected 16 or 64 character hex string: - + failed to get spent status - + WARNING: DNSSEC validation was unsuccessful, this address may not be correct! - + For URL: - + Monero Address = - + Is this OK? (Y/n) - - yes - - - - - no - - - - + usage: integrated_address [payment ID] - + Integrated address: account %s, payment ID %s - + Standard address: - + failed to parse payment ID or address - + usage: set_tx_note [txid] free text note - + usage: get_tx_note [txid] - + usage: sign <filename> - + wallet is watch-only and cannot sign - - - - + + + + failed to read file - + usage: verify <filename> <address> <signature> - + Bad signature from - + Good signature from - + usage: export_key_images <filename> - + wallet is watch-only and cannot export key images - - + + failed to save file - + Signed key images exported to - + usage: import_key_images <filename> - + usage: export_outputs <filename> - + Outputs exported to - + usage: import_outputs <filename> - + amount is wrong: - + expected number from 0 to - + Money successfully sent, transaction - + no connection to daemon. Please, make sure daemon is running. - - - - + + + + failed to get random outputs to mix - - - - + + + + not enough outputs for specified mixin_count - - - - + + + + output amount - - - - + + + + found outputs to mix - - - - + + + + transaction was not constructed - - - - + + + + transaction %s was rejected by daemon with status: - - - - + + + + one of destinations is zero - + Failed to find a suitable way to split transactions - - - - + + + + unknown transfer error: - + Sweeping - - + + Sweeping %s in %llu transactions for a total fee of %s. Is this okay? (Y/Yes/N/No) - - + + Sweeping %s for a total fee of %s. Is this okay? (Y/Yes/N/No) - - - + + + Money successfully sent, transaction: - + + %s change to %s + + + + + no change + + + + + Loaded %lu transactions, for %s, fee %s, %s, %s, with min mixin %lu. %sIs this okay? (Y/Yes/N/No) + + + + + Transaction successfully signed to file + + + + usage: get_tx_key <txid> - - - - + + + + failed to parse txid - + Tx key: - + no tx keys found for this txid - + usage: check_tx_key <txid> <txkey> <address> - - + + failed to parse tx key - + failed to get transaction from daemon - + failed to parse transaction from daemon - + failed to validate transaction from daemon - + failed to get the right transaction from daemon - + failed to generate key derivation from supplied parameters - + error: - + received - + in txid - + received nothing in txid - + WARNING: this transaction is not yet included in the blockchain! - + This transaction has %u confirmations - + WARNING: failed to determine number of confirmations! - + usage: show_transfers [in|out|all|pending|failed] [<min_height> [<max_height>]] - + bad min_height parameter: - + bad max_height parameter: - + in - - + + out - + failed - + pending - + wallet - + Random payment ID: - + Matching integrated address: @@ -1739,72 +1773,67 @@ your wallet again (your wallet keys are NOT at risk in any case). sw - + Generate new wallet and save it to <arg> - + Generate incoming-only wallet from view key - + Generate wallet from private keys - + Specify Electrum seed for wallet recovery/creation - + Recover wallet using Electrum-style mnemonic seed - + Create non-deterministic view and spend keys - + Enable commands which rely on a trusted daemon - + Allow communicating with a daemon that uses a different RPC version - + Restore from specific blockchain height - + daemon is busy. Please try again later. - + possibly lost connection to daemon - + Error: - - yes - - - - + Failed to initialize wallet @@ -1867,81 +1896,81 @@ your wallet again (your wallet keys are NOT at risk in any case). - + Failed to load file - + Failed to parse JSON - + Version %u too new, we can only grok up to %u - + failed to parse view key secret key - - - + + + failed to verify view key secret key - + failed to parse spend key secret key - - - + + + failed to verify spend key secret key - + Electrum-style word list failed verification - + At least one of Electrum-style word list and private view key must be specified - + Both Electrum-style word list and private key(s) specified - + invalid address - + view key does not match standard address - + spend key does not match standard address - + Cannot create deprecated wallets from JSON - + failed to generate new wallet: @@ -1949,59 +1978,59 @@ your wallet again (your wallet keys are NOT at risk in any case). tools::wallet_rpc_server - + Can't specify more than one of --wallet-file and --generate-from-json - + Must specify --wallet-file or --generate-from-json - + Loading wallet... - - + + Storing wallet... - - + + Stored ok - + Loaded ok - + Wallet initialization failed: - + Failed to initialize wallet rpc server - + Starting wallet rpc server - + Stopped wallet rpc server - + Failed to store wallet: @@ -2009,53 +2038,53 @@ your wallet again (your wallet keys are NOT at risk in any case). wallet_args - - + + Wallet options - + Generate wallet from JSON format file - + Use wallet <arg> - + Max number of threads to use for a parallel job - + Specify log file - + General options - + unexpected empty log file name in presence of non-empty file path - + Usage: - + default_log: - + Logging at log level %d to %s