DeliverMax alias of Payment tx (#979)

Fix #973
This commit is contained in:
cyan317
2023-11-09 13:35:08 +00:00
committed by GitHub
parent b016c1d7ba
commit feae85782c
11 changed files with 186 additions and 8 deletions

View File

@@ -185,12 +185,18 @@ toJson(ripple::STBase const& obj)
}
std::pair<boost::json::object, boost::json::object>
toExpandedJson(data::TransactionAndMetadata const& blobs, NFTokenjson nftEnabled, std::optional<uint16_t> networkId)
toExpandedJson(
data::TransactionAndMetadata const& blobs,
std::uint32_t const apiVersion,
NFTokenjson nftEnabled,
std::optional<uint16_t> networkId
)
{
auto [txn, meta] = deserializeTxPlusMeta(blobs, blobs.ledgerSequence);
auto txnJson = toJson(*txn);
auto metaJson = toJson(*meta);
insertDeliveredAmount(metaJson, txn, meta, blobs.date);
insertDeliverMaxAlias(txnJson, apiVersion);
if (nftEnabled == NFTokenjson::ENABLE) {
Json::Value nftJson;
@@ -246,6 +252,17 @@ insertDeliveredAmount(
return false;
}
void
insertDeliverMaxAlias(boost::json::object& txJson, std::uint32_t const apiVersion)
{
if (txJson.contains(JS(TransactionType)) and txJson.at(JS(TransactionType)).is_string() and
txJson.at(JS(TransactionType)).as_string() == JS(Payment) and txJson.contains(JS(Amount))) {
txJson[JS(DeliverMax)] = txJson[JS(Amount)];
if (apiVersion > 1)
txJson.erase(JS(Amount));
}
}
boost::json::object
toJson(ripple::TxMeta const& meta)
{
@@ -456,7 +473,8 @@ traverseNFTObjects(
if (!page) {
if (nextPage == beast::zero) { // no nft objects in lastNFTPage
return AccountCursor{beast::zero, 0};
} // marker is in the right range, but still invalid
}
// marker is in the right range, but still invalid
return Status{RippledError::rpcINVALID_PARAMS, "Invalid marker."};
}