integrate rng for winner tickets
This commit is contained in:
parent
5ee3cba043
commit
b28f0556f8
5 changed files with 38 additions and 31 deletions
|
|
@ -3200,34 +3200,7 @@ vector<uint64_t> database_api::get_random_number_ex(uint64_t minimum, uint64_t m
|
|||
|
||||
vector<uint64_t> database_api_impl::get_random_number_ex(uint64_t minimum, uint64_t maximum, uint64_t selections, bool duplicates) const
|
||||
{
|
||||
FC_ASSERT( selections <= 100000 );
|
||||
if (duplicates == false) {
|
||||
FC_ASSERT( maximum - minimum >= selections );
|
||||
}
|
||||
|
||||
vector<uint64_t> v;
|
||||
v.reserve(selections);
|
||||
|
||||
if (duplicates) {
|
||||
for (uint64_t i = 0; i < selections; i++) {
|
||||
int64_t rnd = _db.get_random_bits(maximum - minimum) + minimum;
|
||||
v.push_back(rnd);
|
||||
}
|
||||
} else {
|
||||
vector<uint64_t> tmpv;
|
||||
tmpv.reserve(selections);
|
||||
for (uint64_t i = minimum; i < maximum; i++) {
|
||||
tmpv.push_back(i);
|
||||
}
|
||||
|
||||
for (uint64_t i = 0; (i < selections) && (tmpv.size() > 0); i++) {
|
||||
uint64_t idx = _db.get_random_bits(tmpv.size());
|
||||
v.push_back(tmpv.at(idx));
|
||||
tmpv.erase(tmpv.begin() + idx);
|
||||
}
|
||||
}
|
||||
|
||||
return v;
|
||||
return _db.get_random_numbers(minimum, maximum, selections, duplicates);
|
||||
}
|
||||
|
||||
uint64_t database_api::get_random_number(uint64_t bound) const
|
||||
|
|
|
|||
|
|
@ -934,7 +934,7 @@ class database_api
|
|||
// ACCOUNT ROLE //
|
||||
//////////////////
|
||||
vector<account_role_object> get_account_roles_by_owner(account_id_type owner) const;
|
||||
private:
|
||||
|
||||
/////////////////////////////
|
||||
// Random number generator //
|
||||
/////////////////////////////
|
||||
|
|
|
|||
|
|
@ -315,4 +315,36 @@ bool database::is_son_active( son_id_type son_id )
|
|||
return (it_son != active_son_ids.end());
|
||||
}
|
||||
|
||||
vector<uint64_t> database::get_random_numbers(uint64_t minimum, uint64_t maximum, uint64_t selections, bool duplicates)
|
||||
{
|
||||
FC_ASSERT( selections <= 100000 );
|
||||
if (duplicates == false) {
|
||||
FC_ASSERT( maximum - minimum >= selections );
|
||||
}
|
||||
|
||||
vector<uint64_t> v;
|
||||
v.reserve(selections);
|
||||
|
||||
if (duplicates) {
|
||||
for (uint64_t i = 0; i < selections; i++) {
|
||||
int64_t rnd = get_random_bits(maximum - minimum) + minimum;
|
||||
v.push_back(rnd);
|
||||
}
|
||||
} else {
|
||||
vector<uint64_t> tmpv;
|
||||
tmpv.reserve(selections);
|
||||
for (uint64_t i = minimum; i < maximum; i++) {
|
||||
tmpv.push_back(i);
|
||||
}
|
||||
|
||||
for (uint64_t i = 0; (i < selections) && (tmpv.size() > 0); i++) {
|
||||
uint64_t idx = get_random_bits(tmpv.size());
|
||||
v.push_back(tmpv.at(idx));
|
||||
tmpv.erase(tmpv.begin() + idx);
|
||||
}
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
} }
|
||||
|
|
|
|||
|
|
@ -325,6 +325,7 @@ namespace graphene { namespace chain {
|
|||
|
||||
uint32_t last_non_undoable_block_num() const;
|
||||
vector<authority> get_account_custom_authorities(account_id_type account, const operation& op)const;
|
||||
vector<uint64_t> get_random_numbers(uint64_t minimum, uint64_t maximum, uint64_t selections, bool duplicates);
|
||||
//////////////////// db_init.cpp ////////////////////
|
||||
|
||||
void initialize_evaluators();
|
||||
|
|
|
|||
|
|
@ -89,7 +89,8 @@ namespace graphene
|
|||
structurized_participants.emplace(holder, vector<uint16_t>());
|
||||
}
|
||||
uint64_t jackpot = get_lottery_jackpot(db).amount.value;
|
||||
auto winner_numbers = db.get_winner_numbers(id, holders.size(), lottery_options.winning_tickets.size());
|
||||
auto selections = lottery_options.winning_tickets.size() <= holders.size() ? lottery_options.winning_tickets.size() : holders.size();
|
||||
auto winner_numbers = db.get_random_numbers(0, holders.size(), selections, false);
|
||||
|
||||
auto &tickets(lottery_options.winning_tickets);
|
||||
|
||||
|
|
@ -167,4 +168,4 @@ namespace graphene
|
|||
db.apply_operation(eval, end_op);
|
||||
}
|
||||
} // namespace chain
|
||||
} // namespace graphene
|
||||
} // namespace graphene
|
||||
|
|
|
|||
Loading…
Reference in a new issue