From ef7a86c99f7c58c361c3c0ddf5687a165c22ce7a Mon Sep 17 00:00:00 2001 From: selsta Date: Fri, 22 May 2026 18:04:27 +0200 Subject: [PATCH] wallet2: guard optimized coinbase refresh against empty vout --- src/wallet/wallet2.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 61f49481e..a1f6796e4 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -3362,11 +3362,14 @@ void wallet2::process_parsed_blocks(uint64_t start_height, const std::vector= tx_cache_data.size(), error::wallet_internal_error, "txidx out of range"); const cryptonote::transaction& tx = parsed_blocks[i].block.miner_tx; - const size_t n_vouts = (m_refresh_type == RefreshType::RefreshOptimizeCoinbase && tx.version < 2) ? 1 : tx.vout.size(); - if (parsed_blocks[i].block.major_version >= hf_version_view_tags) - geniods.push_back(geniod_params{ tx, n_vouts, txidx }); - else - tpool.submit(&waiter, [&, n_vouts, txidx](){ geniod(tx, n_vouts, txidx); }, true); + const size_t n_vouts = (m_refresh_type == RefreshType::RefreshOptimizeCoinbase && tx.version < 2 && !tx.vout.empty()) ? 1 : tx.vout.size(); + if (n_vouts > 0) + { + if (parsed_blocks[i].block.major_version >= hf_version_view_tags) + geniods.push_back(geniod_params{ tx, n_vouts, txidx }); + else + tpool.submit(&waiter, [&, n_vouts, txidx](){ geniod(tx, n_vouts, txidx); }, true); + } } ++txidx; for (size_t j = 0; j < parsed_blocks[i].txes.size(); ++j)