@ -2810,36 +2810,37 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc
uint256 hash = block . GetHash ( ) ;
BlockMap : : iterator miSelf = mapBlockIndex . find ( hash ) ;
CBlockIndex * pindex = NULL ;
if ( miSelf ! = mapBlockIndex . end ( ) ) {
// Block header is already known.
pindex = miSelf - > second ;
if ( ppindex )
* ppindex = pindex ;
if ( pindex - > nStatus & BLOCK_FAILED_MASK )
return state . Invalid ( error ( " %s: block is marked invalid " , __func__ ) , 0 , " duplicate " ) ;
return true ;
}
if ( hash ! = chainparams . GetConsensus ( ) . hashGenesisBlock ) {
if ( ! CheckBlockHeader ( block , state ) )
return false ;
if ( miSelf ! = mapBlockIndex . end ( ) ) {
// Block header is already known.
pindex = miSelf - > second ;
if ( ppindex )
* ppindex = pindex ;
if ( pindex - > nStatus & BLOCK_FAILED_MASK )
return state . Invalid ( error ( " %s: block is marked invalid " , __func__ ) , 0 , " duplicate " ) ;
return true ;
}
// Get prev block index
CBlockIndex * pindexPrev = NULL ;
if ( hash ! = chainparams . GetConsensus ( ) . hashGenesisBlock ) {
if ( ! CheckBlockHeader ( block , state ) )
return false ;
// Get prev block index
CBlockIndex * pindexPrev = NULL ;
BlockMap : : iterator mi = mapBlockIndex . find ( block . hashPrevBlock ) ;
if ( mi = = mapBlockIndex . end ( ) )
return state . DoS ( 10 , error ( " %s: prev block not found " , __func__ ) , 0 , " bad-prevblk " ) ;
pindexPrev = ( * mi ) . second ;
if ( pindexPrev - > nStatus & BLOCK_FAILED_MASK )
return state . DoS ( 100 , error ( " %s: prev block invalid " , __func__ ) , REJECT_INVALID , " bad-prevblk " ) ;
}
assert ( pindexPrev ) ;
if ( fCheckpointsEnabled & & ! CheckIndexAgainstCheckpoint ( pindexPrev , state , chainparams , hash ) )
return error ( " %s: CheckIndexAgainstCheckpoint() : % s " , __func__, state.GetRejectReason().c_str()) ;
if ( ! ContextualCheckBlockHeader ( block , state , pindexPrev ) )
return false ;
assert ( pindexPrev ) ;
if ( fCheckpointsEnabled & & ! CheckIndexAgainstCheckpoint ( pindexPrev , state , chainparams , hash ) )
return error ( " %s: CheckIndexAgainstCheckpoint() : % s " , __func__, state.GetRejectReason().c_str()) ;
if ( ! ContextualCheckBlockHeader ( block , state , pindexPrev ) )
return false ;
}
if ( pindex = = NULL )
pindex = AddToBlockIndex ( block ) ;