Skip to content

Commit 8258c4c

Browse files
ajtownskallewoof
authored andcommitted
test: some sanity checks for consensus logic
1 parent e47ad37 commit 8258c4c

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

src/test/pow_tests.cpp

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,4 +135,51 @@ BOOST_AUTO_TEST_CASE(GetBlockProofEquivalentTime_test)
135135
}
136136
}
137137

138+
void sanity_check_chainparams(std::string chainName)
139+
{
140+
const auto chainParams = CreateChainParams(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+
{
167+
sanity_check_chainparams(CBaseChainParams::MAIN);
168+
}
169+
170+
BOOST_AUTO_TEST_CASE(ChainParams_REGTEST_sanity)
171+
{
172+
sanity_check_chainparams(CBaseChainParams::REGTEST);
173+
}
174+
175+
BOOST_AUTO_TEST_CASE(ChainParams_TESTNET_sanity)
176+
{
177+
sanity_check_chainparams(CBaseChainParams::TESTNET);
178+
}
179+
180+
BOOST_AUTO_TEST_CASE(ChainParams_SIGNET_sanity)
181+
{
182+
sanity_check_chainparams(CBaseChainParams::SIGNET);
183+
}
184+
138185
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)