diff options
Diffstat (limited to 'src/simplewallet/simplewallet.cpp')
-rw-r--r-- | src/simplewallet/simplewallet.cpp | 70 |
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) { |