xrpld
Loading...
Searching...
No Matches
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
19namespace xrpl::RPC {
20
21bool
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
41getIDFromCreatedIssuance(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
56void
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
Represents a JSON value.
Definition json_value.h:130
TER getResultTER() const
Definition TxMeta.h:37
STArray & getNodes()
Definition TxMeta.h:69
API version numbers used in later API versions.
Definition ApiVersion.h:35
void insertMPTokenIssuanceID(json::Value &response, std::shared_ptr< STTx const > const &transaction, TxMeta const &transactionMeta)
std::optional< MPTID > getIDFromCreatedIssuance(TxMeta const &transactionMeta)
bool canHaveMPTokenIssuanceID(std::shared_ptr< STTx const > const &serializedTx, TxMeta const &transactionMeta)
Add a mpt_issuance_id field to the meta input/output parameter.
TxType
Transaction type identifiers.
Definition TxFormats.h:41
std::string to_string(BaseUInt< Bits, Tag > const &a)
Definition base_uint.h:633
bool isTesSuccess(TER x) noexcept
Definition TER.h:663
MPTID makeMptID(std::uint32_t sequence, AccountID const &account)
Definition Indexes.cpp:172
T value(T... args)