1#include <xrpl/basics/base_uint.h>
2#include <xrpl/json/json_value.h>
3#include <xrpl/protocol/LedgerFormats.h>
4#include <xrpl/protocol/NFTokenID.h>
5#include <xrpl/protocol/SField.h>
6#include <xrpl/protocol/STArray.h>
7#include <xrpl/protocol/STObject.h>
8#include <xrpl/protocol/STTx.h>
9#include <xrpl/protocol/TER.h>
10#include <xrpl/protocol/TxFormats.h>
11#include <xrpl/protocol/TxMeta.h>
12#include <xrpl/protocol/jss.h>
28 TxType const tt = serializedTx->getTxnType();
29 if (tt != ttNFTOKEN_MINT && tt != ttNFTOKEN_ACCEPT_OFFER && tt != ttNFTOKEN_CANCEL_OFFER)
50 if (node.getFieldU16(sfLedgerEntryType) != ltNFTOKEN_PAGE)
53 SField const& fName = node.getFName();
54 if (fName == sfCreatedNode)
57 node.peekAtField(sfNewFields).
downcast<
STObject>().getFieldArray(sfNFTokens);
59 toAddPrevNFTs.
begin(),
62 [](
STObject const& nft) { return nft.getFieldH256(sfNFTokenID); });
64 else if (fName == sfModifiedNode)
82 toAddPrevNFTs.
begin(),
85 [](
STObject const& nft) { return nft.getFieldH256(sfNFTokenID); });
88 node.peekAtField(sfFinalFields).
downcast<
STObject>().getFieldArray(sfNFTokens);
90 toAddFinalNFTs.
begin(),
93 [](
STObject const& nft) { return nft.getFieldH256(sfNFTokenID); });
99 if (finalIDs.
size() != prevIDs.
size() + 1)
109 if (diff.first == finalIDs.
end())
121 if (node.getFieldU16(sfLedgerEntryType) != ltNFTOKEN_OFFER ||
122 node.getFName() != sfDeletedNode)
125 auto const& toAddNFT =
126 node.peekAtField(sfFinalFields).downcast<
STObject>().getFieldH256(sfNFTokenID);
132 sort(tokenIDResult.
begin(), tokenIDResult.
end());
133 tokenIDResult.
erase(unique(tokenIDResult.
begin(), tokenIDResult.
end()), tokenIDResult.
end());
134 return tokenIDResult;
141 TxMeta const& transactionMeta)
147 if (
auto const type = transaction->getTxnType(); type == ttNFTOKEN_MINT)
153 else if (type == ttNFTOKEN_ACCEPT_OFFER)
160 else if (type == ttNFTOKEN_CANCEL_OFFER)
165 for (
auto const& nftID : result)
166 response[jss::nftoken_ids].append(
to_string(nftID));
T back_inserter(T... args)
STArray const & getFieldArray(SField const &field) const
bool isFieldPresent(SField const &field) const
STBase const & peekAtField(SField const &field) const
@ arrayValue
array value (ordered list)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::vector< uint256 > getNFTokenIDFromDeletedOffer(TxMeta const &transactionMeta)
TxType
Transaction type identifiers.
std::string to_string(base_uint< Bits, Tag > const &a)
bool canHaveNFTokenID(std::shared_ptr< STTx const > const &serializedTx, TxMeta const &transactionMeta)
Add a nftoken_ids field to the meta output parameter.
void insertNFTokenID(Json::Value &response, std::shared_ptr< STTx const > const &transaction, TxMeta const &transactionMeta)
bool isTesSuccess(TER x) noexcept
std::optional< uint256 > getNFTokenIDFromPage(TxMeta const &transactionMeta)