mirror of
https://github.com/monero-project/monero.git
synced 2024-12-14 20:36:31 +02:00
WalletAPI: copy wallet data when creating a view only wallet
This commit is contained in:
parent
d27fe32e4a
commit
8a9bbd26d3
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user