diff --git a/libraries/wallet/wallet.cpp b/libraries/wallet/wallet.cpp index 194254be..943b6f1c 100644 --- a/libraries/wallet/wallet.cpp +++ b/libraries/wallet/wallet.cpp @@ -1988,19 +1988,22 @@ public: }); std::vector> son_objects = _remote_db->get_sons(son_ids); vector owners; - owners.resize(son_objects.size()); - std::transform(son_objects.begin(), son_objects.end(), owners.begin(), - [](const fc::optional& obj) { - FC_ASSERT(obj, "Invalid active SONs list in global properties."); - return obj->son_account; - }); + for(auto obj: son_objects) + { + if (obj) + owners.push_back(obj->son_account); + } vector> accs = _remote_db->get_accounts(owners); + std::remove_if(son_objects.begin(), son_objects.end(), + [](const fc::optional& obj) -> bool { return obj.valid(); }); map result; - std::transform(accs.begin(), accs.end(), son_ids.begin(), + std::transform(accs.begin(), accs.end(), son_objects.begin(), std::inserter(result, result.end()), - [](fc::optional& acct, son_id_type& sid) { + [](fc::optional& acct, fc::optional son) { FC_ASSERT(acct, "Invalid active SONs list in global properties."); - return std::make_pair(string(acct->name), std::move(sid)); + if (son.valid()) + return std::make_pair(string(acct->name), std::move(son->id)); + return std::make_pair(string(acct->name), std::move(son_id_type())); }); return result; } FC_CAPTURE_AND_RETHROW() }