mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-11 04:12:36 -03:00
Fix rescanblockchain rpc to property report progress
CWallet::ScanForWalletTransactions did not previously take into account pindexStop when calculating progress. Renamed progress vars to progress_*. rescanblockchain is the only rpc that uses this parameter.
This commit is contained in:
parent
7eb7076f70
commit
16be13345e
1 changed files with 18 additions and 14 deletions
|
@ -1745,23 +1745,27 @@ CBlockIndex* CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, CBlock
|
||||||
fAbortRescan = false;
|
fAbortRescan = false;
|
||||||
ShowProgress(_("Rescanning..."), 0); // show rescan progress in GUI as dialog or on splashscreen, if -rescan on startup
|
ShowProgress(_("Rescanning..."), 0); // show rescan progress in GUI as dialog or on splashscreen, if -rescan on startup
|
||||||
CBlockIndex* tip = nullptr;
|
CBlockIndex* tip = nullptr;
|
||||||
double dProgressStart;
|
double progress_begin;
|
||||||
double dProgressTip;
|
double progress_end;
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
tip = chainActive.Tip();
|
progress_begin = GuessVerificationProgress(chainParams.TxData(), pindex);
|
||||||
dProgressStart = GuessVerificationProgress(chainParams.TxData(), pindex);
|
if (pindexStop == nullptr) {
|
||||||
dProgressTip = GuessVerificationProgress(chainParams.TxData(), tip);
|
tip = chainActive.Tip();
|
||||||
|
progress_end = GuessVerificationProgress(chainParams.TxData(), tip);
|
||||||
|
} else {
|
||||||
|
progress_end = GuessVerificationProgress(chainParams.TxData(), pindexStop);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
double gvp = dProgressStart;
|
double progress_current = progress_begin;
|
||||||
while (pindex && !fAbortRescan && !ShutdownRequested())
|
while (pindex && !fAbortRescan && !ShutdownRequested())
|
||||||
{
|
{
|
||||||
if (pindex->nHeight % 100 == 0 && dProgressTip - dProgressStart > 0.0) {
|
if (pindex->nHeight % 100 == 0 && progress_end - progress_begin > 0.0) {
|
||||||
ShowProgress(_("Rescanning..."), std::max(1, std::min(99, (int)((gvp - dProgressStart) / (dProgressTip - dProgressStart) * 100))));
|
ShowProgress(_("Rescanning..."), std::max(1, std::min(99, (int)((progress_current - progress_begin) / (progress_end - progress_begin) * 100))));
|
||||||
}
|
}
|
||||||
if (GetTime() >= nNow + 60) {
|
if (GetTime() >= nNow + 60) {
|
||||||
nNow = GetTime();
|
nNow = GetTime();
|
||||||
LogPrintf("Still rescanning. At block %d. Progress=%f\n", pindex->nHeight, gvp);
|
LogPrintf("Still rescanning. At block %d. Progress=%f\n", pindex->nHeight, progress_current);
|
||||||
}
|
}
|
||||||
|
|
||||||
CBlock block;
|
CBlock block;
|
||||||
|
@ -1785,18 +1789,18 @@ CBlockIndex* CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, CBlock
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
pindex = chainActive.Next(pindex);
|
pindex = chainActive.Next(pindex);
|
||||||
gvp = GuessVerificationProgress(chainParams.TxData(), pindex);
|
progress_current = GuessVerificationProgress(chainParams.TxData(), pindex);
|
||||||
if (tip != chainActive.Tip()) {
|
if (pindexStop == nullptr && tip != chainActive.Tip()) {
|
||||||
tip = chainActive.Tip();
|
tip = chainActive.Tip();
|
||||||
// in case the tip has changed, update progress max
|
// in case the tip has changed, update progress max
|
||||||
dProgressTip = GuessVerificationProgress(chainParams.TxData(), tip);
|
progress_end = GuessVerificationProgress(chainParams.TxData(), tip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (pindex && fAbortRescan) {
|
if (pindex && fAbortRescan) {
|
||||||
LogPrintf("Rescan aborted at block %d. Progress=%f\n", pindex->nHeight, gvp);
|
LogPrintf("Rescan aborted at block %d. Progress=%f\n", pindex->nHeight, progress_current);
|
||||||
} else if (pindex && ShutdownRequested()) {
|
} else if (pindex && ShutdownRequested()) {
|
||||||
LogPrintf("Rescan interrupted by shutdown request at block %d. Progress=%f\n", pindex->nHeight, gvp);
|
LogPrintf("Rescan interrupted by shutdown request at block %d. Progress=%f\n", pindex->nHeight, progress_current);
|
||||||
}
|
}
|
||||||
ShowProgress(_("Rescanning..."), 100); // hide progress dialog in GUI
|
ShowProgress(_("Rescanning..."), 100); // hide progress dialog in GUI
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue