test: add unittests for CheckProofOfWork
following situations are covered: - negative target - overflow target - target easier then powLimit - invalid hash (hash > target) - zero target Signed-off-by: soroosh-sdi <soroosh.sardari@gmail.com>
This commit is contained in:
parent
a40ccbb195
commit
0cc7dd74e0
1 changed files with 54 additions and 0 deletions
|
@ -60,6 +60,60 @@ BOOST_AUTO_TEST_CASE(get_next_work_upper_limit_actual)
|
||||||
BOOST_CHECK_EQUAL(CalculateNextWorkRequired(&pindexLast, nLastRetargetTime, chainParams->GetConsensus()), 0x1d00e1fdU);
|
BOOST_CHECK_EQUAL(CalculateNextWorkRequired(&pindexLast, nLastRetargetTime, chainParams->GetConsensus()), 0x1d00e1fdU);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(CheckProofOfWork_test_negative_target)
|
||||||
|
{
|
||||||
|
const auto consensus = CreateChainParams(CBaseChainParams::MAIN)->GetConsensus();
|
||||||
|
uint256 hash;
|
||||||
|
unsigned int nBits;
|
||||||
|
nBits = UintToArith256(consensus.powLimit).GetCompact(true);
|
||||||
|
hash.SetHex("0x1");
|
||||||
|
BOOST_CHECK(!CheckProofOfWork(hash, nBits, consensus));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(CheckProofOfWork_test_overflow_target)
|
||||||
|
{
|
||||||
|
const auto consensus = CreateChainParams(CBaseChainParams::MAIN)->GetConsensus();
|
||||||
|
uint256 hash;
|
||||||
|
unsigned int nBits = ~0x00800000;
|
||||||
|
hash.SetHex("0x1");
|
||||||
|
BOOST_CHECK(!CheckProofOfWork(hash, nBits, consensus));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(CheckProofOfWork_test_too_easy_target)
|
||||||
|
{
|
||||||
|
const auto consensus = CreateChainParams(CBaseChainParams::MAIN)->GetConsensus();
|
||||||
|
uint256 hash;
|
||||||
|
unsigned int nBits;
|
||||||
|
arith_uint256 nBits_arith = UintToArith256(consensus.powLimit);
|
||||||
|
nBits_arith *= 2;
|
||||||
|
nBits = nBits_arith.GetCompact();
|
||||||
|
hash.SetHex("0x1");
|
||||||
|
BOOST_CHECK(!CheckProofOfWork(hash, nBits, consensus));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(CheckProofOfWork_test_biger_hash_than_target)
|
||||||
|
{
|
||||||
|
const auto consensus = CreateChainParams(CBaseChainParams::MAIN)->GetConsensus();
|
||||||
|
uint256 hash;
|
||||||
|
unsigned int nBits;
|
||||||
|
arith_uint256 hash_arith = UintToArith256(consensus.powLimit);
|
||||||
|
nBits = hash_arith.GetCompact();
|
||||||
|
hash_arith *= 2; // hash > nBits
|
||||||
|
hash = ArithToUint256(hash_arith);
|
||||||
|
BOOST_CHECK(!CheckProofOfWork(hash, nBits, consensus));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(CheckProofOfWork_test_zero_target)
|
||||||
|
{
|
||||||
|
const auto consensus = CreateChainParams(CBaseChainParams::MAIN)->GetConsensus();
|
||||||
|
uint256 hash;
|
||||||
|
unsigned int nBits;
|
||||||
|
arith_uint256 hash_arith{0};
|
||||||
|
nBits = hash_arith.GetCompact();
|
||||||
|
hash = ArithToUint256(hash_arith);
|
||||||
|
BOOST_CHECK(!CheckProofOfWork(hash, nBits, consensus));
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(GetBlockProofEquivalentTime_test)
|
BOOST_AUTO_TEST_CASE(GetBlockProofEquivalentTime_test)
|
||||||
{
|
{
|
||||||
const auto chainParams = CreateChainParams(CBaseChainParams::MAIN);
|
const auto chainParams = CreateChainParams(CBaseChainParams::MAIN);
|
||||||
|
|
Loading…
Add table
Reference in a new issue