| 3274 | } |
| 3275 | |
| 3276 | static bool CheckBlockHeader(const CBlockHeader& block, CValidationState& state, const Consensus::Params& consensusParams, bool fCheckPOW = true) |
| 3277 | { |
| 3278 | // Check Equihash solution is valid |
| 3279 | bool postfork = block.nHeight >= (uint32_t)consensusParams.BTGHeight; |
| 3280 | if (fCheckPOW && postfork) { |
| 3281 | const CChainParams& chainparams = Params(); |
| 3282 | const size_t sol_size = chainparams.EquihashSolutionWidth(block.nHeight); |
| 3283 | if(block.nSolution.size() != sol_size) { |
| 3284 | return state.DoS( |
| 3285 | 100, error("CheckBlockHeader(): Equihash solution has invalid size have %d need %d", |
| 3286 | block.nSolution.size(), sol_size), |
| 3287 | REJECT_INVALID, "invalid-solution-size"); |
| 3288 | } |
| 3289 | if (!CheckEquihashSolution(&block, Params())) { |
| 3290 | LogPrintf("CheckBlockHeader(): Equihash solution invalid at height %d\n", block.nHeight); |
| 3291 | return state.DoS(100, error("CheckBlockHeader(): Equihash solution invalid"), |
| 3292 | REJECT_INVALID, "invalid-solution"); |
| 3293 | } |
| 3294 | } |
| 3295 | |
| 3296 | // Check proof of work matches claimed amount |
| 3297 | if (fCheckPOW && !CheckProofOfWork(block.GetHash(), block.nBits, postfork, consensusParams)) |
| 3298 | return state.DoS(50, false, REJECT_INVALID, "high-hash", false, "proof of work failed"); |
| 3299 | |
| 3300 | return true; |
| 3301 | } |
| 3302 | |
| 3303 | bool CheckBlock(const CBlock& block, CValidationState& state, const Consensus::Params& consensusParams, bool fCheckPOW, bool fCheckMerkleRoot) |
| 3304 | { |
no test coverage detected