Skip to content

Commit 653aed3

Browse files
committed
1) fix tokens count
2) temporary cancellation(for performance): - balance loading - sort by Code, Name, Total Supply
1 parent 7193002 commit 653aed3

2 files changed

Lines changed: 26 additions & 1 deletion

File tree

api/src/apihandler.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1606,7 +1606,17 @@ void APIHandler::ExecuteCountGet(ExecuteCountGetResult& _return, const std::stri
16061606

16071607
void APIHandler::TokenBalancesGet(api::TokenBalancesResult& _return, const general::Address& address) {
16081608
const csdb::Address addr = BlockChain::getAddressFromKey(address);
1609-
tm.loadTokenInfo(std::vector(1, addr), [&_return, &addr](const TokensMap& tokens, const HoldersMap& holders) {
1609+
std::vector<csdb::Address> vtokenAddr;
1610+
tm.loadTokenInfo({}, [&vtokenAddr, &addr](const TokensMap& tokens, const HoldersMap& holders) {
1611+
if (auto holderIt = holders.find(addr); holderIt != holders.end()) {
1612+
for (const auto& tokAddr : holderIt->second) {
1613+
if (tokens.find(tokAddr) != tokens.end())
1614+
vtokenAddr.push_back(tokAddr);
1615+
}
1616+
}
1617+
}, false);
1618+
1619+
tm.loadTokenInfo(vtokenAddr, [&_return, &addr](const TokensMap& tokens, const HoldersMap& holders) {
16101620
auto holderIt = holders.find(addr);
16111621
if (holderIt != holders.end()) {
16121622
for (const auto& tokAddr : holderIt->second) {
@@ -1884,14 +1894,23 @@ void APIHandler::TokensListGet(api::TokensListResult& _return, int64_t offset, i
18841894

18851895
switch (order) {
18861896
case TL_Code:
1897+
#ifdef SLOW_WORK
18871898
comparator = getComparator<VT>(&Token::symbol, desc);
18881899
break;
1900+
#endif
1901+
[[fallthrough]];
18891902
case TL_Name:
1903+
#ifdef SLOW_WORK
18901904
comparator = getComparator<VT>(&Token::name, desc);
18911905
break;
1906+
#endif
1907+
[[fallthrough]];
18921908
case TL_Address:
1909+
#ifdef SLOW_WORK
18931910
comparator = [desc](const VT& lhs, const VT& rhs) { return desc ^ (lhs.first < rhs.first); };
18941911
break;
1912+
#endif
1913+
[[fallthrough]];
18951914
case TL_TotalSupply:
18961915
comparator = [desc](const VT& lhs, const VT& rhs) { return desc ^ (stod(lhs.second.totalSupply) < stod(rhs.second.totalSupply)); };
18971916
break;

api/src/tokens.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ void TokensMaster::refreshTokenState(const csdb::Address& token, const std::stri
186186
t.symbol = symbol;
187187
t.totalSupply = totalSupply;
188188

189+
#ifdef SLOW_WORK
189190
// balance
190191
if (checkBalance) {
191192
executor::ExecuteByteCodeMultipleResult result;
@@ -225,6 +226,7 @@ void TokensMaster::refreshTokenState(const csdb::Address& token, const std::stri
225226
}
226227
}
227228
}
229+
#endif
228230
}
229231

230232
/* Call under data lock only */
@@ -332,11 +334,15 @@ void TokensMaster::loadTokenInfo(const std::vector<csdb::Address>& vtokenAddr, c
332334
freeChache(itLoaded.first);
333335
}
334336
else {
337+
#ifdef SLOW_WORK
335338
for (const auto& tk : tokens_) // need for sort
336339
refreshTokenState(tk.first, cs::SmartContracts::get_contract_state(api_->get_s_blockchain(), tk.first), false);
340+
#endif
337341
func(tokens_, holders_);
342+
#ifdef SLOW_WORK
338343
for (const auto& tk : tokens_)
339344
freeChache(tk.first, false);
345+
#endif
340346
}
341347
}
342348

0 commit comments

Comments
 (0)