|
|
@ -1483,6 +1483,17 @@ bool Blockchain::get_random_outs_for_amounts(const COMMAND_RPC_GET_RANDOM_OUTPUT
|
|
|
|
for (uint64_t amount : req.amounts)
|
|
|
|
for (uint64_t amount : req.amounts)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
auto num_outs = m_db->get_num_outputs(amount);
|
|
|
|
auto num_outs = m_db->get_num_outputs(amount);
|
|
|
|
|
|
|
|
// ensure we don't include outputs that aren't yet eligible to be used
|
|
|
|
|
|
|
|
// outpouts are sorted by height
|
|
|
|
|
|
|
|
while (num_outs > 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
const tx_out_index toi = m_db->get_output_tx_and_index(amount, num_outs - 1);
|
|
|
|
|
|
|
|
const uint64_t height = m_db->get_tx_block_height(toi.first);
|
|
|
|
|
|
|
|
if (height + CRYPTONOTE_DEFAULT_TX_SPENDABLE_AGE <= m_db->height())
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
--num_outs;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// create outs_for_amount struct and populate amount field
|
|
|
|
// create outs_for_amount struct and populate amount field
|
|
|
|
COMMAND_RPC_GET_RANDOM_OUTPUTS_FOR_AMOUNTS::outs_for_amount& result_outs = *res.outs.insert(res.outs.end(), COMMAND_RPC_GET_RANDOM_OUTPUTS_FOR_AMOUNTS::outs_for_amount());
|
|
|
|
COMMAND_RPC_GET_RANDOM_OUTPUTS_FOR_AMOUNTS::outs_for_amount& result_outs = *res.outs.insert(res.outs.end(), COMMAND_RPC_GET_RANDOM_OUTPUTS_FOR_AMOUNTS::outs_for_amount());
|
|
|
|
result_outs.amount = amount;
|
|
|
|
result_outs.amount = amount;
|
|
|
|