diff --git a/libraries/chain/asset_object.cpp b/libraries/chain/asset_object.cpp index 055769a8..79ad88ad 100644 --- a/libraries/chain/asset_object.cpp +++ b/libraries/chain/asset_object.cpp @@ -252,7 +252,7 @@ map< account_id_type, vector< uint16_t > > asset_object::distribute_winners_part structurized_participants.emplace( holder, vector< uint16_t >() ); } uint64_t jackpot = get_id()( db ).dynamic_data( db ).current_supply.value * lottery_options->ticket_price.amount.value; - auto winner_numbers = db.get_winner_numbers( get_id().instance.value, holders.size(), lottery_options->winning_tickets.size() ); + auto winner_numbers = db.get_winner_numbers( get_id(), holders.size(), lottery_options->winning_tickets.size() ); auto& tickets( lottery_options->winning_tickets ); diff --git a/libraries/chain/db_getter.cpp b/libraries/chain/db_getter.cpp index 32fa9b3a..c38586e2 100644 --- a/libraries/chain/db_getter.cpp +++ b/libraries/chain/db_getter.cpp @@ -109,17 +109,17 @@ uint32_t database::last_non_undoable_block_num() const return head_block_num() - _undo_db.size(); } -std::vector database::get_seeds( uint32_t instance_value, uint8_t count_winners ) const +std::vector database::get_seeds( asset_id_type for_asset, uint8_t count_winners ) const { FC_ASSERT( count_winners <= 64 ); - std::string salted_string = std::string(_random_number_generator._seed) + std::to_string(instance_value); + std::string salted_string = std::string(_random_number_generator._seed) + std::to_string(for_asset.instance.value); uint32_t* seeds = (uint32_t*)(fc::sha256::hash(salted_string)._hash); std::vector result; result.reserve(64); for( int s = 0; s < 8; ++s ) { - uint32_t* sub_seeds = ( uint32_t* ) fc::sha256::hash( std::to_string( seeds[s] ) + std::to_string( instance_value ) )._hash; + uint32_t* sub_seeds = ( uint32_t* ) fc::sha256::hash( std::to_string( seeds[s] ) + std::to_string( for_asset.instance.value ) )._hash; for( int ss = 0; ss < 8; ++ss ) { result.push_back(sub_seeds[ss]); } @@ -127,14 +127,14 @@ std::vector database::get_seeds( uint32_t instance_value, uint8_t coun return result; } -const std::vector database::get_winner_numbers( uint32_t instance_value, uint32_t count_members, uint8_t count_winners ) const +const std::vector database::get_winner_numbers( asset_id_type for_asset, uint32_t count_members, uint8_t count_winners ) const { std::vector result; if( count_members < count_winners ) count_winners = count_members; if( count_winners == 0 ) return result; result.reserve(count_winners); - auto seeds = get_seeds(instance_value, count_winners); + auto seeds = get_seeds(for_asset, count_winners); for (auto current_seed = seeds.begin(); current_seed != seeds.end(); ++current_seed) { uint8_t winner_num = *current_seed % count_members; diff --git a/libraries/chain/include/graphene/chain/database.hpp b/libraries/chain/include/graphene/chain/database.hpp index caefbc67..03371f67 100644 --- a/libraries/chain/include/graphene/chain/database.hpp +++ b/libraries/chain/include/graphene/chain/database.hpp @@ -279,8 +279,8 @@ namespace graphene { namespace chain { const node_property_object& get_node_properties()const; const fee_schedule& current_fee_schedule()const; const account_statistics_object& get_account_stats_by_owner( account_id_type owner )const; - const std::vector get_winner_numbers( uint32_t instance_value, uint32_t count_members, uint8_t count_winners ) const; - std::vector get_seeds( uint32_t instance_value, uint8_t count_winners )const; + const std::vector get_winner_numbers( asset_id_type for_asset, uint32_t count_members, uint8_t count_winners ) const; + std::vector get_seeds( asset_id_type for_asset, uint8_t count_winners )const; uint64_t get_random_bits( uint64_t bound ); const witness_schedule_object& get_witness_schedule_object()const; bool item_locked(const nft_id_type& item)const; diff --git a/libraries/chain/nft_lottery_object.cpp b/libraries/chain/nft_lottery_object.cpp index 58261bd7..997ad23f 100644 --- a/libraries/chain/nft_lottery_object.cpp +++ b/libraries/chain/nft_lottery_object.cpp @@ -89,7 +89,7 @@ namespace graphene structurized_participants.emplace(holder, vector()); } uint64_t jackpot = lottery_data->jackpot.amount.value; - auto winner_numbers = db.get_winner_numbers(get_id().instance.value, holders.size(), lottery_options.winning_tickets.size()); + auto winner_numbers = db.get_winner_numbers(id, holders.size(), lottery_options.winning_tickets.size()); auto &tickets(lottery_options.winning_tickets);