mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
wallet: Write bestblock to watchonly and solvable wallets
When migrating, we should also be writing the bestblock record to the watchonly and solvable wallets to avoid rescanning on the reload as that can be slow.
This commit is contained in:
parent
5b8c5970bd
commit
9332c7edda
1 changed files with 19 additions and 0 deletions
|
@ -3927,6 +3927,13 @@ bool CWallet::ApplyMigrationData(MigrationData& data, bilingual_str& error)
|
|||
}
|
||||
}
|
||||
|
||||
// Get best block locator so that we can copy it to the watchonly and solvables
|
||||
CBlockLocator best_block_locator;
|
||||
if (!WalletBatch(GetDatabase()).ReadBestBlock(best_block_locator)) {
|
||||
error = _("Error: Unable to read wallet's best block locator record");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if the transactions in the wallet are still ours. Either they belong here, or they belong in the watchonly wallet.
|
||||
// We need to go through these in the tx insertion order so that lookups to spends works.
|
||||
std::vector<uint256> txids_to_delete;
|
||||
|
@ -3937,6 +3944,18 @@ bool CWallet::ApplyMigrationData(MigrationData& data, bilingual_str& error)
|
|||
LOCK(data.watchonly_wallet->cs_wallet);
|
||||
data.watchonly_wallet->nOrderPosNext = nOrderPosNext;
|
||||
watchonly_batch->WriteOrderPosNext(data.watchonly_wallet->nOrderPosNext);
|
||||
// Write the best block locator to avoid rescanning on reload
|
||||
if (!watchonly_batch->WriteBestBlock(best_block_locator)) {
|
||||
error = _("Error: Unable to write watchonly wallet best block locator record");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (data.solvable_wallet) {
|
||||
// Write the best block locator to avoid rescanning on reload
|
||||
if (!WalletBatch(data.solvable_wallet->GetDatabase()).WriteBestBlock(best_block_locator)) {
|
||||
error = _("Error: Unable to write solvable wallet best block locator record");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
for (const auto& [_pos, wtx] : wtxOrdered) {
|
||||
if (!IsMine(*wtx->tx) && !IsFromMe(*wtx->tx)) {
|
||||
|
|
Loading…
Add table
Reference in a new issue