rippled
Loading...
Searching...
No Matches
NFTokenOfferID.cpp
1#include <xrpl/basics/base_uint.h>
2#include <xrpl/json/json_value.h>
3#include <xrpl/protocol/LedgerFormats.h>
4#include <xrpl/protocol/NFTokenOfferID.h>
5#include <xrpl/protocol/SField.h>
6#include <xrpl/protocol/STObject.h>
7#include <xrpl/protocol/STTx.h>
8#include <xrpl/protocol/TER.h>
9#include <xrpl/protocol/TxFormats.h>
10#include <xrpl/protocol/TxMeta.h>
11#include <xrpl/protocol/jss.h>
12
13#include <memory>
14#include <optional>
15
16namespace xrpl {
17
18bool
19canHaveNFTokenOfferID(std::shared_ptr<STTx const> const& serializedTx, TxMeta const& transactionMeta)
20{
21 if (!serializedTx)
22 return false;
23
24 TxType const tt = serializedTx->getTxnType();
25 if (!(tt == ttNFTOKEN_MINT && serializedTx->isFieldPresent(sfAmount)) && tt != ttNFTOKEN_CREATE_OFFER)
26 return false;
27
28 // if the transaction failed nothing could have been delivered.
29 if (transactionMeta.getResultTER() != tesSUCCESS)
30 return false;
31
32 return true;
33}
34
36getOfferIDFromCreatedOffer(TxMeta const& transactionMeta)
37{
38 for (STObject const& node : transactionMeta.getNodes())
39 {
40 if (node.getFieldU16(sfLedgerEntryType) != ltNFTOKEN_OFFER || node.getFName() != sfCreatedNode)
41 continue;
42
43 return node.getFieldH256(sfLedgerIndex);
44 }
45 return std::nullopt;
46}
47
48void
50 Json::Value& response,
51 std::shared_ptr<STTx const> const& transaction,
52 TxMeta const& transactionMeta)
53{
54 if (!canHaveNFTokenOfferID(transaction, transactionMeta))
55 return;
56
57 std::optional<uint256> result = getOfferIDFromCreatedOffer(transactionMeta);
58
59 if (result.has_value())
60 response[jss::offer_id] = to_string(result.value());
61}
62
63} // namespace xrpl
Represents a JSON value.
Definition json_value.h:130
TER getResultTER() const
Definition TxMeta.h:37
STArray & getNodes()
Definition TxMeta.h:69
T is_same_v
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
TxType
Transaction type identifiers.
Definition TxFormats.h:37
std::string to_string(base_uint< Bits, Tag > const &a)
Definition base_uint.h:597
bool canHaveNFTokenOfferID(std::shared_ptr< STTx const > const &serializedTx, TxMeta const &transactionMeta)
Add an offer_id field to the meta output parameter.
void insertNFTokenOfferID(Json::Value &response, std::shared_ptr< STTx const > const &transaction, TxMeta const &transactionMeta)
std::optional< uint256 > getOfferIDFromCreatedOffer(TxMeta const &transactionMeta)
@ tesSUCCESS
Definition TER.h:225
T has_value(T... args)
T value(T... args)