@ -2181,14 +2181,18 @@ bool static FlushStateToDisk(const CChainParams& chainparams, CValidationState &
void FlushStateToDisk ( ) {
CValidationState state ;
const CChainParams & chainparams = Params ( ) ;
FlushStateToDisk ( chainparams , state , FlushStateMode : : ALWAYS ) ;
if ( ! FlushStateToDisk ( chainparams , state , FlushStateMode : : ALWAYS ) ) {
LogPrintf ( " %s: failed to flush state (%s) \n " , __func__ , FormatStateMessage ( state ) ) ;
}
}
void PruneAndFlush ( ) {
CValidationState state ;
fCheckForPruning = true ;
const CChainParams & chainparams = Params ( ) ;
FlushStateToDisk ( chainparams , state , FlushStateMode : : NONE ) ;
if ( ! FlushStateToDisk ( chainparams , state , FlushStateMode : : NONE ) ) {
LogPrintf ( " %s: failed to flush state (%s) \n " , __func__ , FormatStateMessage ( state ) ) ;
}
}
static void DoWarning ( const std : : string & strWarning )
@ -3489,7 +3493,7 @@ bool ProcessNewBlock(const CChainParams& chainparams, const std::shared_ptr<cons
}
if ( ! ret ) {
GetMainSignals ( ) . BlockChecked ( * pblock , state ) ;
return error ( " %s: AcceptBlock FAILED (%s) " , __func__, state.GetDebugMessage( ));
return error ( " %s: AcceptBlock FAILED (%s) " , __func__, FormatStateMessage(state ));
}
}
@ -3497,7 +3501,7 @@ bool ProcessNewBlock(const CChainParams& chainparams, const std::shared_ptr<cons
CValidationState state ; // Only used to report errors, not invalidity - ignore it
if ( ! g_chainstate . ActivateBestChain ( state , chainparams , pblock ) )
return error ( " %s: ActivateBestChain failed " , __func__ );
return error ( " %s: ActivateBestChain failed (%s)" , __func__, FormatStateMessage(state) );
return true ;
}
@ -3615,7 +3619,9 @@ void PruneBlockFilesManual(int nManualPruneHeight)
{
CValidationState state ;
const CChainParams & chainparams = Params ( ) ;
FlushStateToDisk ( chainparams , state , FlushStateMode : : NONE , nManualPruneHeight ) ;
if ( ! FlushStateToDisk ( chainparams , state , FlushStateMode : : NONE , nManualPruneHeight ) ) {
LogPrintf ( " %s: failed to flush state (%s) \n " , __func__ , FormatStateMessage ( state ) ) ;
}
}
/**
@ -3869,6 +3875,7 @@ bool LoadChainTip(const CChainParams& chainparams)
LogPrintf ( " %s: Connecting genesis block... \n " , __func__ ) ;
CValidationState state ;
if ( ! ActivateBestChain ( state , chainparams ) ) {
LogPrintf ( " %s: failed to activate chain (%s) \n " , __func__ , FormatStateMessage ( state ) ) ;
return false ;
}
}
@ -3983,7 +3990,7 @@ bool CVerifyDB::VerifyDB(const CChainParams& chainparams, CCoinsView *coinsview,
if ( ! ReadBlockFromDisk ( block , pindex , chainparams . GetConsensus ( ) ) )
return error ( " VerifyDB() : * * * ReadBlockFromDisk failed at % d , hash = % s " , pindex->nHeight, pindex->GetBlockHash().ToString()) ;
if ( ! g_chainstate . ConnectBlock ( block , state , pindex , coins , chainparams ) )
return error ( " VerifyDB() : * * * found unconnectable block at % d , hash = % s " , pindex->nHeight, pindex->GetBlockHash().ToString( ));
return error ( " VerifyDB() : * * * found unconnectable block at % d , hash = % s ( % s ) " , pindex->nHeight, pindex->GetBlockHash().ToString( ), FormatStateMessage(state ));
}
}
@ -4110,11 +4117,13 @@ bool CChainState::RewindBlockIndex(const CChainParams& params)
break ;
}
if ( ! DisconnectTip ( state , params , nullptr ) ) {
return error ( " RewindBlockIndex: unable to disconnect block at height %i " , pindex - > nHeight );
return error ( " RewindBlockIndex: unable to disconnect block at height %i (%s)" , pindex->nHeight, FormatStateMessage(state) );
}
// Occasionally flush state to disk.
if ( ! FlushStateToDisk ( params , state , FlushStateMode : : PERIODIC ) )
if ( ! FlushStateToDisk ( params , state , FlushStateMode : : PERIODIC ) ) {
LogPrintf ( " RewindBlockIndex: unable to flush state to disk (%s) \n " , FormatStateMessage ( state ) ) ;
return false ;
}
}
// Reduce validity flag and have-data flags.
@ -4180,6 +4189,7 @@ bool RewindBlockIndex(const CChainParams& params) {
// it'll get called a bunch real soon.
CValidationState state ;
if ( ! FlushStateToDisk ( params , state , FlushStateMode : : ALWAYS ) ) {
LogPrintf ( " RewindBlockIndex: unable to flush state to disk (%s) \n " , FormatStateMessage ( state ) ) ;
return false ;
}
}
@ -4266,7 +4276,7 @@ bool CChainState::LoadGenesisBlock(const CChainParams& chainparams)
CBlockIndex * pindex = AddToBlockIndex ( block ) ;
CValidationState state ;
if ( ! ReceivedBlockTransactions ( block , state , pindex , blockPos , chainparams . GetConsensus ( ) ) )
return error ( " %s: genesis block not accepted " , __func__ );
return error ( " %s: genesis block not accepted (%s)" , __func__, FormatStateMessage(state) );
} catch ( const std : : runtime_error & e ) {
return error ( " %s: failed to write genesis block: %s " , __func__ , e . what ( ) ) ;
}