20 #include <ripple/app/main/Application.h>
21 #include <ripple/app/paths/RippleState.h>
22 #include <ripple/ledger/ReadView.h>
23 #include <ripple/protocol/AccountID.h>
24 #include <ripple/protocol/ErrorCodes.h>
25 #include <ripple/protocol/jss.h>
26 #include <ripple/protocol/PublicKey.h>
27 #include <ripple/resource/Fees.h>
28 #include <ripple/rpc/Context.h>
29 #include <ripple/rpc/impl/RPCHelpers.h>
54 auto& params = context.
params;
63 if (!(params.isMember (jss::account) || params.isMember (jss::ident)))
66 std::string const strIdent (params.isMember (jss::account)
67 ? params[jss::account].asString ()
68 : params[jss::ident].asString ());
70 bool const bStrict = params.isMember (jss::strict) &&
71 params[jss::strict].asBool ();
87 if (params.isMember (jss::hotwallet))
90 auto addHotWallet = [&hotWallets](
Json::Value const& j)
94 auto const pk = parseBase58<PublicKey>(
103 auto const id = parseBase58<AccountID>(j.asString());
121 for (
unsigned i = 0; i < hw.
size(); ++i)
122 valid &= addHotWallet (hw[i]);
126 valid &= addHotWallet (hw);
135 result[jss::error] =
"invalidHotWallet";
156 int balSign = rs->getBalance().signum();
160 auto const& peer = rs->getAccountIDPeer();
165 if (hotWallets.
count (peer) > 0)
168 hotBalances[peer].push_back (-rs->getBalance ());
170 else if (balSign > 0)
173 assets[peer].push_back (rs->getBalance ());
175 else if (rs->getFreeze())
178 frozenBalances[peer].push_back (-rs->getBalance ());
183 auto& bal = sums[rs->getBalance().getCurrency()];
184 if (bal == beast::zero)
187 bal = -rs->getBalance();
190 bal -= rs->getBalance();
198 for (
auto const& [k, v] : sums)
202 result [jss::obligations] = std::move (j);
205 auto populateResult = [&result](
212 for (
auto const& [accId, accBalances] : array)
215 for (
auto const& balance : accBalances)
218 entry[jss::currency] =
to_string (balance.issue ().currency);
219 entry[jss::value] = balance.getText();
220 balanceArray.
append (std::move (entry));
222 j [
to_string (accId)] = std::move (balanceArray);
224 result [name] = std::move (j);
228 populateResult (hotBalances, jss::balances);
229 populateResult (frozenBalances, jss::frozen_balances);
230 populateResult (assets, jss::assets);