#include #include #include #include #include #include #include #include #include #include #include #include #include namespace xrpl { bool canHaveNFTokenOfferID( std::shared_ptr const& serializedTx, TxMeta const& transactionMeta) { if (!serializedTx) return false; TxType const tt = serializedTx->getTxnType(); if ((tt != ttNFTOKEN_MINT || !serializedTx->isFieldPresent(sfAmount)) && tt != ttNFTOKEN_CREATE_OFFER) return false; // if the transaction failed nothing could have been delivered. if (!isTesSuccess(transactionMeta.getResultTER())) return false; return true; } std::optional getOfferIDFromCreatedOffer(TxMeta const& transactionMeta) { for (STObject const& node : transactionMeta.getNodes()) { if (node.getFieldU16(sfLedgerEntryType) != ltNFTOKEN_OFFER || node.getFName() != sfCreatedNode) continue; return node.getFieldH256(sfLedgerIndex); } return std::nullopt; } void insertNFTokenOfferID( Json::Value& response, std::shared_ptr const& transaction, TxMeta const& transactionMeta) { if (!canHaveNFTokenOfferID(transaction, transactionMeta)) return; std::optional result = getOfferIDFromCreatedOffer(transactionMeta); if (result.has_value()) response[jss::offer_id] = to_string(result.value()); } } // namespace xrpl