diff --git a/libraries/app/api.cpp b/libraries/app/api.cpp index aa52ff60..98d25611 100644 --- a/libraries/app/api.cpp +++ b/libraries/app/api.cpp @@ -155,10 +155,22 @@ namespace graphene { namespace app { vector database_api::get_account_balances(account_id_type acnt, const flat_set& assets)const { - vector result; result.reserve(assets.size()); - - std::transform(assets.begin(), assets.end(), std::back_inserter(result), - [this, acnt](asset_id_type id) { return _db.get_balance(acnt, id); }); + vector result; + if (assets.empty()) + { + // if the caller passes in an empty list of assets, return balances for all assets the account owns + const account_balance_index& balance_index = _db.get_index_type(); + auto range = balance_index.indices().get().equal_range(acnt); + for (const account_balance_object& balance : boost::make_iterator_range(range.first, range.second)) + result.push_back(asset(balance.get_balance())); + } + else + { + result.reserve(assets.size()); + + std::transform(assets.begin(), assets.end(), std::back_inserter(result), + [this, acnt](asset_id_type id) { return _db.get_balance(acnt, id); }); + } return result; }