diff options
author | Jaquee <jaquee.monero@gmail.com> | 2017-08-18 14:28:46 +0200 |
---|---|---|
committer | Jaquee <jaquee.monero@gmail.com> | 2017-08-21 08:11:12 +0200 |
commit | 8a9bbd26d36fa7107c31fde353d8800f0543f993 (patch) | |
tree | d3766185f2280999dd469928c0e249617f8b392f /src | |
parent | wallet2: export/import wallet data functions (diff) | |
download | monero-8a9bbd26d36fa7107c31fde353d8800f0543f993.tar.xz |
WalletAPI: copy wallet data when creating a view only wallet
Diffstat (limited to 'src')
-rw-r--r-- | src/wallet/api/wallet.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp index c0974f880..06e9019cf 100644 --- a/src/wallet/api/wallet.cpp +++ b/src/wallet/api/wallet.cpp @@ -379,7 +379,32 @@ bool WalletImpl::createWatchOnly(const std::string &path, const std::string &pas const cryptonote::account_public_address address = m_wallet->get_account().get_keys().m_account_address; try { + // Generate view only wallet view_wallet->generate(path, password, address, viewkey); + + // Export/Import outputs + auto outputs = m_wallet->export_outputs(); + view_wallet->import_outputs(outputs); + + // Copy scanned blockchain + auto bc = m_wallet->export_blockchain(); + view_wallet->import_blockchain(bc); + + // copy payments + auto payments = m_wallet->export_payments(); + view_wallet->import_payments(payments); + + // copy confirmed outgoing payments + std::list<std::pair<crypto::hash, tools::wallet2::confirmed_transfer_details>> out_payments; + m_wallet->get_payments_out(out_payments, 0); + view_wallet->import_payments_out(out_payments); + + // Export/Import key images + // We already know the spent status from the outputs we exported, thus no need to check them again + auto key_images = m_wallet->export_key_images(); + uint64_t spent = 0; + uint64_t unspent = 0; + view_wallet->import_key_images(key_images,spent,unspent,false); m_status = Status_Ok; } catch (const std::exception &e) { LOG_ERROR("Error creating view only wallet: " << e.what()); @@ -387,6 +412,8 @@ bool WalletImpl::createWatchOnly(const std::string &path, const std::string &pas m_errorString = e.what(); return false; } + // Store wallet + view_wallet->store(); return true; } |