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 xrpl {
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*>(mptID_.data() + sizeof(std::uint32_t));
27
28 return *account;
29}
30
33{
34 return to_string(mptID_);
35}
36
37void
39{
40 jv[jss::mpt_issuance_id] = to_string(mptID_);
41}
42
44to_json(MPTIssue const& mptIssue)
45{
46 Json::Value jv;
47 mptIssue.setJson(jv);
48 return jv;
49}
50
52to_string(MPTIssue const& mptIssue)
53{
54 return to_string(mptIssue.getMptID());
55}
56
57MPTIssue
59{
60 if (!v.isObject())
61 {
62 Throw<std::runtime_error>(
63 "mptIssueFromJson can only be specified with an 'object' Json "
64 "value");
65 }
66
67 if (v.isMember(jss::currency) || v.isMember(jss::issuer))
68 {
69 Throw<std::runtime_error>("mptIssueFromJson, MPTIssue should not have currency or issuer");
70 }
71
72 Json::Value const& idStr = v[jss::mpt_issuance_id];
73
74 if (!idStr.isString())
75 {
76 Throw<Json::error>("mptIssueFromJson MPTID must be a string Json value");
77 }
78
79 MPTID id;
80 if (!id.parseHex(idStr.asString()))
81 {
82 Throw<Json::error>("mptIssueFromJson MPTID is invalid");
83 }
84
85 return MPTIssue{id};
86}
87
88} // namespace xrpl
Represents a JSON value.
Definition json_value.h:130
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.
constexpr MPTID const & getMptID() const
Definition MPTIssue.h:26
AccountID const & getIssuer() const
Definition MPTIssue.cpp:21
MPTIssue()=default
std::string getText() const
Definition MPTIssue.cpp:32
void setJson(Json::Value &jv) const
Definition MPTIssue.cpp:38
pointer data()
Definition base_uint.h:101
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
std::string to_string(base_uint< Bits, Tag > const &a)
Definition base_uint.h:597
base_uint< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition AccountID.h:28
MPTIssue mptIssueFromJson(Json::Value const &jv)
Definition MPTIssue.cpp:58
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:44
Json::Value to_json(Asset const &asset)
Definition Asset.h:121