41 for (
auto& tx : lpAccepted->txs)
43 if (!tx.first || !tx.second || !tx.first->isFieldPresent(sfTransactionType))
47 uint16_t tt = tx.first->getFieldU16(sfTransactionType);
51 case ttOFFER_CREATE: {
52 if (tx.first->isFieldPresent(sfOfferSequence))
53 offerCancel = tx.first->getFieldU32(sfOfferSequence);
62 for (
auto const& node : tx.second->getFieldArray(sfAffectedNodes))
64 SField const& metaType = node.getFName();
65 uint16_t nodeType = node.getFieldU16(sfLedgerEntryType);
69 if (nodeType != ltOFFER || metaType == sfCreatedNode)
75 if (!node.isFieldPresent(sfFinalFields) || !node.isFieldPresent(sfPreviousFields))
78 auto const& ffBase = node.peekAtField(sfFinalFields);
79 auto const& finalFields = ffBase.template downcast<STObject>();
80 auto const& pfBase = node.peekAtField(sfPreviousFields);
81 auto const& previousFields = pfBase.template downcast<STObject>();
84 if (!finalFields.isFieldPresent(sfTakerGets) || !finalFields.isFieldPresent(sfTakerPays) ||
85 !previousFields.isFieldPresent(sfTakerGets) || !previousFields.isFieldPresent(sfTakerPays))
89 if (metaType == sfDeletedNode && offerCancel && finalFields.getFieldU32(sfSequence) == *offerCancel)
94 STAmount deltaGets = finalFields.getFieldAmount(sfTakerGets) - previousFields.getFieldAmount(sfTakerGets);
95 STAmount deltaPays = finalFields.getFieldAmount(sfTakerPays) - previousFields.getFieldAmount(sfTakerPays);
100 bool const noswap =
isXRP(deltaGets) ? true : (
isXRP(deltaPays) ? false : (g < p));
102 STAmount first = noswap ? deltaGets : deltaPays;
103 STAmount second = noswap ? deltaPays : deltaGets;
106 if (second == beast::zero)
111 if (first < beast::zero)
114 if (second < beast::zero)
127 if (tally.find(key) == tally.end())
139 auto& entry = tally[key];
157 jvObj[jss::type] =
"bookChanges";
160 jvObj[jss::validated] = lpAccepted->header().validated;
161 jvObj[jss::ledger_index] = lpAccepted->header().seq;
162 jvObj[jss::ledger_hash] =
to_string(lpAccepted->header().hash);
163 jvObj[jss::ledger_time] =
Json::Value::UInt(lpAccepted->header().closeTime.time_since_epoch().count());
167 for (
auto const& entry : tally)