/root/bitcoin/src/policy/feerate.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) 2009-2010 Satoshi Nakamoto |
2 | | // Copyright (c) 2009-2022 The Bitcoin Core developers |
3 | | // Distributed under the MIT software license, see the accompanying |
4 | | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
5 | | |
6 | | #include <consensus/amount.h> |
7 | | #include <policy/feerate.h> |
8 | | #include <tinyformat.h> |
9 | | |
10 | | #include <cmath> |
11 | | |
12 | | CFeeRate::CFeeRate(const CAmount& nFeePaid, uint32_t num_bytes) |
13 | 0 | { |
14 | 0 | const int64_t nSize{num_bytes}; |
15 | |
|
16 | 0 | if (nSize > 0) { |
17 | 0 | nSatoshisPerK = nFeePaid * 1000 / nSize; |
18 | 0 | } else { |
19 | 0 | nSatoshisPerK = 0; |
20 | 0 | } |
21 | 0 | } |
22 | | |
23 | | CAmount CFeeRate::GetFee(uint32_t num_bytes) const |
24 | 1.23M | { |
25 | 1.23M | const int64_t nSize{num_bytes}; |
26 | | |
27 | | // Be explicit that we're converting from a double to int64_t (CAmount) here. |
28 | | // We've previously had issues with the silent double->int64_t conversion. |
29 | 1.23M | CAmount nFee{static_cast<CAmount>(std::ceil(nSatoshisPerK * nSize / 1000.0))}; |
30 | | |
31 | 1.23M | if (nFee == 0 && nSize != 0) { |
32 | 320k | if (nSatoshisPerK > 0) nFee = CAmount(1); |
33 | 320k | if (nSatoshisPerK < 0) nFee = CAmount(-1); |
34 | 320k | } |
35 | | |
36 | 1.23M | return nFee; |
37 | 1.23M | } |
38 | | |
39 | | std::string CFeeRate::ToString(const FeeEstimateMode& fee_estimate_mode) const |
40 | 0 | { |
41 | 0 | switch (fee_estimate_mode) { |
42 | 0 | case FeeEstimateMode::SAT_VB: return strprintf("%d.%03d %s/vB", nSatoshisPerK / 1000, nSatoshisPerK % 1000, CURRENCY_ATOM); |
43 | 0 | default: return strprintf("%d.%08d %s/kvB", nSatoshisPerK / COIN, nSatoshisPerK % COIN, CURRENCY_UNIT); |
44 | 0 | } |
45 | 0 | } |