From d83ec66775a05bf6d1cf4797fb538b600b0faebd Mon Sep 17 00:00:00 2001 From: sowle Date: Mon, 25 Mar 2024 17:21:02 +0100 Subject: [PATCH] fixed a bug in prepare_tx_sources_for_defragmentation_tx() causing old dust outs to prevent staking --- src/wallet/wallet2.cpp | 12 +++++++----- src/wallet/wallet2.h | 1 + 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 3c2e45b9..fd3c83ba 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -77,9 +77,10 @@ namespace tools , m_log_prefix("???") , m_watch_only(false) , m_required_decoys_count(CURRENCY_DEFAULT_DECOY_SET_SIZE) + , m_max_allowed_output_amount_for_defragmentation_tx(CURRENCY_BLOCK_REWARD) , m_min_utxo_count_for_defragmentation_tx(WALLET_MIN_UTXO_COUNT_FOR_DEFRAGMENTATION_TX) , m_max_utxo_count_for_defragmentation_tx(WALLET_MAX_UTXO_COUNT_FOR_DEFRAGMENTATION_TX) - , m_decoys_count_for_defragmentation_tx(WALLET_DEFAULT_DECOYS_COUNT_FOR_DEFRAGMENTATION_TX) + , m_decoys_count_for_defragmentation_tx(SIZE_MAX) , m_use_deffered_global_outputs(false) #ifdef DISABLE_TOR , m_disable_tor_relay(true) @@ -5933,10 +5934,11 @@ bool wallet2::prepare_tx_sources_for_defragmentation_tx(std::vector CURRENCY_BLOCK_REWARD) + if (!td.is_native_coin() || td.m_amount > m_max_allowed_output_amount_for_defragmentation_tx) continue; - if (is_transfer_ready_to_go(td, m_decoys_count_for_defragmentation_tx)) + uint64_t fake_outs_count_for_td = m_decoys_count_for_defragmentation_tx == SIZE_MAX ? (td.is_zc() ? m_core_runtime_config.hf4_minimum_mixins : CURRENCY_DEFAULT_DECOY_SET_SIZE) : m_decoys_count_for_defragmentation_tx; + if (is_transfer_ready_to_go(td, fake_outs_count_for_td)) { found_money += td.m_amount; selected_indicies.push_back(i); @@ -5945,7 +5947,7 @@ bool wallet2::prepare_tx_sources_for_defragmentation_tx(std::vector& sources, std::vector& selected_indicies) diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index 74df897c..6c68b735 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -877,6 +877,7 @@ private: bool m_do_rise_transfer; + uint64_t m_max_allowed_output_amount_for_defragmentation_tx; uint64_t m_min_utxo_count_for_defragmentation_tx; uint64_t m_max_utxo_count_for_defragmentation_tx; size_t m_decoys_count_for_defragmentation_tx;