rippled
Loading...
Searching...
No Matches
MPTIssue.cpp
1#include <xrpl/basics/base_uint.h>
2#include <xrpl/basics/contract.h>
3#include <xrpl/json/json_errors.h>
4#include <xrpl/json/json_value.h>
5#include <xrpl/protocol/AccountID.h>
6#include <xrpl/protocol/MPTIssue.h>
7#include <xrpl/protocol/UintTypes.h>
8#include <xrpl/protocol/jss.h>
9
10#include <cstdint>
11#include <stdexcept>
12#include <string>
13
14namespace ripple {
15
16MPTIssue::MPTIssue(MPTID const& issuanceID) : mptID_(issuanceID)
17{
18}
19
20AccountID const&
22{
23 // MPTID is concatenation of sequence + account
24 static_assert(sizeof(MPTID) == (sizeof(std::uint32_t) + sizeof(AccountID)));
25 // copy from id skipping the sequence
26 AccountID const* account = reinterpret_cast<AccountID const*>(
27 mptID_.data() + sizeof(std::uint32_t));
28
29 return *account;
30}
31
34{
35 return to_string(mptID_);
36}
37
38void
40{
41 jv[jss::mpt_issuance_id] = to_string(mptID_);
42}
43
45to_json(MPTIssue const& mptIssue)
46{
47 Json::Value jv;
48 mptIssue.setJson(jv);
49 return jv;
50}
51
53to_string(MPTIssue const& mptIssue)
54{
55 return to_string(mptIssue.getMptID());
56}
57
58MPTIssue
60{
61 if (!v.isObject())
62 {
63 Throw<std::runtime_error>(
64 "mptIssueFromJson can only be specified with an 'object' Json "
65 "value");
66 }
67
68 if (v.isMember(jss::currency) || v.isMember(jss::issuer))
69 {
70 Throw<std::runtime_error>(
71 "mptIssueFromJson, MPTIssue should not have currency or issuer");
72 }
73
74 Json::Value const& idStr = v[jss::mpt_issuance_id];
75
76 if (!idStr.isString())
77 {
78 Throw<Json::error>(
79 "mptIssueFromJson MPTID must be a string Json value");
80 }
81
82 MPTID id;
83 if (!id.parseHex(idStr.asString()))
84 {
85 Throw<Json::error>("mptIssueFromJson MPTID is invalid");
86 }
87
88 return MPTIssue{id};
89}
90
91} // namespace ripple
Represents a JSON value.
Definition json_value.h:131
bool isString() const
bool isObject() 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.
std::string getText() const
Definition MPTIssue.cpp:33
MPTIssue()=default
AccountID const & getIssuer() const
Definition MPTIssue.cpp:21
void setJson(Json::Value &jv) const
Definition MPTIssue.cpp:39
constexpr MPTID const & getMptID() const
Definition MPTIssue.h:27
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
base_uint< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition AccountID.h:29
base_uint< 192 > MPTID
MPTID is a 192-bit value representing MPT Issuance ID, which is a concatenation of a 32-bit sequence ...
Definition UintTypes.h:45
MPTIssue mptIssueFromJson(Json::Value const &jv)
Definition MPTIssue.cpp:59
Json::Value to_json(Asset const &asset)
Definition Asset.h:104
std::string to_string(base_uint< Bits, Tag > const &a)
Definition base_uint.h:611