| 21 | |
| 22 | template <bool ceil> |
| 23 | static Amount GetFee(size_t nBytes_, Amount nSatoshisPerK) { |
| 24 | assert(nBytes_ <= uint64_t(std::numeric_limits<int64_t>::max())); |
| 25 | int64_t nSize = int64_t(nBytes_); |
| 26 | |
| 27 | // Ensure fee is rounded up when truncated if ceil is true. |
| 28 | Amount nFee = Amount::zero(); |
| 29 | if (ceil) { |
| 30 | nFee = Amount(nSize * nSatoshisPerK % 1000 > Amount::zero() |
| 31 | ? nSize * nSatoshisPerK / 1000 + SATOSHI |
| 32 | : nSize * nSatoshisPerK / 1000); |
| 33 | } else { |
| 34 | nFee = nSize * nSatoshisPerK / 1000; |
| 35 | } |
| 36 | |
| 37 | if (nFee == Amount::zero() && nSize != 0) { |
| 38 | if (nSatoshisPerK > Amount::zero()) { |
| 39 | nFee = SATOSHI; |
| 40 | } |
| 41 | if (nSatoshisPerK < Amount::zero()) { |
| 42 | nFee = -SATOSHI; |
| 43 | } |
| 44 | } |
| 45 | |
| 46 | return nFee; |
| 47 | } |
| 48 | |
| 49 | Amount CFeeRate::GetFee(size_t nBytes) const { |
| 50 | return ::GetFee<false>(nBytes, nSatoshisPerK); |
no test coverage detected