From 74ef53ae3d3c4576e47851795599bc2b73ec35d0 Mon Sep 17 00:00:00 2001 From: Capri Date: Thu, 17 Sep 2026 17:15:27 +0000 Subject: [PATCH] Test multi-algo chainwork continuity --- src/test/pow_tests.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/test/pow_tests.cpp b/src/test/pow_tests.cpp index d45598c..8df86d8 100644 --- a/src/test/pow_tests.cpp +++ b/src/test/pow_tests.cpp @@ -149,6 +149,32 @@ BOOST_AUTO_TEST_CASE(MultiAlgo_chainwork_normalization_test) GetBlockProof(shaChild, consensus) == GetBlockProof(randomXChild, consensus)); + // A fixed branch-independent rational scale can preserve chainwork + // continuity across the activation boundary. Derive an exact scale for + // this synthetic test state only; production parameters are configured + // separately in chainparams. + const arith_uint256 preActivationWork = + GetBlockProof(blocks[39], consensus); + const arith_uint256 unscaledPostActivationWork = + GetBlockProof(shaChild, consensus); + + BOOST_REQUIRE(preActivationWork > 0); + BOOST_REQUIRE(unscaledPostActivationWork > 0); + BOOST_REQUIRE_LE(preActivationWork.bits(), 32U); + BOOST_REQUIRE_LE(unscaledPostActivationWork.bits(), 32U); + + consensus.multiAlgoChainworkScaleNumerator = + static_cast(preActivationWork.GetLow64()); + consensus.multiAlgoChainworkScaleDenominator = + static_cast(unscaledPostActivationWork.GetLow64()); + + BOOST_CHECK( + GetBlockProof(shaChild, consensus) == + preActivationWork); + BOOST_CHECK( + GetBlockProof(randomXChild, consensus) == + preActivationWork); + }