xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
include
xrpl
protocol
Permissions.h
1
#pragma once
2
3
#include <xrpl/basics/base_uint.h>
4
#include <xrpl/protocol/Rules.h>
5
#include <xrpl/protocol/SOTemplate.h>
6
#include <xrpl/protocol/TxFormats.h>
7
#include <xrpl/protocol/TxSettings.h>
8
9
#include <
cstdint
>
10
#include <
functional
>
11
#include <
optional
>
12
#include <
string
>
13
#include <
unordered_map
>
14
#include <
unordered_set
>
15
#include <
vector
>
16
17
namespace
xrpl
{
18
19
class
STTx
;
20
28
// Macro-generated, complex
29
// NOLINTNEXTLINE(cppcoreguidelines-use-enum-class)
30
enum
GranularPermissionType
:
std::uint32_t
{
31
#pragma push_macro("GRANULAR_PERMISSION")
32
#undef GRANULAR_PERMISSION
33
34
#define GRANULAR_PERMISSION(name, txType, value, ...) name = (value),
35
36
#include <xrpl/protocol/detail/permissions.macro>
37
38
#undef GRANULAR_PERMISSION
39
#pragma pop_macro("GRANULAR_PERMISSION")
40
};
41
42
class
Permission
43
{
44
private
:
45
Permission
();
46
47
struct
GranularPermissionEntry
48
{
49
std::string
name
;
50
TxType
txType
;
51
std::uint32_t
permittedFlags
;
52
SOTemplate
permittedFields
;
53
54
GranularPermissionEntry
(
55
std::string
name
,
56
TxType
txType
,
57
std::uint32_t
permittedFlags
,
58
std::vector<SOElement>
fields);
59
};
60
61
struct
TxDelegationEntry
62
{
63
UInt256
amendment
;
64
Delegation
delegable
{
Delegation::NotDelegable
};
65
};
66
67
std::unordered_set<TxType>
granularTxTypes_
;
68
std::unordered_map<TxType, TxDelegationEntry>
txDelegationMap_
;
69
std::unordered_map<std::string, GranularPermissionType>
granularPermissionsByName_
;
70
std::unordered_map<GranularPermissionType, GranularPermissionEntry>
granularPermissions_
;
71
72
public
:
73
static
Permission
const
&
74
getInstance
();
75
76
Permission
(
Permission
const
&) =
delete
;
77
Permission
&
78
operator=
(
Permission
const
&) =
delete
;
79
80
[[nodiscard]]
std::optional<std::string>
81
getPermissionName
(
std::uint32_t
value)
const
;
82
83
[[nodiscard]]
std::optional<std::uint32_t>
84
getGranularValue
(
std::string
const
& name)
const
;
85
86
[[nodiscard]]
std::optional<std::string>
87
getGranularName
(
GranularPermissionType
value)
const
;
88
89
[[nodiscard]]
std::optional<TxType>
90
getGranularTxType
(
GranularPermissionType
gpType)
const
;
91
92
// Returns a reference to avoid copying UInt256 - 32 bytes. std::optional
93
// cannot hold references directly, so std::reference_wrapper is used.
94
[[nodiscard]]
std::optional<std::reference_wrapper<UInt256 const>
>
95
getTxFeature
(
TxType
txType)
const
;
96
97
[[nodiscard]]
bool
98
isDelegable
(
std::uint32_t
permissionValue,
Rules
const
& rules)
const
;
99
100
[[nodiscard]]
bool
101
hasGranularPermissions
(
TxType
txType)
const
;
102
103
// for tx level permission, permission value is equal to tx type plus one
104
[[nodiscard]]
static
uint32_t
105
txToPermissionType
(
TxType
type);
106
107
// tx type value is permission value minus one
108
[[nodiscard]]
static
std::optional<TxType>
109
permissionToTxType
(
std::uint32_t
value);
110
123
[[nodiscard]]
bool
124
checkGranularSandbox
(
125
STTx
const
& tx,
126
std::unordered_set<GranularPermissionType>
const
& heldPermissions)
const
;
127
};
128
129
}
// namespace xrpl
std::string
xrpl::Permission::granularPermissionsByName_
std::unordered_map< std::string, GranularPermissionType > granularPermissionsByName_
Definition
Permissions.h:69
xrpl::Permission::Permission
Permission()
Definition
Permissions.cpp:42
xrpl::Permission::txToPermissionType
static uint32_t txToPermissionType(TxType type)
Definition
Permissions.cpp:260
xrpl::Permission::getGranularValue
std::optional< std::uint32_t > getGranularValue(std::string const &name) const
Definition
Permissions.cpp:177
xrpl::Permission::getTxFeature
std::optional< std::reference_wrapper< UInt256 const > > getTxFeature(TxType txType) const
Definition
Permissions.cpp:213
xrpl::Permission::txDelegationMap_
std::unordered_map< TxType, TxDelegationEntry > txDelegationMap_
Definition
Permissions.h:68
xrpl::Permission::getGranularTxType
std::optional< TxType > getGranularTxType(GranularPermissionType gpType) const
Definition
Permissions.cpp:197
xrpl::Permission::hasGranularPermissions
bool hasGranularPermissions(TxType txType) const
Definition
Permissions.cpp:207
xrpl::Permission::getGranularName
std::optional< std::string > getGranularName(GranularPermissionType value) const
Definition
Permissions.cpp:187
xrpl::Permission::Permission
Permission(Permission const &)=delete
xrpl::Permission::granularPermissions_
std::unordered_map< GranularPermissionType, GranularPermissionEntry > granularPermissions_
Definition
Permissions.h:70
xrpl::Permission::granularTxTypes_
std::unordered_set< TxType > granularTxTypes_
Definition
Permissions.h:67
xrpl::Permission::operator=
Permission & operator=(Permission const &)=delete
xrpl::Permission::checkGranularSandbox
bool checkGranularSandbox(STTx const &tx, std::unordered_set< GranularPermissionType > const &heldPermissions) const
Verifies a delegated transaction against its granular permission template.
Definition
Permissions.cpp:277
xrpl::Permission::permissionToTxType
static std::optional< TxType > permissionToTxType(std::uint32_t value)
Definition
Permissions.cpp:266
xrpl::Permission::isDelegable
bool isDelegable(std::uint32_t permissionValue, Rules const &rules) const
Definition
Permissions.cpp:227
xrpl::Permission::getPermissionName
std::optional< std::string > getPermissionName(std::uint32_t value) const
Definition
Permissions.cpp:157
xrpl::Permission::getInstance
static Permission const & getInstance()
Definition
Permissions.cpp:150
xrpl::Rules
Rules controlling protocol behavior.
Definition
Rules.h:40
xrpl::SOTemplate
Defines the fields and their attributes within a STObject.
Definition
SOTemplate.h:105
xrpl::STTx
Definition
STTx.h:43
cstdint
functional
std::uint32_t
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::TxType
TxType
Transaction type identifiers.
Definition
TxFormats.h:45
xrpl::GranularPermissionType
GranularPermissionType
We have both transaction type permissions and granular type permissions.
Definition
Permissions.h:30
xrpl::UInt256
BaseUInt< 256 > UInt256
Definition
base_uint.h:580
xrpl::Delegation
Delegation
Definition
TxSettings.h:11
xrpl::Delegation::NotDelegable
@ NotDelegable
Definition
TxSettings.h:11
optional
string
xrpl::Permission::GranularPermissionEntry::permittedFields
SOTemplate permittedFields
Definition
Permissions.h:52
xrpl::Permission::GranularPermissionEntry::name
std::string name
Definition
Permissions.h:49
xrpl::Permission::GranularPermissionEntry::txType
TxType txType
Definition
Permissions.h:50
xrpl::Permission::GranularPermissionEntry::permittedFlags
std::uint32_t permittedFlags
Definition
Permissions.h:51
xrpl::Permission::GranularPermissionEntry::GranularPermissionEntry
GranularPermissionEntry(std::string name, TxType txType, std::uint32_t permittedFlags, std::vector< SOElement > fields)
Definition
Permissions.cpp:30
xrpl::Permission::TxDelegationEntry
Definition
Permissions.h:62
xrpl::Permission::TxDelegationEntry::amendment
UInt256 amendment
Definition
Permissions.h:63
xrpl::Permission::TxDelegationEntry::delegable
Delegation delegable
Definition
Permissions.h:64
unordered_map
unordered_set
vector
Generated by
1.17.0