@ -714,16 +714,12 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
nMaxConnections = nFD - MIN_CORE_FILEDESCRIPTORS ;
// if using block pruning, then disable txindex
// also disable the wallet (for now, until SPV support is implemented in wallet)
if ( GetArg ( " -prune " , 0 ) ) {
if ( GetBoolArg ( " -txindex " , false ) )
return InitError ( _ ( " Prune mode is incompatible with -txindex. " ) ) ;
# ifdef ENABLE_WALLET
if ( ! GetBoolArg ( " -disablewallet " , false ) ) {
if ( SoftSetBoolArg ( " -disablewallet " , true ) )
LogPrintf ( " %s : parameter interaction: -prune -> setting -disablewallet=1 \n " , __func__ ) ;
else
return InitError ( _ ( " Can't run with a wallet in prune mode. " ) ) ;
if ( GetBoolArg ( " -rescan " , false ) ) {
return InitError ( _ ( " Rescans are not possible in pruned mode. You will need to use -reindex which will download the whole blockchain again. " ) ) ;
}
# endif
}
@ -1310,6 +1306,19 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
}
if ( chainActive . Tip ( ) & & chainActive . Tip ( ) ! = pindexRescan )
{
//We can't rescan beyond non-pruned blocks, stop and throw an error
//this might happen if a user uses a old wallet within a pruned node
// or if he ran -disablewallet for a longer time, then decided to re-enable
if ( fPruneMode )
{
CBlockIndex * block = chainActive . Tip ( ) ;
while ( block & & block - > pprev & & ( block - > pprev - > nStatus & BLOCK_HAVE_DATA ) & & block - > pprev - > nTx > 0 & & pindexRescan ! = block )
block = block - > pprev ;
if ( pindexRescan ! = block )
return InitError ( _ ( " Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) " )) ;
}
uiInterface . InitMessage ( _ ( " Rescanning... " ) ) ;
LogPrintf ( " Rescanning last %i blocks (from block %i)... \n " , chainActive . Height ( ) - pindexRescan - > nHeight , pindexRescan - > nHeight ) ;
nStart = GetTimeMillis ( ) ;