WalletAPI: copy wallet data when creating a view only wallet

This commit is contained in:
Jaquee 2017-08-18 14:28:46 +02:00
parent d27fe32e4a
commit 8a9bbd26d3

View File

@ -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; const cryptonote::account_public_address address = m_wallet->get_account().get_keys().m_account_address;
try { try {
// Generate view only wallet
view_wallet->generate(path, password, address, viewkey); 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; m_status = Status_Ok;
} catch (const std::exception &e) { } catch (const std::exception &e) {
LOG_ERROR("Error creating view only wallet: " << e.what()); 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(); m_errorString = e.what();
return false; return false;
} }
// Store wallet
view_wallet->store();
return true; return true;
} }