20 #include <ripple/app/main/Application.h>
21 #include <ripple/app/paths/TrustLine.h>
22 #include <ripple/ledger/ReadView.h>
23 #include <ripple/net/RPCErr.h>
24 #include <ripple/protocol/AccountID.h>
25 #include <ripple/protocol/ErrorCodes.h>
26 #include <ripple/protocol/PublicKey.h>
27 #include <ripple/protocol/jss.h>
28 #include <ripple/resource/Fees.h>
29 #include <ripple/rpc/Context.h>
30 #include <ripple/rpc/impl/RPCHelpers.h>
56 auto& params = context.
params;
65 if (!(params.isMember(jss::account) || params.isMember(jss::ident)))
69 params.isMember(jss::account) ? params[jss::account].asString()
70 : params[jss::ident].asString());
73 auto id = parseBase58<AccountID>(strIdent);
76 auto const accountID{std::move(
id.value())};
79 result[jss::account] =
toBase58(accountID);
84 if (params.isMember(jss::hotwallet))
86 auto addHotWallet = [&hotWallets](
Json::Value const& j) {
89 if (
auto id = parseBase58<AccountID>(j.asString()); id)
91 hotWallets.
insert(std::move(
id.value()));
105 for (
unsigned i = 0; i < hw.
size(); ++i)
106 valid &= addHotWallet(hw[i]);
110 valid &= addHotWallet(hw);
119 result[jss::error] =
"invalidHotWallet";
138 int balSign = rs->getBalance().signum();
142 auto const& peer = rs->getAccountIDPeer();
148 if (hotWallets.
count(peer) > 0)
151 hotBalances[peer].push_back(-rs->getBalance());
153 else if (balSign > 0)
156 assets[peer].push_back(rs->getBalance());
158 else if (rs->getFreeze())
161 frozenBalances[peer].push_back(-rs->getBalance());
166 auto& bal = sums[rs->getBalance().getCurrency()];
167 if (bal == beast::zero)
170 bal = -rs->getBalance();
176 bal -= rs->getBalance();
197 for (
auto const& [k, v] : sums)
201 result[jss::obligations] = std::move(j);
204 auto populateResult =
211 for (
auto const& [accId, accBalances] : array)
214 for (
auto const& balance : accBalances)
217 entry[jss::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);