42 for (
auto& tx : lpAccepted->txs)
44 if (!tx.first || !tx.second ||
45 !tx.first->isFieldPresent(sfTransactionType))
49 uint16_t tt = tx.first->getFieldU16(sfTransactionType);
53 case ttOFFER_CREATE: {
54 if (tx.first->isFieldPresent(sfOfferSequence))
55 offerCancel = tx.first->getFieldU32(sfOfferSequence);
64 for (
auto const& node : tx.second->getFieldArray(sfAffectedNodes))
66 SField const& metaType = node.getFName();
67 uint16_t nodeType = node.getFieldU16(sfLedgerEntryType);
71 if (nodeType != ltOFFER || metaType == sfCreatedNode)
77 if (!node.isFieldPresent(sfFinalFields) ||
78 !node.isFieldPresent(sfPreviousFields))
81 auto const& ffBase = node.peekAtField(sfFinalFields);
82 auto const& finalFields = ffBase.template downcast<STObject>();
83 auto const& pfBase = node.peekAtField(sfPreviousFields);
84 auto const& previousFields = pfBase.template downcast<STObject>();
87 if (!finalFields.isFieldPresent(sfTakerGets) ||
88 !finalFields.isFieldPresent(sfTakerPays) ||
89 !previousFields.isFieldPresent(sfTakerGets) ||
90 !previousFields.isFieldPresent(sfTakerPays))
94 if (metaType == sfDeletedNode && offerCancel &&
95 finalFields.getFieldU32(sfSequence) == *offerCancel)
100 STAmount deltaGets = finalFields.getFieldAmount(sfTakerGets) -
101 previousFields.getFieldAmount(sfTakerGets);
102 STAmount deltaPays = finalFields.getFieldAmount(sfTakerPays) -
103 previousFields.getFieldAmount(sfTakerPays);
109 isXRP(deltaGets) ? true : (
isXRP(deltaPays) ? false : (g < p));
111 STAmount first = noswap ? deltaGets : deltaPays;
112 STAmount second = noswap ? deltaPays : deltaGets;
115 if (second == beast::zero)
120 if (first < beast::zero)
123 if (second < beast::zero)
136 if (tally.find(key) == tally.end())
148 auto& entry = tally[key];
166 jvObj[jss::type] =
"bookChanges";
169 jvObj[jss::validated] = lpAccepted->info().validated;
170 jvObj[jss::ledger_index] = lpAccepted->info().seq;
171 jvObj[jss::ledger_hash] =
to_string(lpAccepted->info().hash);
173 lpAccepted->info().closeTime.time_since_epoch().count());
177 for (
auto const& entry : tally)
184 inner[jss::currency_a] =
186 inner[jss::currency_b] =
189 inner[jss::volume_a] =
191 inner[jss::volume_b] =