mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 06:52:36 +01:00
wallet: Add some tracepoints for coin selection
This commit is contained in:
parent
15b58383d0
commit
8e3f39e4fa
2 changed files with 10 additions and 4 deletions
|
@ -254,16 +254,17 @@ struct SelectionResult
|
||||||
private:
|
private:
|
||||||
/** Set of inputs selected by the algorithm to use in the transaction */
|
/** Set of inputs selected by the algorithm to use in the transaction */
|
||||||
std::set<COutput> m_selected_inputs;
|
std::set<COutput> m_selected_inputs;
|
||||||
/** The target the algorithm selected for. Note that this may not be equal to the recipient amount as it can include non-input fees */
|
|
||||||
const CAmount m_target;
|
|
||||||
/** Whether the input values for calculations should be the effective value (true) or normal value (false) */
|
/** Whether the input values for calculations should be the effective value (true) or normal value (false) */
|
||||||
bool m_use_effective{false};
|
bool m_use_effective{false};
|
||||||
/** The computed waste */
|
/** The computed waste */
|
||||||
std::optional<CAmount> m_waste;
|
std::optional<CAmount> m_waste;
|
||||||
/** The algorithm used to produce this result */
|
|
||||||
SelectionAlgorithm m_algo;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
/** The target the algorithm selected for. Note that this may not be equal to the recipient amount as it can include non-input fees */
|
||||||
|
const CAmount m_target;
|
||||||
|
/** The algorithm used to produce this result */
|
||||||
|
const SelectionAlgorithm m_algo;
|
||||||
|
|
||||||
explicit SelectionResult(const CAmount target, SelectionAlgorithm algo)
|
explicit SelectionResult(const CAmount target, SelectionAlgorithm algo)
|
||||||
: m_target(target), m_algo(algo) {}
|
: m_target(target), m_algo(algo) {}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <util/fees.h>
|
#include <util/fees.h>
|
||||||
#include <util/moneystr.h>
|
#include <util/moneystr.h>
|
||||||
#include <util/rbf.h>
|
#include <util/rbf.h>
|
||||||
|
#include <util/trace.h>
|
||||||
#include <util/translation.h>
|
#include <util/translation.h>
|
||||||
#include <wallet/coincontrol.h>
|
#include <wallet/coincontrol.h>
|
||||||
#include <wallet/fees.h>
|
#include <wallet/fees.h>
|
||||||
|
@ -792,6 +793,7 @@ static bool CreateTransactionInternal(
|
||||||
error = _("Insufficient funds");
|
error = _("Insufficient funds");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
TRACE5(coin_selection, selected_coins, wallet.GetName().c_str(), GetAlgorithmName(result->m_algo).c_str(), result->m_target, result->GetWaste(), result->GetSelectedValue());
|
||||||
|
|
||||||
// Always make a change output
|
// Always make a change output
|
||||||
// We will reduce the fee from this change output later, and remove the output if it is too small.
|
// We will reduce the fee from this change output later, and remove the output if it is too small.
|
||||||
|
@ -982,8 +984,10 @@ bool CreateTransaction(
|
||||||
int nChangePosIn = nChangePosInOut;
|
int nChangePosIn = nChangePosInOut;
|
||||||
Assert(!tx); // tx is an out-param. TODO change the return type from bool to tx (or nullptr)
|
Assert(!tx); // tx is an out-param. TODO change the return type from bool to tx (or nullptr)
|
||||||
bool res = CreateTransactionInternal(wallet, vecSend, tx, nFeeRet, nChangePosInOut, error, coin_control, fee_calc_out, sign);
|
bool res = CreateTransactionInternal(wallet, vecSend, tx, nFeeRet, nChangePosInOut, error, coin_control, fee_calc_out, sign);
|
||||||
|
TRACE4(coin_selection, normal_create_tx_internal, wallet.GetName().c_str(), res, nFeeRet, nChangePosInOut);
|
||||||
// try with avoidpartialspends unless it's enabled already
|
// try with avoidpartialspends unless it's enabled already
|
||||||
if (res && nFeeRet > 0 /* 0 means non-functional fee rate estimation */ && wallet.m_max_aps_fee > -1 && !coin_control.m_avoid_partial_spends) {
|
if (res && nFeeRet > 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());
|
||||||
CCoinControl tmp_cc = coin_control;
|
CCoinControl tmp_cc = coin_control;
|
||||||
tmp_cc.m_avoid_partial_spends = true;
|
tmp_cc.m_avoid_partial_spends = true;
|
||||||
CAmount nFeeRet2;
|
CAmount nFeeRet2;
|
||||||
|
@ -994,6 +998,7 @@ bool CreateTransaction(
|
||||||
// if fee of this alternative one is within the range of the max fee, we use this one
|
// if fee of this alternative one is within the range of the max fee, we use this one
|
||||||
const bool use_aps = nFeeRet2 <= nFeeRet + wallet.m_max_aps_fee;
|
const bool use_aps = nFeeRet2 <= nFeeRet + wallet.m_max_aps_fee;
|
||||||
wallet.WalletLogPrintf("Fee non-grouped = %lld, grouped = %lld, using %s\n", nFeeRet, nFeeRet2, use_aps ? "grouped" : "non-grouped");
|
wallet.WalletLogPrintf("Fee non-grouped = %lld, grouped = %lld, using %s\n", nFeeRet, nFeeRet2, use_aps ? "grouped" : "non-grouped");
|
||||||
|
TRACE5(coin_selection, aps_create_tx_internal, wallet.GetName().c_str(), use_aps, res, nFeeRet2, nChangePosInOut2);
|
||||||
if (use_aps) {
|
if (use_aps) {
|
||||||
tx = tx2;
|
tx = tx2;
|
||||||
nFeeRet = nFeeRet2;
|
nFeeRet = nFeeRet2;
|
||||||
|
|
Loading…
Add table
Reference in a new issue