aboutsummaryrefslogtreecommitdiff
path: root/src/wallet
diff options
context:
space:
mode:
authorRiccardo Spagni <ric@spagni.net>2015-06-20 22:40:41 +0200
committerRiccardo Spagni <ric@spagni.net>2015-06-20 22:40:47 +0200
commit4790db9d04ce705a9c4fe179375ac617efab105c (patch)
treee2df136c6b54dbfba3097c8749a248b1da477547 /src/wallet
parentMerge pull request #323 (diff)
parentsimplewallet: allow creating a wallet from a public address and view secret key (diff)
downloadmonero-4790db9d04ce705a9c4fe179375ac617efab105c.tar.xz
Merge pull request #324
dc4dbc1 simplewallet: allow creating a wallet from a public address and view secret key (moneromooo-monero) 6a0f61d account: allow creating an account from a public address and view secret key (moneromooo-monero) e05a58a wallet2: fix write_watch_only_wallet comment description (moneromooo-monero) 4bf6f0d simplewallet: forbid seed commands for watch only wallets (moneromooo-monero)
Diffstat (limited to 'src/wallet')
-rw-r--r--src/wallet/wallet2.cpp38
-rw-r--r--src/wallet/wallet2.h9
2 files changed, 45 insertions, 2 deletions
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp
index b798ae264..63205f429 100644
--- a/src/wallet/wallet2.cpp
+++ b/src/wallet/wallet2.cpp
@@ -676,6 +676,40 @@ crypto::secret_key wallet2::generate(const std::string& wallet_, const std::stri
}
/*!
+* \brief Creates a watch only wallet from a public address and a view secret key.
+* \param wallet_ Name of wallet file
+* \param password Password of wallet file
+* \param viewkey view secret key
+*/
+void wallet2::generate(const std::string& wallet_, const std::string& password,
+ const cryptonote::account_public_address &account_public_address,
+ const crypto::secret_key& viewkey)
+{
+ clear();
+ prepare_file_names(wallet_);
+
+ boost::system::error_code ignored_ec;
+ THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_wallet_file, ignored_ec), error::file_exists, m_wallet_file);
+ THROW_WALLET_EXCEPTION_IF(boost::filesystem::exists(m_keys_file, ignored_ec), error::file_exists, m_keys_file);
+
+ m_account.create_from_viewkey(account_public_address, viewkey);
+ m_account_public_address = account_public_address;
+ m_watch_only = true;
+
+ bool r = store_keys(m_keys_file, password, true);
+ THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
+
+ r = file_io_utils::save_string_to_file(m_wallet_file + ".address.txt", m_account.get_public_address_str(m_testnet));
+ if(!r) LOG_PRINT_RED_L0("String with address text not saved");
+
+ cryptonote::block b;
+ generate_genesis(b);
+ m_blockchain.push_back(get_block_hash(b));
+
+ store();
+}
+
+/*!
* \brief Rewrites to the wallet file for wallet upgrade (doesn't generate key, assumes it's already there)
* \param wallet_name Name of wallet file (should exist)
* \param password Password for wallet file
@@ -689,8 +723,8 @@ void wallet2::rewrite(const std::string& wallet_name, const std::string& passwor
THROW_WALLET_EXCEPTION_IF(!r, error::file_save_error, m_keys_file);
}
/*!
- * \brief Rewrites to the wallet file for wallet upgrade (doesn't generate key, assumes it's already there)
- * \param wallet_name Name of wallet file (should exist)
+ * \brief Writes to a file named based on the normal wallet (doesn't generate key, assumes it's already there)
+ * \param wallet_name Base name of wallet file
* \param password Password for wallet file
*/
void wallet2::write_watch_only_wallet(const std::string& wallet_name, const std::string& password)
diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h
index 4a07de8d1..cae21463e 100644
--- a/src/wallet/wallet2.h
+++ b/src/wallet/wallet2.h
@@ -146,6 +146,15 @@ namespace tools
const crypto::secret_key& recovery_param = crypto::secret_key(), bool recover = false,
bool two_random = false);
/*!
+ * \brief Creates a watch only wallet from a public address and a view secret key.
+ * \param wallet_ Name of wallet file
+ * \param password Password of wallet file
+ * \param viewkey view secret key
+ */
+ void generate(const std::string& wallet, const std::string& password,
+ const cryptonote::account_public_address &account_public_address,
+ const crypto::secret_key& viewkey = crypto::secret_key());
+ /*!
* \brief Rewrites to the wallet file for wallet upgrade (doesn't generate key, assumes it's already there)
* \param wallet_name Name of wallet file (should exist)
* \param password Password for wallet file