Skip to content

Commit

Permalink
Merge pull request #8957
Browse files Browse the repository at this point in the history
b51f4a9 scan_tx: fix custom comparator for == case; fixes #8951 (j-berman)
  • Loading branch information
luigi1111 committed Aug 17, 2023
2 parents 3bebcc4 + b51f4a9 commit eac1b86
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions src/wallet/wallet2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1738,21 +1738,26 @@ void wallet2::sort_scan_tx_entries(std::vector<process_tx_entry_t> &unsorted_tx_
else // l.tx_entry.block_height == r.tx_entry.block_height
{
// coinbase tx is the first tx in a block
if (cryptonote::is_coinbase(r.tx))
return false;
if (cryptonote::is_coinbase(l.tx))
return true;
if (cryptonote::is_coinbase(r.tx))

// in case std::sort is comparing elem to itself
if (l.tx_hash == r.tx_hash)
return false;

// see which tx hash comes first in the block
THROW_WALLET_EXCEPTION_IF(parsed_blocks.find(l.tx_entry.block_height) == parsed_blocks.end(),
error::wallet_internal_error, "Expected block not returned by daemon");
error::wallet_internal_error, std::string("Expected block not returned by daemon, ") +
"left tx: " + string_tools::pod_to_hex(l.tx_hash) + ", right tx: " + string_tools::pod_to_hex(r.tx_hash));
const auto &blk = parsed_blocks[l.tx_entry.block_height];
for (const auto &tx_hash : blk.tx_hashes)
{
if (tx_hash == l.tx_hash)
return true;
if (tx_hash == r.tx_hash)
return false;
if (tx_hash == l.tx_hash)
return true;
}
THROW_WALLET_EXCEPTION(error::wallet_internal_error, "Tx hashes not found in block");
return false;
Expand Down

0 comments on commit eac1b86

Please sign in to comment.