|
|
@ -2587,6 +2587,9 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo |
|
|
|
{ |
|
|
|
{ |
|
|
|
// These are checks that are independent of context.
|
|
|
|
// These are checks that are independent of context.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (block.fChecked) |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
|
|
// Check that the header is valid (particularly PoW). This is mostly
|
|
|
|
// Check that the header is valid (particularly PoW). This is mostly
|
|
|
|
// redundant with the call in AcceptBlockHeader.
|
|
|
|
// redundant with the call in AcceptBlockHeader.
|
|
|
|
if (!CheckBlockHeader(block, state, fCheckPOW)) |
|
|
|
if (!CheckBlockHeader(block, state, fCheckPOW)) |
|
|
@ -2642,6 +2645,9 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo |
|
|
|
return state.DoS(100, error("CheckBlock(): out-of-bounds SigOpCount"), |
|
|
|
return state.DoS(100, error("CheckBlock(): out-of-bounds SigOpCount"), |
|
|
|
REJECT_INVALID, "bad-blk-sigops", true); |
|
|
|
REJECT_INVALID, "bad-blk-sigops", true); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (fCheckPOW && fCheckMerkleRoot) |
|
|
|
|
|
|
|
block.fChecked = true; |
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|