Compare commits

...

3 commits

Author SHA1 Message Date
satyakoneru
4ef94d9ae6 Merge branch 'origin/feature/SONs-base' into SON-291 2020-04-03 17:44:57 +00:00
satyakoneru
cbfd937eeb [SON-291,SON-328] - SON Configuration invalid, PW creation issues 2020-04-03 17:44:09 +00:00
satyakoneru
3784bdcf85 [SON-339] - SON Schedule crash 2020-04-03 11:18:26 +00:00
4 changed files with 45 additions and 0 deletions

View file

@ -77,6 +77,32 @@ vector<std::reference_wrapper<const typename Index::object_type>> database::sort
return refs; return refs;
} }
template<>
vector<std::reference_wrapper<const son_object>> database::sort_votable_objects<son_index>(size_t count) const
{
const auto& all_sons = get_index_type<son_index>().indices().get< by_id >();
std::vector<std::reference_wrapper<const son_object>> refs;
for( auto& son : all_sons )
{
if(son.has_valid_config())
{
refs.push_back(std::cref(son));
}
}
count = std::min(count, refs.size());
std::partial_sort(refs.begin(), refs.begin() + count, refs.end(),
[this](const son_object& a, const son_object& b)->bool {
share_type oa_vote = _vote_tally_buffer[a.vote_id];
share_type ob_vote = _vote_tally_buffer[b.vote_id];
if( oa_vote != ob_vote )
return oa_vote > ob_vote;
return a.vote_id < b.vote_id;
});
refs.resize(count, refs.front());
return refs;
}
template<class Type> template<class Type>
void database::perform_account_maintenance(Type tally_helper) void database::perform_account_maintenance(Type tally_helper)
{ {
@ -730,6 +756,13 @@ void database::update_active_sons()
return swi.son_id; return swi.son_id;
}); });
_sso.scheduler.update(active_sons); _sso.scheduler.update(active_sons);
// similar to witness, produce schedule for sons
if(cur_active_sons.size() == 0 && new_active_sons.size() > 0)
{
witness_scheduler_rng rng(_sso.rng_seed.begin(), GRAPHENE_NEAR_SCHEDULE_CTR_IV);
for( size_t i=0; i<new_active_sons.size(); ++i )
_sso.scheduler.produce_schedule(rng);
}
}); });
} FC_CAPTURE_AND_RETHROW() } } FC_CAPTURE_AND_RETHROW() }

View file

@ -73,6 +73,7 @@ namespace graphene { namespace chain {
flat_map<sidechain_type, string> sidechain_public_keys; flat_map<sidechain_type, string> sidechain_public_keys;
void pay_son_fee(share_type pay, database& db); void pay_son_fee(share_type pay, database& db);
bool has_valid_config()const;
}; };
struct by_account; struct by_account;

View file

@ -76,6 +76,7 @@ void_result delete_son_evaluator::do_evaluate(const son_delete_operation& op)
void_result delete_son_evaluator::do_apply(const son_delete_operation& op) void_result delete_son_evaluator::do_apply(const son_delete_operation& op)
{ try { { try {
const auto& idx = db().get_index_type<son_index>().indices().get<by_id>(); const auto& idx = db().get_index_type<son_index>().indices().get<by_id>();
const auto& ss_idx = db().get_index_type<son_stats_index>().indices().get<by_id>();
auto son = idx.find(op.son_id); auto son = idx.find(op.son_id);
if(son != idx.end()) { if(son != idx.end()) {
vesting_balance_object deposit = son->deposit(db()); vesting_balance_object deposit = son->deposit(db());
@ -88,6 +89,9 @@ void_result delete_son_evaluator::do_apply(const son_delete_operation& op)
vbo.policy = new_vesting_policy; vbo.policy = new_vesting_policy;
}); });
auto stats_obj = ss_idx.find(son->statistics);
if(stats_obj != ss_idx.end())
db().remove(*stats_obj);
db().remove(*son); db().remove(*son);
} }
return void_result(); return void_result();

View file

@ -5,4 +5,11 @@ namespace graphene { namespace chain {
void son_object::pay_son_fee(share_type pay, database& db) { void son_object::pay_son_fee(share_type pay, database& db) {
db.adjust_balance(son_account, pay); db.adjust_balance(son_account, pay);
} }
bool son_object::has_valid_config()const {
return ((std::string(signing_key).length() > 0) &&
(sidechain_public_keys.size() > 0) &&
(sidechain_public_keys.find( sidechain_type::bitcoin ) != sidechain_public_keys.end()) &&
(sidechain_public_keys.at(sidechain_type::bitcoin).length() > 0));
}
}} }}