From 3322b3a05954a1bac9f49a92e3bb35d2cbd20029 Mon Sep 17 00:00:00 2001 From: Sebastian Falbesoner Date: Tue, 24 Jun 2025 02:34:29 +0200 Subject: [PATCH] mempool: use `FeeFrac` for calculating ancestor score --- src/txmempool.h | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/src/txmempool.h b/src/txmempool.h index cca3800272..466792a1e6 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -154,16 +154,10 @@ public: template bool operator()(const T& a, const T& b) const { - double a_mod_fee, a_size, b_mod_fee, b_size; + FeeFrac f1 = GetModFeeAndSize(a); + FeeFrac f2 = GetModFeeAndSize(b); - GetModFeeAndSize(a, a_mod_fee, a_size); - GetModFeeAndSize(b, b_mod_fee, b_size); - - // Avoid division by rewriting (a/b > c/d) as (a*d > c*b). - double f1 = a_mod_fee * b_size; - double f2 = a_size * b_mod_fee; - - if (f1 == f2) { + if (FeeRateCompare(f1, f2) == 0) { return a.GetTx().GetHash() < b.GetTx().GetHash(); } return f1 > f2; @@ -171,20 +165,14 @@ public: // Return the fee/size we're using for sorting this entry. template - void GetModFeeAndSize(const T &a, double &mod_fee, double &size) const + FeeFrac GetModFeeAndSize(const T &a) const { // Compare feerate with ancestors to feerate of the transaction, and // return the fee/size for the min. - double f1 = (double)a.GetModifiedFee() * a.GetSizeWithAncestors(); - double f2 = (double)a.GetModFeesWithAncestors() * a.GetTxSize(); - - if (f1 > f2) { - mod_fee = a.GetModFeesWithAncestors(); - size = a.GetSizeWithAncestors(); - } else { - mod_fee = a.GetModifiedFee(); - size = a.GetTxSize(); - } + return std::min( + FeeFrac(a.GetModFeesWithAncestors(), a.GetSizeWithAncestors()), + FeeFrac(a.GetModifiedFee(), a.GetTxSize()) + ); } };