#319 - votes_info: son info as map

This commit is contained in:
Vlad Dobromyslov 2022-03-16 11:17:05 +03:00
parent 0d094c2104
commit a60a4d4495
3 changed files with 34 additions and 39 deletions

View file

@ -2187,24 +2187,23 @@ votes_info database_api_impl::get_votes(const string &account_name_or_id) const
result.votes_against_workers = std::move(votes_against_workers);
}
if (!son_bitcoin_ids.empty()) {
vector<votes_info_object> votes_for_sons;
votes_for_sons.reserve(son_bitcoin_ids.size());
for (const auto &son : son_bitcoin_ids) {
const auto &son_obj = son.as<son_object>(6);
votes_for_sons.emplace_back(votes_info_object{son_obj.get_bitcoin_vote_id(), son_obj.id});
if (!son_bitcoin_ids.empty() || !son_hive_ids.empty()) {
flat_map<sidechain_type, vector< votes_info_object > > votes_for_sons;
if(!son_bitcoin_ids.empty()) {
votes_for_sons[sidechain_type::bitcoin].reserve(son_bitcoin_ids.size());
for (const auto &son : son_bitcoin_ids) {
const auto &son_obj = son.as<son_object>(6);
votes_for_sons[sidechain_type::bitcoin].emplace_back(votes_info_object{son_obj.get_bitcoin_vote_id(), son_obj.id});
}
}
result.votes_for_bitcoin_sons = std::move(votes_for_sons);
}
if (!son_hive_ids.empty()) {
vector<votes_info_object> votes_for_sons;
votes_for_sons.reserve(son_hive_ids.size());
for (const auto &son : son_hive_ids) {
const auto &son_obj = son.as<son_object>(6);
votes_for_sons.emplace_back(votes_info_object{son_obj.get_hive_vote_id(), son_obj.id});
if(!son_hive_ids.empty()) {
votes_for_sons[sidechain_type::hive].reserve(son_hive_ids.size());
for (const auto &son : son_hive_ids) {
const auto &son_obj = son.as<son_object>(6);
votes_for_sons[sidechain_type::hive].emplace_back(votes_info_object{son_obj.get_bitcoin_vote_id(), son_obj.id});
}
}
result.votes_for_hive_sons = std::move(votes_for_sons);
result.votes_for_sons = std::move(votes_for_sons);
}
return result;

View file

@ -19,12 +19,11 @@ namespace graphene { namespace chain {
* @ingroup object
*/
struct votes_info {
optional< vector< votes_info_object > > votes_for_committee_members;
optional< vector< votes_info_object > > votes_for_witnesses;
optional< vector< votes_info_object > > votes_for_workers;
optional< vector< votes_info_object > > votes_against_workers;
optional< vector< votes_info_object > > votes_for_bitcoin_sons;
optional< vector< votes_info_object > > votes_for_hive_sons;
optional< vector< votes_info_object > > votes_for_committee_members;
optional< vector< votes_info_object > > votes_for_witnesses;
optional< vector< votes_info_object > > votes_for_workers;
optional< vector< votes_info_object > > votes_against_workers;
optional< flat_map<sidechain_type, vector< votes_info_object > > > votes_for_sons;
};
} } // graphene::chain
@ -38,5 +37,4 @@ FC_REFLECT( graphene::chain::votes_info,
(votes_for_witnesses)
(votes_for_workers)
(votes_against_workers)
(votes_for_bitcoin_sons)
(votes_for_hive_sons))
(votes_for_sons))

View file

@ -273,13 +273,13 @@ BOOST_AUTO_TEST_CASE( son_voting )
//! Check votes of nathan
auto nathan_votes = con.wallet_api_ptr->get_votes("nathan");
BOOST_REQUIRE(nathan_votes.votes_for_bitcoin_sons);
BOOST_CHECK_EQUAL(nathan_votes.votes_for_bitcoin_sons->size(), 2);
BOOST_CHECK_EQUAL(nathan_votes.votes_for_bitcoin_sons->at(0).id.instance(), son1_obj.id.instance());
BOOST_CHECK_EQUAL(nathan_votes.votes_for_bitcoin_sons->at(1).id.instance(), son2_obj.id.instance());
BOOST_CHECK_EQUAL(nathan_votes.votes_for_hive_sons->size(), 2);
BOOST_CHECK_EQUAL(nathan_votes.votes_for_hive_sons->at(0).id.instance(), son1_obj.id.instance());
BOOST_CHECK_EQUAL(nathan_votes.votes_for_hive_sons->at(1).id.instance(), son2_obj.id.instance());
BOOST_REQUIRE(nathan_votes.votes_for_sons);
BOOST_CHECK_EQUAL(nathan_votes.votes_for_sons->at(sidechain_type::bitcoin).size(), 2);
BOOST_CHECK_EQUAL(nathan_votes.votes_for_sons->at(sidechain_type::bitcoin).at(0).id.instance(), son1_obj.id.instance());
BOOST_CHECK_EQUAL(nathan_votes.votes_for_sons->at(sidechain_type::bitcoin).at(1).id.instance(), son2_obj.id.instance());
BOOST_CHECK_EQUAL(nathan_votes.votes_for_sons->at(sidechain_type::hive).size(), 2);
BOOST_CHECK_EQUAL(nathan_votes.votes_for_sons->at(sidechain_type::hive).at(0).id.instance(), son1_obj.id.instance());
BOOST_CHECK_EQUAL(nathan_votes.votes_for_sons->at(sidechain_type::hive).at(1).id.instance(), son2_obj.id.instance());
// Withdraw vote for a son1account
BOOST_TEST_MESSAGE("Withdraw vote for a son1account");
@ -300,12 +300,11 @@ BOOST_AUTO_TEST_CASE( son_voting )
//! Check votes of nathan
nathan_votes = con.wallet_api_ptr->get_votes("nathan");
BOOST_REQUIRE(nathan_votes.votes_for_bitcoin_sons);
BOOST_CHECK_EQUAL(nathan_votes.votes_for_bitcoin_sons->size(), 1);
BOOST_CHECK_EQUAL(nathan_votes.votes_for_bitcoin_sons->at(0).id.instance(), son2_obj.id.instance());
BOOST_REQUIRE(nathan_votes.votes_for_hive_sons);
BOOST_CHECK_EQUAL(nathan_votes.votes_for_hive_sons->size(), 1);
BOOST_CHECK_EQUAL(nathan_votes.votes_for_hive_sons->at(0).id.instance(), son2_obj.id.instance());
BOOST_REQUIRE(nathan_votes.votes_for_sons);
BOOST_CHECK_EQUAL(nathan_votes.votes_for_sons->at(sidechain_type::bitcoin).size(), 1);
BOOST_CHECK_EQUAL(nathan_votes.votes_for_sons->at(sidechain_type::bitcoin).at(0).id.instance(), son2_obj.id.instance());
BOOST_CHECK_EQUAL(nathan_votes.votes_for_sons->at(sidechain_type::hive).size(), 1);
BOOST_CHECK_EQUAL(nathan_votes.votes_for_sons->at(sidechain_type::hive).at(0).id.instance(), son2_obj.id.instance());
// Withdraw vote for a son2account
BOOST_TEST_MESSAGE("Withdraw vote for a son2account");
@ -326,8 +325,7 @@ BOOST_AUTO_TEST_CASE( son_voting )
//! Check votes of nathan
nathan_votes = con.wallet_api_ptr->get_votes("nathan");
BOOST_CHECK(!nathan_votes.votes_for_bitcoin_sons.valid());
BOOST_CHECK(!nathan_votes.votes_for_hive_sons.valid());
BOOST_CHECK(!nathan_votes.votes_for_sons.valid());
} catch( fc::exception& e ) {
BOOST_TEST_MESSAGE("SON cli wallet tests exception");