1#include <xrpl/protocol/Rules.h>
3#include <xrpl/basics/LocalValue.h>
4#include <xrpl/basics/Number.h>
5#include <xrpl/basics/base_uint.h>
6#include <xrpl/basics/hardened_hash.h>
7#include <xrpl/beast/hash/uhash.h>
8#include <xrpl/beast/utility/instrumentation.h>
9#include <xrpl/protocol/Feature.h>
10#include <xrpl/protocol/STVector256.h>
22getCurrentTransactionRulesRef()
29std::optional<Rules>
const&
32 return *getCurrentTransactionRulesRef();
44 bool const enableVaultNumbers =
45 !r || (r->enabled(featureSingleAssetVault) || r->enabled(featureLendingProtocol));
46 bool const enableCuspRoundingFix = !r || r->enabled(fixCleanup3_2_0);
48 !r ||
useRulesGuards(*r) == (enableCuspRoundingFix || enableVaultNumbers),
49 "setCurrentTransactionRules : rule decisions match");
52 auto const range = [enableCuspRoundingFix, enableVaultNumbers]() {
53 if (enableVaultNumbers)
55 if (enableCuspRoundingFix)
65 *getCurrentTransactionRulesRef() = std::move(r);
78 return rules.
enabled(fixCleanup3_2_0) || rules.
enabled(featureSingleAssetVault) ||
79 rules.
enabled(featureLendingProtocol);
118 set_.reserve(amendments.size());
119 set_.insert(amendments.begin(), amendments.end());
133 return set_.contains(feature);
145 "xrpl::Rules::Impl::operator==(Impl) const : input presets do "
167 return impl_->presets();
173 XRPL_ASSERT(
impl_,
"xrpl::Rules::enabled : initialized");
175 return impl_->enabled(feature);
181 XRPL_ASSERT(
impl_ && other.
impl_,
"xrpl::Rules::operator==(Rules) const : both initialized");
190 return !(*
this == other);
198 return resultIfNoRules;
199 return rules->enabled(feature);
static void setMantissaScale(MantissaRange::MantissaScale scale)
Changes which mantissa scale is used for normalization.
bool operator==(Impl const &other) const
Impl(std::unordered_set< uint256, beast::Uhash<> > const &presets)
bool enabled(uint256 const &feature) const
std::unordered_set< uint256, beast::Uhash<> > const & presets() const
std::unordered_set< uint256, beast::Uhash<> > const & presets_
Impl(std::unordered_set< uint256, beast::Uhash<> > const &presets, std::optional< uint256 > const &digest, STVector256 const &amendments)
std::unordered_set< uint256, HardenedHash<> > set_
std::optional< uint256 > digest_
Rules controlling protocol behavior.
bool enabled(uint256 const &feature) const
Returns true if a feature is enabled.
std::unordered_set< uint256, beast::Uhash<> > const & presets() const
Rules(Rules const &)=default
std::shared_ptr< Impl const > impl_
bool operator!=(Rules const &other) const
bool operator==(Rules const &) const
Returns true if two rule sets are identical.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
bool isFeatureEnabled(uint256 const &feature, bool resultIfNoRules)
Check whether a feature is enabled in the current ledger rules.
static Hasher::result_type digest(void const *data, std::size_t size) noexcept
bool useRulesGuards(Rules const &rules)
ClosedInterval< T > range(T low, T high)
Create a closed range interval.
void createGuards(Rules const &rules, std::optional< CurrentTransactionRulesGuard > &rulesGuard, std::optional< NumberMantissaScaleGuard > &mantissaScaleGuard)
std::optional< Rules > const & getCurrentTransactionRules()
void setCurrentTransactionRules(std::optional< Rules > r)