aboutsummaryrefslogtreecommitdiff
path: root/src/simplewallet/simplewallet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/simplewallet/simplewallet.cpp')
-rw-r--r--src/simplewallet/simplewallet.cpp85
1 files changed, 58 insertions, 27 deletions
diff --git a/src/simplewallet/simplewallet.cpp b/src/simplewallet/simplewallet.cpp
index 4cb9cff21..e1e2a198b 100644
--- a/src/simplewallet/simplewallet.cpp
+++ b/src/simplewallet/simplewallet.cpp
@@ -207,6 +207,13 @@ bool simple_wallet::viewkey(const std::vector<std::string> &args/* = std::vector
bool simple_wallet::seed(const std::vector<std::string> &args/* = std::vector<std::string>()*/)
{
std::string electrum_words;
+
+ if (m_wallet->get_seed_language().empty())
+ {
+ std::string mnemonic_language = get_mnemonic_language();
+ m_wallet->set_seed_language(mnemonic_language);
+ }
+
bool success = m_wallet->get_seed(electrum_words);
if (success)
@@ -317,6 +324,21 @@ bool simple_wallet::ask_wallet_create_if_needed()
return r;
}
+
+/*!
+ * \brief Prints the seed with a nice message
+ * \param seed seed to print
+ */
+void simple_wallet::print_seed(std::string seed)
+{
+ success_msg_writer(true) << "\nPLEASE 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.\n";
+ boost::replace_nth(seed, " ", 15, "\n");
+ boost::replace_nth(seed, " ", 7, "\n");
+ std::cout << seed << std::endl;
+}
+
//----------------------------------------------------------------------------------------------------
bool simple_wallet::init(const boost::program_options::variables_map& vm)
{
@@ -485,10 +507,28 @@ std::string simple_wallet::get_mnemonic_language()
bool simple_wallet::new_wallet(const std::string &wallet_file, const std::string& password, const crypto::secret_key& recovery_key,
bool recover, bool two_random, bool testnet, const std::string &old_language)
{
+ bool was_deprecated_wallet = m_restore_deterministic_wallet && ((old_language == crypto::ElectrumWords::old_language_name) ||
+ crypto::ElectrumWords::get_is_old_style_seed(m_electrum_seed));
+
+ std::string mnemonic_language = old_language;
+ // Ask for seed language if it is not a wallet restore or if it was a deprecated wallet
+ // that was earlier used before this restore.
+ if (!m_restore_deterministic_wallet || was_deprecated_wallet)
+ {
+ if (was_deprecated_wallet)
+ {
+ // The user had used an older version of the wallet with old style mnemonics.
+ message_writer(epee::log_space::console_color_green, false) << "\nYou had been using " <<
+ "a deprecated version of the wallet. Please use the new seed that we provide.\n";
+ }
+ mnemonic_language = get_mnemonic_language();
+ }
+
m_wallet_file = wallet_file;
m_wallet.reset(new tools::wallet2(testnet));
m_wallet->callback(this);
+ m_wallet->set_seed_language(mnemonic_language);
crypto::secret_key recovery_val;
try
@@ -509,27 +549,7 @@ bool simple_wallet::new_wallet(const std::string &wallet_file, const std::string
// convert rng value to electrum-style word list
std::string electrum_words;
- bool was_deprecated_wallet = (old_language == crypto::ElectrumWords::old_language_name) ||
- crypto::ElectrumWords::get_is_old_style_seed(m_electrum_seed);
-
- std::string mnemonic_language = old_language;
- // Ask for seed language if it is not a wallet restore or if it was a deprecated wallet
- // that was earlier used before this restore.
- if (!m_restore_deterministic_wallet || was_deprecated_wallet)
- {
- if (was_deprecated_wallet)
- {
- // The user had used an older version of the wallet with old style mnemonics.
- message_writer(epee::log_space::console_color_green, false) << "\nYou had been using " <<
- "a deprecated version of the wallet. Please use the new seed that we provide.\n";
- }
- mnemonic_language = get_mnemonic_language();
- }
crypto::ElectrumWords::bytes_to_words(recovery_val, electrum_words, mnemonic_language);
- m_wallet->set_seed_language(mnemonic_language);
-
- std::string print_electrum = "";
-
success_msg_writer() <<
"**********************************************************************\n" <<
@@ -543,10 +563,7 @@ bool simple_wallet::new_wallet(const std::string &wallet_file, const std::string
if (!two_random)
{
- success_msg_writer(true) << "\nPLEASE 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.\n";
- boost::replace_nth(electrum_words, " ", 15, "\n");
- boost::replace_nth(electrum_words, " ", 7, "\n");
- std::cout << electrum_words << std::endl;
+ print_seed(electrum_words);
}
success_msg_writer() << "**********************************************************************";
@@ -564,6 +581,21 @@ bool simple_wallet::open_wallet(const string &wallet_file, const std::string& pa
m_wallet->load(m_wallet_file, password);
message_writer(epee::log_space::console_color_white, true) << "Opened wallet: "
<< m_wallet->get_account().get_public_address_str(m_wallet->testnet());
+ // If the wallet file is deprecated, we should ask for mnemonic language again and store
+ // everything in the new format.
+ if (!m_non_deterministic && m_wallet->is_deprecated())
+ {
+ message_writer(epee::log_space::console_color_green, false) << "\nYou had been using " <<
+ "a deprecated version of the wallet. Please proceed to upgrade your wallet.\n";
+ std::string mnemonic_language = get_mnemonic_language();
+ m_wallet->set_seed_language(mnemonic_language);
+ m_wallet->rewrite(m_wallet_file, password);
+
+ // Display the seed
+ std::string seed;
+ m_wallet->get_seed(seed);
+ print_seed(seed);
+ }
}
catch (const std::exception& e)
{
@@ -1054,15 +1086,14 @@ bool simple_wallet::transfer(const std::vector<std::string> &args_)
try
{
// figure out what tx will be necessary
- auto ptx_vector = m_wallet->create_transactions(dsts, fake_outs_count, 0 /* unlock_time */, DEFAULT_FEE, extra);
+ auto ptx_vector = m_wallet->create_transactions(dsts, fake_outs_count, 0 /* unlock_time */, 0 /* unused fee arg*/, extra);
// if more than one tx necessary, prompt user to confirm
if (ptx_vector.size() > 1)
{
std::string prompt_str = "Your transaction needs to be split into ";
prompt_str += std::to_string(ptx_vector.size());
- prompt_str += " transactions. This will result in a fee of ";
- prompt_str += print_money(ptx_vector.size() * DEFAULT_FEE);
+ prompt_str += " transactions. This will result in a transaction fee being applied to each transaction";
prompt_str += ". Is this okay? (Y/Yes/N/No)";
std::string accepted = command_line::input_line(prompt_str);
if (accepted != "Y" && accepted != "y" && accepted != "Yes" && accepted != "yes")