xrpld
Loading...
Searching...
No Matches
MPTIssue.h
1#pragma once
2
3#include <xrpl/protocol/AccountID.h>
4#include <xrpl/protocol/UintTypes.h>
5
6namespace xrpl {
7
8/* Adapt MPTID to provide the same interface as Issue. Enables using static
9 * polymorphism by Asset and other classes. MPTID is a 192-bit concatenation
10 * of a 32-bit account sequence and a 160-bit account id.
11 */
13{
14private:
16
17public:
18 MPTIssue() = default;
19
20 MPTIssue(MPTID const& issuanceID);
21
22 MPTIssue(std::uint32_t sequence, AccountID const& account);
23
24 operator MPTID const&() const
25 {
26 return mptID_;
27 }
28
29 [[nodiscard]] AccountID const&
30 getIssuer() const;
31
32 [[nodiscard]] constexpr MPTID const&
33 getMptID() const
34 {
35 return mptID_;
36 }
37
38 [[nodiscard]] std::string
39 getText() const;
40
41 void
42 setJson(json::Value& jv) const;
43
44 friend constexpr bool
45 operator==(MPTIssue const& lhs, MPTIssue const& rhs);
46
47 friend constexpr std::weak_ordering
48 operator<=>(MPTIssue const& lhs, MPTIssue const& rhs);
49
50 static bool
52 {
53 return false;
54 }
55
56 static bool
58 {
59 return true;
60 }
61};
62
63constexpr bool
64operator==(MPTIssue const& lhs, MPTIssue const& rhs)
65{
66 return lhs.mptID_ == rhs.mptID_;
67}
68
70operator<=>(MPTIssue const& lhs, MPTIssue const& rhs)
71{
72 return lhs.mptID_ <=> rhs.mptID_;
73}
74
77inline bool
78isXRP(MPTID const&)
79{
80 return false;
81}
82
83inline AccountID
84getMPTIssuer(MPTID const& mptid)
85{
86 static_assert(sizeof(MPTID) == (sizeof(std::uint32_t) + sizeof(AccountID)));
87 // Extract the 20 bytes for the AccountID
88 std::array<std::uint8_t, sizeof(AccountID)> bytes{};
89 std::copy_n(mptid.data() + sizeof(std::uint32_t), sizeof(AccountID), bytes.begin());
90
91 // bit_cast is a "magic" compiler intrinsic that is
92 // usually optimized away to nothing in the final assembly.
93 return std::bit_cast<AccountID>(bytes);
94}
95
96// Disallow temporary
97AccountID const&
98getMPTIssuer(MPTID const&&) = delete;
99AccountID const&
100getMPTIssuer(MPTID&&) = delete;
101
102inline MPTID
104{
105 static MPTIssue const kMPT{0, noAccount()};
106 return kMPT.getMptID();
107}
108
109inline MPTID
111{
112 static MPTIssue const kMPT{0, xrpAccount()};
113 return kMPT.getMptID();
114}
115
116template <class Hasher>
117void
118hash_append(Hasher& h, MPTIssue const& r)
119{
120 using beast::hash_append;
121 hash_append(h, r.getMptID());
122}
123
125toJson(MPTIssue const& mptIssue);
126
128to_string(MPTIssue const& mptIssue);
129
130MPTIssue
132
134operator<<(std::ostream& os, MPTIssue const& x);
135
136} // namespace xrpl
137
138namespace std {
139
140template <>
142{
143 explicit hash() = default;
144};
145
146} // namespace std
T bit_cast(T... args)
Represents a JSON value.
Definition json_value.h:130
pointer data()
Definition base_uint.h:106
HardenedHash<> hasher
Definition base_uint.h:151
static bool native()
Definition MPTIssue.h:51
friend constexpr std::weak_ordering operator<=>(MPTIssue const &lhs, MPTIssue const &rhs)
Definition MPTIssue.h:70
constexpr MPTID const & getMptID() const
Definition MPTIssue.h:33
friend constexpr bool operator==(MPTIssue const &lhs, MPTIssue const &rhs)
Definition MPTIssue.h:64
static bool integral()
Definition MPTIssue.h:57
AccountID const & getIssuer() const
Definition MPTIssue.cpp:29
void setJson(json::Value &jv) const
Definition MPTIssue.cpp:47
MPTIssue()=default
std::string getText() const
Definition MPTIssue.cpp:41
T copy_n(T... args)
std::enable_if_t< IsContiguouslyHashable< T, Hasher >::value > hash_append(Hasher &h, T const &t) noexcept
Logically concatenate input data to a Hasher.
STL namespace.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
constexpr bool operator==(BaseUInt< Bits, Tag > const &lhs, BaseUInt< Bits, Tag > const &rhs)
Definition base_uint.h:588
bool isXRP(AccountID const &c)
Definition AccountID.h:70
MPTIssue mptIssueFromJson(json::Value const &jv)
Definition MPTIssue.cpp:67
std::ostream & operator<<(std::ostream &out, BaseUInt< Bits, Tag > const &u)
Definition base_uint.h:648
AccountID getMPTIssuer(MPTID const &mptid)
Definition MPTIssue.h:84
std::string to_string(BaseUInt< Bits, Tag > const &a)
Definition base_uint.h:633
json::Value toJson(Asset const &asset)
Definition Asset.h:157
constexpr std::strong_ordering operator<=>(BaseUInt< Bits, Tag > const &lhs, BaseUInt< Bits, Tag > const &rhs)
Definition base_uint.h:567
MPTID noMPT()
Definition MPTIssue.h:103
BaseUInt< 192 > MPTID
MPTID is a 192-bit value representing MPT Issuance ID, which is a concatenation of a 32-bit sequence ...
Definition UintTypes.h:44
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition AccountID.h:28
AccountID const & noAccount()
A placeholder for empty accounts.
void hash_append(Hasher &h, Slice const &v)
Definition Slice.h:175
AccountID const & xrpAccount()
Compute AccountID from public key.
MPTID badMPT()
Definition MPTIssue.h:110