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 ripple {
17
18bool
20 std::shared_ptr<STTx const> const& serializedTx,
21 TxMeta const& transactionMeta)
22{
23 if (!serializedTx)
24 return false;
25
26 TxType const tt = serializedTx->getTxnType();
27 if (!(tt == ttNFTOKEN_MINT && serializedTx->isFieldPresent(sfAmount)) &&
28 tt != ttNFTOKEN_CREATE_OFFER)
29 return false;
30
31 // if the transaction failed nothing could have been delivered.
32 if (transactionMeta.getResultTER() != tesSUCCESS)
33 return false;
34
35 return true;
36}
37
39getOfferIDFromCreatedOffer(TxMeta const& transactionMeta)
40{
41 for (STObject const& node : transactionMeta.getNodes())
42 {
43 if (node.getFieldU16(sfLedgerEntryType) != ltNFTOKEN_OFFER ||
44 node.getFName() != sfCreatedNode)
45 continue;
46
47 return node.getFieldH256(sfLedgerIndex);
48 }
49 return std::nullopt;
50}
51
52void
54 Json::Value& response,
55 std::shared_ptr<STTx const> const& transaction,
56 TxMeta const& transactionMeta)
57{
58 if (!canHaveNFTokenOfferID(transaction, transactionMeta))
59 return;
60
61 std::optional<uint256> result = getOfferIDFromCreatedOffer(transactionMeta);
62
63 if (result.has_value())
64 response[jss::offer_id] = to_string(result.value());
65}
66
67} // namespace ripple
Represents a JSON value.
Definition json_value.h:131
STArray & getNodes()
Definition TxMeta.h:70
TER getResultTER() const
Definition TxMeta.h:38
T is_same_v
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
bool canHaveNFTokenOfferID(std::shared_ptr< STTx const > const &serializedTx, TxMeta const &transactionMeta)
Add an offer_id field to the meta output parameter.
TxType
Transaction type identifiers.
Definition TxFormats.h:38
std::optional< uint256 > getOfferIDFromCreatedOffer(TxMeta const &transactionMeta)
@ tesSUCCESS
Definition TER.h:226
void insertNFTokenOfferID(Json::Value &response, std::shared_ptr< STTx const > const &transaction, TxMeta const &transactionMeta)
std::string to_string(base_uint< Bits, Tag > const &a)
Definition base_uint.h:611
T has_value(T... args)
T value(T... args)