aboutsummaryrefslogtreecommitdiff
path: root/src/simplewallet/simplewallet.cpp
diff options
context:
space:
mode:
authorRiccardo Spagni <ric@spagni.net>2014-12-01 21:25:41 +0200
committerRiccardo Spagni <ric@spagni.net>2014-12-01 21:25:54 +0200
commite1555fdf8b9e83c46857e2252494840916b69c22 (patch)
tree36f5f1191cb2ee7a18e7411880c09894709864fa /src/simplewallet/simplewallet.cpp
parentMerge pull request #191 (diff)
parentmoved rapidjson to external folder, fixed CMake (diff)
downloadmonero-e1555fdf8b9e83c46857e2252494840916b69c22.tar.xz
Merge pull request #192
affde29 moved rapidjson to external folder, fixed CMake (Riccardo Spagni) f1eaf88 Prints seed after wallet upgrade. Removed iostream include. (Oran Juice) 70971be Doxygen comments (Oran Juice) 031ca23 Rewrites to old wallet file correctly (Oran Juice) 1f833dc Doxygen comments in (Oran Juice) 0bd88ff Writes seed language while generating wallet. Wallet open fix. (Oran Juice) 09a659e Stores seed language in wallet file. added rapidjson. Yet to test backward compatibility (Oran Juice)
Diffstat (limited to 'src/simplewallet/simplewallet.cpp')
-rw-r--r--src/simplewallet/simplewallet.cpp70
1 files changed, 49 insertions, 21 deletions
diff --git a/src/simplewallet/simplewallet.cpp b/src/simplewallet/simplewallet.cpp
index 5bc8090a8..84e134fed 100644
--- a/src/simplewallet/simplewallet.cpp
+++ b/src/simplewallet/simplewallet.cpp
@@ -317,6 +317,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 +500,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,24 +542,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 = "";
@@ -543,10 +559,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 +577,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)
{