| 136 | } |
| 137 | |
| 138 | void sanity_check_chainparams(const ArgsManager& args, std::string chainName) |
| 139 | { |
| 140 | const auto chainParams = CreateChainParams(args, chainName); |
| 141 | const auto consensus = chainParams->GetConsensus(); |
| 142 | |
| 143 | // hash genesis is correct |
| 144 | BOOST_CHECK_EQUAL(consensus.hashGenesisBlock, chainParams->GenesisBlock().GetHash()); |
| 145 | |
| 146 | // target timespan is an even multiple of spacing |
| 147 | BOOST_CHECK_EQUAL(consensus.nPowTargetTimespan % consensus.nPowTargetSpacing, 0); |
| 148 | |
| 149 | // genesis nBits is positive, doesn't overflow and is lower than powLimit |
| 150 | arith_uint256 pow_compact; |
| 151 | bool neg, over; |
| 152 | pow_compact.SetCompact(chainParams->GenesisBlock().nBits, &neg, &over); |
| 153 | BOOST_CHECK(!neg && pow_compact != 0); |
| 154 | BOOST_CHECK(!over); |
| 155 | BOOST_CHECK(UintToArith256(consensus.powLimit) >= pow_compact); |
| 156 | |
| 157 | // check max target * 4*nPowTargetTimespan doesn't overflow -- see pow.cpp:CalculateNextWorkRequired() |
| 158 | if (!consensus.fPowNoRetargeting) { |
| 159 | arith_uint256 targ_max("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); |
| 160 | targ_max /= consensus.nPowTargetTimespan*4; |
| 161 | BOOST_CHECK(UintToArith256(consensus.powLimit) < targ_max); |
| 162 | } |
| 163 | } |
| 164 | |
| 165 | BOOST_AUTO_TEST_CASE(ChainParams_MAIN_sanity) |
| 166 | { |
no test coverage detected