xrpld
Loading...
Searching...
No Matches
MPTIssue.cpp
1#include <xrpl/protocol/MPTIssue.h>
2
3#include <xrpl/basics/base_uint.h>
4#include <xrpl/basics/contract.h>
5#include <xrpl/json/json_errors.h>
6#include <xrpl/json/json_value.h>
7#include <xrpl/protocol/AccountID.h>
8#include <xrpl/protocol/Indexes.h>
9#include <xrpl/protocol/UintTypes.h>
10#include <xrpl/protocol/jss.h>
11
12#include <cstdint>
13#include <ostream>
14#include <stdexcept>
15#include <string>
16
17namespace xrpl {
18
19MPTIssue::MPTIssue(MPTID const& issuanceID) : mptID_(issuanceID)
20{
21}
22
24 : MPTIssue(xrpl::makeMptID(sequence, account))
25{
26}
27
28AccountID const&
30{
31 // MPTID is concatenation of sequence + account
32 static_assert(sizeof(MPTID) == (sizeof(std::uint32_t) + sizeof(AccountID)));
33 // copy from id skipping the sequence
34 auto const* account = reinterpret_cast<AccountID const*>(mptID_.data() + sizeof(std::uint32_t));
35
36 return *account;
37}
38
41{
42 return to_string(mptID_);
43}
44
45void
47{
48 jv[jss::mpt_issuance_id] = to_string(mptID_);
49}
50
52toJson(MPTIssue const& mptIssue)
53{
54 json::Value jv;
55 mptIssue.setJson(jv);
56 return jv;
57}
58
60to_string(MPTIssue const& mptIssue)
61{
62 return to_string(mptIssue.getMptID());
63}
64
65MPTIssue
67{
68 if (!v.isObject())
69 {
71 "mptIssueFromJson can only be specified with an 'object' Json "
72 "value");
73 }
74
75 if (v.isMember(jss::currency) || v.isMember(jss::issuer))
76 {
77 Throw<std::runtime_error>("mptIssueFromJson, MPTIssue should not have currency or issuer");
78 }
79
80 json::Value const& idStr = v[jss::mpt_issuance_id];
81
82 if (!idStr.isString())
83 {
84 Throw<json::Error>("mptIssueFromJson MPTID must be a string Json value");
85 }
86
87 MPTID id;
88 if (!id.parseHex(idStr.asString()))
89 {
90 Throw<json::Error>("mptIssueFromJson MPTID is invalid");
91 }
92
93 return MPTIssue{id};
94}
95
97operator<<(std::ostream& os, MPTIssue const& x)
98{
99 os << to_string(x);
100 return os;
101}
102
103} // namespace xrpl
Represents a JSON value.
Definition json_value.h:117
bool isObject() const
bool isString() const
std::string asString() const
Returns the unquoted string value.
bool isMember(char const *key) const
Return true if the object has a member named key.
constexpr MPTID const & getMptID() const
Definition MPTIssue.h:43
AccountID const & getIssuer() const
Definition MPTIssue.cpp:29
void setJson(json::Value &jv) const
Definition MPTIssue.cpp:46
MPTIssue()=default
std::string getText() const
Definition MPTIssue.cpp:40
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
MPTIssue mptIssueFromJson(json::Value const &jv)
Definition MPTIssue.cpp:66
std::ostream & operator<<(std::ostream &out, BaseUInt< Bits, Tag > const &u)
Definition base_uint.h:666
std::string to_string(BaseUInt< Bits, Tag > const &a)
Definition base_uint.h:651
json::Value toJson(Asset const &asset)
Definition Asset.h:168
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:54
MPTID makeMptID(std::uint32_t const sequence, AccountID const &account)
Definition Indexes.cpp:184
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition AccountID.h:34
XRPL_NO_SANITIZE_ADDRESS void Throw(Args &&... args)
Definition contract.h:52