xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
xrpld
rpc
detail
MPTokenIssuanceID.cpp
1
#include <xrpld/rpc/MPTokenIssuanceID.h>
2
3
#include <xrpl/basics/base_uint.h>
4
#include <xrpl/json/json_value.h>
5
#include <xrpl/protocol/Indexes.h>
6
#include <xrpl/protocol/LedgerFormats.h>
7
#include <xrpl/protocol/SField.h>
8
#include <xrpl/protocol/STObject.h>
9
#include <xrpl/protocol/STTx.h>
10
#include <xrpl/protocol/TER.h>
11
#include <xrpl/protocol/TxFormats.h>
12
#include <xrpl/protocol/TxMeta.h>
13
#include <xrpl/protocol/UintTypes.h>
14
#include <xrpl/protocol/jss.h>
15
16
#include <
memory
>
17
#include <
optional
>
18
19
namespace
xrpl::rpc
{
20
21
bool
22
canHaveMPTokenIssuanceID
(
23
std::shared_ptr<STTx const>
const
& serializedTx,
24
TxMeta
const
& transactionMeta)
25
{
26
if
(!serializedTx)
27
return
false
;
28
29
TxType
const
tt = serializedTx->getTxnType();
30
if
(tt != ttMPTOKEN_ISSUANCE_CREATE)
31
return
false
;
32
33
// if the transaction failed nothing could have been delivered.
34
if
(!
isTesSuccess
(transactionMeta.
getResultTER
()))
35
return
false
;
36
37
return
true
;
38
}
39
40
std::optional<MPTID>
41
getIDFromCreatedIssuance
(
TxMeta
const
& transactionMeta)
42
{
43
for
(
STObject
const
& node : transactionMeta.
getNodes
())
44
{
45
if
(node.getFieldU16(sfLedgerEntryType) != ltMPTOKEN_ISSUANCE ||
46
node.getFName() != sfCreatedNode)
47
continue
;
48
49
auto
const
& mptNode = node.peekAtField(sfNewFields).downcast<
STObject
>();
50
return
makeMptID
(mptNode.getFieldU32(sfSequence), mptNode.getAccountID(sfIssuer));
51
}
52
53
return
std::nullopt;
54
}
55
56
void
57
insertMPTokenIssuanceID
(
58
json::Value
& response,
59
std::shared_ptr<STTx const>
const
& transaction,
60
TxMeta
const
& transactionMeta)
61
{
62
if
(!
canHaveMPTokenIssuanceID
(transaction, transactionMeta))
63
return
;
64
65
std::optional<MPTID>
result =
getIDFromCreatedIssuance
(transactionMeta);
66
if
(result)
67
response[jss::mpt_issuance_id] =
to_string
(result.
value
());
68
}
69
70
}
// namespace xrpl::rpc
json::Value
Represents a JSON value.
Definition
json_value.h:117
xrpl::STObject
Definition
STObject.h:49
xrpl::TxMeta
Definition
TxMeta.h:26
xrpl::TxMeta::getResultTER
TER getResultTER() const
Definition
TxMeta.h:48
xrpl::TxMeta::getNodes
STArray & getNodes()
Definition
TxMeta.h:82
memory
xrpl::rpc
API version numbers used in later API versions.
Definition
ApiVersion.h:36
xrpl::rpc::insertMPTokenIssuanceID
void insertMPTokenIssuanceID(json::Value &response, std::shared_ptr< STTx const > const &transaction, TxMeta const &transactionMeta)
Definition
MPTokenIssuanceID.cpp:57
xrpl::rpc::canHaveMPTokenIssuanceID
bool canHaveMPTokenIssuanceID(std::shared_ptr< STTx const > const &serializedTx, TxMeta const &transactionMeta)
Add a mpt_issuance_id field to the meta input/output parameter.
Definition
MPTokenIssuanceID.cpp:22
xrpl::rpc::getIDFromCreatedIssuance
std::optional< MPTID > getIDFromCreatedIssuance(TxMeta const &transactionMeta)
Definition
MPTokenIssuanceID.cpp:41
xrpl::TxType
TxType
Transaction type identifiers.
Definition
TxFormats.h:45
xrpl::to_string
std::string to_string(BaseUInt< Bits, Tag > const &a)
Definition
base_uint.h:657
xrpl::makeMptID
MPTID makeMptID(std::uint32_t const sequence, AccountID const &account)
Definition
Indexes.cpp:206
xrpl::isTesSuccess
bool isTesSuccess(TER x) noexcept
Definition
TER.h:683
optional
std::shared_ptr
std::optional::value
T value(T... args)
Generated by
1.17.0