CurrentBlockchainStatus::create_random_outputs_object added

pull/85/head
moneroexamples 6 years ago
parent 960b593ea2
commit 0f9484973f

@ -287,21 +287,30 @@ CurrentBlockchainStatus::get_amount_specific_indices(
return false;
}
unique_ptr<RandomOutputs>
CurrentBlockchainStatus::create_random_outputs_object(
vector<uint64_t> const& amounts,
uint64_t outs_count) const
{
return make_unique<RandomOutputs>(*mcore, amounts, outs_count);
}
bool
CurrentBlockchainStatus::get_random_outputs(
vector<uint64_t> const& amounts,
uint64_t outs_count,
RandomOutputs::outs_for_amount_v& found_outputs)
{
RandomOutputs ro = RandomOutputs(*mcore, amounts, outs_count);
{
unique_ptr<RandomOutputs> ro
= create_random_outputs_object(amounts, outs_count);
if (!ro.find_random_outputs())
if (!ro->find_random_outputs())
{
OMERROR << "!ro.find_random_outputs()";
return false;
}
found_outputs = ro.get_found_outputs();
found_outputs = ro->get_found_outputs();
return true;
}

@ -305,6 +305,14 @@ protected:
// to synchronize access to mempool_txs vector
mutex getting_mempool_txs;
// have this method will make it easier to moc
// RandomOutputs in our tests later
virtual unique_ptr<RandomOutputs>
create_random_outputs_object(
vector<uint64_t> const& amounts,
uint64_t outs_count) const;
};

@ -17,8 +17,10 @@ uint64_t
RandomOutputs::get_random_output_index(uint64_t num_outs) const
{
// type = "triangular"; from wallet2.cpp
uint64_t r = crypto::rand<uint64_t>() % ((uint64_t)1 << 53);
double frac = std::sqrt((double)r / ((uint64_t)1 << 53));
static uint64_t const shift_factor {1ull << 53};
uint64_t r = crypto::rand<uint64_t>() % shift_factor;
double frac = std::sqrt(static_cast<double>(r) / shift_factor);
uint64_t i = static_cast<uint64_t>(frac * num_outs);
i = (i == num_outs ? --i : i);
@ -65,7 +67,7 @@ RandomOutputs::find_random_outputs()
if (!mcore.get_output_histogram(req, res))
{
//OMERROR << "mcore->get_output_histogram(req, res)";
OMERROR << "mcore->get_output_histogram(req, res)";
return false;
}

Loading…
Cancel
Save