diff --git a/include/xrpl/protocol/Rules.h b/include/xrpl/protocol/Rules.h index 11ca8eb72a..88f7f381b4 100644 --- a/include/xrpl/protocol/Rules.h +++ b/include/xrpl/protocol/Rules.h @@ -8,8 +8,13 @@ namespace xrpl { +/** Check whether a feature is enabled in the current ledger rules + * + * @param feature The feature to be tested. + * @param resultIfNoRules What to return if called from outside a Transactor context. + */ bool -isFeatureEnabled(uint256 const& feature); +isFeatureEnabled(uint256 const& feature, bool resultIfNoRules = false); class DigestAwareReadView; diff --git a/src/libxrpl/protocol/Rules.cpp b/src/libxrpl/protocol/Rules.cpp index fd54a1eff2..a32d73021a 100644 --- a/src/libxrpl/protocol/Rules.cpp +++ b/src/libxrpl/protocol/Rules.cpp @@ -140,10 +140,12 @@ Rules::operator!=(Rules const& other) const } bool -isFeatureEnabled(uint256 const& feature) +isFeatureEnabled(uint256 const& feature, bool resultIfNoRules) { auto const& rules = getCurrentTransactionRules(); - return rules && rules->enabled(feature); + if (!rules) + return resultIfNoRules; + return rules->enabled(feature); } } // namespace xrpl diff --git a/src/libxrpl/tx/invariants/InvariantCheck.cpp b/src/libxrpl/tx/invariants/InvariantCheck.cpp index 17a83a1b56..d2fa073692 100644 --- a/src/libxrpl/tx/invariants/InvariantCheck.cpp +++ b/src/libxrpl/tx/invariants/InvariantCheck.cpp @@ -322,7 +322,7 @@ NoZeroEscrow::visitEntry( bad_ = true; }; - bool const overwriteFixEnabled = isFeatureEnabled(fixSecurity3_1_3); + bool const overwriteFixEnabled = isFeatureEnabled(fixSecurity3_1_3, true); if (after && after->getType() == ltMPTOKEN_ISSUANCE) { @@ -605,7 +605,7 @@ NoXRPTrustLines::visitEntry( std::shared_ptr const&, std::shared_ptr const& after) { - bool const overwriteFixEnabled = isFeatureEnabled(fixSecurity3_1_3); + bool const overwriteFixEnabled = isFeatureEnabled(fixSecurity3_1_3, true); if (after && after->getType() == ltRIPPLE_STATE) { @@ -646,7 +646,7 @@ NoDeepFreezeTrustLinesWithoutFreeze::visitEntry( { if (after && after->getType() == ltRIPPLE_STATE) { - bool const overwriteFixEnabled = isFeatureEnabled(fixSecurity3_1_3); + bool const overwriteFixEnabled = isFeatureEnabled(fixSecurity3_1_3, true); std::uint32_t const uFlags = after->getFieldU32(sfFlags); bool const lowFreeze = (uFlags & lsfLowFreeze) != 0u;