1#include <xrpl/beast/utility/instrumentation.h>
2#include <xrpl/protocol/Feature.h>
3#include <xrpl/protocol/Permissions.h>
4#include <xrpl/protocol/jss.h>
11#pragma push_macro("TRANSACTION")
14#define TRANSACTION(tag, value, name, delegatable, amendment, ...) \
17#include <xrpl/protocol/detail/transactions.macro>
20#pragma pop_macro("TRANSACTION")
24#pragma push_macro("TRANSACTION")
27#define TRANSACTION(tag, value, name, delegatable, ...) {value, delegatable},
29#include <xrpl/protocol/detail/transactions.macro>
32#pragma pop_macro("TRANSACTION")
36#pragma push_macro("PERMISSION")
39#define PERMISSION(type, txType, value) {#type, type},
41#include <xrpl/protocol/detail/permissions.macro>
44#pragma pop_macro("PERMISSION")
48#pragma push_macro("PERMISSION")
51#define PERMISSION(type, txType, value) {type, #type},
53#include <xrpl/protocol/detail/permissions.macro>
56#pragma pop_macro("PERMISSION")
60#pragma push_macro("PERMISSION")
63#define PERMISSION(type, txType, value) {type, txType},
65#include <xrpl/protocol/detail/permissions.macro>
68#pragma pop_macro("PERMISSION")
73 permission.second > UINT16_MAX,
74 "ripple::Permission::granularPermissionMap_ : granular permission "
75 "value must not exceed the maximum uint16_t value.");
96 return item->getName();
106 return static_cast<uint32_t
>(it->second);
137 "ripple::Permissions::getTxFeature : tx exists in txFeatureMap_");
139 if (txFeaturesIt->second ==
uint256{})
141 return txFeaturesIt->second;
147 Rules const& rules)
const
149 auto const granularPermission =
151 if (granularPermission)
164 "ripple::Permissions::isDelegatable : tx exists in txFeatureMap_");
169 if (txFeaturesIt->second !=
uint256{} &&
170 !rules.
enabled(txFeaturesIt->second))
182 return static_cast<uint32_t
>(type) + 1;
188 return static_cast<TxType>(value - 1);
std::unordered_map< std::uint16_t, Delegation > delegatableTx_
std::optional< std::reference_wrapper< uint256 const > > const getTxFeature(TxType txType) const
TxType permissionToTxType(uint32_t const &value) const
std::optional< std::string > getGranularName(GranularPermissionType const &value) const
std::unordered_map< std::uint16_t, uint256 > txFeatureMap_
std::optional< std::string > getPermissionName(std::uint32_t const value) const
std::unordered_map< GranularPermissionType, std::string > granularNameMap_
std::unordered_map< std::string, GranularPermissionType > granularPermissionMap_
std::optional< std::uint32_t > getGranularValue(std::string const &name) const
std::optional< TxType > getGranularTxType(GranularPermissionType const &gpType) const
uint32_t txToPermissionType(TxType const &type) const
static Permission const & getInstance()
std::unordered_map< GranularPermissionType, TxType > granularTxTypeMap_
bool isDelegatable(std::uint32_t const &permissionValue, Rules const &rules) const
Rules controlling protocol behavior.
bool enabled(uint256 const &feature) const
Returns true if a feature is enabled.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
TxType
Transaction type identifiers.
GranularPermissionType
We have both transaction type permissions and granular type permissions.