diff --git a/src/consensus/params.h b/src/consensus/params.h --- a/src/consensus/params.h +++ b/src/consensus/params.h @@ -24,7 +24,7 @@ }; constexpr bool ValidDeployment(BuriedDeployment dep) { - return DEPLOYMENT_P2SH <= dep && dep <= DEPLOYMENT_CSV; + return dep <= DEPLOYMENT_CSV; } enum DeploymentPos : uint16_t { @@ -34,7 +34,7 @@ MAX_VERSION_BITS_DEPLOYMENTS, }; constexpr bool ValidDeployment(DeploymentPos dep) { - return DEPLOYMENT_TESTDUMMY <= dep && dep < MAX_VERSION_BITS_DEPLOYMENTS; + return dep < MAX_VERSION_BITS_DEPLOYMENTS; } /** diff --git a/src/deploymentstatus.cpp b/src/deploymentstatus.cpp --- a/src/deploymentstatus.cpp +++ b/src/deploymentstatus.cpp @@ -7,6 +7,8 @@ #include #include +#include + VersionBitsCache g_versionbitscache; /** @@ -23,3 +25,21 @@ !ValidDeployment(static_cast( Consensus::DEPLOYMENT_TESTDUMMY)), "sanity check of BuriedDeployment failed (overlaps with DeploymentPos)"); + +/** + * ValidDeployment only checks upper bounds for ensuring validity. + * This checks that the lowest possible value or the type is also a + * (specific) valid deployment so that lower bounds don't need to be checked. + */ + +template static constexpr bool is_minimum() { + using U = typename std::underlying_type::type; + return x == std::numeric_limits::min(); +} + +static_assert( + is_minimum(), + "p2sh is not minimum value for BuriedDeployment"); +static_assert( + is_minimum(), + "testdummy is not minimum value for DeploymentPos");