20#include <xrpl/beast/utility/instrumentation.h>
21#include <xrpl/protocol/Feature.h>
22#include <xrpl/protocol/Permissions.h>
23#include <xrpl/protocol/jss.h>
30#pragma push_macro("TRANSACTION")
33#define TRANSACTION(tag, value, name, delegatable, amendment, ...) \
36#include <xrpl/protocol/detail/transactions.macro>
39#pragma pop_macro("TRANSACTION")
43#pragma push_macro("TRANSACTION")
46#define TRANSACTION(tag, value, name, delegatable, ...) {value, delegatable},
48#include <xrpl/protocol/detail/transactions.macro>
51#pragma pop_macro("TRANSACTION")
55#pragma push_macro("PERMISSION")
58#define PERMISSION(type, txType, value) {#type, type},
60#include <xrpl/protocol/detail/permissions.macro>
63#pragma pop_macro("PERMISSION")
67#pragma push_macro("PERMISSION")
70#define PERMISSION(type, txType, value) {type, #type},
72#include <xrpl/protocol/detail/permissions.macro>
75#pragma pop_macro("PERMISSION")
79#pragma push_macro("PERMISSION")
82#define PERMISSION(type, txType, value) {type, txType},
84#include <xrpl/protocol/detail/permissions.macro>
87#pragma pop_macro("PERMISSION")
92 permission.second > UINT16_MAX,
93 "ripple::Permission::granularPermissionMap_ : granular permission "
94 "value must not exceed the maximum uint16_t value.");
115 return item->getName();
125 return static_cast<uint32_t
>(it->second);
153 Rules const& rules)
const
155 auto const granularPermission =
157 if (granularPermission)
164 if (rules.
enabled(fixDelegateV1_1))
172 "ripple::Permissions::isDelegatable : tx exists in txFeatureMap_");
177 if (txFeaturesIt->second !=
uint256{} &&
178 !rules.
enabled(txFeaturesIt->second))
191 return static_cast<uint32_t
>(type) + 1;
197 return static_cast<TxType>(value - 1);
std::unordered_map< std::uint16_t, Delegation > delegatableTx_
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.