20 #ifndef RIPPLE_RPC_BOOKCHANGES_H_INCLUDED
21 #define RIPPLE_RPC_BOOKCHANGES_H_INCLUDED
52 for (
auto& tx : lpAccepted->txs)
54 if (!tx.first || !tx.second ||
76 SField const& metaType = node.getFName();
122 isXRP(deltaGets) ? true : (
isXRP(deltaPays) ? false : (g < p));
124 STAmount first = noswap ? deltaGets : deltaPays;
125 STAmount second = noswap ? deltaPays : deltaGets;
128 if (second == beast::zero)
133 if (first < beast::zero)
136 if (second < beast::zero)
147 if (tally.find(key) == tally.end())
159 auto& entry = tally[key];
161 std::get<0>(entry) += first;
162 std::get<1>(entry) += second;
164 if (std::get<2>(entry) < rate)
165 std::get<2>(entry) = rate;
167 if (std::get<3>(entry) > rate)
168 std::get<3>(entry) = rate;
170 std::get<5>(entry) = rate;
176 jvObj[jss::type] =
"bookChanges";
177 jvObj[jss::ledger_index] = lpAccepted->info().seq;
178 jvObj[jss::ledger_hash] =
to_string(lpAccepted->info().hash);
180 lpAccepted->info().closeTime.time_since_epoch().count());
184 for (
auto const& entry : tally)
188 STAmount volA = std::get<0>(entry.second);
189 STAmount volB = std::get<1>(entry.second);
191 inner[jss::currency_a] =
193 inner[jss::currency_b] =
196 inner[jss::volume_a] =
198 inner[jss::volume_b] =
201 inner[jss::high] =
to_string(std::get<2>(entry.second).iou());
202 inner[jss::low] =
to_string(std::get<3>(entry.second).iou());
203 inner[jss::open] =
to_string(std::get<4>(entry.second).iou());
204 inner[jss::close] =
to_string(std::get<5>(entry.second).iou());