Coverage Report

Created: 2026-09-01 13:33

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/root/bitcoin/src/util/fees.h
Line
Count
Source
1
// Copyright (c) The Bitcoin Core developers
2
// Distributed under the MIT software license, see the accompanying
3
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5
#ifndef BITCOIN_UTIL_FEES_H
6
#define BITCOIN_UTIL_FEES_H
7
8
#include <attributes.h>
9
#include <util/expected.h>
10
#include <util/feefrac.h>
11
12
#include <string>
13
#include <string_view>
14
#include <utility>
15
16
/* Used to determine type of fee estimation requested */
17
enum class FeeEstimateMode {
18
    UNSET,        //!< Use default settings based on other criteria
19
    ECONOMICAL,   //!< Force Fee rate estimator to return non-conservative estimates
20
    CONSERVATIVE, //!< Force Fee rate estimator to return conservative estimates
21
};
22
23
/* Used to determine the reason a wallet selected a transaction fee rate */
24
enum class FeeReason {
25
    FEE_RATE_ESTIMATOR,
26
    MEMPOOL_MIN,
27
    USER_SPECIFIED,
28
    FALLBACK,
29
    REQUIRED,
30
};
31
32
/**
33
 * @enum FeeRateEstimatorType
34
 * Identifier for fee rate estimator.
35
 */
36
enum class FeeRateEstimatorType {
37
    NONE,
38
    BLOCK_POLICY,
39
    MEMPOOL_POLICY,
40
};
41
42
/**
43
 * @struct FeeRateEstimation
44
 * A successful fee rate estimate returned by a fee rate estimator.
45
 */
46
struct FeeRateEstimation {
47
    //! This identifies which fee rate estimator is providing this feerate estimate
48
    FeeRateEstimatorType feerate_estimator;
49
    //! Fee rate sufficient for confirmation within target.
50
    FeePerVSize feerate;
51
    //! The returned confirmation target for the estimate.
52
    int returned_target;
53
    /**
54
     * Compare two FeeRateEstimation objects based on fee rate
55
     * @param other The other FeeRateEstimation object to compare with
56
     * @return strong ordering of either less, greater or equal; based on feerate ratio comparison.
57
     */
58
    auto operator<=>(const FeeRateEstimation& other) const
59
0
    {
60
0
        return ByRatio{feerate} <=> ByRatio{other.feerate};
61
0
    }
62
};
63
64
/**
65
 * @struct FeeRateEstimationError
66
 * A failed fee rate estimation, carrying the zero-value estimation that
67
 * identifies the estimator and target alongside the error reason.
68
 */
69
struct FeeRateEstimationError {
70
    FeeRateEstimation estimation;
71
    std::string reason;
72
};
73
74
/**
75
 * Build a fee rate estimation error result: a zero-value estimation
76
 * identifying the estimator and target, alongside the error message.
77
 */
78
inline util::Unexpected<FeeRateEstimationError> EstimationError(FeeRateEstimatorType estimator, int returned_target, std::string error)
79
1.59k
{
80
1.59k
    return util::Unexpected{FeeRateEstimationError{{estimator, FeePerVSize{0, 0}, returned_target}, std::move(error)}};
81
1.59k
}
82
83
/**
84
 * Return the estimation carried by a fee rate estimate result: the
85
 * successful estimation, or the error's zero-value estimation.
86
 */
87
inline const FeeRateEstimation& FeeRateEstimationRef(const util::Expected<FeeRateEstimation, FeeRateEstimationError>& result LIFETIMEBOUND)
88
326
{
89
326
    return result ? *result : result.error().estimation;
  Branch (89:12): [True: 142, False: 184]
90
326
}
91
92
std::string_view FeeRateEstimatorTypeToString(FeeRateEstimatorType feerate_estimator_type);
93
FeeRateEstimatorType FeeRateEstimatorTypeFromString(std::string_view feerate_estimator_type);
94
95
#endif // BITCOIN_UTIL_FEES_H