@ -1745,23 +1745,27 @@ CBlockIndex* CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, CBlock
fAbortRescan = false ;
ShowProgress ( _ ( " Rescanning... " ) , 0 ) ; // show rescan progress in GUI as dialog or on splashscreen, if -rescan on startup
CBlockIndex * tip = nullptr ;
double dProgressStart ;
double dProgressTip ;
double progress_begin ;
double progress_end ;
{
LOCK ( cs_main ) ;
tip = chainActive . Tip ( ) ;
dProgressStart = GuessVerificationProgress ( chainParams . TxData ( ) , pindex ) ;
dProgressTip = GuessVerificationProgress ( chainParams . TxData ( ) , tip ) ;
progress_begin = GuessVerificationProgress ( chainParams . TxData ( ) , pindex ) ;
if ( pindexStop = = nullptr ) {
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 ( ) )
{
if ( pindex - > nHeight % 100 = = 0 & & dProgressTip - dProgressStart > 0.0 ) {
ShowProgress ( _ ( " Rescanning... " ) , std : : max ( 1 , std : : min ( 99 , ( int ) ( ( gvp - dProgressStart ) / ( dProgressTip - dProgressStart ) * 100 ) ) ) ) ;
if ( pindex - > nHeight % 100 = = 0 & & progress_end - progress_begin > 0.0 ) {
ShowProgress ( _ ( " Rescanning... " ) , std : : max ( 1 , std : : min ( 99 , ( int ) ( ( progress_current - progress_begin ) / ( progress_end - progress_begin ) * 100 ) ) ) ) ;
}
if ( GetTime ( ) > = nNow + 60 ) {
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 ;
@ -1785,18 +1789,18 @@ CBlockIndex* CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, CBlock
{
LOCK ( cs_main ) ;
pindex = chainActive . Next ( pindex ) ;
gvp = GuessVerificationProgress ( chainParams . TxData ( ) , pindex ) ;
if ( tip ! = chainActive . Tip ( ) ) {
progress_current = GuessVerificationProgress ( chainParams . TxData ( ) , pindex ) ;
if ( pindexStop = = nullptr & & tip ! = chainActive . Tip ( ) ) {
tip = chainActive . Tip ( ) ;
// in case the tip has changed, update progress max
dProgressTip = GuessVerificationProgress ( chainParams . TxData ( ) , tip ) ;
progress_end = GuessVerificationProgress ( chainParams . TxData ( ) , tip ) ;
}
}
}
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 ( ) ) {
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
}