aboutsummaryrefslogtreecommitdiff
path: root/src/policy/feerate.h
diff options
context:
space:
mode:
authorMarcoFalke <falke.marco@gmail.com>2017-09-30 18:07:44 +0200
committerMarcoFalke <falke.marco@gmail.com>2017-09-30 18:07:55 +0200
commite542728cde676f218c552d841d0af29b92f9800b (patch)
tree992beca84e6a88affd99fa2caa9fed5747e5d40c /src/policy/feerate.h
parent763231051596b8e3455b839911ad6a3a1f1c3c74 (diff)
parent1789e4675b17f274fcb0761321e6fd249a102f40 (diff)
downloadbitcoin-e542728cde676f218c552d841d0af29b92f9800b.tar.xz
Merge #11303: Fix estimatesmartfee rounding display issue
1789e4675 Force explicit double -> int conversion for CFeeRate constructor (Matt Corallo) 53a6590f4 Make float <-> int casts explicit outside of test, qt, CFeeRate (Matt Corallo) 0b1b9148c Remove countMaskInv caching in bench framework (Matt Corallo) Pull request description: This fixes an issue where estimatesmartfee which matches at the min relay fee will return 999 sat/byte instead of 1000 sat/byte due to a float rounding issue. I went ahead and made all float <-> int conversion outside of test/qt explicit (test only had one or two more, Qt had quite a few, including many in the Qt headers themselves) and added overloads to CFeeRate to force callers to do an explicit round themselves. Easy to test with -Wfloat-conversion. Tree-SHA512: 66087b08e5dfca67506da54ae057c2f9d86184415e8fa4fa0199e38839e06a3ce96c836fcb7593b7d960065f5240c594ff3a0cfa14333ac528421f5aeac835c9
Diffstat (limited to 'src/policy/feerate.h')
-rw-r--r--src/policy/feerate.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/policy/feerate.h b/src/policy/feerate.h
index 7e519e3efa..3449cdd699 100644
--- a/src/policy/feerate.h
+++ b/src/policy/feerate.h
@@ -20,10 +20,15 @@ class CFeeRate
{
private:
CAmount nSatoshisPerK; // unit is satoshis-per-1,000-bytes
+
public:
/** Fee rate of 0 satoshis per kB */
CFeeRate() : nSatoshisPerK(0) { }
- explicit CFeeRate(const CAmount& _nSatoshisPerK): nSatoshisPerK(_nSatoshisPerK) { }
+ template<typename I>
+ CFeeRate(const I _nSatoshisPerK): nSatoshisPerK(_nSatoshisPerK) {
+ // We've previously had bugs creep in from silent double->int conversion...
+ static_assert(std::is_integral<I>::value, "CFeeRate should be used without floats");
+ }
/** Constructor for a fee rate in satoshis per kB. The size in bytes must not exceed (2^63 - 1)*/
CFeeRate(const CAmount& nFeePaid, size_t nBytes);
/**