@@ -38,16 +38,38 @@ void ResetChallenge(CBlockHeader& block, const CBlockIndex& indexLast, const Con
3838 block.proof .challenge = indexLast.proof .challenge ;
3939}
4040
41- bool CheckBitcoinProof (uint256 hash, unsigned int nBits)
41+ static const unsigned int BLOCK_VERIFY_FLAGS = MANDATORY_SCRIPT_VERIFY_FLAGS |
42+ SCRIPT_VERIFY_DERSIG |
43+ SCRIPT_VERIFY_STRICTENC |
44+ SCRIPT_VERIFY_MINIMALDATA |
45+ SCRIPT_VERIFY_NULLDUMMY |
46+ SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS |
47+ SCRIPT_VERIFY_CLEANSTACK |
48+ SCRIPT_VERIFY_MINIMALIF |
49+ SCRIPT_VERIFY_NULLFAIL |
50+ SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY |
51+ SCRIPT_VERIFY_CHECKSEQUENCEVERIFY |
52+ SCRIPT_VERIFY_LOW_S |
53+ SCRIPT_VERIFY_WITNESS |
54+ SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM |
55+ SCRIPT_VERIFY_WITNESS_PUBKEYTYPE;
56+
57+ bool CheckBitcoinProof (const uint256& hash, unsigned int nBits, const Consensus::Params& params)
4258{
59+ if (g_solution_blocks) {
60+ const auto & payload = g_blockheader_payload_map.at (hash);
61+ CScript solution = CScript (payload.begin (), payload.end ());
62+ return HashVerifyScript (solution, params.parent_chain_signblockscript , BLOCK_VERIFY_FLAGS, hash);
63+ }
64+
4365 bool fNegative ;
4466 bool fOverflow ;
4567 arith_uint256 bnTarget;
4668
4769 bnTarget.SetCompact (nBits, &fNegative , &fOverflow );
4870
4971 // Check range
50- if (fNegative || bnTarget == 0 || fOverflow || bnTarget > UintToArith256 (Params (). GetConsensus () .parentChainPowLimit ))
72+ if (fNegative || bnTarget == 0 || fOverflow || bnTarget > UintToArith256 (params .parentChainPowLimit ))
5173 return false ;
5274
5375 // Check proof of work matches claimed amount
0 commit comments