20 #include <ripple/app/main/Application.h>
21 #include <ripple/app/paths/TrustLine.h>
22 #include <ripple/ledger/ReadView.h>
23 #include <ripple/protocol/AccountID.h>
24 #include <ripple/protocol/ErrorCodes.h>
25 #include <ripple/protocol/PublicKey.h>
26 #include <ripple/protocol/jss.h>
27 #include <ripple/resource/Fees.h>
28 #include <ripple/rpc/Context.h>
29 #include <ripple/rpc/impl/RPCHelpers.h>
55 auto& params = context.
params;
64 if (!(params.isMember(jss::account) || params.isMember(jss::ident)))
68 params.isMember(jss::account) ? params[jss::account].asString()
69 : params[jss::ident].asString());
72 params.isMember(jss::strict) && params[jss::strict].asBool();
83 result[jss::account] =
toBase58(accountID);
88 if (params.isMember(jss::hotwallet))
90 auto addHotWallet = [&hotWallets](
Json::Value const& j) {
93 auto const pk = parseBase58<PublicKey>(
101 auto const id = parseBase58<AccountID>(j.asString());
119 for (
unsigned i = 0; i < hw.
size(); ++i)
120 valid &= addHotWallet(hw[i]);
124 valid &= addHotWallet(hw);
133 result[jss::error] =
"invalidHotWallet";
152 int balSign = rs->getBalance().signum();
156 auto const& peer = rs->getAccountIDPeer();
162 if (hotWallets.
count(peer) > 0)
165 hotBalances[peer].push_back(-rs->getBalance());
167 else if (balSign > 0)
170 assets[peer].push_back(rs->getBalance());
172 else if (rs->getFreeze())
175 frozenBalances[peer].push_back(-rs->getBalance());
180 auto& bal = sums[rs->getBalance().getCurrency()];
181 if (bal == beast::zero)
184 bal = -rs->getBalance();
190 bal -= rs->getBalance();
211 for (
auto const& [k, v] : sums)
215 result[jss::obligations] = std::move(j);
218 auto populateResult =
225 for (
auto const& [accId, accBalances] : array)
228 for (
auto const& balance : accBalances)
231 entry[jss::currency] =
233 entry[jss::value] = balance.getText();
234 balanceArray.
append(std::move(entry));
236 j[
to_string(accId)] = std::move(balanceArray);
238 result[name] = std::move(j);
242 populateResult(hotBalances, jss::balances);
243 populateResult(frozenBalances, jss::frozen_balances);
244 populateResult(assets, jss::assets);