17 , _account_svc(db.account_service())
18 , _reg_pool_svc(db.registration_pool_service())
27 for (
auto it = idx.cbegin(); it != idx.cend(); ++it)
29 ret.push_back(std::cref(*it));
42 FC_CAPTURE_AND_RETHROW((account))
48 FC_ASSERT(!accounts.empty(),
"Registration committee must have at least one member.");
53 FC_ASSERT(
get_committee().empty(),
"Can't create more than one committee.");
56 using sorted_type = std::map<account_name_type, std::reference_wrapper<const account_object>>;
58 for (
const auto& account_name : accounts)
60 const account_object& accout = _account_svc.
get_account(account_name);
62 items.insert(sorted_type::value_type(accout.name, std::cref(accout)));
66 for (
const auto& item : items)
70 wlog(
"Too many committee members in genesis state. More than ${1} are ignored.",
74 const account_object& accout = item.second;
80 FC_ASSERT(
false,
"Can't initialize at least one member.");
89 FC_ASSERT(!
get_committee().empty(),
"No committee to add member.");
91 const account_object& accout = _account_svc.
get_account(account_name);
101 const account_object& accout = _account_svc.
get_account(account_name);
103 _exclude_member(accout);
120 return idx.find(account_name) != idx.cend();
155 FC_ASSERT(!
is_exists(account.name),
"Member already exists.");
165 void dbs_registration_committee::_exclude_member(
const account_object& account)
167 FC_ASSERT(
is_exists(account.name),
"Member does not exist.");
169 const registration_committee_member_object& member =
get_member(account.name);
176 bool is_quorum(
size_t votes,
size_t members_count,
size_t quorum)
178 using safe_size_type = fc::safe<size_t>;
180 const size_t voted_percent = (safe_size_type(votes) *
SCORUM_100_PERCENT / members_count).value;
tracks the blockchain state in an extensible manner
dba::db_index & db_impl()
void change_base_quorum(const percent_type quorum) override
void change_exclude_member_quorum(const percent_type quorum) override
committee_members_cref_type get_committee() const override
percent_type get_add_member_quorum() override
percent_type get_exclude_member_quorum() override
committee_members_cref_type create_committee(const std::vector< account_name_type > &accounts) override
void update_member_info(const registration_committee_member_object &, const member_info_modifier_type &modifier) override
dbs_registration_committee(database &db)
bool is_exists(const account_name_type &) const override
percent_type get_base_quorum() override
const registration_committee_member_object & get_member(const account_name_type &) const override
void add_member(const account_name_type &) override
void change_add_member_quorum(const percent_type quorum) override
size_t get_members_count() const override
void exclude_member(const account_name_type &) override
protocol::percent_type dropout_quorum
protocol::percent_type invite_quorum
protocol::percent_type change_quorum
#define SCORUM_PERCENT(X)
#define SCORUM_100_PERCENT
#define SCORUM_REGISTRATION_COMMITTEE_MAX_MEMBERS_LIMIT
size_t size(db_index &db_idx)
bool is_quorum(size_t votes, size_t members_count, size_t quorum)
shared_multi_index_container< registration_committee_member_object, indexed_by< ordered_unique< tag< by_id >, member< registration_committee_member_object, registration_committee_member_id_type, ®istration_committee_member_object::id > >, ordered_unique< tag< by_account_name >, member< registration_committee_member_object, account_name_type, ®istration_committee_member_object::account > > > > registration_committee_member_index
fc::fixed_string_16 account_name_type
virtual const account_object & get_account(const account_name_type &) const =0
virtual void update(const modifier_type &modifier)=0
virtual const object_type & get() const =0
std::function< void(registration_committee_member_object &)> member_info_modifier_type
std::vector< committee_member_object_cref_type > committee_members_cref_type