mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 21:12:48 +01:00
Bugfix: Don't check the genesis block header before accepting it
This fixes an error triggered when running with -reindex after #5975
This commit is contained in:
parent
247b91449a
commit
36c97b4e5d
45
src/main.cpp
45
src/main.cpp
@ -2809,36 +2809,37 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc
|
|||||||
uint256 hash = block.GetHash();
|
uint256 hash = block.GetHash();
|
||||||
BlockMap::iterator miSelf = mapBlockIndex.find(hash);
|
BlockMap::iterator miSelf = mapBlockIndex.find(hash);
|
||||||
CBlockIndex *pindex = NULL;
|
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 (!CheckBlockHeader(block, state))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// Get prev block index
|
|
||||||
CBlockIndex* pindexPrev = NULL;
|
|
||||||
if (hash != chainparams.GetConsensus().hashGenesisBlock) {
|
if (hash != chainparams.GetConsensus().hashGenesisBlock) {
|
||||||
|
|
||||||
|
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 (!CheckBlockHeader(block, state))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Get prev block index
|
||||||
|
CBlockIndex* pindexPrev = NULL;
|
||||||
BlockMap::iterator mi = mapBlockIndex.find(block.hashPrevBlock);
|
BlockMap::iterator mi = mapBlockIndex.find(block.hashPrevBlock);
|
||||||
if (mi == mapBlockIndex.end())
|
if (mi == mapBlockIndex.end())
|
||||||
return state.DoS(10, error("%s: prev block not found", __func__), 0, "bad-prevblk");
|
return state.DoS(10, error("%s: prev block not found", __func__), 0, "bad-prevblk");
|
||||||
pindexPrev = (*mi).second;
|
pindexPrev = (*mi).second;
|
||||||
if (pindexPrev->nStatus & BLOCK_FAILED_MASK)
|
if (pindexPrev->nStatus & BLOCK_FAILED_MASK)
|
||||||
return state.DoS(100, error("%s: prev block invalid", __func__), REJECT_INVALID, "bad-prevblk");
|
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)
|
if (pindex == NULL)
|
||||||
pindex = AddToBlockIndex(block);
|
pindex = AddToBlockIndex(block);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user