@ -2221,9 +2221,9 @@ static int64_t nTimeIndex = 0;
static int64_t nTimeCallbacks = 0 ;
static int64_t nTimeTotal = 0 ;
bool ConnectBlock ( const CBlock & block , CValidationState & state , CBlockIndex * pindex , CCoinsViewCache & view , bool fJustCheck )
bool ConnectBlock ( const CBlock & block , CValidationState & state , CBlockIndex * pindex ,
CCoinsViewCache & view , const CChainParams & chainparams , bool fJustCheck )
{
const CChainParams & chainparams = Params ( ) ;
AssertLockHeld ( cs_main ) ;
int64_t nTimeStart = GetTimeMicros ( ) ;
@ -2570,8 +2570,7 @@ void PruneAndFlush() {
}
/** Update chainActive and related internal data structures. */
void static UpdateTip ( CBlockIndex * pindexNew ) {
const CChainParams & chainParams = Params ( ) ;
void static UpdateTip ( CBlockIndex * pindexNew , const CChainParams & chainParams ) {
chainActive . SetTip ( pindexNew ) ;
// New best block
@ -2629,13 +2628,13 @@ void static UpdateTip(CBlockIndex *pindexNew) {
}
/** Disconnect chainActive's tip. You probably want to call mempool.removeForReorg and manually re-limit mempool size after this, with cs_main held. */
bool static DisconnectTip ( CValidationState & state , const C onsensus: : Params & consensusP arams)
bool static DisconnectTip ( CValidationState & state , const C ChainParams& chainp arams)
{
CBlockIndex * pindexDelete = chainActive . Tip ( ) ;
assert ( pindexDelete ) ;
// Read block from disk.
CBlock block ;
if ( ! ReadBlockFromDisk ( block , pindexDelete , c onsensusParams ) )
if ( ! ReadBlockFromDisk ( block , pindexDelete , c hainparams. GetConsensus ( ) ) )
return AbortNode ( state , " Failed to read block " ) ;
// Apply the block atomically to the chain state.
int64_t nStart = GetTimeMicros ( ) ;
@ -2668,7 +2667,7 @@ bool static DisconnectTip(CValidationState& state, const Consensus::Params& cons
// block that were added back and cleans up the mempool state.
mempool . UpdateTransactionsFromBlock ( vHashUpdate ) ;
// Update chainActive and related variables.
UpdateTip ( pindexDelete - > pprev );
UpdateTip ( pindexDelete - > pprev , chainparams );
// Let wallets know transactions went from 1-confirmed to
// 0-confirmed or conflicted:
BOOST_FOREACH ( const CTransaction & tx , block . vtx ) {
@ -2704,7 +2703,7 @@ bool static ConnectTip(CValidationState& state, const CChainParams& chainparams,
LogPrint ( " bench " , " - Load block from disk: %.2fms [%.2fs] \n " , ( nTime2 - nTime1 ) * 0.001 , nTimeReadFromDisk * 0.000001 ) ;
{
CCoinsViewCache view ( pcoinsTip ) ;
bool rv = ConnectBlock ( * pblock , state , pindexNew , view );
bool rv = ConnectBlock ( * pblock , state , pindexNew , view , chainparams );
GetMainSignals ( ) . BlockChecked ( * pblock , state ) ;
if ( ! rv ) {
if ( state . IsInvalid ( ) )
@ -2727,7 +2726,7 @@ bool static ConnectTip(CValidationState& state, const CChainParams& chainparams,
list < CTransaction > txConflicted ;
mempool . removeForBlock ( pblock - > vtx , pindexNew - > nHeight , txConflicted , ! IsInitialBlockDownload ( ) ) ;
// Update chainActive & related variables.
UpdateTip ( pindexNew );
UpdateTip ( pindexNew , chainparams );
// Tell wallet about transactions that went from mempool
// to conflicted:
BOOST_FOREACH ( const CTransaction & tx , txConflicted ) {
@ -2828,7 +2827,7 @@ static bool ActivateBestChainStep(CValidationState& state, const CChainParams& c
// Disconnect active blocks which are no longer in the best chain.
bool fBlocksDisconnected = false ;
while ( chainActive . Tip ( ) & & chainActive . Tip ( ) ! = pindexFork ) {
if ( ! DisconnectTip ( state , chainparams .GetConsensus ( ) ))
if ( ! DisconnectTip ( state , chainparams ))
return false ;
fBlocksDisconnected = true ;
}
@ -2973,7 +2972,7 @@ bool ActivateBestChain(CValidationState &state, const CChainParams& chainparams,
return true ;
}
bool InvalidateBlock ( CValidationState & state , const C onsensus: : Params & consensusP arams, CBlockIndex * pindex )
bool InvalidateBlock ( CValidationState & state , const C ChainParams& chainp arams, CBlockIndex * pindex )
{
AssertLockHeld ( cs_main ) ;
@ -2989,7 +2988,7 @@ bool InvalidateBlock(CValidationState& state, const Consensus::Params& consensus
setBlockIndexCandidates . erase ( pindexWalk ) ;
// ActivateBestChain considers blocks already in chainActive
// unconditionally valid already, so force disconnect away from it.
if ( ! DisconnectTip ( state , c onsensusP arams) ) {
if ( ! DisconnectTip ( state , c hainp arams) ) {
mempool . removeForReorg ( pcoinsTip , chainActive . Tip ( ) - > nHeight + 1 , STANDARD_LOCKTIME_VERIFY_FLAGS ) ;
return false ;
}
@ -3524,7 +3523,7 @@ bool TestBlockValidity(CValidationState& state, const CChainParams& chainparams,
return error ( " %s: Consensus::CheckBlock: %s " , __func__ , FormatStateMessage ( state ) ) ;
if ( ! ContextualCheckBlock ( block , state , pindexPrev ) )
return error ( " %s: Consensus::ContextualCheckBlock: %s " , __func__ , FormatStateMessage ( state ) ) ;
if ( ! ConnectBlock ( block , state , & indexDummy , viewNew , true ) )
if ( ! ConnectBlock ( block , state , & indexDummy , viewNew , chainparams , true ) )
return false ;
assert ( state . IsValid ( ) ) ;
@ -3892,7 +3891,7 @@ bool CVerifyDB::VerifyDB(const CChainParams& chainparams, CCoinsView *coinsview,
CBlock block ;
if ( ! ReadBlockFromDisk ( block , pindex , chainparams . GetConsensus ( ) ) )
return error ( " VerifyDB() : * * * ReadBlockFromDisk failed at % d , hash = % s " , pindex->nHeight, pindex->GetBlockHash().ToString()) ;
if ( ! ConnectBlock ( block , state , pindex , coins ))
if ( ! ConnectBlock ( block , state , pindex , coins , chainparams ))
return error ( " VerifyDB() : * * * found unconnectable block at % d , hash = % s " , pindex->nHeight, pindex->GetBlockHash().ToString()) ;
}
}