xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
include
xrpl
protocol
Rules.h
1
#pragma once
2
3
#include <xrpl/basics/base_uint.h>
4
#include <xrpl/beast/hash/uhash.h>
5
#include <xrpl/protocol/STVector256.h>
6
7
#include <
memory
>
8
#include <
optional
>
9
#include <
unordered_set
>
10
#include <
utility
>
11
12
namespace
xrpl
{
13
20
bool
21
isFeatureEnabled
(
UInt256
const
& feature,
bool
resultIfNoRules);
22
31
bool
32
isFeatureEnabled
(
UInt256
const
& feature);
33
34
class
DigestAwareReadView
;
35
39
class
Rules
40
{
41
private
:
42
class
Impl
;
43
44
// Carrying impl by shared_ptr makes Rules comparatively cheap to pass
45
// by value.
46
std::shared_ptr<Impl const>
impl_
;
47
48
public
:
49
Rules
(
Rules
const
&) =
default
;
50
51
Rules
(
Rules
&&) =
default
;
52
53
Rules
&
54
operator=
(
Rules
const
&) =
default
;
55
56
Rules
&
57
operator=
(
Rules
&&) =
default
;
58
59
Rules
() =
delete
;
60
67
explicit
Rules
(
std::unordered_set
<
UInt256
,
beast::Uhash<>
>
const
&
presets
);
68
69
private
:
70
// Allow a friend function to construct Rules.
71
friend
Rules
72
makeRulesGivenLedger
(
DigestAwareReadView
const
& ledger,
Rules
const
& current);
73
74
friend
Rules
75
makeRulesGivenLedger
(
76
DigestAwareReadView
const
& ledger,
77
std::unordered_set
<
UInt256
,
beast::Uhash<>
>
const
&
presets
);
78
79
Rules
(
80
std::unordered_set
<
UInt256
,
beast::Uhash<>
>
const
&
presets
,
81
std::optional<UInt256>
const
&
digest
,
82
STVector256
const
& amendments);
83
84
[[nodiscard]]
std::unordered_set<UInt256, beast::Uhash<>
>
const
&
85
presets
()
const
;
86
87
public
:
91
[[nodiscard]]
bool
92
enabled
(
UInt256
const
& feature)
const
;
93
99
bool
100
operator==
(
Rules
const
&)
const
;
101
};
102
103
std::optional<Rules>
const
&
104
getCurrentTransactionRules
();
105
106
void
107
setCurrentTransactionRules
(
std::optional<Rules>
r);
108
112
class
CurrentTransactionRulesGuard
113
{
114
public
:
115
explicit
CurrentTransactionRulesGuard
(
Rules
r) :
saved_
(
getCurrentTransactionRules
())
116
{
117
setCurrentTransactionRules
(std::move(r));
118
}
119
120
~CurrentTransactionRulesGuard
()
121
{
122
setCurrentTransactionRules
(
saved_
);
123
}
124
125
CurrentTransactionRulesGuard
() =
delete
;
126
CurrentTransactionRulesGuard
(
CurrentTransactionRulesGuard
const
&) =
delete
;
127
CurrentTransactionRulesGuard
&
128
operator=
(
CurrentTransactionRulesGuard
const
&) =
delete
;
129
130
private
:
131
std::optional<Rules>
saved_
;
132
};
133
134
class
NumberMantissaScaleGuard
;
135
136
bool
137
useRulesGuards
(
Rules
const
& rules);
138
139
void
140
createGuards
(
141
Rules
const
& rules,
142
std::optional<CurrentTransactionRulesGuard>
& rulesGuard,
143
std::optional<NumberMantissaScaleGuard>
& mantissaScaleGuard);
144
145
}
// namespace xrpl
xrpl::CurrentTransactionRulesGuard::saved_
std::optional< Rules > saved_
Definition
Rules.h:131
xrpl::CurrentTransactionRulesGuard::CurrentTransactionRulesGuard
CurrentTransactionRulesGuard()=delete
xrpl::CurrentTransactionRulesGuard::~CurrentTransactionRulesGuard
~CurrentTransactionRulesGuard()
Definition
Rules.h:120
xrpl::CurrentTransactionRulesGuard::CurrentTransactionRulesGuard
CurrentTransactionRulesGuard(Rules r)
Definition
Rules.h:115
xrpl::CurrentTransactionRulesGuard::operator=
CurrentTransactionRulesGuard & operator=(CurrentTransactionRulesGuard const &)=delete
xrpl::CurrentTransactionRulesGuard::CurrentTransactionRulesGuard
CurrentTransactionRulesGuard(CurrentTransactionRulesGuard const &)=delete
xrpl::DigestAwareReadView
ReadView that associates keys with digests.
Definition
ReadView.h:279
xrpl::NumberMantissaScaleGuard
Sets the new scale and restores the old scale when it leaves scope.
Definition
Number.h:963
xrpl::Rules::Impl
Definition
Rules.cpp:112
xrpl::Rules
Rules controlling protocol behavior.
Definition
Rules.h:40
xrpl::Rules::operator=
Rules & operator=(Rules const &)=default
xrpl::Rules::Rules
Rules(Rules const &)=default
xrpl::Rules::Rules
Rules()=delete
xrpl::Rules::impl_
std::shared_ptr< Impl const > impl_
Definition
Rules.h:46
xrpl::Rules::makeRulesGivenLedger
friend Rules makeRulesGivenLedger(DigestAwareReadView const &ledger, Rules const ¤t)
Definition
ReadView.cpp:62
xrpl::Rules::operator=
Rules & operator=(Rules &&)=default
xrpl::Rules::Rules
Rules(Rules &&)=default
xrpl::Rules::operator==
bool operator==(Rules const &) const
Returns true if two rule sets are identical.
Definition
Rules.cpp:190
xrpl::Rules::presets
std::unordered_set< UInt256, beast::Uhash<> > const & presets() const
Definition
Rules.cpp:176
xrpl::Rules::enabled
bool enabled(UInt256 const &feature) const
Returns true if a feature is enabled.
Definition
Rules.cpp:182
xrpl::STVector256
Definition
STVector256.h:17
memory
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::digest
static Hasher::result_type digest(void const *data, std::size_t size) noexcept
Definition
tokens.cpp:140
xrpl::useRulesGuards
bool useRulesGuards(Rules const &rules)
Definition
Rules.cpp:78
xrpl::isFeatureEnabled
bool isFeatureEnabled(UInt256 const &feature, bool resultIfNoRules)
Check whether a feature is enabled in the current ledger rules.
Definition
Rules.cpp:199
xrpl::createGuards
void createGuards(Rules const &rules, std::optional< CurrentTransactionRulesGuard > &rulesGuard, std::optional< NumberMantissaScaleGuard > &mantissaScaleGuard)
Definition
Rules.cpp:93
xrpl::getCurrentTransactionRules
std::optional< Rules > const & getCurrentTransactionRules()
Definition
Rules.cpp:30
xrpl::UInt256
BaseUInt< 256 > UInt256
Definition
base_uint.h:580
xrpl::setCurrentTransactionRules
void setCurrentTransactionRules(std::optional< Rules > r)
Definition
Rules.cpp:36
optional
std::shared_ptr
beast::Uhash
Definition
uhash.h:11
unordered_set
utility
Generated by
1.17.0