aboutsummaryrefslogtreecommitdiff
path: root/src/wallet/spend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wallet/spend.cpp')
-rw-r--r--src/wallet/spend.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/wallet/spend.cpp b/src/wallet/spend.cpp
index 7abf7f59c0..f45db1c16f 100644
--- a/src/wallet/spend.cpp
+++ b/src/wallet/spend.cpp
@@ -35,6 +35,11 @@ using common::TransactionErrorString;
using interfaces::FoundBlock;
using node::TransactionError;
+TRACEPOINT_SEMAPHORE(coin_selection, selected_coins);
+TRACEPOINT_SEMAPHORE(coin_selection, normal_create_tx_internal);
+TRACEPOINT_SEMAPHORE(coin_selection, attempting_aps_create_tx);
+TRACEPOINT_SEMAPHORE(coin_selection, aps_create_tx_internal);
+
namespace wallet {
static constexpr size_t OUTPUT_GROUP_MAX_ENTRIES{100};
@@ -1159,7 +1164,7 @@ static util::Result<CreatedTransactionResult> CreateTransactionInternal(
return util::Error{err.empty() ?_("Insufficient funds") : err};
}
const SelectionResult& result = *select_coins_res;
- TRACE5(coin_selection, selected_coins,
+ TRACEPOINT(coin_selection, selected_coins,
wallet.GetName().c_str(),
GetAlgorithmName(result.GetAlgo()).c_str(),
result.GetTarget(),
@@ -1167,6 +1172,7 @@ static util::Result<CreatedTransactionResult> CreateTransactionInternal(
result.GetSelectedValue());
// vouts to the payees
+ txNew.vout.reserve(vecSend.size() + 1); // + 1 because of possible later insert
for (const auto& recipient : vecSend)
{
txNew.vout.emplace_back(recipient.nAmount, GetScriptForDestination(recipient.dest));
@@ -1217,6 +1223,7 @@ static util::Result<CreatedTransactionResult> CreateTransactionInternal(
// behavior."
bool use_anti_fee_sniping = true;
const uint32_t default_sequence{coin_control.m_signal_bip125_rbf.value_or(wallet.m_signal_rbf) ? MAX_BIP125_RBF_SEQUENCE : CTxIn::MAX_SEQUENCE_NONFINAL};
+ txNew.vin.reserve(selected_coins.size());
for (const auto& coin : selected_coins) {
std::optional<uint32_t> sequence = coin_control.GetSequence(coin->outpoint);
if (sequence) {
@@ -1378,7 +1385,7 @@ util::Result<CreatedTransactionResult> CreateTransaction(
LOCK(wallet.cs_wallet);
auto res = CreateTransactionInternal(wallet, vecSend, change_pos, coin_control, sign);
- TRACE4(coin_selection, normal_create_tx_internal,
+ TRACEPOINT(coin_selection, normal_create_tx_internal,
wallet.GetName().c_str(),
bool(res),
res ? res->fee : 0,
@@ -1387,7 +1394,7 @@ util::Result<CreatedTransactionResult> CreateTransaction(
const auto& txr_ungrouped = *res;
// try with avoidpartialspends unless it's enabled already
if (txr_ungrouped.fee > 0 /* 0 means non-functional fee rate estimation */ && wallet.m_max_aps_fee > -1 && !coin_control.m_avoid_partial_spends) {
- TRACE1(coin_selection, attempting_aps_create_tx, wallet.GetName().c_str());
+ TRACEPOINT(coin_selection, attempting_aps_create_tx, wallet.GetName().c_str());
CCoinControl tmp_cc = coin_control;
tmp_cc.m_avoid_partial_spends = true;
@@ -1399,7 +1406,7 @@ util::Result<CreatedTransactionResult> CreateTransaction(
auto txr_grouped = CreateTransactionInternal(wallet, vecSend, change_pos, tmp_cc, sign);
// if fee of this alternative one is within the range of the max fee, we use this one
const bool use_aps{txr_grouped.has_value() ? (txr_grouped->fee <= txr_ungrouped.fee + wallet.m_max_aps_fee) : false};
- TRACE5(coin_selection, aps_create_tx_internal,
+ TRACEPOINT(coin_selection, aps_create_tx_internal,
wallet.GetName().c_str(),
use_aps,
txr_grouped.has_value(),