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 AccountID const* account =
35 reinterpret_cast<AccountID const*>(mptID_.data() + sizeof(std::uint32_t));
36
37 return *account;
38}
39
42{
43 return to_string(mptID_);
44}
45
46void
48{
49 jv[jss::mpt_issuance_id] = to_string(mptID_);
50}
51
53toJson(MPTIssue const& mptIssue)
54{
55 json::Value jv;
56 mptIssue.setJson(jv);
57 return jv;
58}
59
61to_string(MPTIssue const& mptIssue)
62{
63 return to_string(mptIssue.getMptID());
64}
65
66MPTIssue
68{
69 if (!v.isObject())
70 {
72 "mptIssueFromJson can only be specified with an 'object' Json "
73 "value");
74 }
75
76 if (v.isMember(jss::currency) || v.isMember(jss::issuer))
77 {
78 Throw<std::runtime_error>("mptIssueFromJson, MPTIssue should not have currency or issuer");
79 }
80
81 json::Value const& idStr = v[jss::mpt_issuance_id];
82
83 if (!idStr.isString())
84 {
85 Throw<json::Error>("mptIssueFromJson MPTID must be a string Json value");
86 }
87
88 MPTID id;
89 if (!id.parseHex(idStr.asString()))
90 {
91 Throw<json::Error>("mptIssueFromJson MPTID is invalid");
92 }
93
94 return MPTIssue{id};
95}
96
98operator<<(std::ostream& os, MPTIssue const& x)
99{
100 os << to_string(x);
101 return os;
102}
103
104} // namespace xrpl
Represents a JSON value.
Definition json_value.h:130
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:33
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
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:67
std::ostream & operator<<(std::ostream &out, BaseUInt< Bits, Tag > const &u)
Definition base_uint.h:648
std::string to_string(BaseUInt< Bits, Tag > const &a)
Definition base_uint.h:633
json::Value toJson(Asset const &asset)
Definition Asset.h:157
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
MPTID makeMptID(std::uint32_t sequence, AccountID const &account)
Definition Indexes.cpp:172
XRPL_NO_SANITIZE_ADDRESS void Throw(Args &&... args)
Definition contract.h:49